This commit is contained in:
ivan deng
2017-12-27 14:32:55 +08:00
parent 4abf2cd011
commit 1e40975584
6 changed files with 33 additions and 48 deletions

View File

@@ -24,7 +24,7 @@
'license': 'AGPL-3', 'license': 'AGPL-3',
'sequence': 2, 'sequence': 2,
'installable': True, 'installable': True,
'auto_install': False, 'auto_install': True,
'application': True, 'application': True,
'images': ['static/description/set2.jpg'], 'images': ['static/description/set2.jpg'],
'currency': 'EUR', 'currency': 'EUR',
@@ -59,7 +59,7 @@
'views/product_product_view.xml', 'views/product_product_view.xml',
'views/product_category_view.xml', 'views/product_category_view.xml',
'views/product_internal_type_view.xml', 'views/product_internal_type_view.xml',
'data/product_sequence_dp.xml', 'data/product_sequence.xml',
], ],
'demo': [ 'demo': [
], ],

View File

@@ -53,7 +53,6 @@
<record id="internal_type_mrp_product" model="product.internal.type"> <record id="internal_type_mrp_product" model="product.internal.type">
<field name="name">Manufactured Product</field> <field name="name">Manufactured Product</field>
<field name="ref">d</field> <field name="ref">d</field>
<field name="sequence">1</field>
<field name="type">product</field> <field name="type">product</field>
<field name="sale_ok">1</field> <field name="sale_ok">1</field>
<field name="purchase_ok">0</field> <field name="purchase_ok">0</field>
@@ -64,7 +63,6 @@
<record id="internal_type_sourced_material" model="product.internal.type"> <record id="internal_type_sourced_material" model="product.internal.type">
<field name="name">Components Product</field> <field name="name">Components Product</field>
<field name="ref">c</field> <field name="ref">c</field>
<field name="sequence">2</field>
<field name="type">product</field> <field name="type">product</field>
<field name="sale_ok">0</field> <field name="sale_ok">0</field>
<field name="purchase_ok">1</field> <field name="purchase_ok">1</field>
@@ -75,7 +73,6 @@
<record id="internal_type_sourced_product" model="product.internal.type"> <record id="internal_type_sourced_product" model="product.internal.type">
<field name="name">Sourced Product</field> <field name="name">Sourced Product</field>
<field name="ref">s</field> <field name="ref">s</field>
<field name="sequence">3</field>
<field name="type">product</field> <field name="type">product</field>
<field name="sale_ok">1</field> <field name="sale_ok">1</field>
<field name="purchase_ok">1</field> <field name="purchase_ok">1</field>
@@ -86,7 +83,6 @@
<record id="internal_type_service" model="product.internal.type"> <record id="internal_type_service" model="product.internal.type">
<field name="name">Service</field> <field name="name">Service</field>
<field name="ref">v</field> <field name="ref">v</field>
<field name="sequence">4</field>
<field name="type">service</field> <field name="type">service</field>
<field name="sale_ok">1</field> <field name="sale_ok">1</field>
<field name="purchase_ok">1</field> <field name="purchase_ok">1</field>

View File

@@ -52,7 +52,7 @@
<!--[(4, ref('purchase.route_warehouse0_buy')),(4, ref('mrp.route_warehouse0_manufacture')),(4, ref('stock.route_warehouse0_mto'))]--> <!--[(4, ref('purchase.route_warehouse0_buy')),(4, ref('mrp.route_warehouse0_manufacture')),(4, ref('stock.route_warehouse0_mto'))]-->
<!--成品--> <!--成品-->
<record id="internal_type_mrp_product" model="product.internal.type"> <record id="internal_type_mrp_product" model="product.internal.type">
<field name="name">制造的成品</field> <field name="name">图纸成品</field>
<field name="ref">cp</field> <field name="ref">cp</field>
<field name="sequence">1</field> <field name="sequence">1</field>
<field name="type">product</field> <field name="type">product</field>
@@ -64,7 +64,7 @@
</record> </record>
<!--板件--> <!--板件-->
<record id="internal_type_mrp_component" model="product.internal.type"> <record id="internal_type_mrp_component" model="product.internal.type">
<field name="name">制造的板件</field> <field name="name">图纸板件</field>
<field name="ref">bj</field> <field name="ref">bj</field>
<field name="sequence">2</field> <field name="sequence">2</field>
<field name="type">product</field> <field name="type">product</field>
@@ -76,7 +76,7 @@
</record> </record>
<!--纯制造原材料,板材--> <!--纯制造原材料,板材-->
<record id="internal_type_sourced_material" model="product.internal.type"> <record id="internal_type_sourced_material" model="product.internal.type">
<field name="name">制造用原材料(板材)</field> <field name="name">大板</field>
<field name="ref">bc</field> <field name="ref">bc</field>
<field name="sequence">3</field> <field name="sequence">3</field>
<field name="type">product</field> <field name="type">product</field>
@@ -88,7 +88,7 @@
</record> </record>
<!--其它外购品,如五金--> <!--其它外购品,如五金-->
<record id="internal_type_sourced_product" model="product.internal.type"> <record id="internal_type_sourced_product" model="product.internal.type">
<field name="name">外购材料(五金等)</field> <field name="name">基础物料</field>
<field name="ref">cl</field> <field name="ref">cl</field>
<field name="sequence">4</field> <field name="sequence">4</field>
<field name="type">product</field> <field name="type">product</field>

View File

@@ -20,7 +20,7 @@ from openerp import models, fields, api, exceptions, _
class ProductProduct(models.Model): class ProductProduct(models.Model):
_inherit = 'product.product' _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) default_code_index = fields.Integer('Internal Reference Index', readonly=True)
# todo: 检查数据,要保证数据唯一性 # todo: 检查数据,要保证数据唯一性
@@ -35,16 +35,20 @@ class ProductProduct(models.Model):
def create(self, vals): def create(self, vals):
# todo: but 先建空白产品后编辑2个以上变体序号会少个 -1 # todo: but 先建空白产品后编辑2个以上变体序号会少个 -1
# code_index: 当没有变体现时值为0有变体时为该变体序号 # 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 code_index = 0
if 'product_tmpl_id' in vals: if 'product_tmpl_id' in vals:
# 按产品模板创建产品,有多种情况
template = self.env['product.template'].search([('id', '=', vals['product_tmpl_id'])], limit=1) template = self.env['product.template'].search([('id', '=', vals['product_tmpl_id'])], limit=1)
mylen = len(template.product_variant_ids) mylen = len(template.product_variant_ids)
if 'product_tmpl_id' in vals: try:
# created from product_template
template = self.env['product.template'].search([('id', '=', vals['product_tmpl_id'])], limit=1)
attr = vals['attribute_value_ids'][0][2] attr = vals['attribute_value_ids'][0][2]
if not(attr): 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]] # 没有属性值则是单规格产品。attribute_value_ids格式为[6,0,[]]。多规格时attribute_value_ids格式为[6,0,[x]]
code_index = 0 code_index = 0
vals['default_code_index'] = code_index vals['default_code_index'] = code_index
@@ -66,18 +70,25 @@ class ProductProduct(models.Model):
code_index = code_index + 1 code_index = code_index + 1
vals['default_code_index'] = code_index vals['default_code_index'] = code_index
vals['default_code'] = template.default_code_stored + '-%03d'%(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']) variant_max = max(template.product_variant_ids,key=lambda x: x['default_code_index'])
code_index = variant_max['default_code_index'] + 1 code_index = variant_max['default_code_index'] + 1
vals['default_code_index'] = code_index vals['default_code_index'] = code_index
vals['default_code'] = template.default_code_stored + '-%03d'%(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: else:
# create from product_product # 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) sequence = self.env.ref('app_product_type_sequence.internal_type_mrp_product', raise_if_not_found=False)
if sequence: 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() vals['default_code'] = sequence.link_sequence.next_by_id()
else: else:
# 如果有自己输入 ref则不需要自运输生成 # 如果有自己输入 ref则不需要自运输生成
@@ -93,7 +104,7 @@ class ProductProduct(models.Model):
raise exceptions.ValidationError(_('Product varient can only create in Product view!')) raise exceptions.ValidationError(_('Product varient can only create in Product view!'))
return super(ProductProduct, self).copy(default=None) return super(ProductProduct, self).copy(default=None)
# 当内部类型变化时,改变产品模板的各默认值 # 当内部类型变化时,改变产品的各默认值
@api.onchange('internal_type') @api.onchange('internal_type')
def _onchange_internal_type(self): def _onchange_internal_type(self):
if self.internal_type: if self.internal_type:

View File

@@ -31,8 +31,7 @@ class ProductTemplate(models.Model):
'Internal Reference', 'Internal Reference',
compute='_compute_default_code', compute='_compute_default_code',
inverse='_set_default_code', inverse='_set_default_code',
store=True, store=True, default=lambda self: _('New'), copy=False)
default='New', copy=False)
# 因为default_code有odoo的处理方式影响面大故会将其另存到 default_code_stored # 因为default_code有odoo的处理方式影响面大故会将其另存到 default_code_stored
default_code_stored = fields.Char('Internal Reference Stored',default='New') 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 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) sequence = self.env['product.internal.type'].search([('id', '=', vals['internal_type'])], limit=1)
if not sequence: if not sequence:
sequence = self.env.ref('app_product_type_sequence.internal_type_mrp_product', raise_if_not_found=False) sequence = self.env.ref('app_product_type_sequence.internal_type_mrp_product', raise_if_not_found=False)

View File

@@ -1,21 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!--产品Form-->
<record id="felive_product_template_form_view" model="ir.ui.view">
<field name="name">product.template.common.form</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="felive_core.felive_product_template_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@name='options']" position="before">
<div>
<h4>
<label class="oe_edit_only" for="internal_type"/>
<field name="internal_type" options="{'no_create': True,'no_open': True}" required="1"/>
</h4>
</div>
</xpath>
</field>
</record>
</data>
</openerp>