From 1e40975584ef1a70ece45b80c31aa4a97e24e553 Mon Sep 17 00:00:00 2001 From: ivan deng Date: Wed, 27 Dec 2017 14:32:55 +0800 Subject: [PATCH] fix seq --- app_product_type_sequence/__openerp__.py | 4 +- .../data/product_sequence_dp.xml | 4 -- .../data/product_sequence_felive.xml | 8 ++-- .../models/product_product.py | 39 ++++++++++++------- .../models/product_template.py | 5 +-- .../views/felive_view.xml | 21 ---------- 6 files changed, 33 insertions(+), 48 deletions(-) delete mode 100644 app_product_type_sequence/views/felive_view.xml diff --git a/app_product_type_sequence/__openerp__.py b/app_product_type_sequence/__openerp__.py index a57a71ca..b6abe991 100644 --- a/app_product_type_sequence/__openerp__.py +++ b/app_product_type_sequence/__openerp__.py @@ -24,7 +24,7 @@ 'license': 'AGPL-3', 'sequence': 2, 'installable': True, - 'auto_install': False, + 'auto_install': True, 'application': True, 'images': ['static/description/set2.jpg'], 'currency': 'EUR', @@ -59,7 +59,7 @@ 'views/product_product_view.xml', 'views/product_category_view.xml', 'views/product_internal_type_view.xml', - 'data/product_sequence_dp.xml', + 'data/product_sequence.xml', ], 'demo': [ ], diff --git a/app_product_type_sequence/data/product_sequence_dp.xml b/app_product_type_sequence/data/product_sequence_dp.xml index abe76b7f..4b8b3ff3 100644 --- a/app_product_type_sequence/data/product_sequence_dp.xml +++ b/app_product_type_sequence/data/product_sequence_dp.xml @@ -53,7 +53,6 @@ Manufactured Product d - 1 product 1 0 @@ -64,7 +63,6 @@ Components Product c - 2 product 0 1 @@ -75,7 +73,6 @@ Sourced Product s - 3 product 1 1 @@ -86,7 +83,6 @@ Service v - 4 service 1 1 diff --git a/app_product_type_sequence/data/product_sequence_felive.xml b/app_product_type_sequence/data/product_sequence_felive.xml index 7d7c8b64..86737139 100644 --- a/app_product_type_sequence/data/product_sequence_felive.xml +++ b/app_product_type_sequence/data/product_sequence_felive.xml @@ -52,7 +52,7 @@ - 制造的成品 + 图纸成品 cp 1 product @@ -64,7 +64,7 @@ - 制造的板件 + 图纸板件 bj 2 product @@ -76,7 +76,7 @@ - 制造用原材料(板材) + 大板 bc 3 product @@ -88,7 +88,7 @@ - 外购材料(五金等) + 基础物料 cl 4 product diff --git a/app_product_type_sequence/models/product_product.py b/app_product_type_sequence/models/product_product.py index fe30635a..e77a637d 100644 --- a/app_product_type_sequence/models/product_product.py +++ b/app_product_type_sequence/models/product_product.py @@ -20,7 +20,7 @@ from openerp import models, fields, api, exceptions, _ class ProductProduct(models.Model): _inherit = 'product.product' - default_code = fields.Char('Internal Reference', index=True, default='New', copy=False) + default_code = fields.Char('Internal Reference', index=True, default=lambda self: _('New'), copy=False) default_code_index = fields.Integer('Internal Reference Index', readonly=True) # todo: 检查数据,要保证数据唯一性 @@ -35,16 +35,20 @@ class ProductProduct(models.Model): def create(self, vals): # todo: but 先建空白产品后,编辑2个以上变体,序号会少个 -1 # code_index: 当没有变体现时,值为0,有变体时,为该变体序号 - if 'default_code' not in vals or vals['default_code'] == 'New': + if 'default_code' not in vals or vals['default_code'] == _('New'): code_index = 0 if 'product_tmpl_id' in vals: + # 按产品模板创建产品,有多种情况 template = self.env['product.template'].search([('id', '=', vals['product_tmpl_id'])], limit=1) mylen = len(template.product_variant_ids) - if 'product_tmpl_id' in vals: - # created from product_template - template = self.env['product.template'].search([('id', '=', vals['product_tmpl_id'])], limit=1) - attr = vals['attribute_value_ids'][0][2] - if not(attr): + try: + attr = vals['attribute_value_ids'][0][2] + except: + attr = 0 + + # if self.env.context.get('create_from_tmpl') and not(attr): 此条件已限制,不让在template中先直接创建变体,要求先保存 + if self.env.context.get('create_from_tmpl') and not(attr): + # 从产品模板创建的第一个sku产品,不带属性 # 没有属性值,则是单规格产品。attribute_value_ids格式为[6,0,[]]。多规格时,attribute_value_ids格式为[6,0,[x]] code_index = 0 vals['default_code_index'] = code_index @@ -66,19 +70,26 @@ class ProductProduct(models.Model): code_index = code_index + 1 vals['default_code_index'] = code_index vals['default_code'] = template.default_code_stored + '-%03d'%(code_index) - else: + elif mylen > 1: # 找到最大的序号 variant_max = max(template.product_variant_ids,key=lambda x: x['default_code_index']) code_index = variant_max['default_code_index'] + 1 vals['default_code_index'] = code_index vals['default_code'] = template.default_code_stored + '-%03d'%(code_index) + else: + # 当按模板 + # 此条件常规不出现,但特殊项目会有 + variant_max = max(template.product_variant_ids,key=lambda x: x['default_code_index']) + code_index = variant_max['default_code_index'] + 1 + vals['default_code_index'] = code_index + vals['default_code'] = template.default_code_stored + '-%03d'%(code_index) else: # create from product_product - sequence = self.env['product.internal.type'].search([('id', '=', vals['internal_type'])], limit=1) - if not sequence: - sequence = self.env.ref('app_product_type_sequence.internal_type_mrp_product', raise_if_not_found=False) - if sequence: - vals['default_code'] = sequence.link_sequence.next_by_id() + # 默认使用制造成品的编码 + sequence = self.env.ref('app_product_type_sequence.internal_type_mrp_product', raise_if_not_found=False) + if 'internal_type' in vals: + sequence = self.env['product.internal.type'].search([('id', '=', vals['internal_type'])], limit=1) + vals['default_code'] = sequence.link_sequence.next_by_id() else: # 如果有自己输入 ref,则不需要自运输生成 # sequence = self.env['product.internal.type'].search([('id', '=', vals['internal_type'])], limit=1) @@ -93,7 +104,7 @@ class ProductProduct(models.Model): raise exceptions.ValidationError(_('Product varient can only create in Product view!')) return super(ProductProduct, self).copy(default=None) - # 当内部类型变化时,改变产品模板的各默认值 + # 当内部类型变化时,改变产品的各默认值 @api.onchange('internal_type') def _onchange_internal_type(self): if self.internal_type: diff --git a/app_product_type_sequence/models/product_template.py b/app_product_type_sequence/models/product_template.py index 45927c01..c02ebc9f 100644 --- a/app_product_type_sequence/models/product_template.py +++ b/app_product_type_sequence/models/product_template.py @@ -31,8 +31,7 @@ class ProductTemplate(models.Model): 'Internal Reference', compute='_compute_default_code', inverse='_set_default_code', - store=True, - default='New', copy=False) + store=True, default=lambda self: _('New'), copy=False) # 因为default_code有odoo的处理方式,影响面大,故会将其另存到 default_code_stored default_code_stored = fields.Char('Internal Reference Stored',default='New') @@ -44,7 +43,7 @@ class ProductTemplate(models.Model): if not (self.env.context.get('create_product_product')): # 当从产品模板界面建立时(如果从产品界面建立,则已经生成了编码,不需要再处理) - if 'default_code' not in vals or vals['default_code'] == 'New': + if 'default_code' not in vals or vals['default_code'] == _('New'): sequence = self.env['product.internal.type'].search([('id', '=', vals['internal_type'])], limit=1) if not sequence: sequence = self.env.ref('app_product_type_sequence.internal_type_mrp_product', raise_if_not_found=False) diff --git a/app_product_type_sequence/views/felive_view.xml b/app_product_type_sequence/views/felive_view.xml deleted file mode 100644 index 568208fc..00000000 --- a/app_product_type_sequence/views/felive_view.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - product.template.common.form - product.template - - - -
-

-

-
-
-
-
-
-