diff --git a/sf_manufacturing/controllers/main.py b/sf_manufacturing/controllers/main.py
index e45265d3..839b87fe 100644
--- a/sf_manufacturing/controllers/main.py
+++ b/sf_manufacturing/controllers/main.py
@@ -27,7 +27,7 @@ class JikimoSaleRoutePicking(Sf_Bf_Connect):
bfm_process_order_list = json.loads(kw['bfm_process_order_list'])
order_id = request.env['sale.order'].with_user(request.env.ref("base.user_admin")).sale_order_create(
company_id, kw['delivery_name'], kw['delivery_telephone'], kw['delivery_address'],
- kw['delivery_end_date'], kw['payments_way'], kw['pay_way'], state='draft')
+ kw['delivery_end_date'], kw['payments_way'], kw['pay_way'], kw['order_number'], state='draft')
i = 1
# 给sale_order的default_code字段赋值
# aa = request.env['sale.order'].sudo().search([('name', '=', order_id.name)])
diff --git a/sf_manufacturing/models/sale_order.py b/sf_manufacturing/models/sale_order.py
index a56721a2..5d318141 100644
--- a/sf_manufacturing/models/sale_order.py
+++ b/sf_manufacturing/models/sale_order.py
@@ -13,6 +13,9 @@ class SaleOrder(models.Model):
('sent', "报价已发送"),
('supply method', "供货方式待确认"),
('sale', "销售订单"),
+ ('processing', "加工中"),
+ ('physical_distribution', "物流中"),
+ ('delivered', "已交付"),
('done', "已锁定"),
('cancel', "已取消"),
])
diff --git a/sf_manufacturing/views/sale_order_views.xml b/sf_manufacturing/views/sale_order_views.xml
index 1e5c4587..49cc752f 100644
--- a/sf_manufacturing/views/sale_order_views.xml
+++ b/sf_manufacturing/views/sale_order_views.xml
@@ -13,7 +13,7 @@
- draft,sent,supply method,sale
+ supply method,sale,processing,physical_distribution,delivered
diff --git a/sf_mrs_connect/controllers/controllers.py b/sf_mrs_connect/controllers/controllers.py
index 87aee0dd..85b3d5fa 100644
--- a/sf_mrs_connect/controllers/controllers.py
+++ b/sf_mrs_connect/controllers/controllers.py
@@ -26,7 +26,7 @@ class Sf_Mrs_Connect(http.Controller, MultiInheritController):
ret = json.loads(ret['result'])
logging.info('下发编程单:%s' % ret)
domain = [('programming_no', '=', ret['programming_no'])]
- if ret['manufacturing_type'] in ('scrap', 'invalid_tool_rework'):
+ if ret['manufacturing_type'] in ('scrap', 'invalid_tool_rework', 'rework'):
domain += [('state', 'not in', ['done', 'scrap', 'cancel'])]
else:
domain += [('state', 'in', ['confirmed', 'pending_cam'])]
@@ -56,7 +56,7 @@ class Sf_Mrs_Connect(http.Controller, MultiInheritController):
res['message'] = '编程单号为%s的CNC程序文件从FTP拉取失败' % (ret['programming_no'])
return json.JSONEncoder().encode(res)
for production in productions:
- production.write({'programming_state': '已编程', 'work_state': '已编程'})
+ production.write({'programming_state': '已编程', 'work_state': '已编程', 'is_rework': False})
for panel in ret['processing_panel'].split(','):
# 查询状态为进行中且工序类型为CNC加工的工单
cnc_workorder_has = production.workorder_ids.filtered(
diff --git a/sf_sale/__manifest__.py b/sf_sale/__manifest__.py
index 45c95030..0ca6457c 100644
--- a/sf_sale/__manifest__.py
+++ b/sf_sale/__manifest__.py
@@ -26,6 +26,7 @@
'assets': {
'web.assets_backend': [
'sf_sale/static/js/setTableWidth.js',
+ 'sf_sale/static/src/css/purchase_list.css',
]
},
'demo': [
diff --git a/sf_sale/models/sale_order.py b/sf_sale/models/sale_order.py
index ca851fc6..2e99de70 100644
--- a/sf_sale/models/sale_order.py
+++ b/sf_sale/models/sale_order.py
@@ -55,12 +55,15 @@ class ReSaleOrder(models.Model):
store=True, readonly=False, copy=False, precompute=True,
states=READONLY_FIELD_STATES, default=fields.Datetime.now)
- delivery_warning = fields.Selection([('normal', '正常'), ('warning', '告警'), ('overdue', '逾期')], string='时效',
- tracking=True)
+ delivery_warning = fields.Selection([('normal', '正常'), ('warning', '告警'), ('overdue', '逾期')],
+ default='normal',
+ string='时效', tracking=True)
+
+ order_code = fields.Char('平台订单号', readonly=True)
# 业务平台分配工厂后在智能工厂先创建销售订单
def sale_order_create(self, company_id, delivery_name, delivery_telephone, delivery_address,
- deadline_of_delivery, payments_way, pay_way, state='sale'):
+ deadline_of_delivery, payments_way, pay_way, order_number, state='sale'):
now_time = datetime.datetime.now()
partner = self.get_customer()
data = {
@@ -76,6 +79,7 @@ class ReSaleOrder(models.Model):
'address_of_delivery': delivery_address,
'payments_way': payments_way,
'pay_way': pay_way,
+ 'order_code': order_number,
}
if deadline_of_delivery:
# deadline_of_delivery字段存在为false字符串情况
@@ -158,6 +162,66 @@ class ReSaleOrder(models.Model):
if not line.tax_id:
raise UserError('请对【订单行】中的【税】进行选择')
+ consignment_purchase_order_count = fields.Integer(
+ "Number of consignment Purchase Order Generated",
+ compute='_compute_purchase_order_count')
+
+ @api.depends('order_line.purchase_line_ids.order_id')
+ def _compute_purchase_order_count(self):
+ for order in self:
+ order.purchase_order_count = len(order._get_purchase_orders().filtered(
+ lambda po: po.purchase_type not in ['consignment']))
+ order.consignment_purchase_order_count = len(order._get_purchase_orders().filtered(
+ lambda po: po.purchase_type in ['consignment']))
+
+ def action_view_purchase_orders(self):
+ """
+ 采购
+ """
+ self.ensure_one()
+ purchase_order_ids = self._get_purchase_orders().filtered(
+ lambda po: po.purchase_type not in ['consignment']).ids
+ action = {
+ 'res_model': 'purchase.order',
+ 'type': 'ir.actions.act_window',
+ }
+ if len(purchase_order_ids) == 1:
+ action.update({
+ 'view_mode': 'form',
+ 'res_id': purchase_order_ids[0],
+ })
+ else:
+ action.update({
+ 'name': _("从 %s生成采购订单", self.name),
+ 'domain': [('id', 'in', purchase_order_ids)],
+ 'view_mode': 'tree,form',
+ })
+ return action
+
+ def action_view_consignment_purchase_orders(self):
+ """
+ 委外加工
+ """
+ self.ensure_one()
+ consignment_purchase_order_ids = self._get_purchase_orders().filtered(
+ lambda po: po.purchase_type in ['consignment']).ids
+ action = {
+ 'res_model': 'purchase.order',
+ 'type': 'ir.actions.act_window',
+ }
+ if len(consignment_purchase_order_ids) == 1:
+ action.update({
+ 'view_mode': 'form',
+ 'res_id': consignment_purchase_order_ids[0],
+ })
+ else:
+ action.update({
+ 'name': _("从 %s生成委外加工订单", self.name),
+ 'domain': [('id', 'in', consignment_purchase_order_ids)],
+ 'view_mode': 'tree,form',
+ })
+ return action
+
class ResaleOrderLine(models.Model):
_inherit = 'sale.order.line'
@@ -199,6 +263,7 @@ class ProductTemplate(models.Model):
_inherit = 'product.template'
manual_quotation = fields.Boolean('人工编程', default=False)
+ part_name = fields.Char(string='零件名称', readonly=True)
class RePurchaseOrder(models.Model):
@@ -215,8 +280,22 @@ class RePurchaseOrder(models.Model):
compute='_compute_user_id',
store=True)
- purchase_type = fields.Selection([('standard', '标准采购'), ('consignment', '委外加工')], string='采购类型',
- default='standard')
+ purchase_type = fields.Selection(
+ [('standard', '标准采购'), ('consignment', '委外加工'), ('outsourcing', '工序外协'), ('outside', '外购订单')],
+ string='采购类型', default='standard')
+
+ origin_sale_id = fields.Many2one('sale.order', string='销售订单号', compute='_compute_origin_sale_id')
+
+ @api.depends('order_line.move_dest_ids.group_id.mrp_production_ids',
+ 'order_line.move_ids.move_dest_ids.group_id.mrp_production_ids')
+ def _compute_origin_sale_id(self):
+ for purchase in self:
+ productions_ids = purchase._get_mrp_productions()
+ if productions_ids:
+ if productions_ids[0].sale_order_id:
+ purchase.origin_sale_id = productions_ids[0].sale_order_id.id
+ continue
+ purchase.origin_sale_id = False
@api.depends('partner_id')
def _compute_user_id(self):
@@ -255,7 +334,7 @@ class RePurchaseOrder(models.Model):
else:
server_template = self.env['product.template'].search(
[('server_product_process_parameters_id', '=', pp.surface_technics_parameters_id.id),
- ('detailed_type', '=', 'service')])
+ ('detailed_type', '=', 'service')])
server_product_process.append((0, 0, {
'product_id': server_template.product_variant_id.id,
'product_qty': 1,
@@ -300,6 +379,12 @@ class RePurchaseOrder(models.Model):
return result
+class PurchaseOrderLine(models.Model):
+ _inherit = 'purchase.order.line'
+
+ part_name = fields.Char('零件名称', related='product_id.part_name', readonly=True)
+
+
class ResPartnerToSale(models.Model):
_inherit = 'res.partner'
diff --git a/sf_sale/static/src/css/purchase_list.css b/sf_sale/static/src/css/purchase_list.css
new file mode 100644
index 00000000..2deacb9c
--- /dev/null
+++ b/sf_sale/static/src/css/purchase_list.css
@@ -0,0 +1,3 @@
+.purchase_order_list_name {
+ min-width: 62px !important;
+}
\ No newline at end of file
diff --git a/sf_sale/views/purchase_order_view.xml b/sf_sale/views/purchase_order_view.xml
index 23c71a1f..ccdee1d0 100644
--- a/sf_sale/views/purchase_order_view.xml
+++ b/sf_sale/views/purchase_order_view.xml
@@ -130,6 +130,15 @@
{'no_create': True}
+
+ hide
+
+
+
+
+
+ 报价截止日期
+
{'readonly': [('state', 'in', ['purchase'])]}
@@ -163,6 +172,10 @@
+
+
+
+
@@ -174,6 +187,25 @@
sf_base.group_purchase,sf_base.group_purchase_director
+
+ 采购员
+
+
+ hide
+
+
+ 报价截止日期
+ ''
+
+
+
+
+
+
+
+
+ purchase_order_list_name
+
@@ -201,6 +233,23 @@
date_approve asc
+
+ hide
+
+
+
+
+ 采购员
+
+
+
+
+
+
+
+
+ purchase_order_list_name
+
@@ -212,8 +261,29 @@
+
+
+
+
+
+
+
+
+ purchase.order.list.select.sf
+ purchase.order
+
+
+
+
+
+
+
+
+
+
+
{"search_default_categ_id":1,"search_default_filter_to_purchase":1, "purchase_product_template": 1}
diff --git a/sf_sale/views/sale_order_view.xml b/sf_sale/views/sale_order_view.xml
index 673d7fa3..d6247823 100644
--- a/sf_sale/views/sale_order_view.xml
+++ b/sf_sale/views/sale_order_view.xml
@@ -169,20 +169,36 @@
-
- 下单时间
+
+ 下单日期
+
+
+ sale.order.inherited.form.purchase
+ sale.order
+
+
+
+
+
+
+
+
sale.management.order.form.quote.inherit.sf
sale.order
-
- 下单日期
-
@@ -224,6 +240,7 @@
hide
+