From 111c0f6dae80c8cd7ff491011d1207ab2dacd57c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=B0=A7?= Date: Wed, 6 Nov 2024 17:53:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jikimo_sale_route_picking/__init__.py | 4 + jikimo_sale_route_picking/__manifest__.py | 26 ++++++ .../controllers/__init__.py | 2 + jikimo_sale_route_picking/controllers/main.py | 46 ++++++++++ .../data/product_templates.xml | 85 +++++++++++++++++++ .../data/stock_routes.xml | 31 +++++++ jikimo_sale_route_picking/models/__init__.py | 3 + .../models/product_product.py | 7 ++ .../models/product_template.py | 10 +++ .../security/group_security.xml | 10 +++ .../security/ir.model.access.csv | 8 ++ .../views/product_product_views.xml | 15 ++++ .../views/sale_order_views.xml | 83 ++++++++++++++++++ .../product_template_management_view.xml | 10 +-- sf_plan_management/i18n/zh_CN.po | 2 +- sf_sale/models/sale_order.py | 10 +-- sf_sale/views/sale_order_view.xml | 8 +- 17 files changed, 342 insertions(+), 18 deletions(-) create mode 100644 jikimo_sale_route_picking/__init__.py create mode 100644 jikimo_sale_route_picking/__manifest__.py create mode 100644 jikimo_sale_route_picking/controllers/__init__.py create mode 100644 jikimo_sale_route_picking/controllers/main.py create mode 100644 jikimo_sale_route_picking/data/product_templates.xml create mode 100644 jikimo_sale_route_picking/data/stock_routes.xml create mode 100644 jikimo_sale_route_picking/models/__init__.py create mode 100644 jikimo_sale_route_picking/models/product_product.py create mode 100644 jikimo_sale_route_picking/models/product_template.py create mode 100644 jikimo_sale_route_picking/security/group_security.xml create mode 100644 jikimo_sale_route_picking/security/ir.model.access.csv create mode 100644 jikimo_sale_route_picking/views/product_product_views.xml create mode 100644 jikimo_sale_route_picking/views/sale_order_views.xml diff --git a/jikimo_sale_route_picking/__init__.py b/jikimo_sale_route_picking/__init__.py new file mode 100644 index 00000000..7909ef3a --- /dev/null +++ b/jikimo_sale_route_picking/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +from . import models + +from . import controllers diff --git a/jikimo_sale_route_picking/__manifest__.py b/jikimo_sale_route_picking/__manifest__.py new file mode 100644 index 00000000..b72e9a37 --- /dev/null +++ b/jikimo_sale_route_picking/__manifest__.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +{ + 'name': '机企猫 供货路线选择', + 'version': '16.0.1.0.0', + 'summary': """ 报价单提供(自动化产线加工/人工线下加工/外购/委外加工)多种供货路线选择 """, + 'author': 'fox', + 'website': '', + 'category': '', + 'depends': ['product', 'sf_dlm_management', 'sale_stock'], + "data": [ + 'security/group_security.xml', + 'security/ir.model.access.csv', + 'data/stock_routes.xml', + 'data/product_templates.xml', + 'views/sale_order_views.xml', + 'views/product_product_views.xml', + ],'assets': { + # 'web.assets_backend': [ + # 'jikimo_sale_route_picking/static/src/**/*' + # ], + }, + 'application': True, + 'installable': True, + 'auto_install': False, + 'license': 'LGPL-3', +} diff --git a/jikimo_sale_route_picking/controllers/__init__.py b/jikimo_sale_route_picking/controllers/__init__.py new file mode 100644 index 00000000..cd4d6a8b --- /dev/null +++ b/jikimo_sale_route_picking/controllers/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import main \ No newline at end of file diff --git a/jikimo_sale_route_picking/controllers/main.py b/jikimo_sale_route_picking/controllers/main.py new file mode 100644 index 00000000..0c0390e7 --- /dev/null +++ b/jikimo_sale_route_picking/controllers/main.py @@ -0,0 +1,46 @@ +import logging +import json +from odoo import http +from odoo.http import request +from odoo.addons.sf_bf_connect.controllers.controllers import Sf_Bf_Connect + +_logger = logging.getLogger(__name__) + +class JikimoSaleRoutePicking(Sf_Bf_Connect): + + @http.route('/api/bfm_process_order/list', type='http', auth='sf_token', methods=['GET', 'POST'], csrf=False, + cors="*") + def get_bfm_process_order_list(self, **kw): + """ + 接收业务平台加工订单分配工厂时传送来的订单数据并生成销售订单和产品及坯料 + :param kw: + :return: + """ + res = {'status': 1, 'factory_order_no': ''} + _logger.info('get_bfm_process_order_list:%s' % kw['order_number']) + try: + product_id = request.env.ref('jikimo_sale_route_picking.product_template_default').sudo() + company_id = request.env.ref('base.main_company').sudo() + 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') + i = 1 + # 给sale_order的default_code字段赋值 + aa = request.env['sale.order'].sudo().search([('name', '=', order_id.name)]) + _logger.info('get_bfm_process_or===================================:%s' % order_id.name) + aa.default_code = kw['order_number'] + if kw.get('logistics_way'): + aa.logistics_way = kw['logistics_way'] + _logger.info('get_bfm_process_order_listaaaaaaaaaaaaaaaaaaaaaaaaaaaa================:%s' % aa.default_code) + for item in bfm_process_order_list: + product = request.env['product.template'].sudo().product_create(product_id, item, order_id, + kw['order_number'], i) + order_id.with_user(request.env.ref("base.user_admin")).sale_order_create_line(product, item) + i += 1 + res['factory_order_no'] = order_id.name + except Exception as e: + _logger.info('get_bfm_process_order_list error:%s' % e) + res['status'] = -1 + res['message'] = '工厂创建销售订单和产品失败,请联系管理员' + return json.JSONEncoder().encode(res) diff --git a/jikimo_sale_route_picking/data/product_templates.xml b/jikimo_sale_route_picking/data/product_templates.xml new file mode 100644 index 00000000..df965fd0 --- /dev/null +++ b/jikimo_sale_route_picking/data/product_templates.xml @@ -0,0 +1,85 @@ + + + + + 人工线下加工模板 + + + + delivery + product + false + + + + true + serial + true + true + + + + 成品外购模板 + + + + serial + product + + + + true + + + + 成品委外加工模板 + + + + serial + product + + + + true + + + + 成品初始化模板 + + + + serial + product + + + + true + + + + + + + + + 坯料客供料模板 + + + + false + serial + product + + + + + + + \ No newline at end of file diff --git a/jikimo_sale_route_picking/data/stock_routes.xml b/jikimo_sale_route_picking/data/stock_routes.xml new file mode 100644 index 00000000..eb6a340c --- /dev/null +++ b/jikimo_sale_route_picking/data/stock_routes.xml @@ -0,0 +1,31 @@ + + + + + 带料加工 + true + true + + 16 + + + + 客供料入库 + incoming + true + + DL + + + + + + 带料收货 + + + + + pull + + + \ No newline at end of file diff --git a/jikimo_sale_route_picking/models/__init__.py b/jikimo_sale_route_picking/models/__init__.py new file mode 100644 index 00000000..f59a4700 --- /dev/null +++ b/jikimo_sale_route_picking/models/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- +from . import product_template +from . import product_product diff --git a/jikimo_sale_route_picking/models/product_product.py b/jikimo_sale_route_picking/models/product_product.py new file mode 100644 index 00000000..996a9d5c --- /dev/null +++ b/jikimo_sale_route_picking/models/product_product.py @@ -0,0 +1,7 @@ +from odoo import models, fields + +class ProductProduct(models.Model): + _inherit = 'product.product' + + # 是否客供料 + is_customer_provided = fields.Boolean(string='是否客供料', related='product_tmpl_id.is_customer_provided') diff --git a/jikimo_sale_route_picking/models/product_template.py b/jikimo_sale_route_picking/models/product_template.py new file mode 100644 index 00000000..6b2bc29d --- /dev/null +++ b/jikimo_sale_route_picking/models/product_template.py @@ -0,0 +1,10 @@ +from odoo import models, fields + +class ProductTemplate(models.Model): + _inherit = 'product.template' + + is_manual_processing = fields.Boolean(string='人工线下加工') + is_customer_provided = fields.Boolean(string='客供料') + + def product_create(self, product_id, item, order_id, order_number, i): + product_id = super(ProductTemplate, self).product_create(product_id, item, order_id, order_number, i) diff --git a/jikimo_sale_route_picking/security/group_security.xml b/jikimo_sale_route_picking/security/group_security.xml new file mode 100644 index 00000000..84bf5b89 --- /dev/null +++ b/jikimo_sale_route_picking/security/group_security.xml @@ -0,0 +1,10 @@ + + + + + + 工艺工程师 + + + + \ No newline at end of file diff --git a/jikimo_sale_route_picking/security/ir.model.access.csv b/jikimo_sale_route_picking/security/ir.model.access.csv new file mode 100644 index 00000000..aac13f29 --- /dev/null +++ b/jikimo_sale_route_picking/security/ir.model.access.csv @@ -0,0 +1,8 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_sale_order_group_production_engineer,sale.order_group_production_engineer,sale.model_sale_order,jikimo_sale_route_picking.group_production_engineer,1,1,0,0 +access_sale_order_line_group_production_engineer,sale_order_line_group_production_engineer,sale.model_sale_order_line,jikimo_sale_route_picking.group_production_engineer,1,1,0,0 +access_product_product_group_production_engineer,product_product_group_production_engineer,product.model_product_product,jikimo_sale_route_picking.group_production_engineer,1,0,0,0 +access_product_template_group_production_engineer,product_template_group_production_engineer,product.model_product_template,jikimo_sale_route_picking.group_production_engineer,1,0,0,0 +access_stock_picking_group_production_engineer,stock_picking_group_production_engineer,stock.model_stock_picking,jikimo_sale_route_picking.group_production_engineer,1,0,0,0 +access_stock_move_group_production_engineer,stock_move_group_production_engineer,stock.model_stock_move,jikimo_sale_route_picking.group_production_engineer,1,0,0,0 +access_mrp_bom_group_production_engineer,mrp_bom_group_production_engineer,mrp.model_mrp_bom,jikimo_sale_route_picking.group_production_engineer,1,0,0,0 \ No newline at end of file diff --git a/jikimo_sale_route_picking/views/product_product_views.xml b/jikimo_sale_route_picking/views/product_product_views.xml new file mode 100644 index 00000000..e3f896b5 --- /dev/null +++ b/jikimo_sale_route_picking/views/product_product_views.xml @@ -0,0 +1,15 @@ + + + + view.product.template.form.inherit.sf + product.template + + + + + + + + + + \ No newline at end of file diff --git a/jikimo_sale_route_picking/views/sale_order_views.xml b/jikimo_sale_route_picking/views/sale_order_views.xml new file mode 100644 index 00000000..027a3054 --- /dev/null +++ b/jikimo_sale_route_picking/views/sale_order_views.xml @@ -0,0 +1,83 @@ + + + + view.sale.order.form.inherit.sf + + sale.order + + + + + + + + + + jikimo.sale.order.search.inherit.quotation + sale.order + primary + + + + + + + + + + jikimo.sale.order.search.inherit.quotation + sale.order + primary + + + + + + + + + + + + + + + + + 报价单 + ir.actions.act_window + sale.order + tree,kanban,form,calendar,pivot,graph,activity + + {'search_default_route': 1} + +

+ Create a new quotation, the first step of a new sale! +

+ Once the quotation is confirmed by the customer, it becomes a sales order.
You will be able to create an invoice and collect the payment. +

+
+
+ + + + + + + +
diff --git a/sf_dlm_management/views/product_template_management_view.xml b/sf_dlm_management/views/product_template_management_view.xml index 1862e33c..0fe6413b 100644 --- a/sf_dlm_management/views/product_template_management_view.xml +++ b/sf_dlm_management/views/product_template_management_view.xml @@ -110,15 +110,13 @@ - - + + - - + + diff --git a/sf_plan_management/i18n/zh_CN.po b/sf_plan_management/i18n/zh_CN.po index 0b957921..d9511db1 100644 --- a/sf_plan_management/i18n/zh_CN.po +++ b/sf_plan_management/i18n/zh_CN.po @@ -7059,7 +7059,7 @@ msgstr "" #. module: sf_dlm #: model:product.template,name:sf_dlm.product_template_sf_product_template msgid "CNC加工产品模板" -msgstr "冲压模具滑块" +msgstr "自动化产线加工模板" #. module: sf_tool_management #: model:ir.model,name:sf_tool_management.model_sf_cnc_processing diff --git a/sf_sale/models/sale_order.py b/sf_sale/models/sale_order.py index 53f73aef..251554b5 100644 --- a/sf_sale/models/sale_order.py +++ b/sf_sale/models/sale_order.py @@ -60,7 +60,7 @@ class ReSaleOrder(models.Model): # 业务平台分配工厂后在智能工厂先创建销售订单 def sale_order_create(self, company_id, delivery_name, delivery_telephone, delivery_address, - deadline_of_delivery, payments_way, pay_way): + deadline_of_delivery, payments_way, pay_way, state='sale'): now_time = datetime.datetime.now() partner = self.get_customer() data = { @@ -69,7 +69,7 @@ class ReSaleOrder(models.Model): 'name': self.env['ir.sequence'].next_by_code('sale.order', sequence_date=now_time), 'partner_id': partner.id, 'check_status': 'approved', - 'state': 'sale', + 'state': state, 'user_id': partner.user_id.id, 'person_of_delivery': delivery_name, 'telephone_of_delivery': delivery_telephone, @@ -133,8 +133,7 @@ class ReSaleOrder(models.Model): 'product_uom_qty': item['number'], 'model_glb_file': base64.b64decode(item['model_file']), 'remark': item.get('remark'), - 'is_incoming_material': item.get('is_incoming_material'), - 'incoming_size': item.get('incoming_size'), + 'is_incoming_material': item.get('is_incoming_material') } return self.env['sale.order.line'].with_context(skip_procurement=True).create(vals) @@ -175,8 +174,7 @@ class ResaleOrderLine(models.Model): check_status = fields.Selection(related='order_id.check_status') remark = fields.Char('备注') - is_incoming_material = fields.Boolean('是否带料', default=False) - incoming_size = fields.Char('带料尺寸') + is_incoming_material = fields.Boolean('客供料', default=False) @api.depends('product_template_id') def _compute_model_glb_file(self): diff --git a/sf_sale/views/sale_order_view.xml b/sf_sale/views/sale_order_view.xml index a84a2b44..f5dba649 100644 --- a/sf_sale/views/sale_order_view.xml +++ b/sf_sale/views/sale_order_view.xml @@ -118,8 +118,7 @@ - - + {'readonly': [('state', 'in', ['cancel','sale'])]} @@ -167,7 +166,6 @@ - @@ -207,12 +205,12 @@ 下单时间 - +