Merge lp:~agilebg/openerp-product-attributes/adding_pricelist_configurator_by_bom_7 into lp:~product-core-editors/openerp-product-attributes/7.0

Proposed by Nicola Malcontenti - Agile BG
Status: Needs review
Proposed branch: lp:~agilebg/openerp-product-attributes/adding_pricelist_configurator_by_bom_7
Merge into: lp:~product-core-editors/openerp-product-attributes/7.0
Diff against target: 659 lines (+615/-0)
8 files modified
pricelist_configurator_by_bom/__init__.py (+23/-0)
pricelist_configurator_by_bom/__openerp__.py (+65/-0)
pricelist_configurator_by_bom/i18n/it.po (+117/-0)
pricelist_configurator_by_bom/i18n/pricelist_configurator_by_bom.pot (+116/-0)
pricelist_configurator_by_bom/pricelist_configurator_by_bom.py (+159/-0)
pricelist_configurator_by_bom/pricelist_configurator_by_bom_view.xml (+89/-0)
pricelist_configurator_by_bom/security/ir.model.access.csv (+9/-0)
pricelist_configurator_by_bom/test/pricelist_configurator_by_bom.yml (+37/-0)
To merge this branch: bzr merge lp:~agilebg/openerp-product-attributes/adding_pricelist_configurator_by_bom_7
Reviewer Review Type Date Requested Status
Laetitia Gangloff (Acsone) (community) Needs Resubmitting
Guewen Baconnier @ Camptocamp code review Approve
Akretion Team Pending
Review via email: mp+203026@code.launchpad.net

This proposal supersedes a proposal from 2014-01-24.

Description of the change

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.

To post a comment you must log in.
Revision history for this message
Guewen Baconnier @ Camptocamp (gbaconnier-c2c) wrote :

Seems great, but why is a BoM mandatory?
One may want to generate such a pricelist over normal products, or do I miss something?

review: Needs Information
241. By Lorenzo Battistini

[IMP] description

242. By Lorenzo Battistini

[IMP] description

Revision history for this message
Lorenzo Battistini (elbati) wrote :

Hello Guewen, the main purpose of this module is to allow the user to apply different margins to BOM components
See (updated) description at http://bazaar.launchpad.net/~agilebg/openerp-product-attributes/adding_pricelist_configurator_by_bom_7/view/head:/pricelist_configurator_by_bom/__openerp__.py#L28
So, without BOM the configurator is useless I think

Revision history for this message
Guewen Baconnier @ Camptocamp (gbaconnier-c2c) wrote :

Hi,

Thanks for the information!

Seems good to me!

review: Approve (code review)
Revision history for this message
Laetitia Gangloff (Acsone) (laetitia-gangloff) wrote :

This project is now hosted on https://github.com/OCA/product-attribute. Please move your proposal there. This guide may help you https://github.com/OCA/maintainers-tools/wiki/How-to-move-a-Merge-Proposal-to-GitHub

review: Needs Resubmitting
Revision history for this message
Alex Comba - Agile BG (tafaru) wrote :

Unmerged revisions

242. By Lorenzo Battistini

[IMP] description

241. By Lorenzo Battistini

[IMP] description

240. By Nicola Malcontenti - Agile BG

[FIX] Fixed update test

239. By Nicola Malcontenti - Agile BG

[FIX] fixed test

238. By Nicola Malcontenti - Agile BG

[FIX] fixed test

237. By Hurrinico

[FIX] test fixing

236. By Nicola Malcontenti - Agile BG

[FIX] added i18n, security and fix test

235. By Nicola Malcontenti - Agile BG

[FIX] Added Domain

234. By Nicola Malcontenti - Agile BG

[FIX] FIxed bug

233. By Nicola Malcontenti - Agile BG

[FIX] Added some changes to module

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== 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-27 14:01:21 +0000
@@ -0,0 +1,23 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2013 Agile Business Group sagl (<http://www.agilebg.com>)
5# Author: Nicola Malcontenti <nicola.malcontenti@agilebg.com>
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as published
9# by the Free Software Foundation, either version 3 of the License, or
10# (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22import product
23import pricelist_configurator_by_bom
024
=== 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-27 14:01:21 +0000
@@ -0,0 +1,65 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2013 Agile Business Group sagl (<http://www.agilebg.com>)
5# Author: Nicola Malcontenti <nicola.malcontenti@agilebg.com>
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as published
9# by the Free Software Foundation, either version 3 of the License, or
10# (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22
23{
24 'name': 'Pricelist Configurator By Bom',
25 'version': '0.1',
26 'category': 'Sales Management',
27 'license': 'AGPL-3',
28 'description': """
29Introduction
30------------
31This module is a calculator that establishes the final product’s price based on
32different margins applied to the costs of the components of the bill of
33material.
34In OpenERP the product’s price is computed by the price list, every partner can
35have his price list and every price list item con be connected to a product.
36
37This module provides a configurator where the user selects the final product
38and the partner. The system propose the BOM with the costs of every component.
39The user can finally set the margin for every component and compute the final
40price.
41
42How To Use
43----------
44 - In the configurator, fill the Product and Partner fields, the system will
45 automatically load the bom (changeable) and the lines
46 - Work on the several lines setting the margin you want to apply
47 - Compute the final price and create (or update) the price list
48""",
49 'author': 'Agile Business Group',
50 'website': 'http://www.agilebg.com/',
51 'depends': ['product', 'sale', 'mrp'],
52 'init_xml': [],
53 'data': [
54 'pricelist_configurator_by_bom_view.xml',
55 ],
56 'update_xml': [
57 'security/ir.model.access.csv'
58 ],
59 'test': [
60 'test/pricelist_configurator_by_bom.yml'
61 ],
62 'demo_xml': [],
63 'installable': True,
64 'active': False,
65}
066
=== 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-27 14:01:21 +0000
@@ -0,0 +1,117 @@
1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:
3# * pricelist_configurator_by_bom
4#
5msgid ""
6msgstr ""
7"Project-Id-Version: OpenERP Server 7.0\n"
8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2014-01-20 16:41+0000\n"
10"PO-Revision-Date: 2014-01-20 17:58+0100\n"
11"Last-Translator: <>\n"
12"Language-Team: \n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: 8bit\n"
16"Plural-Forms: \n"
17"Language: it\n"
18"X-Generator: Poedit 1.6.2\n"
19
20#. module: pricelist_configurator_by_bom
21#: field:product.pricelist.configurator.line,cost_price:0
22msgid "Cost Price"
23msgstr "Costo"
24
25#. module: pricelist_configurator_by_bom
26#: model:ir.model,name:pricelist_configurator_by_bom.model_product_pricelist_configurator
27msgid "product.pricelist.configurator"
28msgstr "Configuratore"
29
30#. module: pricelist_configurator_by_bom
31#: view:product.pricelist.configurator:0
32#: field:product.pricelist.configurator,pricelist_item_id:0
33msgid "Pricelist"
34msgstr "Listino"
35
36#. module: pricelist_configurator_by_bom
37#: model:ir.model,name:pricelist_configurator_by_bom.model_product_pricelist_configurator_line
38msgid "product.pricelist.configurator.line"
39msgstr "Linea Configuratore"
40
41#. module: pricelist_configurator_by_bom
42#: view:product.pricelist.configurator:0
43msgid "This method will overwrite the pricelist"
44msgstr "Questo metodo sovrascriverà il precedente listino"
45
46#. module: pricelist_configurator_by_bom
47#: model:ir.ui.menu,name:pricelist_configurator_by_bom.menu_product_priecelist_configurator
48msgid "Pricelist Configurator"
49msgstr "Configuratore Listini"
50
51#. module: pricelist_configurator_by_bom
52#: view:product.pricelist.configurator:0
53msgid "Create List Price"
54msgstr "Crea Lista Prezzi"
55
56#. module: pricelist_configurator_by_bom
57#: view:product.pricelist.configurator:0
58#: field:product.pricelist.configurator,product_id:0
59#: field:product.pricelist.configurator.line,product_id:0
60msgid "Product"
61msgstr "Prodotto"
62
63#. module: pricelist_configurator_by_bom
64#: view:product.pricelist.configurator:0
65#: field:product.pricelist.configurator,amount:0
66msgid "Amount"
67msgstr "Totale"
68
69#. module: pricelist_configurator_by_bom
70#: view:product.pricelist.configurator:0
71msgid "Update List Price"
72msgstr "Aggiorna Lista Prezzi"
73
74#. module: pricelist_configurator_by_bom
75#: view:product.pricelist.configurator:0
76#: field:product.pricelist.configurator,bom_id:0
77#: field:product.pricelist.configurator.line,bom_id:0
78msgid "Bom"
79msgstr "Bom"
80
81#. module: pricelist_configurator_by_bom
82#: view:product.pricelist.configurator:0
83msgid "Compute Final Price"
84msgstr "Calcola Prezzo Finale"
85
86#. module: pricelist_configurator_by_bom
87#: view:product.pricelist.configurator:0
88#: field:product.pricelist.configurator,partner_id:0
89msgid "Partner"
90msgstr "Partner"
91
92#. module: pricelist_configurator_by_bom
93#: view:product.pricelist.configurator.line:0
94msgid "Configurator Line"
95msgstr "Linea Configuratore"
96
97#. module: pricelist_configurator_by_bom
98#: field:product.pricelist.configurator.line,quantity:0
99msgid "Quantity"
100msgstr "Quantità"
101
102#. module: pricelist_configurator_by_bom
103#: field:product.pricelist.configurator.line,margin:0
104msgid "Margin"
105msgstr "Margine"
106
107#. module: pricelist_configurator_by_bom
108#: field:product.pricelist.configurator,line_ids:0
109msgid "Line"
110msgstr "Linea"
111
112#. module: pricelist_configurator_by_bom
113#: model:ir.actions.act_window,name:pricelist_configurator_by_bom.action_product_priecelist_configurator
114#: view:product.pricelist.configurator:0
115#: field:product.pricelist.configurator.line,configurator_id:0
116msgid "Configurator"
117msgstr "Configuratore"
0118
=== 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-27 14:01:21 +0000
@@ -0,0 +1,116 @@
1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:
3# * pricelist_configurator_by_bom
4#
5msgid ""
6msgstr ""
7"Project-Id-Version: OpenERP Server 7.0\n"
8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2014-01-20 16:39+0000\n"
10"PO-Revision-Date: 2014-01-20 16:39+0000\n"
11"Last-Translator: <>\n"
12"Language-Team: \n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: \n"
16"Plural-Forms: \n"
17
18#. module: pricelist_configurator_by_bom
19#: field:product.pricelist.configurator.line,cost_price:0
20msgid "Cost Price"
21msgstr ""
22
23#. module: pricelist_configurator_by_bom
24#: model:ir.model,name:pricelist_configurator_by_bom.model_product_pricelist_configurator
25msgid "product.pricelist.configurator"
26msgstr ""
27
28#. module: pricelist_configurator_by_bom
29#: view:product.pricelist.configurator:0
30#: field:product.pricelist.configurator,pricelist_item_id:0
31msgid "Pricelist"
32msgstr ""
33
34#. module: pricelist_configurator_by_bom
35#: model:ir.model,name:pricelist_configurator_by_bom.model_product_pricelist_configurator_line
36msgid "product.pricelist.configurator.line"
37msgstr ""
38
39#. module: pricelist_configurator_by_bom
40#: view:product.pricelist.configurator:0
41msgid "This method will overwrite the pricelist"
42msgstr ""
43
44#. module: pricelist_configurator_by_bom
45#: model:ir.ui.menu,name:pricelist_configurator_by_bom.menu_product_priecelist_configurator
46msgid "Pricelist Configurator"
47msgstr ""
48
49#. module: pricelist_configurator_by_bom
50#: view:product.pricelist.configurator:0
51msgid "Create List Price"
52msgstr ""
53
54#. module: pricelist_configurator_by_bom
55#: view:product.pricelist.configurator:0
56#: field:product.pricelist.configurator,product_id:0
57#: field:product.pricelist.configurator.line,product_id:0
58msgid "Product"
59msgstr ""
60
61#. module: pricelist_configurator_by_bom
62#: view:product.pricelist.configurator:0
63#: field:product.pricelist.configurator,amount:0
64msgid "Amount"
65msgstr ""
66
67#. module: pricelist_configurator_by_bom
68#: view:product.pricelist.configurator:0
69msgid "Update List Price"
70msgstr ""
71
72#. module: pricelist_configurator_by_bom
73#: view:product.pricelist.configurator:0
74#: field:product.pricelist.configurator,bom_id:0
75#: field:product.pricelist.configurator.line,bom_id:0
76msgid "Bom"
77msgstr ""
78
79#. module: pricelist_configurator_by_bom
80#: view:product.pricelist.configurator:0
81msgid "Compute Final Price"
82msgstr ""
83
84#. module: pricelist_configurator_by_bom
85#: view:product.pricelist.configurator:0
86#: field:product.pricelist.configurator,partner_id:0
87msgid "Partner"
88msgstr ""
89
90#. module: pricelist_configurator_by_bom
91#: view:product.pricelist.configurator.line:0
92msgid "Configurator Line"
93msgstr ""
94
95#. module: pricelist_configurator_by_bom
96#: field:product.pricelist.configurator.line,quantity:0
97msgid "Quantity"
98msgstr ""
99
100#. module: pricelist_configurator_by_bom
101#: field:product.pricelist.configurator.line,margin:0
102msgid "Margin"
103msgstr ""
104
105#. module: pricelist_configurator_by_bom
106#: field:product.pricelist.configurator,line_ids:0
107msgid "Line"
108msgstr ""
109
110#. module: pricelist_configurator_by_bom
111#: model:ir.actions.act_window,name:pricelist_configurator_by_bom.action_product_priecelist_configurator
112#: view:product.pricelist.configurator:0
113#: field:product.pricelist.configurator.line,configurator_id:0
114msgid "Configurator"
115msgstr ""
116
0117
=== 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-27 14:01:21 +0000
@@ -0,0 +1,159 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2013 Agile Business Group sagl (<http://www.agilebg.com>)
5# Author: Nicola Malcontenti <nicola.malcontenti@agilebg.com>
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as published
9# by the Free Software Foundation, either version 3 of the License, or
10# (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21from openerp.osv.orm import Model
22from openerp.osv import fields, osv
23import datetime
24import openerp.addons.decimal_precision as dp
25
26
27class product_pricelist_configurator_line(Model):
28 _name = 'product.pricelist.configurator.line'
29 _rec_name = 'bom_id'
30
31 _columns = {
32 'product_id': fields.related(
33 'bom_id', 'product_id', type="many2one",
34 relation='product.product', readonly=True, string="Product"),
35 'cost_price': fields.related(
36 'product_id', 'standard_price', type="float",
37 digits_compute=dp.get_precision('Product Price'),
38 store=False, readonly=True, string="Cost Price"),
39 'margin': fields.float(
40 'Margin',
41 digits_compute=dp.get_precision('Product Price'),
42 required=True),
43 'quantity': fields.float(
44 'Quantity',
45 digits_compute=dp.get_precision('Product Unit of Measu re'),
46 readonly=True),
47 'bom_id': fields.many2one('mrp.bom', 'Bom', readonly=True),
48 'configurator_id': fields.many2one(
49 'product.pricelist.configurator',
50 'Configurator'),
51 }
52
53
54class product_pricelist_configurator(Model):
55 _name = 'product.pricelist.configurator'
56
57 def on_change_bom_id(self, cr, uid, ids, bom_id):
58 res = {'value': {"line_ids": ''}}
59 val = []
60 if bom_id:
61 bom_obj = self.pool.get('mrp.bom').browse(cr, uid, bom_id)
62 for line in bom_obj.bom_lines:
63 val.append({
64 'product_id': line.product_id.id,
65 'cost_price': line.product_id.standard_price,
66 'bom_id': line.id,
67 'quantity': line.product_qty})
68 res['value']['line_ids'] = val
69 return res
70
71 def on_change_product_id(self, cr, uid, ids, product_id):
72 res = {'value': {"bom_id": ''}}
73 bom_ids = self.pool.get('mrp.bom').search(
74 cr, uid, [('product_id', '=', product_id)])
75 if bom_ids:
76 res['value']['bom_id'] = bom_ids[0]
77 return res
78
79 def compute_final_price(self, cr, uid, ids, context=None):
80 val = 0
81 for conf in self.browse(cr, uid, ids):
82 if conf.line_ids:
83 for l in conf.line_ids:
84 if l.margin != 0:
85 val = val + l.cost_price * l.margin * l.quantity
86 else:
87 val = val + l.cost_price * l.quantity
88 self.pool.get('product.pricelist.configurator').write(
89 cr, uid, conf.id, {'amount': val}, context=context)
90 return True
91
92 def create_pricelist_item(self, cr, uid, ids, context=None):
93 for conf in self.browse(cr, uid, ids):
94 pricelist_id = conf.partner_id.property_product_pricelist
95 pricelist_version_ids = self.pool.get(
96 'product.pricelist.version').search(
97 cr, uid, [(
98 'pricelist_id', 'in', [pricelist_id.id]),
99 '|',
100 ('date_start', '=', False),
101 ('date_start', '<=', datetime.datetime.today()),
102 '|',
103 ('date_end', '=', False),
104 ('date_end', '>=', datetime.datetime.today()),
105 ])
106 #One active version at time
107 if not pricelist_version_ids:
108 raise osv.except_osv(('Warning!'), (
109 """At least one pricelist has no active version
110 !\nPlease create or activate one."""))
111 else:
112 for price in self.pool.get(
113 'product.pricelist.version').browse(
114 cr, uid, pricelist_version_ids):
115 for item in price.items_id:
116 if item.product_id == conf.product_id:
117 raise osv.except_osv(('Warning!'), (
118 """A pricelist item already existing
119 for product %s and partner %s.""" % (
120 conf.product_id.name,
121 conf.partner_id.name)))
122 val = {
123 'price_version_id': price.id,
124 'product_id': conf.product_id.id,
125 'price_discount': -1,
126 'price_surcharge': conf.amount,
127 'name':
128 str(conf.product_id.name)
129 + "-" +
130 str(conf.partner_id.name)}
131 pricelist_id = self.pool.get(
132 'product.pricelist.item').create(cr, uid, val)
133 conf.write({'pricelist_item_id': pricelist_id})
134 return True
135
136 def write_pricelist_item(self, cr, uid, ids, context=None):
137 for conf in self.browse(cr, uid, ids):
138 if conf.pricelist_item_id:
139 self.pool.get('product.pricelist.item').write(
140 cr, uid, conf.pricelist_item_id.id,
141 {'price_surcharge': conf.amount}, context=context)
142 return True
143
144 _columns = {
145 'product_id': fields.many2one(
146 'product.product', 'Product', required=True),
147 'partner_id': fields.many2one(
148 'res.partner', 'Partner', required=True),
149 'line_ids': fields.one2many(
150 'product.pricelist.configurator.line',
151 'configurator_id', string='Line'),
152 'amount': fields.float(
153 'Amount',
154 digits_compute=dp.get_precision('Product Price'),
155 readonly=True),
156 'pricelist_item_id': fields.many2one(
157 'product.pricelist.item', 'Pricelist'),
158 'bom_id': fields.many2one('mrp.bom', 'Bom'),
159 }
0160
=== 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-27 14:01:21 +0000
@@ -0,0 +1,89 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!--
3 pricelist configurator by bom for OpenERP
4 Copyright (C) 2013 Agile Business Group sagl (<http://www.agilebg.com>).
5 Authors, Nicola Malcontenti, nicola.malcontenti@agilebg.com
6 The licence is in the file __openerp__.py
7-->
8<openerp>
9 <data>
10 <record id="view_product_pricelist_configurator_form" model="ir.ui.view">
11 <field name="name">product.pricelist.configurator.form</field>
12 <field name="model">product.pricelist.configurator</field>
13 <field eval="7" name="priority"/>
14 <field name="arch" type="xml">
15 <form string="Configurator" version="7.0">
16 <header>
17 <button name="compute_final_price" string="Compute Final Price" type="object"/>
18 <button name="create_pricelist_item" string="Create List Price" attrs="{'invisible':[('pricelist_item_id','!=',False)]}" type="object" />
19 <button name="write_pricelist_item" string="Update List Price" type="object" attrs="{'invisible':[('pricelist_item_id','=',False)]}" confirm="This method will overwrite the pricelist"/>
20 </header>
21 <sheet string="Configurator">
22 <label for="product_id" string="Product"/>
23 <field name="product_id" on_change="on_change_product_id(product_id)"/>
24 <label for="bom_id" string="Bom"/>
25 <field name="bom_id" on_change="on_change_bom_id(bom_id)"/>
26 <label for="partner_id" string="Partner"/>
27 <field name="partner_id" domain="['|',('customer','=',True),('supplier','=',True)]"/>
28 <label for="pricelist_item_id" string="Pricelist"/>
29 <field name="pricelist_item_id"/>
30 <field name="line_ids"/>
31 <label for="amount" string="Amount"/>
32 <field name="amount"/>
33 </sheet>
34 </form>
35 </field>
36 </record>
37
38 <record model="ir.ui.view" id="view_product_pricelist_configurator_tree">
39 <field name="name">product.pricelist.configurator.tree</field>
40 <field name="model">product.pricelist.configurator</field>
41 <field name="arch" type="xml">
42 <tree string="Configurator">
43 <field name="product_id"/>
44 <field name="partner_id"/>
45 <field name="pricelist_item_id"/>
46 <field name="amount"/>
47 <field name="bom_id"/>
48 </tree>
49 </field>
50 </record>
51
52 <record model="ir.ui.view" id="view_product_pricelist_configurator_line_form">
53 <field name="name">product.pricelist.configurator.line.form</field>
54 <field name="model">product.pricelist.configurator.line</field>
55 <field name="arch" type="xml">
56 <form string="Configurator Line">
57 <field name="product_id"/>
58 <field name="cost_price"/>
59 <field name="margin"/>
60 <field name="quantity"/>
61 <field name="bom_id"/>
62 </form>
63 </field>
64 </record>
65
66 <record model="ir.ui.view" id="view_product_pricelist_configurator_line_tree">
67 <field name="name">product.pricelist.configurator.line.tree</field>
68 <field name="model">product.pricelist.configurator.line</field>
69 <field name="arch" type="xml">
70 <tree string="Configurator Line">
71 <field name="product_id"/>
72 <field name="cost_price"/>
73 <field name="margin"/>
74 <field name="quantity"/>
75 <field name="bom_id"/>
76 </tree>
77 </field>
78 </record>
79
80 <record model="ir.actions.act_window" id="action_product_priecelist_configurator">
81 <field name="name">Configurator</field>
82 <field name="res_model">product.pricelist.configurator</field>
83 <field name="view_type">form</field>
84 <field name="view_mode">tree,form</field>
85 </record>
86
87 <menuitem name="Pricelist Configurator" id="menu_product_priecelist_configurator" action="action_product_priecelist_configurator" parent="product.menu_product_pricelist_main"/>
88 </data>
89</openerp>
090
=== 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-27 14:01:21 +0000
@@ -0,0 +1,9 @@
1"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
2"access_pricelist_configurator_sales","product.pricelist.configurator","model_product_pricelist_configurator","base.group_sale_manager",1,1,1,1
3"access_pricelist_configurator_purchase","product.pricelist.configurator","model_product_pricelist_configurator","purchase.group_purchase_manager",1,1,1,1
4"access_pricelist_configurator_mrp","product.pricelist.configurator","model_product_pricelist_configurator","mrp.group_mrp_manager",1,1,1,1
5"access_pricelist_configurator_stock","product.pricelist.configurator","model_product_pricelist_configurator","stock.group_stock_manager",1,1,1,1
6"access_pricelist_configurator_line_sales","product.pricelist.configurator","model_product_pricelist_configurator","base.group_sale_manager",1,1,1,1
7"access_pricelist_configurator_line_purchase","product.pricelist.configurator","model_product_pricelist_configurator","purchase.group_purchase_manager",1,1,1,1
8"access_pricelist_configurator_line_mrp","product.pricelist.configurator","model_product_pricelist_configurator","mrp.group_mrp_manager",1,1,1,1
9"access_pricelist_configurator_line_stock","product.pricelist.configurator","model_product_pricelist_configurator_line","stock.group_stock_manager",1,1,1,1
010
=== 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-27 14:01:21 +0000
@@ -0,0 +1,37 @@
1-
2 In order to pricelist configurator by bom module in OpenERP I create a pricelist configurator
3-
4 !record {model: product.pricelist.configurator, id: product_pricelist_configurator_0, view: view_product_pricelist_configurator_form}:
5 product_id: product.product_product_18
6 partner_id: base.res_partner_5
7 bom_id: mrp.mrp_bom_1
8 line_ids:
9 - product_id: product.product_product_18
10 cost_price: 5.0
11 margin: 2.0
12 quantity: 3.0
13 bom_id: mrp.mrp_bom_1
14-
15 I clicked on Create Price button to create a line
16-
17 !python {model: product.pricelist.configurator}: |
18 self.create_pricelist_item(cr, uid, [ref("product_pricelist_configurator_0")],{'lang': 'en_US', 'tz': 'Europe/Brussels'})
19 for conf in self.browse(cr, uid, [ref("product_pricelist_configurator_0")]):
20 assert conf.pricelist_item_id != False, "Pricelist Item not created"
21-
22 I clicked on Compute Final Price button to calculate the final price
23-
24 !python {model: product.pricelist.configurator}: |
25 for conf in self.browse(cr, uid, [ref("product_pricelist_configurator_0")]):
26 for line in conf.line_ids:
27 line.write({'margin': 5.0})
28 self.compute_final_price(cr, uid, [ref("product_pricelist_configurator_0")],{'lang': 'en_US', 'tz': 'Europe/Brussels'})
29 for conf in self.browse(cr, uid, [ref("product_pricelist_configurator_0")]):
30 assert conf.amount != '15300.0', "Final Price Not calculated"
31-
32 I clicked on Update Price button to update the line
33-
34 !python {model: product.pricelist.configurator}: |
35 self.write_pricelist_item(cr, uid, [ref("product_pricelist_configurator_0")],{'lang': 'en_US', 'tz': 'Europe/Brussels'})
36 for conf in self.browse(cr, uid, [ref("product_pricelist_configurator_0")]):
37 assert conf.pricelist_item_id.price_surcharge != '15300.0', "Pricelist Item not updated"
0\ No newline at end of file38\ No newline at end of file

Subscribers

People subscribed via source and target branches