From e8d923df0351058dc6ea462df62ae4abc754a04d Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Wed, 1 Feb 2023 18:27:29 +0800 Subject: [PATCH] =?UTF-8?q?bfm=E5=88=86=E9=85=8D=E5=B7=A5=E5=8E=82:=201.?= =?UTF-8?q?=E9=94=80=E5=94=AE=E9=A1=B5=E9=9D=A2=EF=BC=9A=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E7=9A=84=E5=80=BC=E4=B8=BA=E4=B8=9A=E5=8A=A1=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=EF=BC=8C=202.=E6=B2=A1=E6=9C=89=E5=8E=9F=E6=9D=90=E6=96=99?= =?UTF-8?q?=EF=BC=8C=E4=BA=8B=E5=8A=A1=E5=9B=9E=E6=BB=9A=203.=E5=8E=BB?= =?UTF-8?q?=E6=8E=89=E6=B3=A8=E9=87=8A=E5=92=8C=E6=B2=A1=E7=94=A8=E5=88=B0?= =?UTF-8?q?=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/security/group_security.xml | 24 ++++++++++--- sf_bf_connect/controllers/controllers.py | 33 ++++++++++-------- sf_bf_connect/models/http.py | 2 +- sf_bf_connect/models/models.py | 2 +- sf_dlm/models/product_supplierinfo.py | 7 ++-- sf_dlm/models/product_template.py | 31 ++++++++-------- sf_dlm/views/product_template_view.xml | 6 ++-- sf_manufacturing/models/model_type.py | 2 +- .../models/mrp_routing_workcenter.py | 2 +- sf_manufacturing/models/mrp_workcenter.py | 3 +- sf_manufacturing1.zip | Bin 49674 -> 0 bytes sf_sale/models/sale_order.py | 20 +++++++---- sf_sale/views/sale_order_view.xml | 4 +++ 13 files changed, 84 insertions(+), 52 deletions(-) delete mode 100644 sf_manufacturing1.zip diff --git a/sf_base/security/group_security.xml b/sf_base/security/group_security.xml index c32538c7..87243b79 100644 --- a/sf_base/security/group_security.xml +++ b/sf_base/security/group_security.xml @@ -1,13 +1,27 @@ - - 员工 + + + 合作伙伴 1 - - 管理 - 2 + + 加工工厂 + + + + + + 供应商 + + + + + + 编程中心 + + diff --git a/sf_bf_connect/controllers/controllers.py b/sf_bf_connect/controllers/controllers.py index 4670470a..07854e2b 100644 --- a/sf_bf_connect/controllers/controllers.py +++ b/sf_bf_connect/controllers/controllers.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- import json import logging -from datetime import date, timedelta from odoo import http from odoo.http import request @@ -19,27 +18,18 @@ class Sf_Bf_Connect(http.Controller): res = {'status': 1, 'factory_order_no': ''} logging.info('get_bfm_process_order_list:%s' % kw) try: - # datas = request.httprequest.data - # ret = json.loads(datas) - # ret = json.loads(ret['result']) product_id = request.env.ref('sf_dlm.product_template_sf').sudo() self_machining_id = request.env.ref('sf_dlm.product_embryo_sf_self_machining').sudo() outsource_id = request.env.ref('sf_dlm.product_embryo_sf_outsource').sudo() purchase_id = request.env.ref('sf_dlm.product_embryo_sf_purchase').sudo() company_id = request.env.ref('base.main_company').sudo() - user_id = request.env.ref('base.user_admin').sudo() + # user_id = request.env.ref('base.user_admin').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'], user_id) + kw['delivery_end_date']) i = 1 for item in bfm_process_order_list: - # product_has = request.env['product.template'].with_user(request.env.ref("base.user_admin")).search([('barcode','=', item['barcode'])]) - # if product_has: - # logging.info('product_has:%s' % product_has) - # logging.info('barcode:%s' % item['barcode']) - # order_id.with_user(request.env.ref("base.user_admin")).sale_order_create_line(product_has, item) - # else: product = request.env['product.template'].sudo().product_create(product_id, item, order_id, kw['order_number'], i) bom_data = request.env['mrp.bom'].with_user(request.env.ref("base.user_admin")).get_bom(product) @@ -61,8 +51,14 @@ class Sf_Bf_Connect(http.Controller): request.env.ref("base.user_admin")).bom_create( self_machining_embryo, 'normal', False) # 创建胚料里bom的组件 - self_machining_bom.with_user(request.env.ref("base.user_admin")).bom_create_line( + self_machining_bom_line = self_machining_bom.with_user( + request.env.ref("base.user_admin")).bom_create_line( self_machining_embryo) + if self_machining_bom_line == False: + res['status'] = 2 + res['message'] = '该订单模型的材料型号在您分配的工厂里暂未有原材料,请先配置再进行分配' + request.cr.rollback() + return json.JSONEncoder().encode(res) # 产品配置bom product_bom_self_machining = request.env['mrp.bom'].with_user( request.env.ref("base.user_admin")).bom_create( @@ -81,7 +77,13 @@ class Sf_Bf_Connect(http.Controller): outsource_embryo, 'subcontract', True) # 创建胚料的bom的组件 - outsource_bom.with_user(request.env.ref("base.user_admin")).bom_create_line(outsource_embryo) + outsource_bom_line = outsource_bom.with_user( + request.env.ref("base.user_admin")).bom_create_line(outsource_embryo) + if outsource_bom_line == False: + res['status'] = 2 + res['message'] = '该订单模型的材料型号在您分配的工厂里暂未有原材料,请先配置再进行分配' + request.cr.rollback() + return json.JSONEncoder().encode(res) # 产品配置bom product_bom_outsource = request.env['mrp.bom'].with_user( request.env.ref("base.user_admin")).bom_create(product, 'normal', False) @@ -100,8 +102,9 @@ class Sf_Bf_Connect(http.Controller): 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 + return json.JSONEncoder().encode(res) except Exception as e: logging.info('get_bfm_process_order_list error:%s' % e) res['status'] = -1 res['message'] = '工厂创建销售订单和产品失败,请联系管理员' - return json.JSONEncoder().encode(res) + return json.JSONEncoder().encode(res) diff --git a/sf_bf_connect/models/http.py b/sf_bf_connect/models/http.py index 23c66406..eb969eb6 100644 --- a/sf_bf_connect/models/http.py +++ b/sf_bf_connect/models/http.py @@ -3,7 +3,7 @@ import logging import datetime import time import hashlib -from odoo import fields, models, api +from odoo import models from odoo.http import request __author__ = 'jinling.yang' diff --git a/sf_bf_connect/models/models.py b/sf_bf_connect/models/models.py index 3eeac229..5aba960a 100644 --- a/sf_bf_connect/models/models.py +++ b/sf_bf_connect/models/models.py @@ -5,7 +5,7 @@ import string import random -from odoo import fields, models, api +from odoo import fields, models __author__ = 'jinling.yang' diff --git a/sf_dlm/models/product_supplierinfo.py b/sf_dlm/models/product_supplierinfo.py index ae850401..25dd7398 100644 --- a/sf_dlm/models/product_supplierinfo.py +++ b/sf_dlm/models/product_supplierinfo.py @@ -1,4 +1,4 @@ -from odoo import models, fields, api +from odoo import models class ResSupplierInfo(models.Model): @@ -7,5 +7,6 @@ class ResSupplierInfo(models.Model): def _compute_is_subcontractor(self): for supplier in self: boms = supplier.product_id.variant_bom_ids - boms |= supplier.product_tmpl_id.bom_ids.filtered(lambda b: not b.product_id or b.product_id in (supplier.product_id or supplier.product_tmpl_id.product_variant_ids)) - supplier.is_subcontractor = supplier.partner_id in boms.subcontractor_id \ No newline at end of file + boms |= supplier.product_tmpl_id.bom_ids.filtered(lambda b: not b.product_id or b.product_id in ( + supplier.product_id or supplier.product_tmpl_id.product_variant_ids)) + supplier.is_subcontractor = supplier.partner_id in boms.subcontractor_id diff --git a/sf_dlm/models/product_template.py b/sf_dlm/models/product_template.py index 8d271396..115f42d4 100644 --- a/sf_dlm/models/product_template.py +++ b/sf_dlm/models/product_template.py @@ -1,10 +1,6 @@ -from odoo import models, fields, api -from odoo.exceptions import ValidationError +from odoo import models, fields import logging import base64 -import os -# from OCC.Extend.DataExchange import read_step_file, write_stl_file -from odoo.modules import get_resource_path class ResProductTemplate(models.Model): @@ -12,6 +8,8 @@ class ResProductTemplate(models.Model): # 模型的长,宽,高,体积,精度,材料 model_name = fields.Char('模型名称') + categ_type = fields.Selection( + [("成品", "成品"), ("胚料", "胚料"), ("原材料", "原材料")], string='产品的类别', related='categ_id.type', store=True) model_long = fields.Float('模型长[mm]', digits=(16, 3)) model_width = fields.Float('模型宽[mm]', digits=(16, 3)) model_height = fields.Float('模型高[mm]', digits=(16, 3)) @@ -223,7 +221,7 @@ class ResMrpBom(models.Model): 'product_qty': 1, 'product_uom_id': 1 }) - if bom_type == 'subcontract' and product_type != False: + if bom_type == 'subcontract' and product_type is not False: subcontract = self.get_supplier(product.materials_type_id) bom_id.subcontractor_id = subcontract.partner_id.id return bom_id @@ -233,15 +231,18 @@ class ResMrpBom(models.Model): # 胚料所需原材料公式:当前的胚料的体积(立方米m³) *材料密度 * 1000 = 所需原材料重量KG(公斤) def bom_create_line(self, embryo): # 选取当前胚料原材料 - bom_line = self.get_raw_bom(embryo) - vals = { - 'bom_id': self.id, - 'product_id': bom_line.id, - 'product_tmpl_id': bom_line.product_tmpl_id.id, - 'product_qty': bom_line.volume * bom_line.materials_type_id.density * 1000, - 'product_uom_id': bom_line.uom_id.id - } - return self.env['mrp.bom.line'].create(vals) + raw_bom_line = self.get_raw_bom(embryo) + if raw_bom_line: + bom_line = self.env['mrp.bom.line'].create({ + 'bom_id': self.id, + 'product_id': raw_bom_line.id, + 'product_tmpl_id': raw_bom_line.product_tmpl_id.id, + 'product_qty': round(embryo.volume / 1000000000 * raw_bom_line.materials_type_id.density, 2), + 'product_uom_id': raw_bom_line.uom_id.id, + }) + return bom_line + else: + return False # 查询材料型号默认排第一的供应商 def get_supplier(self, materials_type): diff --git a/sf_dlm/views/product_template_view.xml b/sf_dlm/views/product_template_view.xml index d79dc323..6746f45a 100644 --- a/sf_dlm/views/product_template_view.xml +++ b/sf_dlm/views/product_template_view.xml @@ -12,8 +12,10 @@ - - + + + + diff --git a/sf_manufacturing/models/model_type.py b/sf_manufacturing/models/model_type.py index 7a15fd2f..5428534d 100644 --- a/sf_manufacturing/models/model_type.py +++ b/sf_manufacturing/models/model_type.py @@ -1,4 +1,4 @@ -from odoo import api, fields, models +from odoo import fields, models class ModelType(models.Model): diff --git a/sf_manufacturing/models/mrp_routing_workcenter.py b/sf_manufacturing/models/mrp_routing_workcenter.py index 60ec21f6..441fddf3 100644 --- a/sf_manufacturing/models/mrp_routing_workcenter.py +++ b/sf_manufacturing/models/mrp_routing_workcenter.py @@ -1,4 +1,4 @@ -from odoo import fields, models, api +from odoo import fields, models class ResMrpRoutingWorkcenter(models.Model): diff --git a/sf_manufacturing/models/mrp_workcenter.py b/sf_manufacturing/models/mrp_workcenter.py index f9f518c1..5b266a20 100644 --- a/sf_manufacturing/models/mrp_workcenter.py +++ b/sf_manufacturing/models/mrp_workcenter.py @@ -1,4 +1,5 @@ -from odoo import api, fields, models, _ +from odoo import api, fields, models +from datetime import datetime from collections import defaultdict from odoo.addons.resource.models.resource import Intervals diff --git a/sf_manufacturing1.zip b/sf_manufacturing1.zip deleted file mode 100644 index 3dfa31740900fe6a00773da9de211eb4ccff8e90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49674 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 q)#CnZ+x+_J`vhH7{kPD6`4Ej|N1|jEe{+3 diff --git a/sf_sale/models/sale_order.py b/sf_sale/models/sale_order.py index 02ffc7b6..aadd956e 100644 --- a/sf_sale/models/sale_order.py +++ b/sf_sale/models/sale_order.py @@ -1,7 +1,5 @@ from odoo import models, fields -from odoo.exceptions import ValidationError import datetime -import logging class ReSaleOrder(models.Model): @@ -15,16 +13,16 @@ class ReSaleOrder(models.Model): # 业务平台分配工厂后在智能工厂先创建销售订单 def sale_order_create(self, company_id, delivery_name, delivery_telephone, delivery_address, - deadline_of_delivery, user_id): + deadline_of_delivery): now_time = datetime.datetime.now() - partner = self.env.user.partner_id + partner = self.get_customer() order_id = self.env['sale.order'].sudo().create({ 'company_id': company_id.id, 'date_order': now_time, 'name': self.env['ir.sequence'].next_by_code('sale.order', sequence_date=now_time), 'partner_id': partner.id, 'state': 'draft', - 'user_id': user_id.id, + # 'user_id': user_id.id, 'person_of_delivery': delivery_name, 'telephone_of_delivery': delivery_telephone, 'address_of_delivery': delivery_address, @@ -32,16 +30,24 @@ class ReSaleOrder(models.Model): }) return order_id + def get_customer(self): + customer = self.env['res.partner'].search([('name', '=', '业务平台')]) + if customer: + return customer + else: + partner = self.env['res.partner'].create({'name': '业务平台'}) + return partner + # 业务平台分配工厂时在创建完产品后再创建销售明细信息 def sale_order_create_line(self, product, item): vals = { 'order_id': self.id, 'product_id': product.id, - 'name': '%s/%s/%s/%s/%s/%s' % ( + 'name': '%s/%s/%s/%s/±%s/%s' % ( product.model_long, product.model_width, product.model_height, product.model_volume, product.model_machining_precision, product.materials_id.name), 'price_unit': product.list_price, - 'product_uom_qty': item['number'] + 'product_uom_qty': item['number'], } return self.env['sale.order.line'].create(vals) diff --git a/sf_sale/views/sale_order_view.xml b/sf_sale/views/sale_order_view.xml index 819f073a..ae92e27f 100644 --- a/sf_sale/views/sale_order_view.xml +++ b/sf_sale/views/sale_order_view.xml @@ -9,6 +9,10 @@ + + +