← Back to team overview

openerp-community team mailing list archive

[Merge] lp:~akretion-team/openerp-product-attributes/no-stock-dep into lp:openerp-product-attributes

 

Raphaël Valyi - http://www.akretion.com has proposed merging lp:~akretion-team/openerp-product-attributes/no-stock-dep into lp:openerp-product-attributes.

Requested reviews:
  Product Core Editors (product-core-editors)

For more details, see:
https://code.launchpad.net/~akretion-team/openerp-product-attributes/no-stock-dep/+merge/147797

Hello,

the commits message says it all:
[MIGR][openerp-product-attributes] removed the stock module dependency while keeping exactly the same features

HOWEVER, before merging, you are advised to first merge this branch:
https://code.launchpad.net/~akretion-team/openerp-product-attributes/product-attributes-port70-codesprint
That I assumed merged already (I merged it locally) before doing my change.

Regards.
-- 
https://code.launchpad.net/~akretion-team/openerp-product-attributes/no-stock-dep/+merge/147797
Your team OpenERP Community is subscribed to branch lp:openerp-product-attributes.
=== modified file 'product_brand/__openerp__.py'
--- product_brand/__openerp__.py	2013-01-21 06:49:06 +0000
+++ product_brand/__openerp__.py	2013-02-11 23:00:37 +0000
@@ -26,7 +26,7 @@
 ###################################################################################
 {
     'name': 'Product Brand Manager',
-    'version': '6.1.0',
+    'version': '0.1',
     'category': 'Product',
     'description': """This module allows your user to easily manage product brand. You can define brand, attach it a logo and a description.
     It also allows to attach a partner to a brand.

=== modified file 'product_custom_attributes/__openerp__.py'
--- product_custom_attributes/__openerp__.py	2013-01-21 06:49:06 +0000
+++ product_custom_attributes/__openerp__.py	2013-02-11 23:00:37 +0000
@@ -23,28 +23,25 @@
 
 {
     'name': 'product_custom_attributes',
-    'version': '6.1.0',
+    'version': '0.1',
     'category': 'Generic Modules/Others',
     'license': 'AGPL-3',
-    'description': """
-    This module adds the posibility to easily create custom fields on products.
-    Each product can be linked to an attribute set (such as camera, fridge...)
-    and each attribute set has custom fields (for example you don't need the same field for a frigde and a camera)
-
-    Need to install the lib unicode2ascii, http://github.com/akretion/unicode2ascii.git
+    'description': """This module adds the possibility to easily create custom fields on products.
+Each product can be linked to an attribute set (like camera, fridge...).
+Each attribute has custom fields (for example, you don't need the same field for a frigde and a camera).
     """,
     'author': 'Akretion',
     'website': 'http://www.akretion.com/',
-    'depends': ['product','stock'],
+    'depends': ['product'],
     'init_xml': [],
     'update_xml': [
-           'ir_model_view.xml',
+           'security/ir.model.access.csv',
            'product_attribute_view.xml',
            'product_view.xml',
            'wizard/open_product_by_attribute_set.xml',
     ],
     'demo_xml': [],
-    'installable': False,
+    'installable': True,
     'active': False,
 }
 

=== removed file 'product_custom_attributes/ir_model_view.xml'
--- product_custom_attributes/ir_model_view.xml	2012-08-03 14:33:51 +0000
+++ product_custom_attributes/ir_model_view.xml	1970-01-01 00:00:00 +0000
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  product_custom_attributs for OpenERP
-  Copyright (C) 2011 Akretion Benoît GUILLOT <benoit.guillot@xxxxxxxxxxxx>
-  The licence is in the file __openerp__.py
--->
-
-<openerp>
-    <data>
-    
-        <!-- INHERITED VIEW FOR THE OBJECT : ir_model_fields -->
-
-<!--        <record id="ir_model_fields_view_form" model="ir.ui.view">-->
-<!--            <field name="name">product_custom_attributs.ir_model_fields.view_form</field>-->
-<!--            <field name="model">ir.model.fields</field>-->
-<!--            <field name="inherit_id" ref="module_name_to_inherit.view_id" />-->
-<!--            <field eval="16" name="priority"/>-->
-<!--            <field name="type">form</field>-->
-<!--            <field name="arch" type="xml">-->
-<!--                <data>-->
-<!--                    <field name="field_reference" position="after">-->
-<!--                    </field>-->
-<!--                </data>-->
-<!--            </field>-->
-<!--        </record>-->
-
-<!--        <record id="ir_model_fields_view_tree" model="ir.ui.view">-->
-<!--            <field name="name">product_custom_attributs.ir_model_fields.view_tree</field>-->
-<!--            <field name="model">ir.model.fields</field>-->
-<!--            <field name="inherit_id" ref="module_name_to_inherit.view_id" />-->
-<!--            <field eval="16" name="priority"/>-->
-<!--            <field name="type">tree</field>-->
-<!--            <field name="arch" type="xml">-->
-<!--                <data>-->
-<!--                    <field name="field_reference" position="after">-->
-<!--                    </field>-->
-<!--                </data>-->
-<!--            </field>-->
-<!--        </record>-->
-<!--    -->
-
-
-
-
-    </data>
-</openerp>

=== modified file 'product_custom_attributes/product.py'
--- product_custom_attributes/product.py	2012-11-21 11:48:51 +0000
+++ product_custom_attributes/product.py	2013-02-11 23:00:37 +0000
@@ -43,10 +43,10 @@
     }
 
     def _fix_size_bug(self, cr, uid, result, context=None):
-	#When created a field text dynamicaly, its size is limited to 64 in the view.
-	#The bug is fixed but not merged
-	#https://code.launchpad.net/~openerp-dev/openerp-web/6.1-opw-579462-cpa/+merge/128003
-	#TO remove when the fix will be merged
+    #When created a field text dynamicaly, its size is limited to 64 in the view.
+    #The bug is fixed but not merged
+    #https://code.launchpad.net/~openerp-dev/openerp-web/6.1-opw-579462-cpa/+merge/128003
+    #TO remove when the fix will be merged
         for field in result['fields']:
             if result['fields'][field]['type'] == 'text':
                 if 'size' in result['fields'][field]: del result['fields'][field]['size']
@@ -103,8 +103,8 @@
         return notebook, toupdate_fields
 
     def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
-        if context==None:
-	    context={}
+        if context is None:
+            context = {}
         result = super(product_product, self).fields_view_get(cr, uid, view_id,view_type,context,toolbar=toolbar, submenu=submenu)
         if view_type == 'form' and context.get('set_id'):
             eview = etree.fromstring(result['arch'])
@@ -121,7 +121,7 @@
             elif context.get('open_product_by_attribute_set'):
                 main_page = etree.Element('page', string=_('Custom Attributes'))
                 main_page.append(attributes_notebook)
-                info_page = eview.xpath("//page[@string='Information']")[0]
+                info_page = eview.xpath("//page[@string='%s']" % (_('Information'),))[0]
                 info_page.addnext(main_page)
             result['arch'] = etree.tostring(eview, pretty_print=True)
             result = self._fix_size_bug(cr, uid, result, context=context)

=== modified file 'product_custom_attributes/product_attribute.py'
--- product_custom_attributes/product_attribute.py	2012-11-21 11:48:51 +0000
+++ product_custom_attributes/product_attribute.py	2013-02-11 23:00:37 +0000
@@ -60,7 +60,7 @@
         'based_on': fields.selection([('product_template','Product Template'),
                                       ('product_product','Product Variant')],
                                      'Based on', required=True),
-        'option_ids': fields.one2many('attribute.option', 'attribute_id', 'Attribute Option'),
+        'option_ids': fields.one2many('attribute.option', 'attribute_id', 'Attribute Options'),
         'create_date': fields.datetime('Created date', readonly=True),
         }
 
@@ -91,7 +91,7 @@
         if field_description:
             name = unidecode('x_%s' % field_description.replace(' ', '_').lower())
         return  {'value' : {'name' : name}}
-    
+
     def onchange_name(self, cr, uid, ids, name, context=None):
         if not name.startswith('x_'):
             name = 'x_%s' % name
@@ -102,14 +102,23 @@
     _description = "Attribute Location"
     _order="sequence"
     _inherits = {'product.attribute': 'attribute_id'}
+
+
+    def _get_attribute_loc_from_group(self, cr, uid, ids, context=None):
+        return self.pool.get('attribute.location').search(cr, uid, [('attribute_group_id', 'in', ids)], context=context)
+
     _columns = {
         'attribute_id': fields.many2one('product.attribute', 'Product Attribute', required=True, ondelete="cascade"),
-        'attribute_set_id': fields.related('attribute_group_id', 'attribute_set_id', type='many2one', relation='attribute.set', string='Attribute Set', store=True, readonly=True),
+        'attribute_set_id': fields.related('attribute_group_id', 'attribute_set_id', type='many2one', relation='attribute.set', string='Attribute Set', readonly=True,
+store={
+            'attribute.group': (_get_attribute_loc_from_group, ['attribute_set_id'], 10),
+        }),
         'attribute_group_id': fields.many2one('attribute.group', 'Attribute Group', required=True),
         'sequence': fields.integer('Sequence'),
         }
 
 
+
 class attribute_group(Model):
     _name= "attribute.group"
     _description = "Attribute Group"

=== modified file 'product_custom_attributes/product_attribute_view.xml'
--- product_custom_attributes/product_attribute_view.xml	2012-10-15 15:28:34 +0000
+++ product_custom_attributes/product_attribute_view.xml	2013-02-11 23:00:37 +0000
@@ -1,31 +1,29 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
   product_custom_attributes for OpenERP
-  Copyright (C) 2011 Akretion Benoît GUILLOT <benoit.guillot@xxxxxxxxxxxx>
+  Copyright (C) 2011-2013 Akretion (http://www.akretion.com/)
+  @author: Benoît GUILLOT <benoit.guillot@xxxxxxxxxxxx>
   The licence is in the file __openerp__.py
 -->
 
 <openerp>
     <data>
 
-        <!-- CREATED VIEW FOR THE OBJECT : product_attribute -->
-
         <menuitem
-            id="menu_attribute_in_config_stock_product" name="Attributes"
-            parent="stock.menu_product_in_config_stock" sequence="20"/>
+            id="menu_attribute_in_config_product" name="Attributes"
+            parent="product.prod_config_main" sequence="20"/>
 
         <record id="attribute_set_form_view" model="ir.ui.view">
             <field name="name">attribute.set.form</field>
             <field name="model">attribute.set</field>
-            <field name="type">form</field>
             <field name="arch" type="xml">
-                <form string="Attribute Set" col="4">
-                    <field name="name" colspan="1"/>
-                    <field name="attribute_group_ids" colspan="4" nolabel="1" >
+                <form string="Attribute Set">
+                    <field name="name" colspan="4"/>
+                    <field name="attribute_group_ids" colspan="4" >
                         <form string="Attribute Groups">
-                            <field name="name" colspan="1"/>
-                            <field name="sequence" colspan="1"/>
-                            <field name="attribute_ids" colspan="6" nolabel="1">
+                            <field name="name" />
+                            <field name="sequence" />
+                            <field name="attribute_ids" colspan="4">
                                 <form string="Attribute Location">
                                     <field name="attribute_id" />
                                     <field name="sequence" />
@@ -36,7 +34,7 @@
                             </field>
                         </form>
                         <tree string="Attribute Groups">
-                            <field name="name" colspan="1"/>
+                            <field name="name" />
                         </tree>
                     </field>
                 </form>
@@ -46,13 +44,12 @@
         <record id="attribute_group_form_view" model="ir.ui.view">
             <field name="name">attribute.group.form</field>
             <field name="model">attribute.group</field>
-            <field name="type">form</field>
             <field name="arch" type="xml">
-                <form string="Attribute Group" col="6">
-                    <field name="name" colspan="1"/>
-                    <field name="sequence" colspan="1"/>
-                    <field name="attribute_set_id" colspan="1"/>
-                    <field name="attribute_ids" colspan="6" nolabel="1">
+                <form string="Attribute Group">
+                    <field name="name" />
+                    <field name="sequence" />
+                    <field name="attribute_set_id" />
+                    <field name="attribute_ids" colspan="4" nolabel="1">
                         <form string="Attribute Location">
                             <field name="attribute_id" />
                             <field name="sequence" />
@@ -68,7 +65,6 @@
         <record id="attribute_location_form_view" model="ir.ui.view">
             <field name="name">attribute.location.form</field>
             <field name="model">attribute.location</field>
-            <field name="type">form</field>
             <field name="arch" type="xml">
                 <form string="Attribute Location">
                     <field name="attribute_id" />
@@ -82,20 +78,20 @@
         <record id="product_attribute_form_view" model="ir.ui.view">
             <field name="name">product.attribute.form</field>
             <field name="model">product.attribute</field>
-            <field name="type">form</field>
             <field name="arch" type="xml">
-                <form string="Product Attribute" col="8">
-                    <field name="field_description" colspan="1" on_change="onchange_field_description(field_description, context)"/>
-                    <field name="name" colspan="1" attrs="{'readonly':[('create_date', '!=', False)]}" on_change="onchange_name(name, context)"/>
-                    <field name="attribute_type" colspan="1"/>
-                    <field name="based_on" colspan="1"/>
-                    <field name="serialized" colspan="1"/>
-                    <field name="size" colspan="1" attrs="{'invisible':[('attribute_type', '!=', 'char')]}"/>
-                    <field name="translate" colspan="1" attrs="{'invisible':[('attribute_type', 'not in', ('char', 'text'))]}"/>
-                    <field name="option_ids" colspan="8" attrs="{'invisible':[('attribute_type', 'not in', ['select', 'multiselect'])]}" widget="one2many_list" nolabel="1">
+                <form string="Product Attribute">
+                    <field name="field_description" on_change="onchange_field_description(field_description, context)"/>
+                    <field name="name" attrs="{'readonly':[('create_date', '!=', False)]}" on_change="onchange_name(name, context)"/>
+                    <field name="attribute_type" />
+                    <field name="based_on" />
+                    <field name="serialized" />
+                    <field name="size" attrs="{'invisible':[('attribute_type', '!=', 'char')]}"/>
+                    <field name="translate" attrs="{'invisible':[('attribute_type', 'not in', ('char', 'text'))]}"/>
+                    <newline />
+                    <field name="option_ids" colspan="4" attrs="{'invisible':[('attribute_type', 'not in', ['select', 'multiselect'])]}" widget="one2many_list" nolabel="1">
                         <tree string="Attribute Options" editable="top" >
-                            <field name="sequence" colspan="1"/>
-                            <field name="name" colspan="7"/>
+                            <field name="sequence" />
+                            <field name="name" />
                         </tree>
                     </field>
                     <field name="create_date" invisible="1"/>
@@ -106,12 +102,11 @@
         <record id="attribute_option_form_view" model="ir.ui.view">
             <field name="name">attribute.option.form</field>
             <field name="model">attribute.option</field>
-            <field name="type">form</field>
             <field name="arch" type="xml">
                 <form string="Attribute Option" col="6">
-                    <field name="name" colspan="1"/>
-                    <field name="sequence" colspan="1"/>
-                    <field name="attribute_id" colspan="1"/>
+                    <field name="name" colspan="2"/>
+                    <field name="sequence" colspan="2"/>
+                    <field name="attribute_id" colspan="2"/>
                 </form>
             </field>
         </record>
@@ -119,7 +114,6 @@
         <record id="attribute_set_tree_view" model="ir.ui.view">
             <field name="name">attribute.set.tree</field>
             <field name="model">attribute.set</field>
-            <field name="type">tree</field>
             <field name="arch" type="xml">
                 <tree string="Attribute Set" >
                     <field name="name" />
@@ -130,7 +124,6 @@
         <record id="attribute_group_tree_view" model="ir.ui.view">
             <field name="name">attribute.group.tree</field>
             <field name="model">attribute.group</field>
-            <field name="type">tree</field>
             <field name="arch" type="xml">
                 <tree string="Attribute Group">
                     <field name="name" />
@@ -143,7 +136,6 @@
         <record id="attribute_location_tree_view" model="ir.ui.view">
             <field name="name">attribute.location.tree</field>
             <field name="model">attribute.location</field>
-            <field name="type">tree</field>
             <field name="arch" type="xml">
                 <tree string="Attribute Location">
                     <field name="attribute_id" />
@@ -157,7 +149,6 @@
         <record id="product_attribute_tree_view" model="ir.ui.view">
             <field name="name">product.attribute.tree</field>
             <field name="model">product.attribute</field>
-            <field name="type">tree</field>
             <field name="arch" type="xml">
                 <tree string="Product Attribute">
                     <field name="name" />
@@ -169,7 +160,6 @@
         <record id="prio_attribute_option_tree_view" model="ir.ui.view">
             <field name="name">attribute.option.tree.prio</field>
             <field name="model">attribute.option</field>
-            <field name="type">tree</field>
             <field eval="1" name="priority"/>
             <field name="arch" type="xml">
                 <tree string="Attribute Option">
@@ -181,7 +171,6 @@
         <record id="attribute_option_tree_view" model="ir.ui.view">
             <field name="name">attribute.option.tree</field>
             <field name="model">attribute.option</field>
-            <field name="type">tree</field>
             <field eval="20" name="priority"/>
             <field name="arch" type="xml">
                 <tree string="Attribute Option">
@@ -195,10 +184,9 @@
         <record id="view_attribute_set_search" model="ir.ui.view">
             <field name="name">attribute.set.list</field>
             <field name="model">attribute.set</field>
-            <field name="type">search</field>
             <field name="arch" type="xml">
                 <search string="Search Attribute Sets">
-                    <field name="name" select="1"/>
+                    <field name="name"/>
                </search>
             </field>
         </record>
@@ -206,10 +194,9 @@
         <record id="view_attribute_group_search" model="ir.ui.view">
             <field name="name">attribute.group.list</field>
             <field name="model">attribute.group</field>
-            <field name="type">search</field>
             <field name="arch" type="xml">
                 <search string="Search Attribute Groups">
-                    <field name="name" select="1"/>
+                    <field name="name"/>
                     <field name="attribute_set_id"/>
                </search>
             </field>
@@ -218,10 +205,9 @@
         <record id="view_attribute_location_search" model="ir.ui.view">
             <field name="name">attribute.location.list</field>
             <field name="model">attribute.location</field>
-            <field name="type">search</field>
             <field name="arch" type="xml">
                 <search string="Search Attribute Locations">
-                    <field name="name" select="1"/>
+                    <field name="name"/>
                     <field name="attribute_set_id"/>
                     <field name="attribute_group_id"/>
                </search>
@@ -231,10 +217,9 @@
         <record id="view_product_attribute_search" model="ir.ui.view">
             <field name="name">product.attribute.list</field>
             <field name="model">product.attribute</field>
-            <field name="type">search</field>
             <field name="arch" type="xml">
                 <search string="Search Product Attributes">
-                    <field name="name" select="1"/>
+                    <field name="name"/>
                </search>
             </field>
         </record>
@@ -242,7 +227,6 @@
         <record id="view_attribute_option_search" model="ir.ui.view">
             <field name="name">attribute.option.list</field>
             <field name="model">attribute.option</field>
-            <field name="type">search</field>
             <field name="arch" type="xml">
                 <search string="Search Attribute Options">
                     <field name="name" />
@@ -253,10 +237,9 @@
 
         <record id="attribute_set_form_action" model="ir.actions.act_window">
             <field name="name">Attribute Sets</field>
-            <field name="type">ir.actions.act_window</field>
             <field name="res_model">attribute.set</field>
             <field name="view_type">form</field>
-            <field name="view_mode">tree,form,calendar,graph</field>
+            <field name="view_mode">tree,form</field>
             <field name="search_view_id" ref="view_attribute_set_search"/>
             <field name="context">{"search_default_user_id":uid}</field>
             <field name="help"></field>
@@ -264,10 +247,9 @@
 
         <record id="attribute_group_form_action" model="ir.actions.act_window">
             <field name="name">Attribute Groups</field>
-            <field name="type">ir.actions.act_window</field>
             <field name="res_model">attribute.group</field>
             <field name="view_type">form</field>
-            <field name="view_mode">tree,form,calendar,graph</field>
+            <field name="view_mode">tree,form</field>
             <field name="search_view_id" ref="view_attribute_group_search"/>
             <field name="context">{"search_default_user_id":uid}</field>
             <field name="help"></field>
@@ -275,10 +257,9 @@
 
         <record id="attribute_location_form_action" model="ir.actions.act_window">
             <field name="name">Attribute Locations</field>
-            <field name="type">ir.actions.act_window</field>
             <field name="res_model">attribute.location</field>
             <field name="view_type">form</field>
-            <field name="view_mode">tree,form,calendar,graph</field>
+            <field name="view_mode">tree,form</field>
             <field name="search_view_id" ref="view_attribute_location_search"/>
             <field name="context">{"search_default_user_id":uid}</field>
             <field name="help"></field>
@@ -286,10 +267,9 @@
 
         <record id="product_attribute_form_action" model="ir.actions.act_window">
             <field name="name">Product Attributes</field>
-            <field name="type">ir.actions.act_window</field>
             <field name="res_model">product.attribute</field>
             <field name="view_type">form</field>
-            <field name="view_mode">tree,form,calendar,graph</field>
+            <field name="view_mode">tree,form</field>
             <field name="search_view_id" ref="view_product_attribute_search"/>
             <field name="context">{"search_default_user_id":uid}</field>
             <field name="help"></field>
@@ -297,10 +277,9 @@
 
         <record id="attribute_option_form_action" model="ir.actions.act_window">
             <field name="name">Attribute Options</field>
-            <field name="type">ir.actions.act_window</field>
             <field name="res_model">attribute.option</field>
             <field name="view_type">form</field>
-            <field name="view_mode">tree,form,calendar,graph</field>
+            <field name="view_mode">tree,form</field>
             <field name="view_id" ref="attribute_option_tree_view"/>
             <field name="search_view_id" ref="view_attribute_option_search"/>
             <field name="context">{"search_default_user_id":uid}</field>
@@ -309,19 +288,19 @@
 
          <menuitem
              action="attribute_set_form_action" id="menu_attribute_set_action"
-             parent="product_custom_attributes.menu_attribute_in_config_stock_product" sequence="1"/>
+             parent="product_custom_attributes.menu_attribute_in_config_product" sequence="1"/>
          <menuitem
              action="attribute_group_form_action" id="menu_attribute_group_action"
-             parent="product_custom_attributes.menu_attribute_in_config_stock_product" sequence="2"/>
+             parent="product_custom_attributes.menu_attribute_in_config_product" sequence="2"/>
          <menuitem
              action="attribute_location_form_action" id="menu_attribute_location_action"
-             parent="product_custom_attributes.menu_attribute_in_config_stock_product" sequence="3"/>
+             parent="product_custom_attributes.menu_attribute_in_config_product" sequence="3"/>
          <menuitem
              action="product_attribute_form_action" id="menu_product_attribute_action"
-             parent="product_custom_attributes.menu_attribute_in_config_stock_product" sequence="4"/>
+             parent="product_custom_attributes.menu_attribute_in_config_product" sequence="4"/>
          <menuitem
              action="attribute_option_form_action" id="menu_attribute_option_action"
-             parent="product_custom_attributes.menu_attribute_in_config_stock_product" sequence="5"/>
+             parent="product_custom_attributes.menu_attribute_in_config_product" sequence="5"/>
 
     </data>
 </openerp>

=== modified file 'product_custom_attributes/product_view.xml'
--- product_custom_attributes/product_view.xml	2012-08-03 14:33:51 +0000
+++ product_custom_attributes/product_view.xml	2013-02-11 23:00:37 +0000
@@ -1,47 +1,43 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
   product_custom_attributes for OpenERP
-  Copyright (C) 2011 Akretion Benoît GUILLOT <benoit.guillot@xxxxxxxxxxxx>
+  Copyright (C) 2011-2013 Akretion (http://www.akretion.com/)
+  @author: Benoît GUILLOT <benoit.guillot@xxxxxxxxxxxx>
   The licence is in the file __openerp__.py
 -->
 
 <openerp>
     <data>
 
-        <!-- CREATED VIEW FOR THE OBJECT : product_product -->
-
         <record model="ir.ui.view" id="product_product_form_view_set_button">
             <field name="name">attributes.product.normal.form</field>
             <field name="model">product.product</field>
             <field name="inherit_id" ref="product.product_normal_form_view" />
-            <field name="type">form</field>
             <field name="arch" type="xml">
-                <data>
-                    <xpath expr="/form/group/group/field[@name='name']" position="after">
-                        <group name="attribute_fields" colspan="2" col="4" >
-                            <field name="attribute_set_id" colspan="3"/>
-                            <button name="open_attributes" string="Open Attributes" type="object" icon="gtk-ok" colspan="1" attrs="{'invisible':[('attribute_set_id', '=', False)]}"/>
-                        </group>
-                    </xpath>
-                </data>
+                <xpath expr="/form/sheet/notebook/page[@string='Information']/group/group/field[@name='variants']/.." position="after">
+                    <group name="attribute_fields">
+                        <field name="attribute_set_id" />
+                        <button name="open_attributes" string="Open Attributes" type="object" icon="gtk-ok" attrs="{'invisible':[('attribute_set_id', '=', False)]}"/>
+                    </group>
+                </xpath>
             </field>
         </record>
 
         <record model="ir.ui.view" id="product_attributes_form_view">
             <field name="name">product.attributes.normal.wizard</field>
             <field name="model">product.product</field>
-            <field name="type">form</field>
             <field name="arch" type="xml">
-                <form string="Product">
-                    <group name="name_set" colspan='4' col='8'>
+                <form string="Product" version="7.0">
+                    <group name="name_set">
                         <field name="name"/>
                         <field name="attribute_set_id" />
                     </group>
                     <separator string="attributes_placeholder" colspan="4"/>
-                    <group colspan='4' col='4'>
-                        <button icon="gtk-cancel" special="cancel" string="Cancel"/>
-                        <button icon="gtk-ok" name="save_and_close_product_attributes" string="Save and Close" type="object"/>
-                    </group>
+                    <footer>
+                        <button name="save_and_close_product_attributes" string="Save and Close" type="object" class="oe_highlight"/>
+                        or
+                        <button special="cancel" string="Cancel" class="oe_link"/>
+                    </footer>
                 </form>
             </field>
         </record>

=== added directory 'product_custom_attributes/security'
=== added file 'product_custom_attributes/security/ir.model.access.csv'
--- product_custom_attributes/security/ir.model.access.csv	1970-01-01 00:00:00 +0000
+++ product_custom_attributes/security/ir.model.access.csv	2013-02-11 23:00:37 +0000
@@ -0,0 +1,16 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_product_custom_attributes_attribute_set_salemanager","product_custom_attributes_attribute_set","product_custom_attributes.model_attribute_set","base.group_sale_manager",1,1,1,1
+"access_product_custom_attributes_attribute_group_salemanager","product_custom_attributes_attribute_group","product_custom_attributes.model_attribute_group","base.group_sale_manager",1,1,1,1
+"access_product_custom_attributes_attribute_location_salemanager","product_custom_attributes_attribute_location","product_custom_attributes.model_attribute_location","base.group_sale_manager",1,1,1,1
+"access_product_custom_attributes_product_attribute_salemanager","product_custom_attributes_product_attribute","product_custom_attributes.model_product_attribute","base.group_sale_manager",1,1,1,1
+"access_product_custom_attributes_attribute_option_salemanager","product_custom_attributes_attribute_option","product_custom_attributes.model_attribute_option","base.group_sale_manager",1,1,1,1
+"access_product_custom_attributes_attribute_set_manager","product_custom_attributes_attribute_set","product_custom_attributes.model_attribute_set","product.group_product_variant",1,1,1,1
+"access_product_custom_attributes_attribute_group_manager","product_custom_attributes_attribute_group","product_custom_attributes.model_attribute_group","product.group_product_variant",1,1,1,1
+"access_product_custom_attributes_attribute_location_manager","product_custom_attributes_attribute_location","product_custom_attributes.model_attribute_location","product.group_product_variant",1,1,1,1
+"access_product_custom_attributes_product_attribute_manager","product_custom_attributes_product_attribute","product_custom_attributes.model_product_attribute","product.group_product_variant",1,1,1,1
+"access_product_custom_attributes_attribute_option_manager","product_custom_attributes_attribute_option","product_custom_attributes.model_attribute_option","product.group_product_variant",1,1,1,1
+"access_product_custom_attributes_attribute_set_user","product_custom_attributes_attribute_set","product_custom_attributes.model_attribute_set","base.group_user",1,0,0,0
+"access_product_custom_attributes_attribute_group_user","product_custom_attributes_attribute_group","product_custom_attributes.model_attribute_group","base.group_user",1,0,0,0
+"access_product_custom_attributes_attribute_location_user","product_custom_attributes_attribute_location","product_custom_attributes.model_attribute_location","base.group_user",1,0,0,0
+"access_product_custom_attributes_product_attribute_user","product_custom_attributes_product_attribute","product_custom_attributes.model_product_attribute","base.group_user",1,0,0,0
+"access_product_custom_attributes_attribute_option_user","product_custom_attributes_attribute_option","product_custom_attributes.model_attribute_option","base.group_user",1,0,0,0

=== modified file 'product_custom_attributes/wizard/open_product_by_attribute_set.py'
--- product_custom_attributes/wizard/open_product_by_attribute_set.py	2012-08-21 14:10:21 +0000
+++ product_custom_attributes/wizard/open_product_by_attribute_set.py	2013-02-11 23:00:37 +0000
@@ -1,8 +1,9 @@
 # -*- encoding: utf-8 -*-
 ###############################################################################
 #                                                                             #
-#   product_custom_attributes for OpenERP                                      #
-#   Copyright (C) 2011 Akretion Benoît GUILLOT <benoit.guillot@xxxxxxxxxxxx>  #
+#   product_custom_attributes for OpenERP                                     #
+#   Copyright (C) 2011-2013 Akretion (http://www.akretion.com/)               #
+#   @author: Benoît GUILLOT <benoit.guillot@xxxxxxxxxxxx>                     #
 #                                                                             #
 #   This program is free software: you can redistribute it and/or modify      #
 #   it under the terms of the GNU Affero General Public License as            #
@@ -28,7 +29,7 @@
     _description = 'Wizard to open product by attributes set'
 
     _columns = {
-        'attribute_set_id':fields.many2one('attribute.set', 'Attribute Set'),
+        'attribute_set_id': fields.many2one('attribute.set', 'Attribute Set'),
         }
 
     def open_product_by_attribute(self, cr, uid, ids, context=None):
@@ -44,7 +45,6 @@
         if context is None:
             context = {}
         attribute_set = self.browse(cr, uid, ids[0], context=context).attribute_set_id
-        data = self.read(cr, uid, ids, [], context=context)[0] # XXX used?
         result = mod_obj.get_object_reference(cr, uid, 'product', 'product_normal_action')
         id = result[1] if result else False
         result = act_obj.read(cr, uid, [id], context=context)[0]

=== modified file 'product_custom_attributes/wizard/open_product_by_attribute_set.xml'
--- product_custom_attributes/wizard/open_product_by_attribute_set.xml	2012-08-03 14:33:51 +0000
+++ product_custom_attributes/wizard/open_product_by_attribute_set.xml	2013-02-11 23:00:37 +0000
@@ -1,29 +1,33 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
   product_custom_attributes for OpenERP
-  Copyright (C) 2011 Akretion Benoît GUILLOT <benoit.guillot@xxxxxxxxxxxx>
+  Copyright (C) 2011-2013 Akretion (http://www.akretion.com/)
+  @author: Benoît GUILLOT <benoit.guillot@xxxxxxxxxxxx>
   The licence is in the file __openerp__.py
 -->
 
 <openerp>
     <data>
 
-        <record model="ir.ui.view" id="open_product_by_attribute_set_view">
+        <record id="open_product_by_attribute_set_view" model="ir.ui.view">
             <field name="name">open.product.by.attribute.set.view</field>
             <field name="model">open.product.by.attribute.set</field>
-            <field name="type">form</field>
             <field name="arch" type="xml">
-                <form string="Open product by attributes set">
-                    <field name="attribute_set_id" colspan="4"/>
-                    <button icon="gtk-cancel" special="cancel" string="Cancel"/>
-                    <button icon="gtk-ok" name="open_product_by_attribute" string="Open Product By attribute" type="object"/>
+                <form string="Open product by attributes set" version="7.0">
+                    <group>
+                        <field name="attribute_set_id" />
+                    </group>
+                    <footer>
+                        <button name="open_product_by_attribute" string="Open Product By attribute" type="object" class="oe_highlight"/>
+                        or
+                        <button special="cancel" string="Cancel" class="oe_link"/>
+                    </footer>
                 </form>
             </field>
         </record>
 
         <record id="open_product_by_attribute_set" model="ir.actions.act_window">
             <field name="name">Open Product By Attribute Set</field>
-            <field name="type">ir.actions.act_window</field>
             <field name="res_model">open.product.by.attribute.set</field>
             <field name="view_type">form</field>
             <field name="target">new</field>
@@ -31,8 +35,7 @@
             <field name="help"></field>
         </record>
 
-        <menuitem action="open_product_by_attribute_set" id="open_product_wizard" parent="stock.menu_stock_product" sequence="20"/>
-
+        <menuitem action="open_product_by_attribute_set" id="open_product_wizard" parent="base.menu_product" sequence="20"/>
 
     </data>
 </openerp>

=== modified file 'product_gift/__openerp__.py'
--- product_gift/__openerp__.py	2013-01-21 06:49:06 +0000
+++ product_gift/__openerp__.py	2013-02-11 23:00:37 +0000
@@ -22,7 +22,7 @@
 
 {
     'name': 'product_gift',
-    'version': '6.1.0',
+    'version': '0.1',
     'category': 'Generic Modules',
     'license': 'AGPL-3',
     'description': """This module adds the gift_wrap feature and gives the possibility to add a gift message on the order or the order line.""",

=== modified file 'product_m2mcategories/__openerp__.py'
--- product_m2mcategories/__openerp__.py	2013-01-30 13:08:37 +0000
+++ product_m2mcategories/__openerp__.py	2013-02-11 23:00:37 +0000
@@ -18,7 +18,7 @@
 
 {
     "name" : "Product - Many Categories",
-    "version" : "7.0.0",
+    "version" : "0.1",
     "author" : "Sharoon Thomas",
     "website" : "",
     "category" : "Generic Modules",

=== modified file 'product_multi_price/__openerp__.py'
--- product_multi_price/__openerp__.py	2013-01-21 06:49:06 +0000
+++ product_multi_price/__openerp__.py	2013-02-11 23:00:37 +0000
@@ -22,7 +22,7 @@
 
 {
     'name': 'product_multi_price',
-    'version': '6.1.0',
+    'version': '0.1',
     'category': 'Generic Modules/Others',
     'license': 'AGPL-3',
     'description': """empty""",

=== modified file 'product_prices_on_variant/__openerp__.py'
--- product_prices_on_variant/__openerp__.py	2013-01-21 06:49:06 +0000
+++ product_prices_on_variant/__openerp__.py	2013-02-11 23:00:37 +0000
@@ -23,7 +23,7 @@
 
 {
     'name': 'product_prices_on_variant',
-    'version': '6.1.0',
+    'version': '0.1',
     'category': 'Generic Modules/Others',
     'license': 'AGPL-3',
     'description': """

=== modified file 'product_quick_stock_rule/__openerp__.py'
--- product_quick_stock_rule/__openerp__.py	2013-01-21 06:49:06 +0000
+++ product_quick_stock_rule/__openerp__.py	2013-02-11 23:00:37 +0000
@@ -23,7 +23,7 @@
 
 {
     'name': 'product_quick_stock_rule',
-    'version': '6.1.0',
+    'version': '0.1',
     'category': 'Stock',
     'license': 'AGPL-3',
     'description': """

=== modified file 'product_sequence/__openerp__.py'
--- product_sequence/__openerp__.py	2013-02-06 09:12:47 +0000
+++ product_sequence/__openerp__.py	2013-02-11 23:00:37 +0000
@@ -22,7 +22,7 @@
 
 {
     'name' : 'Product Sequence',
-    'version' : '7.0',
+    'version' : '0.1',
     "author": "Zikzakmedia SL",
     "website": "http://www.zikzakmedia.com";,
     "license" : "AGPL-3",


Follow ups