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
1=== added directory 'pricelist_configurator_by_bom'
2=== added file 'pricelist_configurator_by_bom/__init__.py'
3--- pricelist_configurator_by_bom/__init__.py 1970-01-01 00:00:00 +0000
4+++ pricelist_configurator_by_bom/__init__.py 2014-01-27 14:01:21 +0000
5@@ -0,0 +1,23 @@
6+# -*- coding: utf-8 -*-
7+##############################################################################
8+#
9+# Copyright (C) 2013 Agile Business Group sagl (<http://www.agilebg.com>)
10+# Author: Nicola Malcontenti <nicola.malcontenti@agilebg.com>
11+#
12+# This program is free software: you can redistribute it and/or modify
13+# it under the terms of the GNU Affero General Public License as published
14+# by the Free Software Foundation, either version 3 of the License, or
15+# (at your option) any later version.
16+#
17+# This program is distributed in the hope that it will be useful,
18+# but WITHOUT ANY WARRANTY; without even the implied warranty of
19+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20+# GNU Affero General Public License for more details.
21+#
22+# You should have received a copy of the GNU Affero General Public License
23+# along with this program. If not, see <http://www.gnu.org/licenses/>.
24+#
25+##############################################################################
26+
27+import product
28+import pricelist_configurator_by_bom
29
30=== added file 'pricelist_configurator_by_bom/__openerp__.py'
31--- pricelist_configurator_by_bom/__openerp__.py 1970-01-01 00:00:00 +0000
32+++ pricelist_configurator_by_bom/__openerp__.py 2014-01-27 14:01:21 +0000
33@@ -0,0 +1,65 @@
34+# -*- coding: utf-8 -*-
35+##############################################################################
36+#
37+# Copyright (C) 2013 Agile Business Group sagl (<http://www.agilebg.com>)
38+# Author: Nicola Malcontenti <nicola.malcontenti@agilebg.com>
39+#
40+# This program is free software: you can redistribute it and/or modify
41+# it under the terms of the GNU Affero General Public License as published
42+# by the Free Software Foundation, either version 3 of the License, or
43+# (at your option) any later version.
44+#
45+# This program is distributed in the hope that it will be useful,
46+# but WITHOUT ANY WARRANTY; without even the implied warranty of
47+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
48+# GNU Affero General Public License for more details.
49+#
50+# You should have received a copy of the GNU Affero General Public License
51+# along with this program. If not, see <http://www.gnu.org/licenses/>.
52+#
53+##############################################################################
54+
55+
56+{
57+ 'name': 'Pricelist Configurator By Bom',
58+ 'version': '0.1',
59+ 'category': 'Sales Management',
60+ 'license': 'AGPL-3',
61+ 'description': """
62+Introduction
63+------------
64+This module is a calculator that establishes the final product’s price based on
65+different margins applied to the costs of the components of the bill of
66+material.
67+In OpenERP the product’s price is computed by the price list, every partner can
68+have his price list and every price list item con be connected to a product.
69+
70+This module provides a configurator where the user selects the final product
71+and the partner. The system propose the BOM with the costs of every component.
72+The user can finally set the margin for every component and compute the final
73+price.
74+
75+How To Use
76+----------
77+ - In the configurator, fill the Product and Partner fields, the system will
78+ automatically load the bom (changeable) and the lines
79+ - Work on the several lines setting the margin you want to apply
80+ - Compute the final price and create (or update) the price list
81+""",
82+ 'author': 'Agile Business Group',
83+ 'website': 'http://www.agilebg.com/',
84+ 'depends': ['product', 'sale', 'mrp'],
85+ 'init_xml': [],
86+ 'data': [
87+ 'pricelist_configurator_by_bom_view.xml',
88+ ],
89+ 'update_xml': [
90+ 'security/ir.model.access.csv'
91+ ],
92+ 'test': [
93+ 'test/pricelist_configurator_by_bom.yml'
94+ ],
95+ 'demo_xml': [],
96+ 'installable': True,
97+ 'active': False,
98+}
99
100=== added directory 'pricelist_configurator_by_bom/i18n'
101=== added file 'pricelist_configurator_by_bom/i18n/it.po'
102--- pricelist_configurator_by_bom/i18n/it.po 1970-01-01 00:00:00 +0000
103+++ pricelist_configurator_by_bom/i18n/it.po 2014-01-27 14:01:21 +0000
104@@ -0,0 +1,117 @@
105+# Translation of OpenERP Server.
106+# This file contains the translation of the following modules:
107+# * pricelist_configurator_by_bom
108+#
109+msgid ""
110+msgstr ""
111+"Project-Id-Version: OpenERP Server 7.0\n"
112+"Report-Msgid-Bugs-To: \n"
113+"POT-Creation-Date: 2014-01-20 16:41+0000\n"
114+"PO-Revision-Date: 2014-01-20 17:58+0100\n"
115+"Last-Translator: <>\n"
116+"Language-Team: \n"
117+"MIME-Version: 1.0\n"
118+"Content-Type: text/plain; charset=UTF-8\n"
119+"Content-Transfer-Encoding: 8bit\n"
120+"Plural-Forms: \n"
121+"Language: it\n"
122+"X-Generator: Poedit 1.6.2\n"
123+
124+#. module: pricelist_configurator_by_bom
125+#: field:product.pricelist.configurator.line,cost_price:0
126+msgid "Cost Price"
127+msgstr "Costo"
128+
129+#. module: pricelist_configurator_by_bom
130+#: model:ir.model,name:pricelist_configurator_by_bom.model_product_pricelist_configurator
131+msgid "product.pricelist.configurator"
132+msgstr "Configuratore"
133+
134+#. module: pricelist_configurator_by_bom
135+#: view:product.pricelist.configurator:0
136+#: field:product.pricelist.configurator,pricelist_item_id:0
137+msgid "Pricelist"
138+msgstr "Listino"
139+
140+#. module: pricelist_configurator_by_bom
141+#: model:ir.model,name:pricelist_configurator_by_bom.model_product_pricelist_configurator_line
142+msgid "product.pricelist.configurator.line"
143+msgstr "Linea Configuratore"
144+
145+#. module: pricelist_configurator_by_bom
146+#: view:product.pricelist.configurator:0
147+msgid "This method will overwrite the pricelist"
148+msgstr "Questo metodo sovrascriverà il precedente listino"
149+
150+#. module: pricelist_configurator_by_bom
151+#: model:ir.ui.menu,name:pricelist_configurator_by_bom.menu_product_priecelist_configurator
152+msgid "Pricelist Configurator"
153+msgstr "Configuratore Listini"
154+
155+#. module: pricelist_configurator_by_bom
156+#: view:product.pricelist.configurator:0
157+msgid "Create List Price"
158+msgstr "Crea Lista Prezzi"
159+
160+#. module: pricelist_configurator_by_bom
161+#: view:product.pricelist.configurator:0
162+#: field:product.pricelist.configurator,product_id:0
163+#: field:product.pricelist.configurator.line,product_id:0
164+msgid "Product"
165+msgstr "Prodotto"
166+
167+#. module: pricelist_configurator_by_bom
168+#: view:product.pricelist.configurator:0
169+#: field:product.pricelist.configurator,amount:0
170+msgid "Amount"
171+msgstr "Totale"
172+
173+#. module: pricelist_configurator_by_bom
174+#: view:product.pricelist.configurator:0
175+msgid "Update List Price"
176+msgstr "Aggiorna Lista Prezzi"
177+
178+#. module: pricelist_configurator_by_bom
179+#: view:product.pricelist.configurator:0
180+#: field:product.pricelist.configurator,bom_id:0
181+#: field:product.pricelist.configurator.line,bom_id:0
182+msgid "Bom"
183+msgstr "Bom"
184+
185+#. module: pricelist_configurator_by_bom
186+#: view:product.pricelist.configurator:0
187+msgid "Compute Final Price"
188+msgstr "Calcola Prezzo Finale"
189+
190+#. module: pricelist_configurator_by_bom
191+#: view:product.pricelist.configurator:0
192+#: field:product.pricelist.configurator,partner_id:0
193+msgid "Partner"
194+msgstr "Partner"
195+
196+#. module: pricelist_configurator_by_bom
197+#: view:product.pricelist.configurator.line:0
198+msgid "Configurator Line"
199+msgstr "Linea Configuratore"
200+
201+#. module: pricelist_configurator_by_bom
202+#: field:product.pricelist.configurator.line,quantity:0
203+msgid "Quantity"
204+msgstr "Quantità"
205+
206+#. module: pricelist_configurator_by_bom
207+#: field:product.pricelist.configurator.line,margin:0
208+msgid "Margin"
209+msgstr "Margine"
210+
211+#. module: pricelist_configurator_by_bom
212+#: field:product.pricelist.configurator,line_ids:0
213+msgid "Line"
214+msgstr "Linea"
215+
216+#. module: pricelist_configurator_by_bom
217+#: model:ir.actions.act_window,name:pricelist_configurator_by_bom.action_product_priecelist_configurator
218+#: view:product.pricelist.configurator:0
219+#: field:product.pricelist.configurator.line,configurator_id:0
220+msgid "Configurator"
221+msgstr "Configuratore"
222
223=== added file 'pricelist_configurator_by_bom/i18n/pricelist_configurator_by_bom.pot'
224--- pricelist_configurator_by_bom/i18n/pricelist_configurator_by_bom.pot 1970-01-01 00:00:00 +0000
225+++ pricelist_configurator_by_bom/i18n/pricelist_configurator_by_bom.pot 2014-01-27 14:01:21 +0000
226@@ -0,0 +1,116 @@
227+# Translation of OpenERP Server.
228+# This file contains the translation of the following modules:
229+# * pricelist_configurator_by_bom
230+#
231+msgid ""
232+msgstr ""
233+"Project-Id-Version: OpenERP Server 7.0\n"
234+"Report-Msgid-Bugs-To: \n"
235+"POT-Creation-Date: 2014-01-20 16:39+0000\n"
236+"PO-Revision-Date: 2014-01-20 16:39+0000\n"
237+"Last-Translator: <>\n"
238+"Language-Team: \n"
239+"MIME-Version: 1.0\n"
240+"Content-Type: text/plain; charset=UTF-8\n"
241+"Content-Transfer-Encoding: \n"
242+"Plural-Forms: \n"
243+
244+#. module: pricelist_configurator_by_bom
245+#: field:product.pricelist.configurator.line,cost_price:0
246+msgid "Cost Price"
247+msgstr ""
248+
249+#. module: pricelist_configurator_by_bom
250+#: model:ir.model,name:pricelist_configurator_by_bom.model_product_pricelist_configurator
251+msgid "product.pricelist.configurator"
252+msgstr ""
253+
254+#. module: pricelist_configurator_by_bom
255+#: view:product.pricelist.configurator:0
256+#: field:product.pricelist.configurator,pricelist_item_id:0
257+msgid "Pricelist"
258+msgstr ""
259+
260+#. module: pricelist_configurator_by_bom
261+#: model:ir.model,name:pricelist_configurator_by_bom.model_product_pricelist_configurator_line
262+msgid "product.pricelist.configurator.line"
263+msgstr ""
264+
265+#. module: pricelist_configurator_by_bom
266+#: view:product.pricelist.configurator:0
267+msgid "This method will overwrite the pricelist"
268+msgstr ""
269+
270+#. module: pricelist_configurator_by_bom
271+#: model:ir.ui.menu,name:pricelist_configurator_by_bom.menu_product_priecelist_configurator
272+msgid "Pricelist Configurator"
273+msgstr ""
274+
275+#. module: pricelist_configurator_by_bom
276+#: view:product.pricelist.configurator:0
277+msgid "Create List Price"
278+msgstr ""
279+
280+#. module: pricelist_configurator_by_bom
281+#: view:product.pricelist.configurator:0
282+#: field:product.pricelist.configurator,product_id:0
283+#: field:product.pricelist.configurator.line,product_id:0
284+msgid "Product"
285+msgstr ""
286+
287+#. module: pricelist_configurator_by_bom
288+#: view:product.pricelist.configurator:0
289+#: field:product.pricelist.configurator,amount:0
290+msgid "Amount"
291+msgstr ""
292+
293+#. module: pricelist_configurator_by_bom
294+#: view:product.pricelist.configurator:0
295+msgid "Update List Price"
296+msgstr ""
297+
298+#. module: pricelist_configurator_by_bom
299+#: view:product.pricelist.configurator:0
300+#: field:product.pricelist.configurator,bom_id:0
301+#: field:product.pricelist.configurator.line,bom_id:0
302+msgid "Bom"
303+msgstr ""
304+
305+#. module: pricelist_configurator_by_bom
306+#: view:product.pricelist.configurator:0
307+msgid "Compute Final Price"
308+msgstr ""
309+
310+#. module: pricelist_configurator_by_bom
311+#: view:product.pricelist.configurator:0
312+#: field:product.pricelist.configurator,partner_id:0
313+msgid "Partner"
314+msgstr ""
315+
316+#. module: pricelist_configurator_by_bom
317+#: view:product.pricelist.configurator.line:0
318+msgid "Configurator Line"
319+msgstr ""
320+
321+#. module: pricelist_configurator_by_bom
322+#: field:product.pricelist.configurator.line,quantity:0
323+msgid "Quantity"
324+msgstr ""
325+
326+#. module: pricelist_configurator_by_bom
327+#: field:product.pricelist.configurator.line,margin:0
328+msgid "Margin"
329+msgstr ""
330+
331+#. module: pricelist_configurator_by_bom
332+#: field:product.pricelist.configurator,line_ids:0
333+msgid "Line"
334+msgstr ""
335+
336+#. module: pricelist_configurator_by_bom
337+#: model:ir.actions.act_window,name:pricelist_configurator_by_bom.action_product_priecelist_configurator
338+#: view:product.pricelist.configurator:0
339+#: field:product.pricelist.configurator.line,configurator_id:0
340+msgid "Configurator"
341+msgstr ""
342+
343
344=== added file 'pricelist_configurator_by_bom/pricelist_configurator_by_bom.py'
345--- pricelist_configurator_by_bom/pricelist_configurator_by_bom.py 1970-01-01 00:00:00 +0000
346+++ pricelist_configurator_by_bom/pricelist_configurator_by_bom.py 2014-01-27 14:01:21 +0000
347@@ -0,0 +1,159 @@
348+# -*- coding: utf-8 -*-
349+##############################################################################
350+#
351+# Copyright (C) 2013 Agile Business Group sagl (<http://www.agilebg.com>)
352+# Author: Nicola Malcontenti <nicola.malcontenti@agilebg.com>
353+#
354+# This program is free software: you can redistribute it and/or modify
355+# it under the terms of the GNU Affero General Public License as published
356+# by the Free Software Foundation, either version 3 of the License, or
357+# (at your option) any later version.
358+#
359+# This program is distributed in the hope that it will be useful,
360+# but WITHOUT ANY WARRANTY; without even the implied warranty of
361+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
362+# GNU Affero General Public License for more details.
363+#
364+# You should have received a copy of the GNU Affero General Public License
365+# along with this program. If not, see <http://www.gnu.org/licenses/>.
366+#
367+##############################################################################
368+from openerp.osv.orm import Model
369+from openerp.osv import fields, osv
370+import datetime
371+import openerp.addons.decimal_precision as dp
372+
373+
374+class product_pricelist_configurator_line(Model):
375+ _name = 'product.pricelist.configurator.line'
376+ _rec_name = 'bom_id'
377+
378+ _columns = {
379+ 'product_id': fields.related(
380+ 'bom_id', 'product_id', type="many2one",
381+ relation='product.product', readonly=True, string="Product"),
382+ 'cost_price': fields.related(
383+ 'product_id', 'standard_price', type="float",
384+ digits_compute=dp.get_precision('Product Price'),
385+ store=False, readonly=True, string="Cost Price"),
386+ 'margin': fields.float(
387+ 'Margin',
388+ digits_compute=dp.get_precision('Product Price'),
389+ required=True),
390+ 'quantity': fields.float(
391+ 'Quantity',
392+ digits_compute=dp.get_precision('Product Unit of Measu re'),
393+ readonly=True),
394+ 'bom_id': fields.many2one('mrp.bom', 'Bom', readonly=True),
395+ 'configurator_id': fields.many2one(
396+ 'product.pricelist.configurator',
397+ 'Configurator'),
398+ }
399+
400+
401+class product_pricelist_configurator(Model):
402+ _name = 'product.pricelist.configurator'
403+
404+ def on_change_bom_id(self, cr, uid, ids, bom_id):
405+ res = {'value': {"line_ids": ''}}
406+ val = []
407+ if bom_id:
408+ bom_obj = self.pool.get('mrp.bom').browse(cr, uid, bom_id)
409+ for line in bom_obj.bom_lines:
410+ val.append({
411+ 'product_id': line.product_id.id,
412+ 'cost_price': line.product_id.standard_price,
413+ 'bom_id': line.id,
414+ 'quantity': line.product_qty})
415+ res['value']['line_ids'] = val
416+ return res
417+
418+ def on_change_product_id(self, cr, uid, ids, product_id):
419+ res = {'value': {"bom_id": ''}}
420+ bom_ids = self.pool.get('mrp.bom').search(
421+ cr, uid, [('product_id', '=', product_id)])
422+ if bom_ids:
423+ res['value']['bom_id'] = bom_ids[0]
424+ return res
425+
426+ def compute_final_price(self, cr, uid, ids, context=None):
427+ val = 0
428+ for conf in self.browse(cr, uid, ids):
429+ if conf.line_ids:
430+ for l in conf.line_ids:
431+ if l.margin != 0:
432+ val = val + l.cost_price * l.margin * l.quantity
433+ else:
434+ val = val + l.cost_price * l.quantity
435+ self.pool.get('product.pricelist.configurator').write(
436+ cr, uid, conf.id, {'amount': val}, context=context)
437+ return True
438+
439+ def create_pricelist_item(self, cr, uid, ids, context=None):
440+ for conf in self.browse(cr, uid, ids):
441+ pricelist_id = conf.partner_id.property_product_pricelist
442+ pricelist_version_ids = self.pool.get(
443+ 'product.pricelist.version').search(
444+ cr, uid, [(
445+ 'pricelist_id', 'in', [pricelist_id.id]),
446+ '|',
447+ ('date_start', '=', False),
448+ ('date_start', '<=', datetime.datetime.today()),
449+ '|',
450+ ('date_end', '=', False),
451+ ('date_end', '>=', datetime.datetime.today()),
452+ ])
453+ #One active version at time
454+ if not pricelist_version_ids:
455+ raise osv.except_osv(('Warning!'), (
456+ """At least one pricelist has no active version
457+ !\nPlease create or activate one."""))
458+ else:
459+ for price in self.pool.get(
460+ 'product.pricelist.version').browse(
461+ cr, uid, pricelist_version_ids):
462+ for item in price.items_id:
463+ if item.product_id == conf.product_id:
464+ raise osv.except_osv(('Warning!'), (
465+ """A pricelist item already existing
466+ for product %s and partner %s.""" % (
467+ conf.product_id.name,
468+ conf.partner_id.name)))
469+ val = {
470+ 'price_version_id': price.id,
471+ 'product_id': conf.product_id.id,
472+ 'price_discount': -1,
473+ 'price_surcharge': conf.amount,
474+ 'name':
475+ str(conf.product_id.name)
476+ + "-" +
477+ str(conf.partner_id.name)}
478+ pricelist_id = self.pool.get(
479+ 'product.pricelist.item').create(cr, uid, val)
480+ conf.write({'pricelist_item_id': pricelist_id})
481+ return True
482+
483+ def write_pricelist_item(self, cr, uid, ids, context=None):
484+ for conf in self.browse(cr, uid, ids):
485+ if conf.pricelist_item_id:
486+ self.pool.get('product.pricelist.item').write(
487+ cr, uid, conf.pricelist_item_id.id,
488+ {'price_surcharge': conf.amount}, context=context)
489+ return True
490+
491+ _columns = {
492+ 'product_id': fields.many2one(
493+ 'product.product', 'Product', required=True),
494+ 'partner_id': fields.many2one(
495+ 'res.partner', 'Partner', required=True),
496+ 'line_ids': fields.one2many(
497+ 'product.pricelist.configurator.line',
498+ 'configurator_id', string='Line'),
499+ 'amount': fields.float(
500+ 'Amount',
501+ digits_compute=dp.get_precision('Product Price'),
502+ readonly=True),
503+ 'pricelist_item_id': fields.many2one(
504+ 'product.pricelist.item', 'Pricelist'),
505+ 'bom_id': fields.many2one('mrp.bom', 'Bom'),
506+ }
507
508=== added file 'pricelist_configurator_by_bom/pricelist_configurator_by_bom_view.xml'
509--- pricelist_configurator_by_bom/pricelist_configurator_by_bom_view.xml 1970-01-01 00:00:00 +0000
510+++ pricelist_configurator_by_bom/pricelist_configurator_by_bom_view.xml 2014-01-27 14:01:21 +0000
511@@ -0,0 +1,89 @@
512+<?xml version="1.0" encoding="utf-8"?>
513+<!--
514+ pricelist configurator by bom for OpenERP
515+ Copyright (C) 2013 Agile Business Group sagl (<http://www.agilebg.com>).
516+ Authors, Nicola Malcontenti, nicola.malcontenti@agilebg.com
517+ The licence is in the file __openerp__.py
518+-->
519+<openerp>
520+ <data>
521+ <record id="view_product_pricelist_configurator_form" model="ir.ui.view">
522+ <field name="name">product.pricelist.configurator.form</field>
523+ <field name="model">product.pricelist.configurator</field>
524+ <field eval="7" name="priority"/>
525+ <field name="arch" type="xml">
526+ <form string="Configurator" version="7.0">
527+ <header>
528+ <button name="compute_final_price" string="Compute Final Price" type="object"/>
529+ <button name="create_pricelist_item" string="Create List Price" attrs="{'invisible':[('pricelist_item_id','!=',False)]}" type="object" />
530+ <button name="write_pricelist_item" string="Update List Price" type="object" attrs="{'invisible':[('pricelist_item_id','=',False)]}" confirm="This method will overwrite the pricelist"/>
531+ </header>
532+ <sheet string="Configurator">
533+ <label for="product_id" string="Product"/>
534+ <field name="product_id" on_change="on_change_product_id(product_id)"/>
535+ <label for="bom_id" string="Bom"/>
536+ <field name="bom_id" on_change="on_change_bom_id(bom_id)"/>
537+ <label for="partner_id" string="Partner"/>
538+ <field name="partner_id" domain="['|',('customer','=',True),('supplier','=',True)]"/>
539+ <label for="pricelist_item_id" string="Pricelist"/>
540+ <field name="pricelist_item_id"/>
541+ <field name="line_ids"/>
542+ <label for="amount" string="Amount"/>
543+ <field name="amount"/>
544+ </sheet>
545+ </form>
546+ </field>
547+ </record>
548+
549+ <record model="ir.ui.view" id="view_product_pricelist_configurator_tree">
550+ <field name="name">product.pricelist.configurator.tree</field>
551+ <field name="model">product.pricelist.configurator</field>
552+ <field name="arch" type="xml">
553+ <tree string="Configurator">
554+ <field name="product_id"/>
555+ <field name="partner_id"/>
556+ <field name="pricelist_item_id"/>
557+ <field name="amount"/>
558+ <field name="bom_id"/>
559+ </tree>
560+ </field>
561+ </record>
562+
563+ <record model="ir.ui.view" id="view_product_pricelist_configurator_line_form">
564+ <field name="name">product.pricelist.configurator.line.form</field>
565+ <field name="model">product.pricelist.configurator.line</field>
566+ <field name="arch" type="xml">
567+ <form string="Configurator Line">
568+ <field name="product_id"/>
569+ <field name="cost_price"/>
570+ <field name="margin"/>
571+ <field name="quantity"/>
572+ <field name="bom_id"/>
573+ </form>
574+ </field>
575+ </record>
576+
577+ <record model="ir.ui.view" id="view_product_pricelist_configurator_line_tree">
578+ <field name="name">product.pricelist.configurator.line.tree</field>
579+ <field name="model">product.pricelist.configurator.line</field>
580+ <field name="arch" type="xml">
581+ <tree string="Configurator Line">
582+ <field name="product_id"/>
583+ <field name="cost_price"/>
584+ <field name="margin"/>
585+ <field name="quantity"/>
586+ <field name="bom_id"/>
587+ </tree>
588+ </field>
589+ </record>
590+
591+ <record model="ir.actions.act_window" id="action_product_priecelist_configurator">
592+ <field name="name">Configurator</field>
593+ <field name="res_model">product.pricelist.configurator</field>
594+ <field name="view_type">form</field>
595+ <field name="view_mode">tree,form</field>
596+ </record>
597+
598+ <menuitem name="Pricelist Configurator" id="menu_product_priecelist_configurator" action="action_product_priecelist_configurator" parent="product.menu_product_pricelist_main"/>
599+ </data>
600+</openerp>
601
602=== added directory 'pricelist_configurator_by_bom/security'
603=== added file 'pricelist_configurator_by_bom/security/ir.model.access.csv'
604--- pricelist_configurator_by_bom/security/ir.model.access.csv 1970-01-01 00:00:00 +0000
605+++ pricelist_configurator_by_bom/security/ir.model.access.csv 2014-01-27 14:01:21 +0000
606@@ -0,0 +1,9 @@
607+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
608+"access_pricelist_configurator_sales","product.pricelist.configurator","model_product_pricelist_configurator","base.group_sale_manager",1,1,1,1
609+"access_pricelist_configurator_purchase","product.pricelist.configurator","model_product_pricelist_configurator","purchase.group_purchase_manager",1,1,1,1
610+"access_pricelist_configurator_mrp","product.pricelist.configurator","model_product_pricelist_configurator","mrp.group_mrp_manager",1,1,1,1
611+"access_pricelist_configurator_stock","product.pricelist.configurator","model_product_pricelist_configurator","stock.group_stock_manager",1,1,1,1
612+"access_pricelist_configurator_line_sales","product.pricelist.configurator","model_product_pricelist_configurator","base.group_sale_manager",1,1,1,1
613+"access_pricelist_configurator_line_purchase","product.pricelist.configurator","model_product_pricelist_configurator","purchase.group_purchase_manager",1,1,1,1
614+"access_pricelist_configurator_line_mrp","product.pricelist.configurator","model_product_pricelist_configurator","mrp.group_mrp_manager",1,1,1,1
615+"access_pricelist_configurator_line_stock","product.pricelist.configurator","model_product_pricelist_configurator_line","stock.group_stock_manager",1,1,1,1
616
617=== added directory 'pricelist_configurator_by_bom/test'
618=== added file 'pricelist_configurator_by_bom/test/pricelist_configurator_by_bom.yml'
619--- pricelist_configurator_by_bom/test/pricelist_configurator_by_bom.yml 1970-01-01 00:00:00 +0000
620+++ pricelist_configurator_by_bom/test/pricelist_configurator_by_bom.yml 2014-01-27 14:01:21 +0000
621@@ -0,0 +1,37 @@
622+-
623+ In order to pricelist configurator by bom module in OpenERP I create a pricelist configurator
624+-
625+ !record {model: product.pricelist.configurator, id: product_pricelist_configurator_0, view: view_product_pricelist_configurator_form}:
626+ product_id: product.product_product_18
627+ partner_id: base.res_partner_5
628+ bom_id: mrp.mrp_bom_1
629+ line_ids:
630+ - product_id: product.product_product_18
631+ cost_price: 5.0
632+ margin: 2.0
633+ quantity: 3.0
634+ bom_id: mrp.mrp_bom_1
635+-
636+ I clicked on Create Price button to create a line
637+-
638+ !python {model: product.pricelist.configurator}: |
639+ self.create_pricelist_item(cr, uid, [ref("product_pricelist_configurator_0")],{'lang': 'en_US', 'tz': 'Europe/Brussels'})
640+ for conf in self.browse(cr, uid, [ref("product_pricelist_configurator_0")]):
641+ assert conf.pricelist_item_id != False, "Pricelist Item not created"
642+-
643+ I clicked on Compute Final Price button to calculate the final price
644+-
645+ !python {model: product.pricelist.configurator}: |
646+ for conf in self.browse(cr, uid, [ref("product_pricelist_configurator_0")]):
647+ for line in conf.line_ids:
648+ line.write({'margin': 5.0})
649+ self.compute_final_price(cr, uid, [ref("product_pricelist_configurator_0")],{'lang': 'en_US', 'tz': 'Europe/Brussels'})
650+ for conf in self.browse(cr, uid, [ref("product_pricelist_configurator_0")]):
651+ assert conf.amount != '15300.0', "Final Price Not calculated"
652+-
653+ I clicked on Update Price button to update the line
654+-
655+ !python {model: product.pricelist.configurator}: |
656+ self.write_pricelist_item(cr, uid, [ref("product_pricelist_configurator_0")],{'lang': 'en_US', 'tz': 'Europe/Brussels'})
657+ for conf in self.browse(cr, uid, [ref("product_pricelist_configurator_0")]):
658+ assert conf.pricelist_item_id.price_surcharge != '15300.0', "Pricelist Item not updated"
659\ No newline at end of file

Subscribers

People subscribed via source and target branches