Merge lp:~agilebg/openerp-product-attributes/adding_pricelist_configurator_by_bom_7 into lp:~akretion-team/openerp-product-attributes/7.0-product-customer-code-extraction

Proposed by Nicola Malcontenti - Agile BG
Status: Superseded
Proposed branch: lp:~agilebg/openerp-product-attributes/adding_pricelist_configurator_by_bom_7
Merge into: lp:~akretion-team/openerp-product-attributes/7.0-product-customer-code-extraction
Diff against target: 660 lines (+616/-0)
8 files modified
pricelist_configurator_by_bom/__init__.py (+23/-0)
pricelist_configurator_by_bom/__openerp__.py (+66/-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
Akretion Team Pending
Review via email: mp+203023@code.launchpad.net

This proposal has been superseded by 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.
241. By Lorenzo Battistini

[IMP] description

242. By Lorenzo Battistini

[IMP] description

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

Subscribers

People subscribed via source and target branches