[IMP] product: rename fields variant_ids into attribute_line_ids on the template and attribute_value_ids on the product.
This commit is contained in:
parent
152ec5bf50
commit
435b5b9ca3
|
@ -306,8 +306,8 @@ class mrp_bom(osv.osv):
|
|||
if set(map(int,bom_line_id.property_ids or [])) - set(properties or []):
|
||||
continue
|
||||
# all bom_line_id variant values must be in the product
|
||||
if bom_line_id.variant_ids:
|
||||
if not product or (set(map(int,bom_line_id.variant_ids or [])) - set(map(int,product.variant_ids))):
|
||||
if bom_line_id.attribute_value_ids:
|
||||
if not product or (set(map(int,bom_line_id.attribute_value_ids or [])) - set(map(int,product.attribute_value_ids))):
|
||||
continue
|
||||
|
||||
if bom_line_id.product_id.id in all_prod:
|
||||
|
@ -393,7 +393,7 @@ class mrp_bom_line(osv.osv):
|
|||
'property_ids': fields.many2many('mrp.property', string='Properties'),
|
||||
|
||||
'bom_id': fields.many2one('mrp.bom', 'Parent BoM', ondelete='cascade', select=True, required=True),
|
||||
'variant_ids': fields.many2many('product.attribute.value', string='Variants', help="BOM Product Variants needed form apply this line."),
|
||||
'attribute_value_ids': fields.many2many('product.attribute.value', string='Variants', help="BOM Product Variants needed form apply this line."),
|
||||
}
|
||||
|
||||
def _get_uom_id(self, cr, uid, *args):
|
||||
|
|
|
@ -620,7 +620,7 @@
|
|||
<field name="product_uom" ref="product.product_uom_unit"/>
|
||||
<field name="sequence">1</field>
|
||||
<field name="type">normal</field>
|
||||
<field name="variant_ids" eval="[(6,0,[ref('product.product_attribute_value_1')])]"/>
|
||||
<field name="attribute_value_ids" eval="[(6,0,[ref('product.product_attribute_value_1')])]"/>
|
||||
<field name="bom_id" ref="mrp_bom_11"/>
|
||||
</record>
|
||||
<record id="mrp_bom_line_33" model="mrp.bom.line">
|
||||
|
@ -629,7 +629,7 @@
|
|||
<field name="product_uom" ref="product.product_uom_unit"/>
|
||||
<field name="sequence">2</field>
|
||||
<field name="type">normal</field>
|
||||
<field name="variant_ids" eval="[(6,0,[ref('product.product_attribute_value_2')])]"/>
|
||||
<field name="attribute_value_ids" eval="[(6,0,[ref('product.product_attribute_value_2')])]"/>
|
||||
<field name="bom_id" ref="mrp_bom_11"/>
|
||||
</record>
|
||||
<record id="mrp_bom_line_34" model="mrp.bom.line">
|
||||
|
|
|
@ -385,7 +385,7 @@
|
|||
<field name="date_start"/>
|
||||
<field name="date_stop"/>
|
||||
<field name="routing_id"/>
|
||||
<field name="variant_ids" widget="many2many_tags"/>
|
||||
<field name="attribute_value_ids" widget="many2many_tags"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
|
@ -493,7 +493,7 @@
|
|||
<field name="date_start"/>
|
||||
<field name="date_stop"/>
|
||||
<field name="routing_id"/>
|
||||
<field name="variant_ids" widget="many2many_tags"/>
|
||||
<field name="attribute_value_ids" widget="many2many_tags"/>
|
||||
<field name="property_ids" widget="many2many_tags"/>
|
||||
</tree>
|
||||
</field>
|
||||
|
|
|
@ -548,7 +548,7 @@ class product_template(osv.osv):
|
|||
'color': fields.integer('Color Index'),
|
||||
'is_product_variant': fields.function( _is_product_variant, type='boolean', string='Only one product variant'),
|
||||
|
||||
'variant_ids': fields.one2many('product.attribute.line', 'product_tmpl_id', 'Product Variants'),
|
||||
'attribute_line_ids': fields.one2many('product.attribute.line', 'product_tmpl_id', 'Product Variants'),
|
||||
'product_variant_ids': fields.one2many('product.product', 'product_tmpl_id', 'Products', required=True),
|
||||
'product_variant_count': fields.function( _get_product_variant_count, type='integer', string='Product Variant Number'),
|
||||
|
||||
|
@ -623,7 +623,7 @@ class product_template(osv.osv):
|
|||
|
||||
# list of values combination
|
||||
all_variants = [[]]
|
||||
for variant_id in tmpl_id.variant_ids:
|
||||
for variant_id in tmpl_id.attribute_line_ids:
|
||||
if len(variant_id.value_ids) > 1:
|
||||
temp_variants = []
|
||||
for value_id in variant_id.value_ids:
|
||||
|
@ -636,7 +636,7 @@ class product_template(osv.osv):
|
|||
variants_active_ids = []
|
||||
variants_inactive = []
|
||||
for product_id in tmpl_id.product_variant_ids:
|
||||
variants = map(int,product_id.variant_ids)
|
||||
variants = map(int,product_id.attribute_value_ids)
|
||||
if variants in all_variants:
|
||||
variants_active_ids.append(product_id.id)
|
||||
all_variants.pop(all_variants.index(variants))
|
||||
|
@ -651,7 +651,7 @@ class product_template(osv.osv):
|
|||
for variant_ids in all_variants:
|
||||
values = {
|
||||
'product_tmpl_id': tmpl_id.id,
|
||||
'variant_ids': [(6, 0, variant_ids)]
|
||||
'attribute_value_ids': [(6, 0, variant_ids)]
|
||||
}
|
||||
id = product_obj.create(cr, uid, values, context=ctx)
|
||||
variants_active_ids.append(id)
|
||||
|
@ -688,7 +688,7 @@ class product_template(osv.osv):
|
|||
for prod_template_id in ids:
|
||||
self._set_standard_price(cr, uid, prod_template_id, vals['standard_price'], context=context)
|
||||
res = super(product_template, self).write(cr, uid, ids, vals, context=context)
|
||||
if 'variant_ids' in vals or vals.get('active'):
|
||||
if 'attribute_line_ids' in vals or vals.get('active'):
|
||||
self.create_variant_ids(cr, uid, ids, context=context)
|
||||
if 'active' in vals and not vals.get('active'):
|
||||
ctx = context and context.copy() or {}
|
||||
|
@ -800,7 +800,7 @@ class product_product(osv.osv):
|
|||
else:
|
||||
res[product.id] = product.list_price
|
||||
price_extra = 0.0
|
||||
for variant_id in product.variant_ids:
|
||||
for variant_id in product.attribute_value_ids:
|
||||
price_extra += variant_id.price_extra
|
||||
res[product.id] = (res[product.id] or 0.0) + price_extra
|
||||
return res
|
||||
|
@ -862,7 +862,7 @@ class product_product(osv.osv):
|
|||
result = dict.fromkeys(ids, False)
|
||||
for product in self.browse(cr, uid, ids, context=context):
|
||||
price_extra = 0.0
|
||||
for variant_id in product.variant_ids:
|
||||
for variant_id in product.attribute_value_ids:
|
||||
for price_id in variant_id.price_ids:
|
||||
if price_id.product_tmpl_id.id == product.product_tmpl_id.id:
|
||||
price_extra += price_id.price_extra
|
||||
|
@ -884,7 +884,7 @@ class product_product(osv.osv):
|
|||
'product.template': (_get_name_template_ids, ['name'], 10),
|
||||
'product.product': (lambda self, cr, uid, ids, c=None: ids, [], 10),
|
||||
}, select=True),
|
||||
'variant_ids': fields.many2many('product.attribute.value', id1='prod_id', id2='att_id', string='Variants', readonly=True),
|
||||
'attribute_value_ids': fields.many2many('product.attribute.value', id1='prod_id', id2='att_id', string='Variants', readonly=True),
|
||||
|
||||
# image: all image fields are base64 encoded and PIL-supported
|
||||
'image_variant': fields.binary("Variant Image",
|
||||
|
@ -967,7 +967,7 @@ class product_product(osv.osv):
|
|||
|
||||
result = []
|
||||
for product in self.browse(cr, SUPERUSER_ID, ids, context=context):
|
||||
variant = ", ".join([v.name for v in product.variant_ids])
|
||||
variant = ", ".join([v.name for v in product.attribute_value_ids])
|
||||
name = variant and "%s (%s)" % (product.name, variant) or product.name
|
||||
sellers = []
|
||||
if partner_id:
|
||||
|
|
|
@ -175,22 +175,22 @@ HDD SH-1</field>
|
|||
Dual-core A5 with quad-core graphics
|
||||
FaceTime HD Camera, 1.2 MP Photos</field>
|
||||
<field name="default_code">A2323</field>
|
||||
<field name="variant_ids" eval="[(6,0,[ref('product.product_attribute_value_1'), ref('product.product_attribute_value_3')])]"/>
|
||||
<field name="attribute_value_ids" eval="[(6,0,[ref('product.product_attribute_value_1'), ref('product.product_attribute_value_3')])]"/>
|
||||
</record>
|
||||
<record id="product_product_4b" model="product.product">
|
||||
<field name="default_code">A2324</field>
|
||||
<field name="product_tmpl_id" ref="product_product_4_product_template"/>
|
||||
<field name="variant_ids" eval="[(6,0,[ref('product.product_attribute_value_1'), ref('product.product_attribute_value_4')])]"/>
|
||||
<field name="attribute_value_ids" eval="[(6,0,[ref('product.product_attribute_value_1'), ref('product.product_attribute_value_4')])]"/>
|
||||
</record>
|
||||
<record id="product_product_4c" model="product.product">
|
||||
<field name="default_code">A2325</field>
|
||||
<field name="product_tmpl_id" ref="product_product_4_product_template"/>
|
||||
<field name="variant_ids" eval="[(6,0,[ref('product.product_attribute_value_2'), ref('product.product_attribute_value_3')])]"/>
|
||||
<field name="attribute_value_ids" eval="[(6,0,[ref('product.product_attribute_value_2'), ref('product.product_attribute_value_3')])]"/>
|
||||
</record>
|
||||
<record id="product_product_4d" model="product.product">
|
||||
<field name="default_code">A2326</field>
|
||||
<field name="product_tmpl_id" ref="product_product_4_product_template"/>
|
||||
<field name="variant_ids" eval="[(6,0,[ref('product.product_attribute_value_2'), ref('product.product_attribute_value_4')])]"/>
|
||||
<field name="attribute_value_ids" eval="[(6,0,[ref('product.product_attribute_value_2'), ref('product.product_attribute_value_4')])]"/>
|
||||
</record>
|
||||
|
||||
<record id="product_attribute_line_1" model="product.attribute.line">
|
||||
|
@ -210,7 +210,7 @@ FaceTime HD Camera, 1.2 MP Photos</field>
|
|||
</record>
|
||||
|
||||
<record id="product_product_4_product_template" model="product.template">
|
||||
<field name="variant_ids" eval="[(6,0,[ref('product.product_attribute_line_1'), ref('product.product_attribute_line_2'), ref('product.product_attribute_line_3')])]"/>
|
||||
<field name="attribute_line_ids" eval="[(6,0,[ref('product.product_attribute_line_1'), ref('product.product_attribute_line_2'), ref('product.product_attribute_line_3')])]"/>
|
||||
</record>
|
||||
|
||||
<record id="product_attribute_price_1" model="product.attribute.price">
|
||||
|
@ -301,12 +301,12 @@ FaceTime HD Camera, 1.2 MP Photos</field>
|
|||
<field name="uom_id" ref="product_uom_unit"/>
|
||||
<field name="uom_po_id" ref="product_uom_unit"/>
|
||||
<field name="default_code">A6678</field>
|
||||
<field name="variant_ids" eval="[(6,0,[ref('product.product_attribute_value_1')])]"/>
|
||||
<field name="attribute_value_ids" eval="[(6,0,[ref('product.product_attribute_value_1')])]"/>
|
||||
</record>
|
||||
<record id="product_product_11b" model="product.product">
|
||||
<field name="default_code">A6679</field>
|
||||
<field name="product_tmpl_id" ref="product_product_11_product_template"/>
|
||||
<field name="variant_ids" eval="[(6,0,[ref('product.product_attribute_value_2')])]"/>
|
||||
<field name="attribute_value_ids" eval="[(6,0,[ref('product.product_attribute_value_2')])]"/>
|
||||
</record>
|
||||
|
||||
<record id="product_attribute_line_4" model="product.attribute.line">
|
||||
|
@ -316,7 +316,7 @@ FaceTime HD Camera, 1.2 MP Photos</field>
|
|||
</record>
|
||||
|
||||
<record id="product_product_11_product_template" model="product.template">
|
||||
<field name="variant_ids" eval="[(6,0,[ref('product.product_attribute_line_4')])]"/>
|
||||
<field name="attribute_line_ids" eval="[(6,0,[ref('product.product_attribute_line_4')])]"/>
|
||||
</record>
|
||||
|
||||
<record id="product_attribute_price_2" model="product.attribute.price">
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<filter string="Consumable" name="consumable" icon="terp-accessories-archiver" domain="[('type','=','consu')]" help="Consumable products"/>
|
||||
<separator/>
|
||||
<filter string="Can be Sold" name="filter_to_sell" icon="terp-accessories-archiver-minus" domain="[('sale_ok','=',1)]"/>
|
||||
<field string="Product Variant" name="product_variant_ids" filter_domain="['|', ('product_variant_ids.name','ilike',self), ('product_variant_ids.variant_ids.name','ilike',self)]"/>
|
||||
<field string="Product Variant" name="product_variant_ids" filter_domain="['|', ('product_variant_ids.name','ilike',self), ('product_variant_ids.attribute_value_ids.name','ilike',self)]"/>
|
||||
<field name="company_id"/>
|
||||
<field name="pricelist_id" widget="selection" context="{'pricelist': self}" filter_domain="[]" groups="product.group_sale_pricelist"/> <!-- Keep widget=selection on this field to pass numeric `self` value, which is not the case for regular m2o widgets! -->
|
||||
<group expand='0' string='Group by...'>
|
||||
|
@ -129,7 +129,7 @@
|
|||
<field name="description_sale" placeholder="note to be displayed on quotations..."/>
|
||||
</page>
|
||||
<page name="variants" string="Variants">
|
||||
<field name="variant_ids" widget="one2many_list">
|
||||
<field name="attribute_line_ids" widget="one2many_list">
|
||||
<tree string="Variants" editable="bottom">
|
||||
<field name="attribute_id"/>
|
||||
<field name="value_ids" widget="many2many_tags" domain="[('attribute_id', '=', attribute_id)]" context="{'default_attribute_id': attribute_id}"/>
|
||||
|
@ -226,7 +226,7 @@
|
|||
<field name="name" string="Product" filter_domain="['|',('default_code','ilike',self),('name','ilike',self)]"/>
|
||||
</field>
|
||||
<field name="product_variant_ids" position="replace">
|
||||
<field name="variant_ids"/>
|
||||
<field name="attribute_value_ids"/>
|
||||
</field>
|
||||
<field name="name" position="after">
|
||||
<field name="product_tmpl_id" string="Product Template"/>
|
||||
|
@ -246,7 +246,7 @@
|
|||
<tree string="Product Variants">
|
||||
<field name="default_code"/>
|
||||
<field name="name"/>
|
||||
<field name="variant_ids" widget="many2many_tags"/>
|
||||
<field name="attribute_value_ids" widget="many2many_tags"/>
|
||||
<field name="lst_price"/>
|
||||
<field name="price" invisible="not context.get('pricelist',False)"/>
|
||||
<field name="uom_id"/>
|
||||
|
@ -273,7 +273,7 @@
|
|||
<field name="product_tmpl_id" class="oe_inline" readonly="1" attrs="{'invisible': [('id', '=', False)]}"/>
|
||||
</field>
|
||||
<xpath expr="//div[@class='oe_title']" position="inside">
|
||||
<field name="variant_ids" widget="many2many_tags"/>
|
||||
<field name="attribute_value_ids" widget="many2many_tags"/>
|
||||
</xpath>
|
||||
<page name="variants" position="replace">
|
||||
</page>
|
||||
|
@ -287,7 +287,7 @@
|
|||
<field name="inherit_id" ref="product.product_template_kanban_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="name" position="after">
|
||||
<field name="variant_ids"/>
|
||||
<field name="attribute_value_ids"/>
|
||||
</field>
|
||||
<xpath expr="//img[@class='oe_kanban_image']" position="replace">
|
||||
<img t-att-src="kanban_image('product.product', 'image_small', record.id.value)" class="oe_kanban_image"/>
|
||||
|
@ -339,7 +339,7 @@
|
|||
<field name="model">product.template</field>
|
||||
<field name="inherit_id" ref="product.product_template_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="variant_ids" position="before">
|
||||
<field name="attribute_line_ids" position="before">
|
||||
<div class="oe_right">
|
||||
<button class="oe_inline oe_stat_button" string="Variant Prices" name="%(product.variants_template_action)d" type="action" icon="fa-strikethrough"/>
|
||||
<button class="oe_inline oe_stat_button" name="%(product.product_variant_action)d" type="action" icon="fa-sitemap">
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<lot-line type="fields" name="id">
|
||||
<code type="field" name="code"/>
|
||||
<product type="field" name="name"/>
|
||||
<variant type="field" name="variant_ids"/>
|
||||
<variant type="field" name="attribute_value_ids"/>
|
||||
<price type="field" name="list_price"/>
|
||||
<ean13 type="field" name="ean13"/>
|
||||
<currency type="field" name="company_id.currency_id.name"/>
|
||||
|
|
|
@ -136,11 +136,11 @@ class website_sale(http.Controller):
|
|||
elif value[0] == attrib:
|
||||
ids.append(value[1])
|
||||
else:
|
||||
domain += [('variant_ids.value_ids', 'in', ids)]
|
||||
domain += [('attribute_line_ids.value_ids', 'in', ids)]
|
||||
attrib = value[0]
|
||||
ids = [value[1]]
|
||||
if attrib:
|
||||
domain += [('variant_ids.value_ids', 'in', ids)]
|
||||
domain += [('attribute_line_ids.value_ids', 'in', ids)]
|
||||
|
||||
attrib_set = set([v[1] for v in attrib_values])
|
||||
keep = QueryURL('/shop', category=category and int(category), search=search, attrib=attrib_set)
|
||||
|
|
|
@ -115,7 +115,7 @@ class product_template(osv.Model):
|
|||
result = dict.fromkeys(ids, [])
|
||||
for obj in self.browse(cr, uid, ids, context=context):
|
||||
for p in obj.product_variant_ids:
|
||||
result[obj.id].append([p.id, map(int,p.variant_ids), p.price])
|
||||
result[obj.id].append([p.id, map(int,p.attribute_value_ids), p.price])
|
||||
return result
|
||||
|
||||
_columns = {
|
||||
|
|
|
@ -64,7 +64,7 @@ $(document).ready(function () {
|
|||
});
|
||||
|
||||
var $form_var = $('form.js_add_cart_variants');
|
||||
var variant_ids = $form_var.data("variant_ids");
|
||||
var variant_ids = $form_var.data("attribute_value_ids");
|
||||
$form_var.on('change', 'input, select', function (ev) {
|
||||
var values = [];
|
||||
$form_var.find("label").removeClass("text-muted css_not_available");
|
||||
|
|
|
@ -432,10 +432,10 @@
|
|||
|
||||
<template id="product_variants" inherit_id="website_sale.product" optional="enabled" name="Product Variants">
|
||||
<xpath expr="//form[@action='/shop/cart/update']" position="replace">
|
||||
<form action="/shop/cart/update" class="js_add_cart_variants" method="POST" t-att-data-variant_ids="product.available_variant_ids">
|
||||
<form action="/shop/cart/update" class="js_add_cart_variants" method="POST" t-att-data-attribute_value_ids="product.available_variant_ids">
|
||||
<input type="hidden" name="product_id" t-att-value="int(product.product_variant_ids[0]) if len(product.product_variant_ids) == 1 else '0'"/>
|
||||
<ul class="nav nav-pills nav-stacked">
|
||||
<t t-foreach="product.variant_ids" t-as="variant_id">
|
||||
<t t-foreach="product.attribute_line_ids" t-as="variant_id">
|
||||
<li t-if="len(variant_id.value_ids) > 1">
|
||||
|
||||
<strong t-field="variant_id.attribute_id.name"/>
|
||||
|
@ -529,9 +529,9 @@
|
|||
|
||||
<template id="product_attributes" inherit_id="website_sale.product" optional="enabled" name="Product attributes">
|
||||
<xpath expr="//p[@t-field='product.description_sale']" position="after">
|
||||
<hr t-if="product.variant_ids"/>
|
||||
<hr t-if="product.attribute_line_ids"/>
|
||||
<p class="text-muted">
|
||||
<t t-foreach="product.variant_ids" t-as="variant_id">
|
||||
<t t-foreach="product.attribute_line_ids" t-as="variant_id">
|
||||
<t t-set="inc" t-value="0"/>
|
||||
<span t-field="variant_id.attribute_id"/>:
|
||||
<t t-foreach="variant_id.value_ids" t-as="value_id"><t t-if="inc">,</t> <span t-field="value_id.name"/><t t-set="inc" t-value="inc+1"/></t>
|
||||
|
|
Loading…
Reference in New Issue