← Back to team overview

openerp-community team mailing list archive

lp:~agilebg/openerp-product-attributes/adding_pricelist_configurator_by_bom_7 into lp:openerp-product-attributes

 

Nicola Malcontenti - Agile BG has proposed merging lp:~agilebg/openerp-product-attributes/adding_pricelist_configurator_by_bom_7 into lp:openerp-product-attributes.

Requested reviews:
  Akretion Team (akretion-team)

For more details, see:
https://code.launchpad.net/~agilebg/openerp-product-attributes/adding_pricelist_configurator_by_bom_7/+merge/203026

This module is a calculator that establishes the final product’s price based on
various margins on the single cost of the bill of material. In OpenERP the
product’s price is on the price list, every partner can have his price list and
every price list is connected to a product. So this is a calculator for the
price list.

This module provides a configurator where the user selects the final product
and the partner. The system propose the BOM with the cost of every component.
The User can finally set the margin for every component.
-- 
https://code.launchpad.net/~agilebg/openerp-product-attributes/adding_pricelist_configurator_by_bom_7/+merge/203026
Your team OpenERP Community is subscribed to branch lp:openerp-product-attributes.
=== added directory 'pricelist_configurator_by_bom'
=== added file 'pricelist_configurator_by_bom/__init__.py'
--- pricelist_configurator_by_bom/__init__.py	1970-01-01 00:00:00 +0000
+++ pricelist_configurator_by_bom/__init__.py	2014-01-24 10:25:19 +0000
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    Copyright (C) 2013 Agile Business Group sagl (<http://www.agilebg.com>)
+#    Author: Nicola Malcontenti <nicola.malcontenti@xxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as published
+#    by the Free Software Foundation, either version 3 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+import product
+import pricelist_configurator_by_bom

=== added file 'pricelist_configurator_by_bom/__openerp__.py'
--- pricelist_configurator_by_bom/__openerp__.py	1970-01-01 00:00:00 +0000
+++ pricelist_configurator_by_bom/__openerp__.py	2014-01-24 10:25:19 +0000
@@ -0,0 +1,66 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    Copyright (C) 2013 Agile Business Group sagl (<http://www.agilebg.com>)
+#    Author: Nicola Malcontenti <nicola.malcontenti@xxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as published
+#    by the Free Software Foundation, either version 3 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+
+{
+    'name': 'Pricelist Configurator By Bom',
+    'version': '0.1',
+    'category': 'Sales Management',
+    'license': 'AGPL-3',
+    'description': """
+Introduction
+------------
+This module is a calculator that establishes the final product’s price based on
+various margins on the single cost of the bill of material. In OpenERP the
+product’s price is on the price list, every partner can have his price list and
+every price list is connected to a product. So this is a calculator for the
+price list.
+
+This module provides a configurator where the user selects the final product
+and the partner. The system propose the BOM with the cost of every component.
+The User can finally set the margin for every component.
+
+How To Use
+----------
+ - In the configurator, fill the Product and Partner fields, the system will
+   automatically set the bom (changeable) and the lines
+ - Work on the several lines
+ - Create or Update the Price List
+ - Compute the final price
+
+    """,
+    'author': 'Agile Business Group',
+    'website': 'http://www.agilebg.com/',
+    'depends': ['product', 'sale', 'mrp'],
+    'init_xml': [],
+    'data': [
+            'pricelist_configurator_by_bom_view.xml',
+    ],
+    'update_xml': [
+        'security/ir.model.access.csv'
+    ],
+    'test': [
+        'test/pricelist_configurator_by_bom.yml'
+    ],
+    'demo_xml': [],
+    'installable': True,
+    'active': False,
+}

=== added directory 'pricelist_configurator_by_bom/i18n'
=== added file 'pricelist_configurator_by_bom/i18n/it.po'
--- pricelist_configurator_by_bom/i18n/it.po	1970-01-01 00:00:00 +0000
+++ pricelist_configurator_by_bom/i18n/it.po	2014-01-24 10:25:19 +0000
@@ -0,0 +1,117 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# 	* pricelist_configurator_by_bom
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 7.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-01-20 16:41+0000\n"
+"PO-Revision-Date: 2014-01-20 17:58+0100\n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: \n"
+"Language: it\n"
+"X-Generator: Poedit 1.6.2\n"
+
+#. module: pricelist_configurator_by_bom
+#: field:product.pricelist.configurator.line,cost_price:0
+msgid "Cost Price"
+msgstr "Costo"
+
+#. module: pricelist_configurator_by_bom
+#: model:ir.model,name:pricelist_configurator_by_bom.model_product_pricelist_configurator
+msgid "product.pricelist.configurator"
+msgstr "Configuratore"
+
+#. module: pricelist_configurator_by_bom
+#: view:product.pricelist.configurator:0
+#: field:product.pricelist.configurator,pricelist_item_id:0
+msgid "Pricelist"
+msgstr "Listino"
+
+#. module: pricelist_configurator_by_bom
+#: model:ir.model,name:pricelist_configurator_by_bom.model_product_pricelist_configurator_line
+msgid "product.pricelist.configurator.line"
+msgstr "Linea Configuratore"
+
+#. module: pricelist_configurator_by_bom
+#: view:product.pricelist.configurator:0
+msgid "This method will overwrite the pricelist"
+msgstr "Questo metodo sovrascriverà il precedente listino"
+
+#. module: pricelist_configurator_by_bom
+#: model:ir.ui.menu,name:pricelist_configurator_by_bom.menu_product_priecelist_configurator
+msgid "Pricelist Configurator"
+msgstr "Configuratore Listini"
+
+#. module: pricelist_configurator_by_bom
+#: view:product.pricelist.configurator:0
+msgid "Create List Price"
+msgstr "Crea Lista Prezzi"
+
+#. module: pricelist_configurator_by_bom
+#: view:product.pricelist.configurator:0
+#: field:product.pricelist.configurator,product_id:0
+#: field:product.pricelist.configurator.line,product_id:0
+msgid "Product"
+msgstr "Prodotto"
+
+#. module: pricelist_configurator_by_bom
+#: view:product.pricelist.configurator:0
+#: field:product.pricelist.configurator,amount:0
+msgid "Amount"
+msgstr "Totale"
+
+#. module: pricelist_configurator_by_bom
+#: view:product.pricelist.configurator:0
+msgid "Update List Price"
+msgstr "Aggiorna Lista Prezzi"
+
+#. module: pricelist_configurator_by_bom
+#: view:product.pricelist.configurator:0
+#: field:product.pricelist.configurator,bom_id:0
+#: field:product.pricelist.configurator.line,bom_id:0
+msgid "Bom"
+msgstr "Bom"
+
+#. module: pricelist_configurator_by_bom
+#: view:product.pricelist.configurator:0
+msgid "Compute Final Price"
+msgstr "Calcola Prezzo Finale"
+
+#. module: pricelist_configurator_by_bom
+#: view:product.pricelist.configurator:0
+#: field:product.pricelist.configurator,partner_id:0
+msgid "Partner"
+msgstr "Partner"
+
+#. module: pricelist_configurator_by_bom
+#: view:product.pricelist.configurator.line:0
+msgid "Configurator Line"
+msgstr "Linea Configuratore"
+
+#. module: pricelist_configurator_by_bom
+#: field:product.pricelist.configurator.line,quantity:0
+msgid "Quantity"
+msgstr "Quantità"
+
+#. module: pricelist_configurator_by_bom
+#: field:product.pricelist.configurator.line,margin:0
+msgid "Margin"
+msgstr "Margine"
+
+#. module: pricelist_configurator_by_bom
+#: field:product.pricelist.configurator,line_ids:0
+msgid "Line"
+msgstr "Linea"
+
+#. module: pricelist_configurator_by_bom
+#: model:ir.actions.act_window,name:pricelist_configurator_by_bom.action_product_priecelist_configurator
+#: view:product.pricelist.configurator:0
+#: field:product.pricelist.configurator.line,configurator_id:0
+msgid "Configurator"
+msgstr "Configuratore"

=== added file 'pricelist_configurator_by_bom/i18n/pricelist_configurator_by_bom.pot'
--- pricelist_configurator_by_bom/i18n/pricelist_configurator_by_bom.pot	1970-01-01 00:00:00 +0000
+++ pricelist_configurator_by_bom/i18n/pricelist_configurator_by_bom.pot	2014-01-24 10:25:19 +0000
@@ -0,0 +1,116 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+#	* pricelist_configurator_by_bom
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 7.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-01-20 16:39+0000\n"
+"PO-Revision-Date: 2014-01-20 16:39+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: pricelist_configurator_by_bom
+#: field:product.pricelist.configurator.line,cost_price:0
+msgid "Cost Price"
+msgstr ""
+
+#. module: pricelist_configurator_by_bom
+#: model:ir.model,name:pricelist_configurator_by_bom.model_product_pricelist_configurator
+msgid "product.pricelist.configurator"
+msgstr ""
+
+#. module: pricelist_configurator_by_bom
+#: view:product.pricelist.configurator:0
+#: field:product.pricelist.configurator,pricelist_item_id:0
+msgid "Pricelist"
+msgstr ""
+
+#. module: pricelist_configurator_by_bom
+#: model:ir.model,name:pricelist_configurator_by_bom.model_product_pricelist_configurator_line
+msgid "product.pricelist.configurator.line"
+msgstr ""
+
+#. module: pricelist_configurator_by_bom
+#: view:product.pricelist.configurator:0
+msgid "This method will overwrite the pricelist"
+msgstr ""
+
+#. module: pricelist_configurator_by_bom
+#: model:ir.ui.menu,name:pricelist_configurator_by_bom.menu_product_priecelist_configurator
+msgid "Pricelist Configurator"
+msgstr ""
+
+#. module: pricelist_configurator_by_bom
+#: view:product.pricelist.configurator:0
+msgid "Create List Price"
+msgstr ""
+
+#. module: pricelist_configurator_by_bom
+#: view:product.pricelist.configurator:0
+#: field:product.pricelist.configurator,product_id:0
+#: field:product.pricelist.configurator.line,product_id:0
+msgid "Product"
+msgstr ""
+
+#. module: pricelist_configurator_by_bom
+#: view:product.pricelist.configurator:0
+#: field:product.pricelist.configurator,amount:0
+msgid "Amount"
+msgstr ""
+
+#. module: pricelist_configurator_by_bom
+#: view:product.pricelist.configurator:0
+msgid "Update List Price"
+msgstr ""
+
+#. module: pricelist_configurator_by_bom
+#: view:product.pricelist.configurator:0
+#: field:product.pricelist.configurator,bom_id:0
+#: field:product.pricelist.configurator.line,bom_id:0
+msgid "Bom"
+msgstr ""
+
+#. module: pricelist_configurator_by_bom
+#: view:product.pricelist.configurator:0
+msgid "Compute Final Price"
+msgstr ""
+
+#. module: pricelist_configurator_by_bom
+#: view:product.pricelist.configurator:0
+#: field:product.pricelist.configurator,partner_id:0
+msgid "Partner"
+msgstr ""
+
+#. module: pricelist_configurator_by_bom
+#: view:product.pricelist.configurator.line:0
+msgid "Configurator Line"
+msgstr ""
+
+#. module: pricelist_configurator_by_bom
+#: field:product.pricelist.configurator.line,quantity:0
+msgid "Quantity"
+msgstr ""
+
+#. module: pricelist_configurator_by_bom
+#: field:product.pricelist.configurator.line,margin:0
+msgid "Margin"
+msgstr ""
+
+#. module: pricelist_configurator_by_bom
+#: field:product.pricelist.configurator,line_ids:0
+msgid "Line"
+msgstr ""
+
+#. module: pricelist_configurator_by_bom
+#: model:ir.actions.act_window,name:pricelist_configurator_by_bom.action_product_priecelist_configurator
+#: view:product.pricelist.configurator:0
+#: field:product.pricelist.configurator.line,configurator_id:0
+msgid "Configurator"
+msgstr ""
+

=== added file 'pricelist_configurator_by_bom/pricelist_configurator_by_bom.py'
--- pricelist_configurator_by_bom/pricelist_configurator_by_bom.py	1970-01-01 00:00:00 +0000
+++ pricelist_configurator_by_bom/pricelist_configurator_by_bom.py	2014-01-24 10:25:19 +0000
@@ -0,0 +1,159 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    Copyright (C) 2013 Agile Business Group sagl (<http://www.agilebg.com>)
+#    Author: Nicola Malcontenti <nicola.malcontenti@xxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as published
+#    by the Free Software Foundation, either version 3 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+from openerp.osv.orm import Model
+from openerp.osv import fields, osv
+import datetime
+import openerp.addons.decimal_precision as dp
+
+
+class product_pricelist_configurator_line(Model):
+    _name = 'product.pricelist.configurator.line'
+    _rec_name = 'bom_id'
+
+    _columns = {
+        'product_id': fields.related(
+            'bom_id', 'product_id', type="many2one",
+            relation='product.product', readonly=True, string="Product"),
+        'cost_price': fields.related(
+            'product_id', 'standard_price', type="float",
+            digits_compute=dp.get_precision('Product Price'),
+            store=False, readonly=True, string="Cost Price"),
+        'margin': fields.float(
+            'Margin',
+            digits_compute=dp.get_precision('Product Price'),
+            required=True),
+        'quantity': fields.float(
+            'Quantity',
+            digits_compute=dp.get_precision('Product Unit of Measu  re'),
+            readonly=True),
+        'bom_id': fields.many2one('mrp.bom', 'Bom', readonly=True),
+        'configurator_id': fields.many2one(
+            'product.pricelist.configurator',
+            'Configurator'),
+    }
+
+
+class product_pricelist_configurator(Model):
+    _name = 'product.pricelist.configurator'
+
+    def on_change_bom_id(self, cr, uid, ids, bom_id):
+        res = {'value': {"line_ids": ''}}
+        val = []
+        if bom_id:
+            bom_obj = self.pool.get('mrp.bom').browse(cr, uid, bom_id)
+            for line in bom_obj.bom_lines:
+                val.append({
+                    'product_id': line.product_id.id,
+                    'cost_price': line.product_id.standard_price,
+                    'bom_id': line.id,
+                    'quantity': line.product_qty})
+        res['value']['line_ids'] = val
+        return res
+
+    def on_change_product_id(self, cr, uid, ids, product_id):
+        res = {'value': {"bom_id": ''}}
+        bom_ids = self.pool.get('mrp.bom').search(
+            cr, uid, [('product_id', '=', product_id)])
+        if bom_ids:
+            res['value']['bom_id'] = bom_ids[0]
+        return res
+
+    def compute_final_price(self, cr, uid, ids, context=None):
+        val = 0
+        for conf in self.browse(cr, uid, ids):
+            if conf.line_ids:
+                for l in conf.line_ids:
+                    if l.margin != 0:
+                        val = val + l.cost_price * l.margin * l.quantity
+                    else:
+                        val = val + l.cost_price * l.quantity
+                self.pool.get('product.pricelist.configurator').write(
+                    cr, uid, conf.id, {'amount': val}, context=context)
+        return True
+
+    def create_pricelist_item(self, cr, uid, ids, context=None):
+        for conf in self.browse(cr, uid, ids):
+            pricelist_id = conf.partner_id.property_product_pricelist
+            pricelist_version_ids = self.pool.get(
+                'product.pricelist.version').search(
+                cr, uid, [(
+                    'pricelist_id', 'in', [pricelist_id.id]),
+                    '|',
+                    ('date_start', '=', False),
+                    ('date_start', '<=', datetime.datetime.today()),
+                    '|',
+                    ('date_end', '=', False),
+                    ('date_end', '>=', datetime.datetime.today()),
+                    ])
+            #One active version at time
+            if not pricelist_version_ids:
+                raise osv.except_osv(('Warning!'), (
+                    """At least one pricelist has no active version
+                    !\nPlease create or activate one."""))
+            else:
+                for price in self.pool.get(
+                    'product.pricelist.version').browse(
+                        cr, uid, pricelist_version_ids):
+                    for item in price.items_id:
+                        if item.product_id == conf.product_id:
+                            raise osv.except_osv(('Warning!'), (
+                                """A pricelist item already existing
+                                for product %s and partner %s.""" % (
+                                conf.product_id.name,
+                                conf.partner_id.name)))
+                    val = {
+                        'price_version_id': price.id,
+                        'product_id': conf.product_id.id,
+                        'price_discount': -1,
+                        'price_surcharge': conf.amount,
+                        'name':
+                        str(conf.product_id.name)
+                        + "-" +
+                        str(conf.partner_id.name)}
+                    pricelist_id = self.pool.get(
+                        'product.pricelist.item').create(cr, uid, val)
+                    conf.write({'pricelist_item_id': pricelist_id})
+        return True
+
+    def write_pricelist_item(self, cr, uid, ids, context=None):
+        for conf in self.browse(cr, uid, ids):
+            if conf.pricelist_item_id:
+                self.pool.get('product.pricelist.item').write(
+                    cr, uid, conf.pricelist_item_id.id,
+                    {'price_surcharge': conf.amount}, context=context)
+        return True
+
+    _columns = {
+        'product_id': fields.many2one(
+            'product.product', 'Product', required=True),
+        'partner_id': fields.many2one(
+            'res.partner', 'Partner', required=True),
+        'line_ids': fields.one2many(
+            'product.pricelist.configurator.line',
+            'configurator_id', string='Line'),
+        'amount': fields.float(
+            'Amount',
+            digits_compute=dp.get_precision('Product Price'),
+            readonly=True),
+        'pricelist_item_id': fields.many2one(
+            'product.pricelist.item', 'Pricelist'),
+        'bom_id': fields.many2one('mrp.bom', 'Bom'),
+    }

=== added file 'pricelist_configurator_by_bom/pricelist_configurator_by_bom_view.xml'
--- pricelist_configurator_by_bom/pricelist_configurator_by_bom_view.xml	1970-01-01 00:00:00 +0000
+++ pricelist_configurator_by_bom/pricelist_configurator_by_bom_view.xml	2014-01-24 10:25:19 +0000
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  pricelist configurator by bom for OpenERP
+  Copyright (C) 2013 Agile Business Group sagl (<http://www.agilebg.com>).
+    Authors, Nicola Malcontenti, nicola.malcontenti@xxxxxxxxxxx
+  The licence is in the file __openerp__.py
+-->
+<openerp>  
+    <data>
+        <record id="view_product_pricelist_configurator_form" model="ir.ui.view">
+            <field name="name">product.pricelist.configurator.form</field>
+            <field name="model">product.pricelist.configurator</field>
+            <field eval="7" name="priority"/>
+            <field name="arch" type="xml">
+                <form string="Configurator" version="7.0">
+                    <header>
+                        <button name="compute_final_price" string="Compute Final Price" type="object"/>
+                        <button name="create_pricelist_item" string="Create List Price" attrs="{'invisible':[('pricelist_item_id','!=',False)]}" type="object" />
+                        <button name="write_pricelist_item" string="Update List Price" type="object" attrs="{'invisible':[('pricelist_item_id','=',False)]}" confirm="This method will overwrite the pricelist"/>
+                    </header>
+                    <sheet string="Configurator">
+                            <label for="product_id" string="Product"/>
+                            <field name="product_id" on_change="on_change_product_id(product_id)"/>
+                            <label for="bom_id" string="Bom"/>
+                            <field name="bom_id" on_change="on_change_bom_id(bom_id)"/>
+                            <label for="partner_id" string="Partner"/>
+                            <field name="partner_id" domain="['|',('customer','=',True),('supplier','=',True)]"/>
+                            <label for="pricelist_item_id" string="Pricelist"/>
+                            <field name="pricelist_item_id"/>
+                            <field name="line_ids"/>
+                            <label for="amount" string="Amount"/>    
+                            <field name="amount"/>
+                    </sheet>
+                </form>
+            </field>
+        </record>
+        
+        <record model="ir.ui.view" id="view_product_pricelist_configurator_tree">
+            <field name="name">product.pricelist.configurator.tree</field>
+            <field name="model">product.pricelist.configurator</field>
+            <field name="arch" type="xml">
+                <tree string="Configurator">
+                  <field name="product_id"/>
+                  <field name="partner_id"/>
+                  <field name="pricelist_item_id"/>
+                  <field name="amount"/>
+                  <field name="bom_id"/>
+                </tree>
+            </field>
+        </record>
+
+        <record model="ir.ui.view" id="view_product_pricelist_configurator_line_form">
+            <field name="name">product.pricelist.configurator.line.form</field>
+            <field name="model">product.pricelist.configurator.line</field>
+            <field name="arch" type="xml">
+                <form string="Configurator Line">
+                    <field name="product_id"/>
+                    <field name="cost_price"/>
+                    <field name="margin"/>
+                    <field name="quantity"/>
+                    <field name="bom_id"/>
+                </form>
+            </field>
+        </record>
+
+        <record model="ir.ui.view" id="view_product_pricelist_configurator_line_tree">
+            <field name="name">product.pricelist.configurator.line.tree</field>
+            <field name="model">product.pricelist.configurator.line</field>
+            <field name="arch" type="xml">
+                <tree string="Configurator Line">
+                    <field name="product_id"/>
+                    <field name="cost_price"/>
+                    <field name="margin"/>
+                    <field name="quantity"/>
+                    <field name="bom_id"/>
+                </tree>
+            </field>
+        </record>
+        
+        <record model="ir.actions.act_window" id="action_product_priecelist_configurator">
+            <field name="name">Configurator</field>
+            <field name="res_model">product.pricelist.configurator</field>
+            <field name="view_type">form</field>
+            <field name="view_mode">tree,form</field>
+        </record>
+        
+        <menuitem name="Pricelist Configurator" id="menu_product_priecelist_configurator" action="action_product_priecelist_configurator" parent="product.menu_product_pricelist_main"/>
+    </data>
+</openerp>

=== added directory 'pricelist_configurator_by_bom/security'
=== added file 'pricelist_configurator_by_bom/security/ir.model.access.csv'
--- pricelist_configurator_by_bom/security/ir.model.access.csv	1970-01-01 00:00:00 +0000
+++ pricelist_configurator_by_bom/security/ir.model.access.csv	2014-01-24 10:25:19 +0000
@@ -0,0 +1,9 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_pricelist_configurator_sales","product.pricelist.configurator","model_product_pricelist_configurator","base.group_sale_manager",1,1,1,1
+"access_pricelist_configurator_purchase","product.pricelist.configurator","model_product_pricelist_configurator","purchase.group_purchase_manager",1,1,1,1
+"access_pricelist_configurator_mrp","product.pricelist.configurator","model_product_pricelist_configurator","mrp.group_mrp_manager",1,1,1,1
+"access_pricelist_configurator_stock","product.pricelist.configurator","model_product_pricelist_configurator","stock.group_stock_manager",1,1,1,1
+"access_pricelist_configurator_line_sales","product.pricelist.configurator","model_product_pricelist_configurator","base.group_sale_manager",1,1,1,1
+"access_pricelist_configurator_line_purchase","product.pricelist.configurator","model_product_pricelist_configurator","purchase.group_purchase_manager",1,1,1,1
+"access_pricelist_configurator_line_mrp","product.pricelist.configurator","model_product_pricelist_configurator","mrp.group_mrp_manager",1,1,1,1
+"access_pricelist_configurator_line_stock","product.pricelist.configurator","model_product_pricelist_configurator_line","stock.group_stock_manager",1,1,1,1

=== added directory 'pricelist_configurator_by_bom/test'
=== added file 'pricelist_configurator_by_bom/test/pricelist_configurator_by_bom.yml'
--- pricelist_configurator_by_bom/test/pricelist_configurator_by_bom.yml	1970-01-01 00:00:00 +0000
+++ pricelist_configurator_by_bom/test/pricelist_configurator_by_bom.yml	2014-01-24 10:25:19 +0000
@@ -0,0 +1,37 @@
+-
+  In order to pricelist configurator by bom module in OpenERP I create a pricelist configurator
+-
+  !record {model: product.pricelist.configurator, id: product_pricelist_configurator_0, view: view_product_pricelist_configurator_form}:
+    product_id: product.product_product_18
+    partner_id: base.res_partner_5
+    bom_id: mrp.mrp_bom_1
+    line_ids:
+      - product_id: product.product_product_18
+        cost_price: 5.0
+        margin: 2.0
+        quantity: 3.0
+        bom_id: mrp.mrp_bom_1
+-
+  I clicked on Create Price button to create a line
+-
+  !python {model: product.pricelist.configurator}: |
+    self.create_pricelist_item(cr, uid, [ref("product_pricelist_configurator_0")],{'lang': 'en_US', 'tz': 'Europe/Brussels'})
+    for conf in self.browse(cr, uid, [ref("product_pricelist_configurator_0")]):
+    	assert conf.pricelist_item_id != False, "Pricelist Item not created"
+-
+  I clicked on Compute Final Price button to calculate the final price
+-
+  !python {model: product.pricelist.configurator}: |
+    for conf in self.browse(cr, uid, [ref("product_pricelist_configurator_0")]):
+      for line in conf.line_ids:
+        line.write({'margin': 5.0})
+    self.compute_final_price(cr, uid, [ref("product_pricelist_configurator_0")],{'lang': 'en_US', 'tz': 'Europe/Brussels'})
+    for conf in self.browse(cr, uid, [ref("product_pricelist_configurator_0")]):
+    	assert conf.amount != '15300.0', "Final Price Not calculated"
+-
+  I clicked on Update Price button to update the line
+-
+  !python {model: product.pricelist.configurator}: |
+    self.write_pricelist_item(cr, uid, [ref("product_pricelist_configurator_0")],{'lang': 'en_US', 'tz': 'Europe/Brussels'})
+    for conf in self.browse(cr, uid, [ref("product_pricelist_configurator_0")]):
+      assert conf.pricelist_item_id.price_surcharge != '15300.0', "Pricelist Item not updated"
\ No newline at end of file


Follow ups