[IMP] product: cleaned form in create mode. Moreover generally

changing the template is not possible anymore; create a new tempalte or a new
variant instead. When creating a new product, you will always create a new
template.
Added the link to the template from the product form view.
Cleaned some code (code move).

bzr revid: tde@openerp.com-20140122170218-6j2sixoxvvbbxvhd
This commit is contained in:
Thibault Delavallée 2014-01-22 18:02:18 +01:00
parent 363f8561af
commit 055932fc6a
2 changed files with 34 additions and 38 deletions

View File

@ -23,12 +23,10 @@ import math
import re
from _common import rounding
from lxml import etree
from openerp.osv.orm import setup_modifiers
from openerp import SUPERUSER_ID
from openerp import tools
from openerp.osv import osv, fields
from openerp.osv import osv, orm, fields
from openerp.tools.translate import _
import openerp.addons.decimal_precision as dp
@ -519,6 +517,13 @@ class product_template(osv.osv):
class product_product(osv.osv):
_name = "product.product"
_description = "Product"
_table = "product_product"
_inherits = {'product.template': 'product_tmpl_id'}
_inherit = ['mail.thread']
_order = 'default_code,name_template'
def view_header_get(self, cr, uid, view_id, view_type, context=None):
if context is None:
context = {}
@ -648,7 +653,6 @@ class product_product(osv.osv):
}
return result
def _get_name_template_ids(self, cr, uid, ids, context=None):
result = set()
template_ids = self.pool.get('product.product').search(cr, uid, [('product_tmpl_id', 'in', ids)])
@ -656,19 +660,6 @@ class product_product(osv.osv):
result.add(el)
return list(result)
_defaults = {
'active': lambda *a: 1,
'price_extra': lambda *a: 0.0,
'price_margin': lambda *a: 1.0,
'color': 0,
}
_name = "product.product"
_description = "Product"
_table = "product_product"
_inherits = {'product.template': 'product_tmpl_id'}
_inherit = ['mail.thread']
_order = 'default_code,name_template'
_columns = {
'qty_available': fields.function(_product_qty_available, type='float', string='Quantity On Hand'),
'virtual_available': fields.function(_product_virtual_available, type='float', string='Quantity Available'),
@ -692,7 +683,6 @@ class product_product(osv.osv):
'name_template': fields.related('product_tmpl_id', 'name', string="Template Name", type='char', size=128, store={
'product.template': (_get_name_template_ids, ['name'], 10),
'product.product': (lambda self, cr, uid, ids, c=None: ids, [], 10),
}, select=True),
'color': fields.integer('Color Index'),
'seller_info_id': fields.function(_calc_seller, type='many2one', relation="product.supplierinfo", string="Supplier Info", multi="seller_info"),
@ -701,6 +691,14 @@ class product_product(osv.osv):
'seller_id': fields.function(_calc_seller, type='many2one', relation="res.partner", string='Main Supplier', help="Main Supplier who has highest priority in Supplier List.", multi="seller_info"),
}
_defaults = {
'active': lambda *a: 1,
'price_extra': lambda *a: 0.0,
'price_margin': lambda *a: 1.0,
'color': 0,
'is_only_child': True,
}
def unlink(self, cr, uid, ids, context=None):
unlink_ids = []
unlink_product_tmpl_ids = []
@ -726,22 +724,11 @@ class product_product(osv.osv):
return {'value': {'uom_po_id': uom_id}}
return False
def onchange_product_tmpl_id(self, cr, uid, ids, template_id, context=None):
res = {}
if template_id:
template = self.pool.get('product.template').browse(cr, uid, template_id, context=context)
res['value'] = {
'name': template.name,
'lst_price': template.list_price,
}
return res
def _check_ean_key(self, cr, uid, ids, context=None):
for product in self.read(cr, uid, ids, ['ean13'], context=context):
res = check_ean(product['ean13'])
return res
_constraints = [(_check_ean_key, 'You provided an invalid "EAN13 Barcode" reference. You may use the "Internal Reference" field instead.', ['ean13'])]
def on_order(self, cr, uid, ids, orderline, quantity):
@ -896,6 +883,15 @@ class product_product(osv.osv):
args.append((('categ_id', 'child_of', context['search_default_categ_id'])))
return super(product_product, self).search(cr, uid, args, offset=offset, limit=limit, order=order, context=context, count=count)
def open_product_template(self, cr, uid, ids, context=None):
""" Utility method used to add an "Open Template" button in product views """
product = self.browse(cr, uid, ids[0], context=context)
return {'type': 'ir.actions.act_window',
'res_model': 'product.template',
'view_mode': 'form',
'res_id': product.product_tmpl_id.id,
'target': 'new'}
class product_packaging(osv.osv):
_name = "product.packaging"

View File

@ -60,8 +60,9 @@
<field name="arch" type="xml">
<form string="Product" version="7.0">
<sheet>
<field name="is_only_child" invisible="0"/>
<field name="image_medium" widget="image" class="oe_avatar oe_left"/>
<field name="is_only_child" invisible="1"/>
<field name="image_medium" widget="image" class="oe_avatar oe_left"
attrs="{'readonly': [('is_only_child', '=', False)]}"/>
<div class="oe_title">
<div class="oe_edit_only">
<label for="name" name='label_name' string="Product Name"
@ -73,17 +74,16 @@
<field name="name" class="oe_inline"
attrs="{'required': [('is_only_child', '=', True)],
'invisible': [('is_only_child', '=', False)]}"/>
<field name="product_tmpl_id" class="oe_inline"
attrs="{'required': [('is_only_child', '=', False)],
'invisible': [('is_only_child', '=', True)]}"
on_change="onchange_product_tmpl_id(product_tmpl_id)"/>
<field name="product_tmpl_id" class="oe_inline" readonly="1" required="0"
attrs="{'invisible': [('is_only_child', '=', True)]}"/>
<span attrs="{'invisible':[('variants','=',False)]}" groups="product.group_product_variant"> - </span>
<field name="variants" placeholder="Variant Name"
groups="product.group_product_variant" class="oe_inline"/>
</h1>
<span attrs="{'invisible': [('is_only_child', '=', True)]}">
Manage some of the product attributes on the
<a>template form</a>
<p>Generic product settings are managed on
<button name="open_product_template" type="object" string="the template" class="oe_link"/>
</p>
</span>
<label for="categ_id" class="oe_edit_only"/>
<h2><field name="categ_id" attrs="{'readonly': [('is_only_child', '=', False)]}"/></h2>