Files
app-odoo/app_product_sequence/models/product_product.py
2017-12-19 21:07:37 +08:00

85 lines
4.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
# Created on 2017-11-05
# author: 广州尚鹏http://www.sunpop.cn
# email: 300883@qq.com
# resource of Sunpop
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
# Odoo在线中文用户手册长期更新
# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html
# Odoo10离线中文用户手册下载
# http://www.sunpop.cn/odoo10_user_manual_document_offline/
# Odoo10离线开发手册下载-含python教程jquery参考Jinja2模板PostgresSQL参考odoo开发必备
# http://www.sunpop.cn/odoo10_developer_document_offline/
# description:
from openerp import models, fields, api, exceptions, _
class ProductProduct(models.Model):
_inherit = 'product.product'
default_code = fields.Char('Internal Reference', index=True, readonly=True, default=lambda self: _('New'), copy=False)
default_code_index = fields.Integer('Internal Reference Index', readonly=True)
_sql_constraints = [
('uniq_default_code',
'unique(default_code)',
'The reference must be unique'),
]
@api.model
def create(self, vals):
# todo: but 先建空白产品后编辑给2个以上变体序号会少个 -1
# code_index: 当没有变体现时值为0有变体时为该变体序号
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)
# created from product_template
if 'product_tmpl_id' in vals:
template = self.env['product.template'].search([('id', '=', vals['product_tmpl_id'])], limit=1)
attr = vals['attribute_value_ids'][0][2]
if not(attr):
# 没有属性值则是单规格产品。attribute_value_ids格式为[6,0,[]]。多规格时attribute_value_ids格式为[6,0,[x]]
code_index = 0
vals['default_code_index'] = code_index
vals['default_code'] = template.default_code_stored
elif mylen == 0:
# 有属性值了,自己是第一个规格
code_index = 1
vals['default_code_index'] = code_index
vals['default_code'] = template.default_code_stored + '-%03d'%(code_index)
elif mylen == 1:
# 已存在1个当存在的1个有属性时要改已存在的product值
code_index = template.product_variant_ids[:1].default_code_index
if template.product_variant_ids[:1].attribute_value_ids:
if code_index == 0:
code_index = 1
template.product_variant_ids[:1].default_code_index = code_index
template.product_variant_ids[:1].default_code = template.default_code_stored + '-%03d'%(code_index)
# 接着改当前操作的product值
code_index = 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 sequence:
vals['default_code'] = sequence.link_sequence.next_by_id()
return super(ProductProduct, self).create(vals)
@api.multi
def copy(self, default=None):
if len(self.product_tmpl_id.product_variant_ids)>1 :
raise exceptions.ValidationError(_('Product varient can only create in Product view!'))
return super(ProductProduct, self).copy(default=None)