From 573b50da68d907bb4c134641e91651c1840e5ebd Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Wed, 4 Jun 2025 11:31:28 +0800 Subject: [PATCH] =?UTF-8?q?=E9=94=80=E5=94=AE=E8=AE=A2=E5=8D=95=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=90=88=E5=90=8C=E5=AD=97=E6=AE=B5=EF=BC=8C=E9=94=80?= =?UTF-8?q?=E5=94=AE=E8=AE=A2=E5=8D=95form=E9=A1=B5=E9=9D=A2=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=90=88=E5=90=8Cpage=E9=A1=B5=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96/api/bfm=5Fprocess=5Forder/list=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=90=88=E5=90=8C=E4=BF=A1=E6=81=AF=E5=A4=84?= =?UTF-8?q?=E7=90=86=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/controllers/main.py | 2 ++ sf_manufacturing/models/sale_order.py | 22 ++++++++++++++++++++++ sf_manufacturing/wizard/rework_wizard.py | 10 +++++++--- sf_sale/__manifest__.py | 1 + sf_sale/data/documents_data.xml | 15 +++++++++++++++ sf_sale/models/sale_order.py | 4 ++++ sf_sale/views/sale_order_view.xml | 15 ++++++++++++++- 7 files changed, 65 insertions(+), 4 deletions(-) create mode 100644 sf_sale/data/documents_data.xml diff --git a/sf_manufacturing/controllers/main.py b/sf_manufacturing/controllers/main.py index 3dd73017..8a289e75 100644 --- a/sf_manufacturing/controllers/main.py +++ b/sf_manufacturing/controllers/main.py @@ -45,6 +45,8 @@ class JikimoSaleRoutePicking(Sf_Bf_Connect): product.product_tmpl_id.is_customer_provided = True if item['embryo_redundancy_id'] else False order_id.with_user(request.env.ref("base.user_admin")).sale_order_create_line(product, item) i += 1 + if kw.get('contract_file_name') and kw.get('contract_file'): + order_id.create_sale_documents(kw.get('contract_file_name'), kw.get('contract_file')) res['factory_order_no'] = order_id.name order_id.confirm_to_supply_method() except Exception as e: diff --git a/sf_manufacturing/models/sale_order.py b/sf_manufacturing/models/sale_order.py index cb214bc9..84afa4c6 100644 --- a/sf_manufacturing/models/sale_order.py +++ b/sf_manufacturing/models/sale_order.py @@ -190,7 +190,29 @@ class SaleOrder(models.Model): 'target': 'new', 'res_id': wizard.id, } + def create_sale_documents(self, contract_file_name, contract_file): + # 创建ir.attachment记录 + attachment = self.env['ir.attachment'].sudo().create({ + 'name': contract_file_name, + 'type': 'binary', + 'datas': contract_file, + 'res_model': 'sale.order', + }) + # 获取默认的文档文件夹 + workspace = self.env.ref('sf_sale.documents_sales_contracts_folder_1').id + + # 创建 documents.document 记录 + document = self.env['documents.document'].sudo().create({ + 'name': contract_file_name, + 'attachment_id': attachment.id, + 'folder_id': workspace, + 'res_model': 'sale.order' + }) + + self.write({ + 'contract_document_id': document.id + }) class SaleOrderLine(models.Model): _inherit = 'sale.order.line' diff --git a/sf_manufacturing/wizard/rework_wizard.py b/sf_manufacturing/wizard/rework_wizard.py index 7fc935a0..8ddc353b 100644 --- a/sf_manufacturing/wizard/rework_wizard.py +++ b/sf_manufacturing/wizard/rework_wizard.py @@ -125,12 +125,16 @@ class ReworkWizard(models.TransientModel): # 1、单独返工CNC工单则不解绑托盘RFID,如单独返工装夹预调工单,则自动解绑托盘RFID; # 2、返工CNC工单和装夹预调工单则自动解绑RFID clamp_workorder_ids = rework_workorder_ids.filtered(lambda rp: rp.routing_type == '装夹预调') + + vals_list = [{ + 'id': order.id, + 'rfid_code_old': order.rfid_code, + 'rfid_code': False + } for order in rework_workorder_ids] + rework_workorder_ids.write(vals_list) if clamp_workorder_ids: for clamp_workorder_id in clamp_workorder_ids: - rfid_code = clamp_workorder_id.rfid_code - clamp_workorder_id.write({'rfid_code_old': rfid_code, 'rfid_code': False}) self.production_id.workorder_ids.filtered(lambda wk: ( - wk.routing_type != '装夹预调' and wk.processing_panel == clamp_workorder_id.processing_panel)).write({'rfid_code': None}) # 返工工单状态设置为【返工】 rework_workorder_ids.write({'state': 'rework'}) diff --git a/sf_sale/__manifest__.py b/sf_sale/__manifest__.py index c12f94fd..94c97825 100644 --- a/sf_sale/__manifest__.py +++ b/sf_sale/__manifest__.py @@ -17,6 +17,7 @@ 'wizard/sale_order_wizard_views.xml', 'wizard/purchase_order_wizard_views.xml', 'data/cron_data.xml', + 'data/documents_data.xml', 'views/sale_team.xml', 'views/sale_order_view.xml', 'views/res_partner_view.xml', diff --git a/sf_sale/data/documents_data.xml b/sf_sale/data/documents_data.xml new file mode 100644 index 00000000..d8182c75 --- /dev/null +++ b/sf_sale/data/documents_data.xml @@ -0,0 +1,15 @@ + + + + + + 销售合同 + 存放销售合同相关文件 + 8 + + + 下单凭证 + + + + \ No newline at end of file diff --git a/sf_sale/models/sale_order.py b/sf_sale/models/sale_order.py index 487bfd53..1366500d 100644 --- a/sf_sale/models/sale_order.py +++ b/sf_sale/models/sale_order.py @@ -63,6 +63,10 @@ class ReSaleOrder(models.Model): model_display_version = fields.Char('模型展示版本', default="v1") + contract_document_id = fields.Many2one('documents.document', string='合同文件') + contract_file = fields.Binary(related='contract_document_id.datas', string='合同文件内容') + contract_file_name = fields.Char(related='contract_document_id.attachment_id.name', string='文件名') + # 业务平台分配工厂后在智能工厂先创建销售订单 def sale_order_create(self, company_id, delivery_name, delivery_telephone, delivery_address, deadline_of_delivery, payments_way, pay_way, order_number, state='sale', diff --git a/sf_sale/views/sale_order_view.xml b/sf_sale/views/sale_order_view.xml index 0574f5d5..05460a61 100644 --- a/sf_sale/views/sale_order_view.xml +++ b/sf_sale/views/sale_order_view.xml @@ -198,7 +198,20 @@ - + + + + + + + + + + +