Merge lp:~openerp-dev/openobject-addons/trunk-product-variants-ref-chm into lp:openobject-addons
- trunk-product-variants-ref-chm
- Merge into trunk
Status: | Work in progress |
---|---|
Proposed branch: | lp:~openerp-dev/openobject-addons/trunk-product-variants-ref-chm |
Merge into: | lp:openobject-addons |
Diff against target: |
12892 lines (+2771/-5884) 123 files modified
account/product_view.xml (+25/-30) account_anglo_saxon/product_view.xml (+4/-15) event_sale/event_sale_view.xml (+10/-23) hr_expense/hr_expense.py (+2/-2) hr_expense/hr_expense_view.xml (+7/-5) membership/membership.py (+1/-1) membership/membership_view.xml (+16/-21) mrp/mrp.py (+216/-175) mrp/mrp_demo.xml (+101/-142) mrp/mrp_view.xml (+90/-85) mrp/procurement.py (+4/-2) mrp/product.py (+43/-11) mrp/report/price.py (+2/-2) mrp/security/ir.model.access.csv (+4/-0) mrp/stock.py (+6/-5) mrp/test/bom_with_service_type_product.yml (+7/-7) mrp/test/order_demo.yml (+2/-2) mrp/views/report_mrpbomstructure.xml (+1/-2) mrp/wizard/change_production_qty.py (+2/-2) mrp_byproduct/test/mrp_byproduct.yml (+2/-2) point_of_sale/point_of_sale.py (+68/-18) point_of_sale/point_of_sale_demo.xml (+160/-159) point_of_sale/point_of_sale_view.xml (+61/-9) point_of_sale/security/ir.model.access.csv (+2/-2) point_of_sale/static/src/js/db.js (+1/-1) point_of_sale/static/src/js/models.js (+2/-2) point_of_sale/static/src/js/widgets.js (+1/-1) product/pricelist.py (+22/-7) product/product.py (+332/-209) product/product_data.xml (+0/-5) product/product_demo.xml (+136/-422) product/product_view.xml (+336/-575) product/report/product_label.xml (+1/-1) product/security/ir.model.access.csv (+8/-2) product/security/product_security.xml (+0/-15) product/test/product_pricelist.yml (+8/-8) product_email_template/views/product_view.xml (+5/-5) product_expiry/product_expiry.py (+1/-1) product_expiry/product_expiry_view.xml (+3/-3) product_extended/product_extended.py (+5/-5) product_manufacturer/__init__.py (+0/-24) product_manufacturer/__openerp__.py (+0/-46) product_manufacturer/i18n/ar.po (+0/-75) product_manufacturer/i18n/bg.po (+0/-81) product_manufacturer/i18n/bs.po (+0/-72) product_manufacturer/i18n/ca.po (+0/-82) product_manufacturer/i18n/cs.po (+0/-72) product_manufacturer/i18n/da.po (+0/-72) product_manufacturer/i18n/de.po (+0/-83) product_manufacturer/i18n/el.po (+0/-75) product_manufacturer/i18n/es.po (+0/-83) product_manufacturer/i18n/es_CR.po (+0/-84) product_manufacturer/i18n/es_EC.po (+0/-79) product_manufacturer/i18n/es_MX.po (+0/-89) product_manufacturer/i18n/es_VE.po (+0/-89) product_manufacturer/i18n/et.po (+0/-72) product_manufacturer/i18n/fi.po (+0/-81) product_manufacturer/i18n/fr.po (+0/-82) product_manufacturer/i18n/gl.po (+0/-82) product_manufacturer/i18n/hr.po (+0/-78) product_manufacturer/i18n/hu.po (+0/-77) product_manufacturer/i18n/it.po (+0/-81) product_manufacturer/i18n/ja.po (+0/-75) product_manufacturer/i18n/lt.po (+0/-72) product_manufacturer/i18n/lv.po (+0/-72) product_manufacturer/i18n/mk.po (+0/-72) product_manufacturer/i18n/mn.po (+0/-83) product_manufacturer/i18n/nb.po (+0/-75) product_manufacturer/i18n/nl.po (+0/-82) product_manufacturer/i18n/pl.po (+0/-81) product_manufacturer/i18n/product_manufacturer.pot (+0/-71) product_manufacturer/i18n/pt.po (+0/-81) product_manufacturer/i18n/pt_BR.po (+0/-81) product_manufacturer/i18n/ro.po (+0/-82) product_manufacturer/i18n/ru.po (+0/-81) product_manufacturer/i18n/sl.po (+0/-72) product_manufacturer/i18n/sr.po (+0/-78) product_manufacturer/i18n/sr@latin.po (+0/-72) product_manufacturer/i18n/sv.po (+0/-78) product_manufacturer/i18n/tr.po (+0/-81) product_manufacturer/i18n/zh_CN.po (+0/-81) product_manufacturer/i18n/zh_TW.po (+0/-72) product_manufacturer/product_manufacturer.py (+0/-41) product_manufacturer/product_manufacturer_view.xml (+0/-53) product_manufacturer/security/ir.model.access.csv (+0/-2) project_mrp/project_mrp.py (+1/-1) project_mrp/project_mrp_view.xml (+4/-4) purchase/purchase.py (+6/-0) purchase/purchase_view.xml (+42/-39) purchase_requisition/purchase_requisition.py (+2/-2) purchase_requisition/purchase_requisition_view.xml (+4/-4) report_intrastat/report_intrastat_view.xml (+1/-1) sale/res_config.py (+0/-30) sale/res_config_view.xml (+0/-4) sale/sale.py (+1/-1) sale_mrp/test/cancellation_propagated.yml (+6/-5) sale_mrp/test/sale_mrp.yml (+1/-1) sale_mrp/tests/test_move_explode.py (+2/-2) stock/product.py (+77/-20) stock/product_view.xml (+130/-62) stock/stock_view.xml (+3/-116) stock_account/product_view.xml (+3/-13) stock_account/stock_account.py (+0/-2) stock_landed_costs/product.py (+2/-2) stock_landed_costs/product_view.xml (+10/-8) stock_landed_costs/stock_landed_costs_view.xml (+7/-14) warning/warning.py (+1/-30) warning/warning_view.xml (+2/-2) website_quote/data/website_quotation_demo.xml (+0/-3) website_sale/controllers/main.py (+24/-7) website_sale/data/data.xml (+4/-5) website_sale/data/demo.xml (+257/-2) website_sale/models/__init__.py (+0/-1) website_sale/models/product.py (+90/-30) website_sale/models/res_config.py (+0/-15) website_sale/security/ir.model.access.csv (+6/-4) website_sale/static/src/css/website_sale.css (+20/-0) website_sale/static/src/css/website_sale.sass (+15/-0) website_sale/static/src/js/website.tour.sale.js (+39/-4) website_sale/static/src/js/website_sale.js (+59/-47) website_sale/tests/test_sale_process.py (+1/-0) website_sale/views/templates.xml (+176/-52) website_sale/views/views.xml (+78/-70) |
To merge this branch: | bzr merge lp:~openerp-dev/openobject-addons/trunk-product-variants-ref-chm |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
OpenERP Core Team | Pending | ||
Review via email: mp+217190@code.launchpad.net |
Commit message
Description of the change
- 9368. By Christophe Matthieu (OpenERP)
-
[WIP]
- 9369. By Christophe Matthieu (OpenERP)
-
[MERGE] from trunk
- 9370. By Christophe Matthieu (OpenERP)
-
[IMP] product: remove group_product_
variant and group_product_mono - 9371. By Christophe Matthieu (OpenERP)
-
[WIP]
- 9372. By Christophe Matthieu (OpenERP)
-
[WIP] product: move membership to product template
- 9373. By Christophe Matthieu (OpenERP)
-
[IMP] product: merge variants and information vue
- 9374. By Christophe Matthieu (OpenERP)
-
[IMP] product: create funcion field to sum product variant qty and move field xml to product template
- 9375. By Christophe Matthieu (OpenERP)
-
[IMP] product: remove is_only_child field and add is_product_variant field; add related field
- 9376. By Christophe Matthieu (OpenERP)
-
[WIP]
- 9377. By Christophe Matthieu (OpenERP)
-
[FIX] product product_available
- 9378. By Christophe Matthieu (OpenERP)
-
[MERGE] from trunk
- 9379. By Christophe Matthieu (OpenERP)
-
[FIX] product views
- 9380. By Christophe Matthieu (OpenERP)
-
[FIX] views mode primary of inherit
- 9381. By Christophe Matthieu (OpenERP)
-
[FIX] views mode primary of inherit
- 9382. By Christophe Matthieu (OpenERP)
-
[IMP] stock: move valuation field from product.product to product template
- 9383. By Christophe Matthieu (OpenERP)
-
[IMP] purshase add purchase_count function field on product.template
- 9384. By Christophe Matthieu (OpenERP)
-
[FIX] product views
- 9385. By Christophe Matthieu (OpenERP)
-
[FIX] product views
- 9386. By Christophe Matthieu (OpenERP)
-
[FIX] product views
- 9387. By Christophe Matthieu (OpenERP)
-
[FIX] product views
- 9388. By Christophe Matthieu (OpenERP)
-
[FIX] product views
- 9389. By Christophe Matthieu (OpenERP)
-
[FIX] product views
- 9390. By Christophe Matthieu (OpenERP)
-
[FIX] product views
- 9391. By Christophe Matthieu (OpenERP)
-
[MERGE] from trunk
- 9392. By Christophe Matthieu (OpenERP)
-
[FIX] website_sale: variant searches and search bare
- 9393. By Christophe Matthieu (OpenERP)
-
[IMP] website_sale: search with default_code, description_sale
- 9394. By Christophe Matthieu (OpenERP)
-
[FIX] stock: product views
- 9395. By Christophe Matthieu (OpenERP)
-
[FIX] product_expiry: product view
- 9396. By Christophe Matthieu (OpenERP)
-
[FIX] mrp: product view
- 9397. By Christophe Matthieu (OpenERP)
-
[IMP] product: search product template function of attribute and product.product
- 9398. By Christophe Matthieu (OpenERP)
-
[FIX] product: views
- 9399. By Christophe Matthieu (OpenERP)
-
[IMP] product: button layout
- 9400. By Christophe Matthieu (OpenERP)
-
[IMP] stock: display qty on hand (sum of variants) on product template
- 9401. By Christophe Matthieu (OpenERP)
-
[IMP] product: display qty on product template
- 9402. By Christophe Matthieu (OpenERP)
-
[FIX] purchase: product view
- 9403. By Christophe Matthieu (OpenERP)
-
[FIX] purchase: remove wrong product view
- 9404. By Christophe Matthieu (OpenERP)
-
[IMP] stock: product view
- 9405. By Christophe Matthieu (OpenERP)
-
[FIX] product view
- 9406. By Christophe Matthieu (OpenERP)
-
[FIX] product view
- 9407. By Christophe Matthieu (OpenERP)
-
[IMP] product view
- 9408. By Christophe Matthieu (OpenERP)
-
[IMP] product view
- 9409. By Christophe Matthieu (OpenERP)
-
[IMP] product view
- 9410. By Christophe Matthieu (OpenERP)
-
[IMP] product view
- 9411. By Christophe Matthieu (OpenERP)
-
[IMP] product view
- 9412. By Christophe Matthieu (OpenERP)
-
[IMP] product: Creation of variants; Try to unlink with savepoint
- 9413. By Christophe Matthieu (OpenERP)
-
[FIX] product: _check_ean_key and add contition for call create_variant_ids
- 9414. By Christophe Matthieu (OpenERP)
-
[IMP] membership: membership field invisible if type is not service
- 9415. By Christophe Matthieu (OpenERP)
-
[IMP] product: move warranty to product template, imp view
- 9416. By Christophe Matthieu (OpenERP)
-
[IMP] product: move point of sale fields from product to template
- 9417. By Christophe Matthieu (OpenERP)
-
[IMP] product: move 'Can be Expensed' and 'Can constitute a landed cost' from product to template
- 9418. By Christophe Matthieu (OpenERP)
-
[IMP] stock: moves route_ids from product to template
- 9419. By Christophe Matthieu (OpenERP)
-
[WIP] mrp.bom: refactoring: split mrp.bom
- 9420. By Christophe Matthieu (OpenERP)
-
[WIP] mrp: mrp.bom refactoring
- 9421. By Christophe Matthieu (OpenERP)
-
[IMP] stock: move track fields from product to template
- 9422. By Christophe Matthieu (OpenERP)
-
[FIX] mrp: access right and demo
- 9423. By Christophe Matthieu (OpenERP)
-
[IMP] mrp: bom view
- 9424. By Christophe Matthieu (OpenERP)
-
[FIX] mrp: remove domains: bom_id = False
- 9425. By Christophe Matthieu (OpenERP)
-
[FIX] mrp: bom
- 9426. By Christophe Matthieu (OpenERP)
-
[FIX] mrp: bom and test
- 9427. By Christophe Matthieu (OpenERP)
-
[IMP] product: title view
- 9428. By Christophe Matthieu (OpenERP)
-
[IMP] product view
- 9429. By Christophe Matthieu (OpenERP)
-
[IMP] mrp: re-active report mrp.bom
- 9430. By Christophe Matthieu (OpenERP)
-
[FIX] sale_mrp: test cancelation_
propagate: remove company_id and name - 9431. By Christophe Matthieu (OpenERP)
-
[IMP] mrp: bom & bom.line views
- 9432. By Christophe Matthieu (OpenERP)
-
[FIX] mrp: mrp.bom.line editable tree view
- 9433. By Christophe Matthieu (OpenERP)
-
[IMP] mrp: add a search view for mrp.bom.line
- 9434. By Christophe Matthieu (OpenERP)
-
[FIX] mrp: bom default values and call to _bom_find
- 9435. By Christophe Matthieu (OpenERP)
-
[FIX] mrp: default value for product_uom
- 9436. By Christophe Matthieu (OpenERP)
-
[FIX] mrp: order uom by id for default values
- 9437. By Christophe Matthieu (OpenERP)
-
[FIX] website_sale: filter by attributes
- 9438. By Christophe Matthieu (OpenERP)
-
[IMP] product: split public category into website and pos
- 9439. By Christophe Matthieu (OpenERP)
-
[IMP] website_sale: add a test to customize page and use the variant filter
- 9440. By Christophe Matthieu (OpenERP)
-
[FIX] pos: pos.category
- 9441. By Christophe Matthieu (OpenERP)
-
[FIX] website_sale: category search
- 9442. By Christophe Matthieu (OpenERP)
-
[FIX] website_sale: tour
- 9443. By Christophe Matthieu (OpenERP)
-
[IMP] product: simplify product demo data
- 9444. By Christophe Matthieu (OpenERP)
-
[FIX] website_sale: tour cycling because the 'Product Attribute's Filters' template is activate.
- 9445. By Christophe Matthieu (OpenERP)
-
[FIX] mrp: view, move view_type, view_mode from view to action
- 9446. By Christophe Matthieu (OpenERP)
-
[IMP] product: price_extra is function of attributes value and product template
- 9447. By Christophe Matthieu (OpenERP)
-
[FIX] website_sale: display variant prices and text-muted
- 9448. By Christophe Matthieu (OpenERP)
-
[IMP] website_sale: add type of attributes
- 9449. By Christophe Matthieu (OpenERP)
-
[FIX] website_sale: bug to display attribute values on product detail
- 9450. By Christophe Matthieu (OpenERP)
-
[IMP] product view
- 9451. By Christophe Matthieu (OpenERP)
-
[MERGE] from trunk
Unmerged revisions
- 9451. By Christophe Matthieu (OpenERP)
-
[MERGE] from trunk
- 9450. By Christophe Matthieu (OpenERP)
-
[IMP] product view
- 9449. By Christophe Matthieu (OpenERP)
-
[FIX] website_sale: bug to display attribute values on product detail
- 9448. By Christophe Matthieu (OpenERP)
-
[IMP] website_sale: add type of attributes
- 9447. By Christophe Matthieu (OpenERP)
-
[FIX] website_sale: display variant prices and text-muted
- 9446. By Christophe Matthieu (OpenERP)
-
[IMP] product: price_extra is function of attributes value and product template
- 9445. By Christophe Matthieu (OpenERP)
-
[FIX] mrp: view, move view_type, view_mode from view to action
- 9444. By Christophe Matthieu (OpenERP)
-
[FIX] website_sale: tour cycling because the 'Product Attribute's Filters' template is activate.
- 9443. By Christophe Matthieu (OpenERP)
-
[IMP] product: simplify product demo data
- 9442. By Christophe Matthieu (OpenERP)
-
[FIX] website_sale: tour
Preview Diff
1 | === modified file 'account/product_view.xml' | |||
2 | --- account/product_view.xml 2014-01-22 09:58:26 +0000 | |||
3 | +++ account/product_view.xml 2014-05-26 16:10:21 +0000 | |||
4 | @@ -1,57 +1,52 @@ | |||
5 | 1 | <?xml version="1.0" encoding="utf-8"?> | 1 | <?xml version="1.0" encoding="utf-8"?> |
6 | 2 | <openerp> | 2 | <openerp> |
7 | 3 | <data> | 3 | <data> |
11 | 4 | <record id="product_normal_form_view" model="ir.ui.view"> | 4 | <record id="product_template_form_view" model="ir.ui.view"> |
12 | 5 | <field name="name">product.normal.form.inherit</field> | 5 | <field name="name">product.template.form.inherit</field> |
13 | 6 | <field name="model">product.product</field> | 6 | <field name="model">product.template</field> |
14 | 7 | <field name="priority">5</field> | 7 | <field name="priority">5</field> |
16 | 8 | <field name="inherit_id" ref="product.product_normal_form_view"/> | 8 | <field name="inherit_id" ref="product.product_template_form_view"/> |
17 | 9 | <field name="arch" type="xml"> | 9 | <field name="arch" type="xml"> |
19 | 10 | <notebook position="inside"> | 10 | <page string="Sales" position="after"> |
20 | 11 | <page string="Accounting" groups="account.group_account_invoice"> | 11 | <page string="Accounting" groups="account.group_account_invoice"> |
21 | 12 | <group> | ||
22 | 13 | <label for="categ_id" string="Internal Category"/> | ||
23 | 14 | <div><field name="categ_id" colspan="3" nolabel="1"/></div> | ||
24 | 15 | </group> | ||
25 | 12 | <group name="properties"> | 16 | <group name="properties"> |
26 | 13 | <group> | 17 | <group> |
27 | 14 | <field name="property_account_income" domain="[('type','=','other')]" groups="account.group_account_user" | 18 | <field name="property_account_income" domain="[('type','=','other')]" groups="account.group_account_user" |
29 | 15 | attrs="{'readonly': [('is_only_child', '=', False)]}"/> | 19 | attrs="{'readonly': [('is_product_variant', '=', True)]}"/> |
30 | 16 | <field name="taxes_id" colspan="2" widget="many2many_tags" | 20 | <field name="taxes_id" colspan="2" widget="many2many_tags" |
32 | 17 | attrs="{'readonly':[ '|', ('sale_ok','=',0), ('is_only_child', '=', False)]}"/> | 21 | attrs="{'readonly':[ '|', ('sale_ok','=',0), ('is_product_variant', '=', True)]}"/> |
33 | 18 | </group> | 22 | </group> |
34 | 19 | <group> | 23 | <group> |
35 | 20 | <field name="property_account_expense" domain="[('type','=','other')]" groups="account.group_account_user" | 24 | <field name="property_account_expense" domain="[('type','=','other')]" groups="account.group_account_user" |
37 | 21 | attrs="{'readonly': [('is_only_child', '=', False)]}"/> | 25 | attrs="{'readonly': [('is_product_variant', '=', True)]}"/> |
38 | 22 | <field name="supplier_taxes_id" colspan="2" widget="many2many_tags" | 26 | <field name="supplier_taxes_id" colspan="2" widget="many2many_tags" |
40 | 23 | attrs="{'readonly': [('is_only_child', '=', False)]}"/> | 27 | attrs="{'readonly': [('is_product_variant', '=', True)]}"/> |
41 | 24 | </group> | 28 | </group> |
42 | 25 | </group> | 29 | </group> |
43 | 26 | </page> | 30 | </page> |
45 | 27 | </notebook> | 31 | </page> |
46 | 28 | </field> | 32 | </field> |
47 | 29 | </record> | 33 | </record> |
48 | 30 | 34 | ||
51 | 31 | <record id="product_template_form_view" model="ir.ui.view"> | 35 | <record id="product_template_search_view" model="ir.ui.view"> |
52 | 32 | <field name="name">product.template.product.form.inherit</field> | 36 | <field name="name">product.template.search</field> |
53 | 33 | <field name="model">product.template</field> | 37 | <field name="model">product.template</field> |
55 | 34 | <field name="inherit_id" ref="product.product_template_form_view"/> | 38 | <field name="mode">primary</field> |
56 | 39 | <field name="inherit_id" ref="product.product_template_search_view"/> | ||
57 | 35 | <field name="arch" type="xml"> | 40 | <field name="arch" type="xml"> |
73 | 36 | <notebook position="inside"> | 41 | <field name="product_variant_ids" position="after"> |
74 | 37 | <page string="Accounting"> | 42 | <field name="categ_id"/> |
75 | 38 | <group name="properties"> | 43 | </field> |
76 | 39 | <group> | 44 | <xpath expr="//group[@string='Group by...']" position="inside"> |
77 | 40 | <field name="property_account_income" domain="[('type','<>','view'),('type','<>','consolidation')]"/> | 45 | <filter string='Category' icon="terp-stock_symbol-selection" domain="[]" context="{'group_by' : 'categ_id'}"/> |
78 | 41 | <field name="taxes_id" colspan="2" widget="many2many_tags"/> | 46 | </xpath> |
79 | 42 | </group> | 47 | </field> |
65 | 43 | <group> | ||
66 | 44 | <field name="property_account_expense" domain="[('type','<>','view'),('type','<>','consolidation')]"/> | ||
67 | 45 | <field name="supplier_taxes_id" colspan="2" widget="many2many_tags"/> | ||
68 | 46 | </group> | ||
69 | 47 | </group> | ||
70 | 48 | </page> | ||
71 | 49 | </notebook> | ||
72 | 50 | </field> | ||
80 | 51 | </record> | 48 | </record> |
81 | 52 | 49 | ||
82 | 53 | |||
83 | 54 | |||
84 | 55 | <record id="view_category_property_form" model="ir.ui.view"> | 50 | <record id="view_category_property_form" model="ir.ui.view"> |
85 | 56 | <field name="name">product.category.property.form.inherit</field> | 51 | <field name="name">product.category.property.form.inherit</field> |
86 | 57 | <field name="model">product.category</field> | 52 | <field name="model">product.category</field> |
87 | 58 | 53 | ||
88 | === modified file 'account_anglo_saxon/product_view.xml' | |||
89 | --- account_anglo_saxon/product_view.xml 2013-11-22 05:48:50 +0000 | |||
90 | +++ account_anglo_saxon/product_view.xml 2014-05-26 16:10:21 +0000 | |||
91 | @@ -1,29 +1,18 @@ | |||
92 | 1 | <?xml version="1.0"?> | 1 | <?xml version="1.0"?> |
93 | 2 | <openerp> | 2 | <openerp> |
94 | 3 | <data> | 3 | <data> |
96 | 4 | <record id="product_normal_form_view" model="ir.ui.view"> | 4 | <record id="product_template_form_view" model="ir.ui.view"> |
97 | 5 | <field name="name">product.normal.form.inherit.stock</field> | 5 | <field name="name">product.normal.form.inherit.stock</field> |
98 | 6 | <field name="model">product.product</field> | ||
99 | 7 | <field name="inherit_id" ref="account.product_normal_form_view"/> | ||
100 | 8 | <field name="arch" type="xml"> | ||
101 | 9 | <field name="property_account_expense" position="after"> | ||
102 | 10 | <label string="" colspan="2"/> | ||
103 | 11 | <field name="property_account_creditor_price_difference" domain="[('type','<>','view'),('type','<>','consolidation')]" attrs="{'readonly':[('purchase_ok','=',0)]}" /> | ||
104 | 12 | <newline/> | ||
105 | 13 | </field> | ||
106 | 14 | </field> | ||
107 | 15 | </record> | ||
108 | 16 | |||
109 | 17 | <record id="product_template_form_view" model="ir.ui.view"> | ||
110 | 18 | <field name="name">product.template.product.form.inherit</field> | ||
111 | 19 | <field name="model">product.template</field> | 6 | <field name="model">product.template</field> |
112 | 20 | <field name="inherit_id" ref="account.product_template_form_view"/> | 7 | <field name="inherit_id" ref="account.product_template_form_view"/> |
113 | 21 | <field name="arch" type="xml"> | 8 | <field name="arch" type="xml"> |
114 | 22 | <field name="property_account_expense" position="after"> | 9 | <field name="property_account_expense" position="after"> |
115 | 10 | <label string="" colspan="2"/> | ||
116 | 11 | <field name="purchase_ok" invisible="1"/> | ||
117 | 23 | <field name="property_account_creditor_price_difference" domain="[('type','<>','view'),('type','<>','consolidation')]" attrs="{'readonly':[('purchase_ok','=',0)]}" /> | 12 | <field name="property_account_creditor_price_difference" domain="[('type','<>','view'),('type','<>','consolidation')]" attrs="{'readonly':[('purchase_ok','=',0)]}" /> |
118 | 24 | <newline/> | 13 | <newline/> |
119 | 25 | </field> | 14 | </field> |
121 | 26 | </field> | 15 | </field> |
122 | 27 | </record> | 16 | </record> |
123 | 28 | 17 | ||
124 | 29 | <record id="view_category_property_form" model="ir.ui.view"> | 18 | <record id="view_category_property_form" model="ir.ui.view"> |
125 | 30 | 19 | ||
126 | === modified file 'event_sale/event_sale_view.xml' | |||
127 | --- event_sale/event_sale_view.xml 2014-05-12 05:01:53 +0000 | |||
128 | +++ event_sale/event_sale_view.xml 2014-05-26 16:10:21 +0000 | |||
129 | @@ -1,18 +1,19 @@ | |||
130 | 1 | <?xml version="1.0"?> | 1 | <?xml version="1.0"?> |
131 | 2 | <openerp> | 2 | <openerp> |
132 | 3 | <data> | 3 | <data> |
136 | 4 | <record model="ir.ui.view" id="event_sale_product_form"> | 4 | |
137 | 5 | <field name="model">product.product</field> | 5 | <record model="ir.ui.view" id="event_sale_product_template_form"> |
138 | 6 | <field name="inherit_id" ref="product.product_normal_form_view" /> | 6 | <field name="model">product.template</field> |
139 | 7 | <field name="inherit_id" ref="product.product_template_form_view" /> | ||
140 | 7 | <field name="arch" type="xml"> | 8 | <field name="arch" type="xml"> |
145 | 8 | <div name="options" position="after"> | 9 | <div name="options" position="inside"> |
146 | 9 | <field name="event_ok" on_change="onchange_event_ok(type, event_ok, context)" | 10 | <div> |
147 | 10 | attrs="{'readonly': [('is_only_child', '=', False)]}"/> | 11 | <field name="event_ok" on_change="onchange_event_ok(type, event_ok, context)"/> |
148 | 11 | <label for="event_ok"/> | 12 | <label for="event_ok"/> |
149 | 13 | </div> | ||
150 | 12 | </div> | 14 | </div> |
151 | 13 | <field name='type' position="after"> | 15 | <field name='type' position="after"> |
154 | 14 | <field name="event_type_id" attrs="{'invisible': [('event_ok', '=', False)], | 16 | <field name="event_type_id" attrs="{'invisible': [('event_ok', '=', False)]}"/> |
153 | 15 | 'readonly': [('is_only_child', '=', False)]}"/> | ||
155 | 16 | </field> | 17 | </field> |
156 | 17 | </field> | 18 | </field> |
157 | 18 | </record> | 19 | </record> |
158 | @@ -50,20 +51,6 @@ | |||
159 | 50 | </field> | 51 | </field> |
160 | 51 | </record> | 52 | </record> |
161 | 52 | 53 | ||
162 | 53 | <record model="ir.ui.view" id="event_sale_product_template_form"> | ||
163 | 54 | <field name="model">product.template</field> | ||
164 | 55 | <field name="inherit_id" ref="product.product_template_form_view" /> | ||
165 | 56 | <field name="arch" type="xml"> | ||
166 | 57 | <div name="options" position="inside"> | ||
167 | 58 | <field name="event_ok" on_change="onchange_event_ok(type, event_ok, context)"/> | ||
168 | 59 | <label for="event_ok"/> | ||
169 | 60 | </div> | ||
170 | 61 | <field name='company_id' position="after"> | ||
171 | 62 | <field name="event_type_id" attrs="{'invisible': [('event_ok', '=', False)]}"/> | ||
172 | 63 | </field> | ||
173 | 64 | </field> | ||
174 | 65 | </record> | ||
175 | 66 | |||
176 | 67 | <record model="ir.ui.view" id="event_order_line"> | 54 | <record model="ir.ui.view" id="event_order_line"> |
177 | 68 | <field name="name">event.sale.order</field> | 55 | <field name="name">event.sale.order</field> |
178 | 69 | <field name="model">sale.order</field> | 56 | <field name="model">sale.order</field> |
179 | 70 | 57 | ||
180 | === modified file 'hr_expense/hr_expense.py' | |||
181 | --- hr_expense/hr_expense.py 2014-03-10 14:36:00 +0000 | |||
182 | +++ hr_expense/hr_expense.py 2014-05-26 16:10:21 +0000 | |||
183 | @@ -392,8 +392,8 @@ | |||
184 | 392 | return result | 392 | return result |
185 | 393 | 393 | ||
186 | 394 | 394 | ||
189 | 395 | class product_product(osv.osv): | 395 | class product_template(osv.osv): |
190 | 396 | _inherit = "product.product" | 396 | _inherit = "product.template" |
191 | 397 | _columns = { | 397 | _columns = { |
192 | 398 | 'hr_expense_ok': fields.boolean('Can be Expensed', help="Specify if the product can be selected in an HR expense line."), | 398 | 'hr_expense_ok': fields.boolean('Can be Expensed', help="Specify if the product can be selected in an HR expense line."), |
193 | 399 | } | 399 | } |
194 | 400 | 400 | ||
195 | === modified file 'hr_expense/hr_expense_view.xml' | |||
196 | --- hr_expense/hr_expense_view.xml 2014-04-11 13:18:42 +0000 | |||
197 | +++ hr_expense/hr_expense_view.xml 2014-05-26 16:10:21 +0000 | |||
198 | @@ -191,13 +191,15 @@ | |||
199 | 191 | 191 | ||
200 | 192 | 192 | ||
201 | 193 | <record id="view_product_hr_expense_form" model="ir.ui.view"> | 193 | <record id="view_product_hr_expense_form" model="ir.ui.view"> |
205 | 194 | <field name="name">product.product.expense.form</field> | 194 | <field name="name">product.template.expense.form</field> |
206 | 195 | <field name="model">product.product</field> | 195 | <field name="model">product.template</field> |
207 | 196 | <field name="inherit_id" ref="product.product_normal_form_view"/> | 196 | <field name="inherit_id" ref="product.product_template_form_view"/> |
208 | 197 | <field name="arch" type="xml"> | 197 | <field name="arch" type="xml"> |
209 | 198 | <div name="options" position="inside"> | 198 | <div name="options" position="inside"> |
212 | 199 | <field name="hr_expense_ok"/> | 199 | <div> |
213 | 200 | <label for="hr_expense_ok"/> | 200 | <field name="hr_expense_ok"/> |
214 | 201 | <label for="hr_expense_ok"/> | ||
215 | 202 | </div> | ||
216 | 201 | </div> | 203 | </div> |
217 | 202 | </field> | 204 | </field> |
218 | 203 | </record> | 205 | </record> |
219 | 204 | 206 | ||
220 | === modified file 'membership/membership.py' | |||
221 | --- membership/membership.py 2013-10-27 12:31:04 +0000 | |||
222 | +++ membership/membership.py 2014-05-26 16:10:21 +0000 | |||
223 | @@ -462,7 +462,7 @@ | |||
224 | 462 | return super(Product,self).fields_view_get(cr, user, view_id, view_type, context, toolbar, submenu) | 462 | return super(Product,self).fields_view_get(cr, user, view_id, view_type, context, toolbar, submenu) |
225 | 463 | 463 | ||
226 | 464 | '''Product''' | 464 | '''Product''' |
228 | 465 | _inherit = 'product.product' | 465 | _inherit = 'product.template' |
229 | 466 | _columns = { | 466 | _columns = { |
230 | 467 | 'membership': fields.boolean('Membership', help='Check if the product is eligible for membership.'), | 467 | 'membership': fields.boolean('Membership', help='Check if the product is eligible for membership.'), |
231 | 468 | 'membership_date_from': fields.date('Membership Start Date', help='Date from which membership becomes active.'), | 468 | 'membership_date_from': fields.date('Membership Start Date', help='Date from which membership becomes active.'), |
232 | 469 | 469 | ||
233 | === modified file 'membership/membership_view.xml' | |||
234 | --- membership/membership_view.xml 2013-10-27 12:31:04 +0000 | |||
235 | +++ membership/membership_view.xml 2014-05-26 16:10:21 +0000 | |||
236 | @@ -8,7 +8,7 @@ | |||
237 | 8 | 8 | ||
238 | 9 | <record model="ir.ui.view" id="membership_product_search_form_view"> | 9 | <record model="ir.ui.view" id="membership_product_search_form_view"> |
239 | 10 | <field name="name">membership.product.search.form</field> | 10 | <field name="name">membership.product.search.form</field> |
241 | 11 | <field name="model">product.product</field> | 11 | <field name="model">product.template</field> |
242 | 12 | <field name="arch" type="xml"> | 12 | <field name="arch" type="xml"> |
243 | 13 | <search string="Membership Products"> | 13 | <search string="Membership Products"> |
244 | 14 | <field name="name" filter_domain="['|',('name','ilike',self),('code','ilike',self)]" string="Membership Product"/> | 14 | <field name="name" filter_domain="['|',('name','ilike',self),('code','ilike',self)]" string="Membership Product"/> |
245 | @@ -24,10 +24,9 @@ | |||
246 | 24 | 24 | ||
247 | 25 | <record model="ir.ui.view" id="membership_products_tree"> | 25 | <record model="ir.ui.view" id="membership_products_tree"> |
248 | 26 | <field name="name">Membership products</field> | 26 | <field name="name">Membership products</field> |
250 | 27 | <field name="model">product.product</field> | 27 | <field name="model">product.template</field> |
251 | 28 | <field name="arch" type="xml"> | 28 | <field name="arch" type="xml"> |
252 | 29 | <tree string="Membership products"> | 29 | <tree string="Membership products"> |
253 | 30 | <field name="code"/> | ||
254 | 31 | <field name="name"/> | 30 | <field name="name"/> |
255 | 32 | <field name="membership_date_from"/> | 31 | <field name="membership_date_from"/> |
256 | 33 | <field name="membership_date_to"/> | 32 | <field name="membership_date_to"/> |
257 | @@ -41,7 +40,7 @@ | |||
258 | 41 | 40 | ||
259 | 42 | <record model="ir.ui.view" id="membership_products_form"> | 41 | <record model="ir.ui.view" id="membership_products_form"> |
260 | 43 | <field name="name">Membership Products</field> | 42 | <field name="name">Membership Products</field> |
262 | 44 | <field name="model">product.product</field> | 43 | <field name="model">product.template</field> |
263 | 45 | <field name="arch" type="xml"> | 44 | <field name="arch" type="xml"> |
264 | 46 | <form string="Membership products" version="7.0"> | 45 | <form string="Membership products" version="7.0"> |
265 | 47 | <sheet> | 46 | <sheet> |
266 | @@ -81,31 +80,27 @@ | |||
267 | 81 | </field> | 80 | </field> |
268 | 82 | </record> | 81 | </record> |
269 | 83 | 82 | ||
271 | 84 | <record model="ir.ui.view" id="product_normal_form_view"> | 83 | <record model="ir.ui.view" id="product_template_form_view"> |
272 | 85 | <field name="name">Membership Products</field> | 84 | <field name="name">Membership Products</field> |
274 | 86 | <field name="model">product.product</field> | 85 | <field name="model">product.template</field> |
275 | 87 | <field name="priority">6</field> | 86 | <field name="priority">6</field> |
277 | 88 | <field name="inherit_id" ref="product.product_normal_form_view"/> | 87 | <field name="inherit_id" ref="product.product_template_form_view"/> |
278 | 89 | <field name="arch" type="xml"> | 88 | <field name="arch" type="xml"> |
292 | 90 | <page string="Accounting" position="after"> | 89 | <field name="type" position="after"> |
293 | 91 | <page string="Membership"> | 90 | <field name="membership" readonly="0" attrs="{'invisible': [('type', '!=', 'service')]}"/> |
294 | 92 | <group col="1"> | 91 | </field> |
295 | 93 | <group> | 92 | <field name="description" position="before"> |
296 | 94 | <field name="membership" readonly="0"/> | 93 | <group attrs="{'invisible':[('membership','=',False)]}"> |
297 | 95 | </group> | 94 | <field name="membership_date_from" readonly="0" attrs="{'required':[('membership','=',True)]}"/> |
298 | 96 | <group attrs="{'invisible':[('membership','=',False)]}"> | 95 | <field name="membership_date_to" readonly="0" attrs="{'required':[('membership','=',True)]}"/> |
299 | 97 | <field name="membership_date_from" readonly="0" attrs="{'required':[('membership','=',True)]}"/> | 96 | </group> |
300 | 98 | <field name="membership_date_to" readonly="0" attrs="{'required':[('membership','=',True)]}"/> | 97 | </field> |
288 | 99 | </group> | ||
289 | 100 | </group> | ||
290 | 101 | </page> | ||
291 | 102 | </page> | ||
301 | 103 | </field> | 98 | </field> |
302 | 104 | </record> | 99 | </record> |
303 | 105 | 100 | ||
304 | 106 | <record model="ir.actions.act_window" id="action_membership_products"> | 101 | <record model="ir.actions.act_window" id="action_membership_products"> |
305 | 107 | <field name="name">Membership Products</field> | 102 | <field name="name">Membership Products</field> |
307 | 108 | <field name="res_model">product.product</field> | 103 | <field name="res_model">product.template</field> |
308 | 109 | <field name="domain">[('membership','=',True), ('type', '=', 'service')]</field> | 104 | <field name="domain">[('membership','=',True), ('type', '=', 'service')]</field> |
309 | 110 | <field name="context">{'membership':True, 'type':'service', 'default_membership': True, 'default_type': 'service'}</field> | 105 | <field name="context">{'membership':True, 'type':'service', 'default_membership': True, 'default_type': 'service'}</field> |
310 | 111 | <field name="search_view_id" ref="membership_product_search_form_view"/> | 106 | <field name="search_view_id" ref="membership_product_search_form_view"/> |
311 | 112 | 107 | ||
312 | === modified file 'mrp/mrp.py' | |||
313 | --- mrp/mrp.py 2014-05-08 11:59:17 +0000 | |||
314 | +++ mrp/mrp.py 2014-05-26 16:10:21 +0000 | |||
315 | @@ -178,207 +178,266 @@ | |||
316 | 178 | bom_parent = bom_obj.browse(cr, uid, bom_id, context=context) | 178 | bom_parent = bom_obj.browse(cr, uid, bom_id, context=context) |
317 | 179 | for bom in self.browse(cr, uid, ids, context=context): | 179 | for bom in self.browse(cr, uid, ids, context=context): |
318 | 180 | if (bom_parent) or (bom.id == bom_id): | 180 | if (bom_parent) or (bom.id == bom_id): |
320 | 181 | result[bom.id] = map(lambda x: x.id, bom.bom_lines) | 181 | result[bom.id] = map(lambda x: x.id, bom.bom_line_ids) |
321 | 182 | else: | 182 | else: |
322 | 183 | result[bom.id] = [] | 183 | result[bom.id] = [] |
324 | 184 | if bom.bom_lines: | 184 | if bom.bom_line_ids: |
325 | 185 | continue | 185 | continue |
326 | 186 | ok = ((name=='child_complete_ids')) | 186 | ok = ((name=='child_complete_ids')) |
327 | 187 | if (bom.type=='phantom' or ok): | 187 | if (bom.type=='phantom' or ok): |
329 | 188 | sids = bom_obj.search(cr, uid, [('bom_id','=',False),('product_id','=',bom.product_id.id)]) | 188 | sids = bom_obj.search(cr, uid, [('product_tmpl_id','=',bom.product_tmpl_id.id)]) |
330 | 189 | if sids: | 189 | if sids: |
331 | 190 | bom2 = bom_obj.browse(cr, uid, sids[0], context=context) | 190 | bom2 = bom_obj.browse(cr, uid, sids[0], context=context) |
334 | 191 | result[bom.id] += map(lambda x: x.id, bom2.bom_lines) | 191 | result[bom.id] += map(lambda x: x.id, bom2.bom_line_ids) |
333 | 192 | |||
335 | 193 | return result | 192 | return result |
336 | 194 | 193 | ||
337 | 195 | _columns = { | 194 | _columns = { |
338 | 196 | 'name': fields.char('Name', size=64), | 195 | 'name': fields.char('Name', size=64), |
339 | 197 | 'code': fields.char('Reference', size=16), | 196 | 'code': fields.char('Reference', size=16), |
340 | 198 | 'active': fields.boolean('Active', help="If the active field is set to False, it will allow you to hide the bills of material without removing it."), | 197 | 'active': fields.boolean('Active', help="If the active field is set to False, it will allow you to hide the bills of material without removing it."), |
348 | 199 | 'type': fields.selection([('normal', 'Normal BoM'), ('phantom', 'Sets / Phantom')], 'BoM Type', required=True, | 198 | 'type': fields.selection([('normal', 'Normal'), ('phantom', 'Set')], 'BoM Type', required=True, |
349 | 200 | help= "If a by-product is used in several products, it can be useful to create its own BoM. "\ | 199 | help= "Set: When processing a sales order for this product, the delivery order will contain the raw materials, instead of the finished product."), |
343 | 201 | "Though if you don't want separated production orders for this by-product, select Set/Phantom as BoM type. "\ | ||
344 | 202 | "If a Phantom BoM is used for a root product, it will be sold and shipped as a set of components, instead of being produced."), | ||
345 | 203 | 'date_start': fields.date('Valid From', help="Validity of this BoM or component. Keep empty if it's always valid."), | ||
346 | 204 | 'date_stop': fields.date('Valid Until', help="Validity of this BoM or component. Keep empty if it's always valid."), | ||
347 | 205 | 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of bills of material."), | ||
350 | 206 | 'position': fields.char('Internal Reference', size=64, help="Reference to a position in an external plan."), | 200 | 'position': fields.char('Internal Reference', size=64, help="Reference to a position in an external plan."), |
354 | 207 | 'product_id': fields.many2one('product.product', 'Product', required=True), | 201 | 'product_tmpl_id': fields.many2one('product.template', 'Product', required=True), |
355 | 208 | 'product_uos_qty': fields.float('Product UOS Qty'), | 202 | 'product_id': fields.many2one('product.product', 'Product Variant', |
356 | 209 | 'product_uos': fields.many2one('product.uom', 'Product UOS', help="Product UOS (Unit of Sale) is the unit of measurement for the invoicing and promotion of stock."), | 203 | domain="[('product_tmpl_id','=',product_tmpl_id)]", |
357 | 204 | help="If a product variant is defined the BOM is available only for this product."), | ||
358 | 205 | 'bom_line_ids': fields.one2many('mrp.bom.line', 'bom_id', 'BoM Lines'), | ||
359 | 206 | |||
360 | 210 | 'product_qty': fields.float('Product Quantity', required=True, digits_compute=dp.get_precision('Product Unit of Measure')), | 207 | 'product_qty': fields.float('Product Quantity', required=True, digits_compute=dp.get_precision('Product Unit of Measure')), |
361 | 211 | 'product_uom': fields.many2one('product.uom', 'Product Unit of Measure', required=True, help="Unit of Measure (Unit of Measure) is the unit of measurement for the inventory control"), | 208 | 'product_uom': fields.many2one('product.uom', 'Product Unit of Measure', required=True, help="Unit of Measure (Unit of Measure) is the unit of measurement for the inventory control"), |
362 | 209 | 'date_start': fields.date('Valid From', help="Validity of this BoM. Keep empty if it's always valid."), | ||
363 | 210 | 'date_stop': fields.date('Valid Until', help="Validity of this BoM. Keep empty if it's always valid."), | ||
364 | 211 | 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of bills of material."), | ||
365 | 212 | 'routing_id': fields.many2one('mrp.routing', 'Routing', help="The list of operations (list of work centers) to produce the finished product. "\ | ||
366 | 213 | "The routing is mainly used to compute work center costs during operations and to plan future loads on work centers based on production planning."), | ||
367 | 212 | 'product_rounding': fields.float('Product Rounding', help="Rounding applied on the product quantity."), | 214 | 'product_rounding': fields.float('Product Rounding', help="Rounding applied on the product quantity."), |
373 | 213 | 'product_efficiency': fields.float('Manufacturing Efficiency', required=True, help="A factor of 0.9 means a loss of 10% within the production process."), | 215 | 'product_efficiency': fields.float('Manufacturing Efficiency', required=True, help="A factor of 0.9 means a loss of 10% during the production process."), |
374 | 214 | 'bom_lines': fields.one2many('mrp.bom', 'bom_id', 'BoM Lines'), | 216 | 'property_ids': fields.many2many('mrp.property', string='Properties'), |
370 | 215 | 'bom_id': fields.many2one('mrp.bom', 'Parent BoM', ondelete='cascade', select=True), | ||
371 | 216 | 'routing_id': fields.many2one('mrp.routing', 'Routing', help="The list of operations (list of work centers) to produce the finished product. The routing is mainly used to compute work center costs during operations and to plan future loads on work centers based on production planning."), | ||
372 | 217 | 'property_ids': fields.many2many('mrp.property', 'mrp_bom_property_rel', 'bom_id', 'property_id', 'Properties'), | ||
375 | 218 | 'child_complete_ids': fields.function(_child_compute, relation='mrp.bom', string="BoM Hierarchy", type='many2many'), | 217 | 'child_complete_ids': fields.function(_child_compute, relation='mrp.bom', string="BoM Hierarchy", type='many2many'), |
376 | 219 | 'company_id': fields.many2one('res.company', 'Company', required=True), | 218 | 'company_id': fields.many2one('res.company', 'Company', required=True), |
377 | 220 | } | 219 | } |
378 | 220 | |||
379 | 221 | def _get_uom_id(self, cr, uid, *args): | ||
380 | 222 | return self.pool["product.uom"].search(cr, uid, [], limit=1, order='id')[0] | ||
381 | 221 | _defaults = { | 223 | _defaults = { |
382 | 222 | 'active': lambda *a: 1, | 224 | 'active': lambda *a: 1, |
383 | 225 | 'product_qty': lambda *a: 1.0, | ||
384 | 223 | 'product_efficiency': lambda *a: 1.0, | 226 | 'product_efficiency': lambda *a: 1.0, |
385 | 224 | 'product_qty': lambda *a: 1.0, | ||
386 | 225 | 'product_rounding': lambda *a: 0.0, | 227 | 'product_rounding': lambda *a: 0.0, |
387 | 226 | 'type': lambda *a: 'normal', | 228 | 'type': lambda *a: 'normal', |
388 | 229 | 'product_uom': _get_uom_id, | ||
389 | 227 | 'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'mrp.bom', context=c), | 230 | 'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'mrp.bom', context=c), |
390 | 228 | } | 231 | } |
391 | 229 | _order = "sequence" | 232 | _order = "sequence" |
455 | 230 | _parent_name = "bom_id" | 233 | |
456 | 231 | _sql_constraints = [ | 234 | def _bom_find(self, cr, uid, product_uom, product_tmpl_id=None, product_id=None, properties=None): |
394 | 232 | ('bom_qty_zero', 'CHECK (product_qty>0)', 'All product quantities must be greater than 0.\n' \ | ||
395 | 233 | 'You should install the mrp_byproduct module if you want to manage extra products on BoMs !'), | ||
396 | 234 | ] | ||
397 | 235 | |||
398 | 236 | def _check_recursion(self, cr, uid, ids, context=None): | ||
399 | 237 | level = 100 | ||
400 | 238 | while len(ids): | ||
401 | 239 | cr.execute('select distinct bom_id from mrp_bom where id IN %s', (tuple(ids),)) | ||
402 | 240 | ids = filter(None, map(lambda x: x[0], cr.fetchall())) | ||
403 | 241 | if not level: | ||
404 | 242 | return False | ||
405 | 243 | level -= 1 | ||
406 | 244 | return True | ||
407 | 245 | |||
408 | 246 | def _check_product(self, cr, uid, ids, context=None): | ||
409 | 247 | all_prod = [] | ||
410 | 248 | boms = self.browse(cr, uid, ids, context=context) | ||
411 | 249 | def check_bom(boms): | ||
412 | 250 | res = True | ||
413 | 251 | for bom in boms: | ||
414 | 252 | if bom.product_id.id in all_prod: | ||
415 | 253 | res = res and False | ||
416 | 254 | all_prod.append(bom.product_id.id) | ||
417 | 255 | lines = bom.bom_lines | ||
418 | 256 | if lines: | ||
419 | 257 | res = res and check_bom([bom_id for bom_id in lines if bom_id not in boms]) | ||
420 | 258 | return res | ||
421 | 259 | return check_bom(boms) | ||
422 | 260 | |||
423 | 261 | _constraints = [ | ||
424 | 262 | (_check_recursion, 'Error ! You cannot create recursive BoM.', ['parent_id']), | ||
425 | 263 | (_check_product, 'BoM line product should not be same as BoM product.', ['product_id']), | ||
426 | 264 | ] | ||
427 | 265 | |||
428 | 266 | def onchange_product_id(self, cr, uid, ids, product_id, name, product_qty=0, context=None): | ||
429 | 267 | """ Changes UoM and name if product_id changes. | ||
430 | 268 | @param name: Name of the field | ||
431 | 269 | @param product_id: Changed product_id | ||
432 | 270 | @return: Dictionary of changed values | ||
433 | 271 | """ | ||
434 | 272 | res = {} | ||
435 | 273 | if product_id: | ||
436 | 274 | prod = self.pool.get('product.product').browse(cr, uid, product_id, context=context) | ||
437 | 275 | res['value'] = {'name': prod.name, 'product_uom': prod.uom_id.id, 'product_uos_qty': 0, 'product_uos': False} | ||
438 | 276 | if prod.uos_id.id: | ||
439 | 277 | res['value']['product_uos_qty'] = product_qty * prod.uos_coeff | ||
440 | 278 | res['value']['product_uos'] = prod.uos_id.id | ||
441 | 279 | return res | ||
442 | 280 | |||
443 | 281 | def onchange_uom(self, cr, uid, ids, product_id, product_uom, context=None): | ||
444 | 282 | res = {'value': {}} | ||
445 | 283 | if not product_uom or not product_id: | ||
446 | 284 | return res | ||
447 | 285 | product = self.pool.get('product.product').browse(cr, uid, product_id, context=context) | ||
448 | 286 | uom = self.pool.get('product.uom').browse(cr, uid, product_uom, context=context) | ||
449 | 287 | if uom.category_id.id != product.uom_id.category_id.id: | ||
450 | 288 | res['warning'] = {'title': _('Warning'), 'message': _('The Product Unit of Measure you chose has a different category than in the product form.')} | ||
451 | 289 | res['value'].update({'product_uom': product.uom_id.id}) | ||
452 | 290 | return res | ||
453 | 291 | |||
454 | 292 | def _bom_find(self, cr, uid, product_id, product_uom, properties=None): | ||
457 | 293 | """ Finds BoM for particular product and product uom. | 235 | """ Finds BoM for particular product and product uom. |
459 | 294 | @param product_id: Selected product. | 236 | @param product_tmpl_id: Selected product. |
460 | 295 | @param product_uom: Unit of measure of a product. | 237 | @param product_uom: Unit of measure of a product. |
461 | 296 | @param properties: List of related properties. | 238 | @param properties: List of related properties. |
462 | 297 | @return: False or BoM id. | 239 | @return: False or BoM id. |
463 | 298 | """ | 240 | """ |
464 | 299 | if properties is None: | 241 | if properties is None: |
465 | 300 | properties = [] | 242 | properties = [] |
469 | 301 | domain = [('product_id', '=', product_id), ('bom_id', '=', False), | 243 | domain = None |
470 | 302 | '|', ('date_start', '=', False), ('date_start', '<=', time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)), | 244 | if product_id: |
471 | 303 | '|', ('date_stop', '=', False), ('date_stop', '>=', time.strftime(DEFAULT_SERVER_DATETIME_FORMAT))] | 245 | domain = ['|',('product_id', '=', product_id),('product_tmpl_id.product_variant_ids', '=', product_id)] |
472 | 246 | else: | ||
473 | 247 | domain = [('product_id', '=', False), ('product_tmpl_id', '=', product_tmpl_id)] | ||
474 | 248 | if product_uom: | ||
475 | 249 | domain += [('product_uom','=',product_uom)] | ||
476 | 250 | domain = domain + [ '|', ('date_start', '=', False), ('date_start', '<=', time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)), | ||
477 | 251 | '|', ('date_stop', '=', False), ('date_stop', '>=', time.strftime(DEFAULT_SERVER_DATETIME_FORMAT))] | ||
478 | 304 | ids = self.search(cr, uid, domain) | 252 | ids = self.search(cr, uid, domain) |
479 | 305 | max_prop = 0 | ||
480 | 306 | result = False | ||
481 | 307 | for bom in self.pool.get('mrp.bom').browse(cr, uid, ids): | 253 | for bom in self.pool.get('mrp.bom').browse(cr, uid, ids): |
490 | 308 | prop = 0 | 254 | if not set(map(int,bom.property_ids or [])) - set(properties or []): |
491 | 309 | for prop_id in bom.property_ids: | 255 | return bom.id |
492 | 310 | if prop_id.id in properties: | 256 | return False |
485 | 311 | prop += 1 | ||
486 | 312 | if (prop > max_prop) or ((max_prop == 0) and not result): | ||
487 | 313 | result = bom.id | ||
488 | 314 | max_prop = prop | ||
489 | 315 | return result | ||
493 | 316 | 257 | ||
495 | 317 | def _bom_explode(self, cr, uid, bom, factor, properties=None, addthis=False, level=0, routing_id=False): | 258 | def _bom_explode(self, cr, uid, bom, product, factor, properties=None, level=0, routing_id=False, previous_products=None, master_bom=None): |
496 | 318 | """ Finds Products and Work Centers for related BoM for manufacturing order. | 259 | """ Finds Products and Work Centers for related BoM for manufacturing order. |
498 | 319 | @param bom: BoM of particular product. | 260 | @param bom: BoM of particular product template. |
499 | 261 | @param product: Select a particular variant of the BoM. If False use BoM without variants. | ||
500 | 320 | @param factor: Factor of product UoM. | 262 | @param factor: Factor of product UoM. |
501 | 321 | @param properties: A List of properties Ids. | 263 | @param properties: A List of properties Ids. |
502 | 322 | @param addthis: If BoM found then True else False. | ||
503 | 323 | @param level: Depth level to find BoM lines starts from 10. | 264 | @param level: Depth level to find BoM lines starts from 10. |
504 | 265 | @param previous_products: List of product previously use by bom explore to avoid recursion | ||
505 | 266 | @param master_bom: When recursion, used to display the name of the master bom | ||
506 | 324 | @return: result: List of dictionaries containing product details. | 267 | @return: result: List of dictionaries containing product details. |
507 | 325 | result2: List of dictionaries containing Work Center details. | 268 | result2: List of dictionaries containing Work Center details. |
508 | 326 | """ | 269 | """ |
509 | 327 | routing_obj = self.pool.get('mrp.routing') | 270 | routing_obj = self.pool.get('mrp.routing') |
514 | 328 | factor = factor / (bom.product_efficiency or 1.0) | 271 | all_prod = [] + (previous_products or []) |
515 | 329 | factor = _common.ceiling(factor, bom.product_rounding) | 272 | master_bom = master_bom or bom |
516 | 330 | if factor < bom.product_rounding: | 273 | |
517 | 331 | factor = bom.product_rounding | 274 | def _factor(factor, product_efficiency, product_rounding): |
518 | 275 | factor = factor / (product_efficiency or 1.0) | ||
519 | 276 | factor = _common.ceiling(factor, product_rounding) | ||
520 | 277 | if factor < product_rounding: | ||
521 | 278 | factor = product_rounding | ||
522 | 279 | return factor | ||
523 | 280 | |||
524 | 281 | factor = _factor(factor, bom.product_efficiency, bom.product_rounding) | ||
525 | 282 | |||
526 | 332 | result = [] | 283 | result = [] |
527 | 333 | result2 = [] | 284 | result2 = [] |
541 | 334 | phantom = False | 285 | |
542 | 335 | if bom.type == 'phantom' and not bom.bom_lines: | 286 | routing = (routing_id and routing_obj.browse(cr, uid, routing_id)) or bom.routing_id or False |
543 | 336 | newbom = self._bom_find(cr, uid, bom.product_id.id, bom.product_uom.id, properties) | 287 | if routing: |
544 | 337 | 288 | for wc_use in routing.workcenter_lines: | |
545 | 338 | if newbom: | 289 | wc = wc_use.workcenter_id |
546 | 339 | res = self._bom_explode(cr, uid, self.browse(cr, uid, [newbom])[0], factor * bom.product_qty, properties, addthis=True, level=level + 10) | 290 | d, m = divmod(factor, wc_use.workcenter_id.capacity_per_cycle) |
547 | 340 | result = result + res[0] | 291 | mult = (d + (m and 1.0 or 0.0)) |
548 | 341 | result2 = result2 + res[1] | 292 | cycle = mult * wc_use.cycle_nbr |
549 | 342 | phantom = True | 293 | result2.append({ |
550 | 343 | else: | 294 | 'name': tools.ustr(wc_use.name) + ' - ' + tools.ustr(bom.product_tmpl_id.name_get()[0][1]), |
551 | 344 | phantom = False | 295 | 'workcenter_id': wc.id, |
552 | 345 | if not phantom: | 296 | 'sequence': level + (wc_use.sequence or 0), |
553 | 346 | if addthis and not bom.bom_lines: | 297 | 'cycle': cycle, |
554 | 298 | 'hour': float(wc_use.hour_nbr * mult + ((wc.time_start or 0.0) + (wc.time_stop or 0.0) + cycle * (wc.time_cycle or 0.0)) * (wc.time_efficiency or 1.0)), | ||
555 | 299 | }) | ||
556 | 300 | |||
557 | 301 | for bom_line_id in bom.bom_line_ids: | ||
558 | 302 | if bom_line_id.date_start and bom_line_id.date_start > time.strftime(DEFAULT_SERVER_DATETIME_FORMAT) or \ | ||
559 | 303 | bom_line_id.date_stop and bom_line_id.date_stop > time.strftime(DEFAULT_SERVER_DATETIME_FORMAT): | ||
560 | 304 | continue | ||
561 | 305 | # check properties | ||
562 | 306 | if set(map(int,bom_line_id.property_ids or [])) - set(properties or []): | ||
563 | 307 | continue | ||
564 | 308 | # all bom_line_id variant values must be in the product | ||
565 | 309 | if bom_line_id.variants_ids: | ||
566 | 310 | if not product or (set(map(int,bom_line_id.variants_ids or [])) - set(map(int,product.variant_ids))): | ||
567 | 311 | continue | ||
568 | 312 | |||
569 | 313 | if bom_line_id.product_id.id in all_prod: | ||
570 | 314 | raise osv.except_osv(_('Invalid Action!'), _('BoM "%s" contains a BoM line with a product recursion: "%s".') % (master_bom.name,bom_line_id.product_id.name_get()[0][1])) | ||
571 | 315 | all_prod.append(bom_line_id.product_id.id) | ||
572 | 316 | |||
573 | 317 | if bom_line_id.type != "phantom": | ||
574 | 347 | result.append({ | 318 | result.append({ |
581 | 348 | 'name': bom.product_id.name, | 319 | 'name': bom_line_id.product_id.name, |
582 | 349 | 'product_id': bom.product_id.id, | 320 | 'product_id': bom_line_id.product_id.id, |
583 | 350 | 'product_qty': bom.product_qty * factor, | 321 | 'product_qty': _factor(bom_line_id.product_qty * factor, bom_line_id.product_efficiency, bom_line_id.product_rounding), |
584 | 351 | 'product_uom': bom.product_uom.id, | 322 | 'product_uom': bom_line_id.product_uom.id, |
585 | 352 | 'product_uos_qty': bom.product_uos and bom.product_uos_qty * factor or False, | 323 | 'product_uos_qty': bom_line_id.product_uos and bom_line_id.product_uos_qty * factor or False, |
586 | 353 | 'product_uos': bom.product_uos and bom.product_uos.id or False, | 324 | 'product_uos': bom_line_id.product_uos and bom_line_id.product_uos.id or False, |
587 | 354 | }) | 325 | }) |
606 | 355 | routing = (routing_id and routing_obj.browse(cr, uid, routing_id)) or bom.routing_id or False | 326 | else: |
607 | 356 | if routing: | 327 | bom_id = self._bom_find(cr, uid, bom_line_id.product_uom.id, product_id=bom_line_id.product_id.id, properties=properties) |
608 | 357 | for wc_use in routing.workcenter_lines: | 328 | bom2 = self.browse(cr, uid, bom_id) |
609 | 358 | wc = wc_use.workcenter_id | 329 | if bom2: |
610 | 359 | d, m = divmod(factor, wc_use.workcenter_id.capacity_per_cycle) | 330 | res = self._bom_explode(cr, uid, bom2, bom_line_id.product_id, factor, |
611 | 360 | mult = (d + (m and 1.0 or 0.0)) | 331 | properties=properties, level=level + 10, previous_products=all_prod, master_bom=master_bom) |
612 | 361 | cycle = mult * wc_use.cycle_nbr | 332 | result = result + res[0] |
613 | 362 | result2.append({ | 333 | result2 = result2 + res[1] |
614 | 363 | 'name': tools.ustr(wc_use.name) + ' - ' + tools.ustr(bom.product_id.name), | 334 | else: |
615 | 364 | 'workcenter_id': wc.id, | 335 | raise osv.except_osv(_('Invalid Action!'), _('BoM "%s" contains a phantom BoM line but the product "%s" don\'t have any BoM defined.') % (master_bom.name,bom_line_id.product_id.name_get()[0][1])) |
616 | 365 | 'sequence': level + (wc_use.sequence or 0), | 336 | |
599 | 366 | 'cycle': cycle, | ||
600 | 367 | 'hour': float(wc_use.hour_nbr * mult + ((wc.time_start or 0.0) + (wc.time_stop or 0.0) + cycle * (wc.time_cycle or 0.0)) * (wc.time_efficiency or 1.0)), | ||
601 | 368 | }) | ||
602 | 369 | for bom2 in bom.bom_lines: | ||
603 | 370 | res = self._bom_explode(cr, uid, bom2, factor, properties, addthis=True, level=level + 10) | ||
604 | 371 | result = result + res[0] | ||
605 | 372 | result2 = result2 + res[1] | ||
617 | 373 | return result, result2 | 337 | return result, result2 |
618 | 374 | 338 | ||
619 | 375 | def copy_data(self, cr, uid, id, default=None, context=None): | 339 | def copy_data(self, cr, uid, id, default=None, context=None): |
620 | 376 | if default is None: | 340 | if default is None: |
621 | 377 | default = {} | 341 | default = {} |
622 | 378 | bom_data = self.read(cr, uid, id, [], context=context) | 342 | bom_data = self.read(cr, uid, id, [], context=context) |
624 | 379 | default.update(name=_("%s (copy)") % (bom_data['name']), bom_id=False) | 343 | default.update(name=_("%s (copy)") % (bom_data['name'])) |
625 | 380 | return super(mrp_bom, self).copy_data(cr, uid, id, default, context=context) | 344 | return super(mrp_bom, self).copy_data(cr, uid, id, default, context=context) |
626 | 381 | 345 | ||
627 | 346 | def onchange_uom(self, cr, uid, ids, product_tmpl_id, product_uom, context=None): | ||
628 | 347 | res = {'value': {}} | ||
629 | 348 | if not product_uom or not product_tmpl_id: | ||
630 | 349 | return res | ||
631 | 350 | product = self.pool.get('product.template').browse(cr, uid, product_tmpl_id, context=context) | ||
632 | 351 | uom = self.pool.get('product.uom').browse(cr, uid, product_uom, context=context) | ||
633 | 352 | if uom.category_id.id != product.uom_id.category_id.id: | ||
634 | 353 | res['warning'] = {'title': _('Warning'), 'message': _('The Product Unit of Measure you chose has a different category than in the product form.')} | ||
635 | 354 | res['value'].update({'product_uom': product.uom_id.id}) | ||
636 | 355 | return res | ||
637 | 356 | |||
638 | 357 | def onchange_product_tmpl_id(self, cr, uid, ids, product_tmpl_id, product_qty=0, context=None): | ||
639 | 358 | """ Changes UoM and name if product_id changes. | ||
640 | 359 | @param product_id: Changed product_id | ||
641 | 360 | @return: Dictionary of changed values | ||
642 | 361 | """ | ||
643 | 362 | res = {} | ||
644 | 363 | if product_tmpl_id: | ||
645 | 364 | prod = self.pool.get('product.template').browse(cr, uid, product_tmpl_id, context=context) | ||
646 | 365 | res['value'] = { | ||
647 | 366 | 'name': prod.name, | ||
648 | 367 | 'product_uom': prod.uom_id.id, | ||
649 | 368 | } | ||
650 | 369 | return res | ||
651 | 370 | |||
652 | 371 | class mrp_bom_line(osv.osv): | ||
653 | 372 | _name = 'mrp.bom.line' | ||
654 | 373 | _order = "sequence" | ||
655 | 374 | |||
656 | 375 | _columns = { | ||
657 | 376 | 'type': fields.selection([('normal', 'Normal'), ('phantom', 'Phantom')], 'BoM Line Type', required=True, | ||
658 | 377 | help="Phantom: this product line will not appear in the raw materials of manufacturing orders," | ||
659 | 378 | "it will be directly replaced by the raw materials of its own BoM, without triggering" | ||
660 | 379 | "an extra manufacturing order."), | ||
661 | 380 | 'product_id': fields.many2one('product.product', 'Product', required=True), | ||
662 | 381 | 'product_uos_qty': fields.float('Product UOS Qty'), | ||
663 | 382 | 'product_uos': fields.many2one('product.uom', 'Product UOS', help="Product UOS (Unit of Sale) is the unit of measurement for the invoicing and promotion of stock."), | ||
664 | 383 | 'product_qty': fields.float('Product Quantity', required=True, digits_compute=dp.get_precision('Product Unit of Measure')), | ||
665 | 384 | 'product_uom': fields.many2one('product.uom', 'Product Unit of Measure', required=True, | ||
666 | 385 | help="Unit of Measure (Unit of Measure) is the unit of measurement for the inventory control"), | ||
667 | 386 | |||
668 | 387 | 'date_start': fields.date('Valid From', help="Validity of component. Keep empty if it's always valid."), | ||
669 | 388 | 'date_stop': fields.date('Valid Until', help="Validity of component. Keep empty if it's always valid."), | ||
670 | 389 | 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying."), | ||
671 | 390 | 'routing_id': fields.many2one('mrp.routing', 'Routing', help="The list of operations (list of work centers) to produce the finished product. The routing is mainly used to compute work center costs during operations and to plan future loads on work centers based on production planning."), | ||
672 | 391 | 'product_rounding': fields.float('Product Rounding', help="Rounding applied on the product quantity."), | ||
673 | 392 | 'product_efficiency': fields.float('Manufacturing Efficiency', required=True, help="A factor of 0.9 means a loss of 10% within the production process."), | ||
674 | 393 | 'property_ids': fields.many2many('mrp.property', string='Properties'), | ||
675 | 394 | |||
676 | 395 | 'bom_id': fields.many2one('mrp.bom', 'Parent BoM', ondelete='cascade', select=True, required=True), | ||
677 | 396 | 'variants_ids': fields.many2many('product.attribute.value', string='Variants', help="BOM Product Variants needed form apply this line."), | ||
678 | 397 | } | ||
679 | 398 | |||
680 | 399 | def _get_uom_id(self, cr, uid, *args): | ||
681 | 400 | return self.pool["product.uom"].search(cr, uid, [], limit=1, order='id')[0] | ||
682 | 401 | _defaults = { | ||
683 | 402 | 'product_qty': lambda *a: 1.0, | ||
684 | 403 | 'product_efficiency': lambda *a: 1.0, | ||
685 | 404 | 'product_rounding': lambda *a: 0.0, | ||
686 | 405 | 'type': lambda *a: 'normal', | ||
687 | 406 | 'product_uom': _get_uom_id, | ||
688 | 407 | } | ||
689 | 408 | _sql_constraints = [ | ||
690 | 409 | ('bom_qty_zero', 'CHECK (product_qty>0)', 'All product quantities must be greater than 0.\n' \ | ||
691 | 410 | 'You should install the mrp_byproduct module if you want to manage extra products on BoMs !'), | ||
692 | 411 | ] | ||
693 | 412 | |||
694 | 413 | def onchange_uom(self, cr, uid, ids, product_id, product_uom, context=None): | ||
695 | 414 | res = {'value': {}} | ||
696 | 415 | if not product_uom or not product_id: | ||
697 | 416 | return res | ||
698 | 417 | product = self.pool.get('product.product').browse(cr, uid, product_id, context=context) | ||
699 | 418 | uom = self.pool.get('product.uom').browse(cr, uid, product_uom, context=context) | ||
700 | 419 | if uom.category_id.id != product.uom_id.category_id.id: | ||
701 | 420 | res['warning'] = {'title': _('Warning'), 'message': _('The Product Unit of Measure you chose has a different category than in the product form.')} | ||
702 | 421 | res['value'].update({'product_uom': product.uom_id.id}) | ||
703 | 422 | return res | ||
704 | 423 | |||
705 | 424 | def onchange_product_id(self, cr, uid, ids, product_id, product_qty=0, context=None): | ||
706 | 425 | """ Changes UoM if product_id changes. | ||
707 | 426 | @param product_id: Changed product_id | ||
708 | 427 | @return: Dictionary of changed values | ||
709 | 428 | """ | ||
710 | 429 | res = {} | ||
711 | 430 | if product_id: | ||
712 | 431 | prod = self.pool.get('product.product').browse(cr, uid, product_id, context=context) | ||
713 | 432 | res['value'] = { | ||
714 | 433 | 'product_uom': prod.uom_id.id, | ||
715 | 434 | 'product_uos_qty': 0, | ||
716 | 435 | 'product_uos': False | ||
717 | 436 | } | ||
718 | 437 | if prod.uos_id.id: | ||
719 | 438 | res['value']['product_uos_qty'] = product_qty * prod.uos_coeff | ||
720 | 439 | res['value']['product_uos'] = prod.uos_id.id | ||
721 | 440 | return res | ||
722 | 382 | 441 | ||
723 | 383 | class mrp_production(osv.osv): | 442 | class mrp_production(osv.osv): |
724 | 384 | """ | 443 | """ |
725 | @@ -475,7 +534,7 @@ | |||
726 | 475 | 'date_planned': fields.datetime('Scheduled Date', required=True, select=1, readonly=True, states={'draft': [('readonly', False)]}), | 534 | 'date_planned': fields.datetime('Scheduled Date', required=True, select=1, readonly=True, states={'draft': [('readonly', False)]}), |
727 | 476 | 'date_start': fields.datetime('Start Date', select=True, readonly=True), | 535 | 'date_start': fields.datetime('Start Date', select=True, readonly=True), |
728 | 477 | 'date_finished': fields.datetime('End Date', select=True, readonly=True), | 536 | 'date_finished': fields.datetime('End Date', select=True, readonly=True), |
730 | 478 | 'bom_id': fields.many2one('mrp.bom', 'Bill of Material', domain=[('bom_id', '=', False)], readonly=True, states={'draft': [('readonly', False)]}, | 537 | 'bom_id': fields.many2one('mrp.bom', 'Bill of Material', readonly=True, states={'draft': [('readonly', False)]}, |
731 | 479 | help="Bill of Materials allow you to define the list of required raw materials to make a finished product."), | 538 | help="Bill of Materials allow you to define the list of required raw materials to make a finished product."), |
732 | 480 | 'routing_id': fields.many2one('mrp.routing', string='Routing', on_delete='set null', readonly=True, states={'draft': [('readonly', False)]}, | 539 | 'routing_id': fields.many2one('mrp.routing', string='Routing', on_delete='set null', readonly=True, states={'draft': [('readonly', False)]}, |
733 | 481 | help="The list of operations (list of work centers) to produce the finished product. The routing is mainly used to compute work center costs during operations and to plan future loads on work centers based on production plannification."), | 540 | help="The list of operations (list of work centers) to produce the finished product. The routing is mainly used to compute work center costs during operations and to plan future loads on work centers based on production plannification."), |
734 | @@ -586,7 +645,7 @@ | |||
735 | 586 | }} | 645 | }} |
736 | 587 | bom_obj = self.pool.get('mrp.bom') | 646 | bom_obj = self.pool.get('mrp.bom') |
737 | 588 | product = self.pool.get('product.product').browse(cr, uid, product_id, context=context) | 647 | product = self.pool.get('product.product').browse(cr, uid, product_id, context=context) |
739 | 589 | bom_id = bom_obj._bom_find(cr, uid, product.id, product.uom_id and product.uom_id.id, []) | 648 | bom_id = bom_obj._bom_find(cr, uid, product.uom_id and product.uom_id.id, product_id=product.id, properties=[]) |
740 | 590 | routing_id = False | 649 | routing_id = False |
741 | 591 | if bom_id: | 650 | if bom_id: |
742 | 592 | bom_point = bom_obj.browse(cr, uid, bom_id, context=context) | 651 | bom_point = bom_obj.browse(cr, uid, bom_id, context=context) |
743 | @@ -635,7 +694,7 @@ | |||
744 | 635 | bom_point = production.bom_id | 694 | bom_point = production.bom_id |
745 | 636 | bom_id = production.bom_id.id | 695 | bom_id = production.bom_id.id |
746 | 637 | if not bom_point: | 696 | if not bom_point: |
748 | 638 | bom_id = bom_obj._bom_find(cr, uid, production.product_id.id, production.product_uom.id, properties) | 697 | bom_id = bom_obj._bom_find(cr, uid, production.product_uom.id, product_id=production.product_id.id, properties=properties) |
749 | 639 | if bom_id: | 698 | if bom_id: |
750 | 640 | bom_point = bom_obj.browse(cr, uid, bom_id) | 699 | bom_point = bom_obj.browse(cr, uid, bom_id) |
751 | 641 | routing_id = bom_point.routing_id.id or False | 700 | routing_id = bom_point.routing_id.id or False |
752 | @@ -646,9 +705,8 @@ | |||
753 | 646 | 705 | ||
754 | 647 | # get components and workcenter_lines from BoM structure | 706 | # get components and workcenter_lines from BoM structure |
755 | 648 | factor = uom_obj._compute_qty(cr, uid, production.product_uom.id, production.product_qty, bom_point.product_uom.id) | 707 | factor = uom_obj._compute_qty(cr, uid, production.product_uom.id, production.product_qty, bom_point.product_uom.id) |
759 | 649 | res = bom_obj._bom_explode(cr, uid, bom_point, factor / bom_point.product_qty, properties, routing_id=production.routing_id.id) | 708 | # product_lines, workcenter_lines |
760 | 650 | results = res[0] # product_lines | 709 | results, results2 = bom_obj._bom_explode(cr, uid, bom_point, production.product_id, factor / bom_point.product_qty, properties, routing_id=production.routing_id.id) |
758 | 651 | results2 = res[1] # workcenter_lines | ||
761 | 652 | # reset product_lines in production order | 710 | # reset product_lines in production order |
762 | 653 | for line in results: | 711 | for line in results: |
763 | 654 | line['production_id'] = production.id | 712 | line['production_id'] = production.id |
764 | @@ -777,15 +835,18 @@ | |||
765 | 777 | dicts = {} | 835 | dicts = {} |
766 | 778 | # Find product qty to be consumed and consume it | 836 | # Find product qty to be consumed and consume it |
767 | 779 | for scheduled in production.product_lines: | 837 | for scheduled in production.product_lines: |
769 | 780 | consumed_qty = consumed_data.get(scheduled.product_id.id, 0.0) | 838 | product_id = scheduled.product_id.id |
770 | 839 | |||
771 | 840 | consumed_qty = consumed_data.get(product_id, 0.0) | ||
772 | 841 | |||
773 | 781 | # qty available for consume and produce | 842 | # qty available for consume and produce |
774 | 782 | qty_avail = scheduled.product_qty - consumed_qty | 843 | qty_avail = scheduled.product_qty - consumed_qty |
775 | 783 | if qty_avail <= 0.0: | 844 | if qty_avail <= 0.0: |
776 | 784 | # there will be nothing to consume for this raw material | 845 | # there will be nothing to consume for this raw material |
777 | 785 | continue | 846 | continue |
778 | 786 | 847 | ||
781 | 787 | if not dicts.get(scheduled.product_id.id): | 848 | if not dicts.get(product_id): |
782 | 788 | dicts[scheduled.product_id.id] = {} | 849 | dicts[product_id] = {} |
783 | 789 | 850 | ||
784 | 790 | # total qty of consumed product we need after this consumption | 851 | # total qty of consumed product we need after this consumption |
785 | 791 | total_consume = ((product_qty + produced_qty) * scheduled.product_qty / production.product_qty) | 852 | total_consume = ((product_qty + produced_qty) * scheduled.product_qty / production.product_qty) |
786 | @@ -795,9 +856,8 @@ | |||
787 | 795 | for move in production.move_lines: | 856 | for move in production.move_lines: |
788 | 796 | if qty <= 0.0: | 857 | if qty <= 0.0: |
789 | 797 | break | 858 | break |
791 | 798 | if move.product_id.id != scheduled.product_id.id: | 859 | if move.product_id.id != product_id: |
792 | 799 | continue | 860 | continue |
793 | 800 | product_id = scheduled.product_id.id | ||
794 | 801 | 861 | ||
795 | 802 | q = min(move.product_qty, qty) | 862 | q = min(move.product_qty, qty) |
796 | 803 | quants = quant_obj.quants_get_prefered_domain(cr, uid, move.location_id, scheduled.product_id, q, domain=[('qty', '>', 0.0)], | 863 | quants = quant_obj.quants_get_prefered_domain(cr, uid, move.location_id, scheduled.product_id, q, domain=[('qty', '>', 0.0)], |
797 | @@ -895,7 +955,8 @@ | |||
798 | 895 | #consumed more in wizard than previously planned | 955 | #consumed more in wizard than previously planned |
799 | 896 | product = self.pool.get('product.product').browse(cr, uid, consume['product_id'], context=context) | 956 | product = self.pool.get('product.product').browse(cr, uid, consume['product_id'], context=context) |
800 | 897 | extra_move_id = self._make_consume_line_from_data(cr, uid, production, product, product.uom_id.id, remaining_qty, False, 0, context=context) | 957 | extra_move_id = self._make_consume_line_from_data(cr, uid, production, product, product.uom_id.id, remaining_qty, False, 0, context=context) |
802 | 898 | stock_mov_obj.action_done(cr, uid, [extra_move_id], context=context) | 958 | if extra_move_id: |
803 | 959 | stock_mov_obj.action_done(cr, uid, [extra_move_id], context=context) | ||
804 | 899 | 960 | ||
805 | 900 | self.message_post(cr, uid, production_id, body=_("%s produced") % self._description, context=context) | 961 | self.message_post(cr, uid, production_id, body=_("%s produced") % self._description, context=context) |
806 | 901 | self.signal_button_produce_done(cr, uid, [production_id]) | 962 | self.signal_button_produce_done(cr, uid, [production_id]) |
807 | @@ -1111,24 +1172,4 @@ | |||
808 | 1111 | 'production_id': fields.many2one('mrp.production', 'Production Order', select=True), | 1172 | 'production_id': fields.many2one('mrp.production', 'Production Order', select=True), |
809 | 1112 | } | 1173 | } |
810 | 1113 | 1174 | ||
811 | 1114 | class product_product(osv.osv): | ||
812 | 1115 | _inherit = "product.product" | ||
813 | 1116 | def _bom_orders_count(self, cr, uid, ids, field_name, arg, context=None): | ||
814 | 1117 | Bom = self.pool('mrp.bom') | ||
815 | 1118 | Production = self.pool('mrp.production') | ||
816 | 1119 | return { | ||
817 | 1120 | product_id: { | ||
818 | 1121 | 'bom_count': Bom.search_count(cr, uid, [('product_id', '=', product_id), ('bom_id', '=', False)], context=context), | ||
819 | 1122 | 'mo_count': Production.search_count(cr,uid, [('product_id', '=', product_id)], context=context), | ||
820 | 1123 | 'bom_strct': Bom.search_count(cr, uid, [('product_id', '=', product_id), ('bom_id', '=', False)], context=context), | ||
821 | 1124 | } | ||
822 | 1125 | for product_id in ids | ||
823 | 1126 | } | ||
824 | 1127 | _columns = { | ||
825 | 1128 | 'bom_ids': fields.one2many('mrp.bom', 'product_id', 'Bill of Materials'), | ||
826 | 1129 | 'bom_count': fields.function(_bom_orders_count, string='# Bill of Material', type='integer', multi="_bom_order_count"), | ||
827 | 1130 | 'bom_strct': fields.function(_bom_orders_count, string='# Bill of Material Structure', type='integer', multi="_bom_order_count"), | ||
828 | 1131 | 'mo_count': fields.function(_bom_orders_count, string='# Manufacturing Orders', type='integer', multi="_bom_order_count"), | ||
829 | 1132 | } | ||
830 | 1133 | |||
831 | 1134 | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: | 1175 | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
832 | 1135 | 1176 | ||
833 | === modified file 'mrp/mrp_demo.xml' | |||
834 | --- mrp/mrp_demo.xml 2014-01-20 14:42:43 +0000 | |||
835 | +++ mrp/mrp_demo.xml 2014-05-26 16:10:21 +0000 | |||
836 | @@ -245,407 +245,366 @@ | |||
837 | 245 | 245 | ||
838 | 246 | <record id="mrp_bom_1" model="mrp.bom"> | 246 | <record id="mrp_bom_1" model="mrp.bom"> |
839 | 247 | <field name="name">HDD 500GB</field> | 247 | <field name="name">HDD 500GB</field> |
842 | 248 | <field name="product_id" ref="product.product_product_18"/> | 248 | <field name="product_tmpl_id" ref="product.product_product_18_product_template"/> |
841 | 249 | <field name="product_qty">1</field> | ||
843 | 250 | <field name="product_uom" ref="product.product_uom_unit"/> | 249 | <field name="product_uom" ref="product.product_uom_unit"/> |
844 | 251 | <field name="sequence">5</field> | 250 | <field name="sequence">5</field> |
845 | 252 | <field name="routing_id" ref="mrp_routing_0"/> | 251 | <field name="routing_id" ref="mrp_routing_0"/> |
846 | 253 | <field name="type">normal</field> | 252 | <field name="type">normal</field> |
847 | 254 | </record> | 253 | </record> |
848 | 255 | 254 | ||
849 | 255 | <record id="mrp_bom_line_1" model="mrp.bom.line"> | ||
850 | 256 | <field name="product_id" ref="product.product_product_17"/> | ||
851 | 257 | <field name="product_qty">2</field> | ||
852 | 258 | <field name="product_uom" ref="product.product_uom_unit"/> | ||
853 | 259 | <field name="sequence">5</field> | ||
854 | 260 | <field name="type">normal</field> | ||
855 | 261 | <field name="bom_id" ref="mrp_bom_1"/> | ||
856 | 262 | </record> | ||
857 | 263 | |||
858 | 256 | <record id="mrp_bom_2" model="mrp.bom"> | 264 | <record id="mrp_bom_2" model="mrp.bom"> |
859 | 257 | <field name="name">320GB HDD</field> | ||
860 | 258 | <field name="product_id" ref="product.product_product_17"/> | ||
861 | 259 | <field name="product_qty">2</field> | ||
862 | 260 | <field name="product_uom" ref="product.product_uom_unit"/> | ||
863 | 261 | <field name="sequence">5</field> | ||
864 | 262 | <field name="type">normal</field> | ||
865 | 263 | <field name="bom_id" ref="mrp_bom_1"/> | ||
866 | 264 | </record> | ||
867 | 265 | |||
868 | 266 | <record id="mrp_bom_3" model="mrp.bom"> | ||
869 | 267 | <field name="name">HDD 2TB on Demand</field> | 265 | <field name="name">HDD 2TB on Demand</field> |
872 | 268 | <field name="product_id" ref="product.product_product_19"/> | 266 | <field name="product_tmpl_id" ref="product.product_product_19_product_template"/> |
871 | 269 | <field name="product_qty">1</field> | ||
873 | 270 | <field name="product_uom" ref="product.product_uom_unit"/> | 267 | <field name="product_uom" ref="product.product_uom_unit"/> |
874 | 271 | <field name="sequence">5</field> | 268 | <field name="sequence">5</field> |
875 | 272 | <field name="routing_id" ref="mrp_routing_1"/> | 269 | <field name="routing_id" ref="mrp_routing_1"/> |
876 | 273 | <field name="type">normal</field> | 270 | <field name="type">normal</field> |
877 | 274 | </record> | 271 | </record> |
878 | 275 | 272 | ||
881 | 276 | <record id="mrp_bom_4" model="mrp.bom"> | 273 | <record id="mrp_bom_line_2" model="mrp.bom.line"> |
880 | 277 | <field name="name">HDD 500GB</field> | ||
882 | 278 | <field name="product_id" ref="product.product_product_18"/> | 274 | <field name="product_id" ref="product.product_product_18"/> |
883 | 279 | <field name="product_qty">4</field> | 275 | <field name="product_qty">4</field> |
884 | 280 | <field name="product_uom" ref="product.product_uom_unit"/> | 276 | <field name="product_uom" ref="product.product_uom_unit"/> |
885 | 281 | <field name="sequence">5</field> | 277 | <field name="sequence">5</field> |
886 | 282 | <field name="type">normal</field> | 278 | <field name="type">normal</field> |
887 | 279 | <field name="bom_id" ref="mrp_bom_2"/> | ||
888 | 280 | </record> | ||
889 | 281 | |||
890 | 282 | <record id="mrp_bom_3" model="mrp.bom"> | ||
891 | 283 | <field name="name">HDD on Demand</field> | ||
892 | 284 | <field name="product_tmpl_id" ref="product.product_product_19_product_template"/> | ||
893 | 285 | <field name="product_uom" ref="product.product_uom_unit"/> | ||
894 | 286 | <field name="sequence">10</field> | ||
895 | 287 | <field name="type">normal</field> | ||
896 | 288 | </record> | ||
897 | 289 | |||
898 | 290 | <record id="mrp_bom_line_3" model="mrp.bom.line"> | ||
899 | 291 | <field name="product_id" ref="product.product_product_17"/> | ||
900 | 292 | <field name="product_qty">1</field> | ||
901 | 293 | <field name="product_uom" ref="product.product_uom_unit"/> | ||
902 | 294 | <field name="sequence">5</field> | ||
903 | 295 | <field name="type">normal</field> | ||
904 | 283 | <field name="bom_id" ref="mrp_bom_3"/> | 296 | <field name="bom_id" ref="mrp_bom_3"/> |
905 | 284 | </record> | 297 | </record> |
906 | 285 | 298 | ||
927 | 286 | <record id="mrp_bom_5" model="mrp.bom"> | 299 | <record id="mrp_bom_4" model="mrp.bom"> |
908 | 287 | <field name="name">HDD on Demand</field> | ||
909 | 288 | <field name="product_id" ref="product.product_product_19"/> | ||
910 | 289 | <field name="product_qty">1</field> | ||
911 | 290 | <field name="product_uom" ref="product.product_uom_unit"/> | ||
912 | 291 | <field name="sequence">10</field> | ||
913 | 292 | <field name="type">normal</field> | ||
914 | 293 | </record> | ||
915 | 294 | |||
916 | 295 | <record id="mrp_bom_6" model="mrp.bom"> | ||
917 | 296 | <field name="name">320GB HDD</field> | ||
918 | 297 | <field name="product_id" ref="product.product_product_17"/> | ||
919 | 298 | <field name="product_qty">1</field> | ||
920 | 299 | <field name="product_uom" ref="product.product_uom_unit"/> | ||
921 | 300 | <field name="sequence">5</field> | ||
922 | 301 | <field name="type">normal</field> | ||
923 | 302 | <field name="bom_id" ref="mrp_bom_5"/> | ||
924 | 303 | </record> | ||
925 | 304 | |||
926 | 305 | <record id="mrp_bom_7" model="mrp.bom"> | ||
928 | 306 | <field name="name">Laptop Customized</field> | 300 | <field name="name">Laptop Customized</field> |
931 | 307 | <field name="product_id" ref="product.product_product_27"/> | 301 | <field name="product_tmpl_id" ref="product.product_product_27_product_template"/> |
930 | 308 | <field name="product_qty">1</field> | ||
932 | 309 | <field name="product_uom" ref="product.product_uom_unit"/> | 302 | <field name="product_uom" ref="product.product_uom_unit"/> |
933 | 310 | <field name="sequence">5</field> | 303 | <field name="sequence">5</field> |
934 | 311 | <field name="routing_id" ref="mrp_routing_1"/> | 304 | <field name="routing_id" ref="mrp_routing_1"/> |
935 | 312 | <field name="type">normal</field> | 305 | <field name="type">normal</field> |
936 | 313 | </record> | 306 | </record> |
937 | 314 | 307 | ||
940 | 315 | <record id="mrp_bom_8" model="mrp.bom"> | 308 | <record id="mrp_bom_line_4" model="mrp.bom.line"> |
939 | 316 | <field name="name">Windows 7 Professional</field> | ||
941 | 317 | <field name="product_id" ref="product.product_product_40"/> | 309 | <field name="product_id" ref="product.product_product_40"/> |
942 | 318 | <field name="product_qty">1</field> | 310 | <field name="product_qty">1</field> |
943 | 319 | <field name="product_uom" ref="product.product_uom_unit"/> | 311 | <field name="product_uom" ref="product.product_uom_unit"/> |
944 | 320 | <field name="sequence">2</field> | 312 | <field name="sequence">2</field> |
945 | 321 | <field name="type">normal</field> | 313 | <field name="type">normal</field> |
947 | 322 | <field name="bom_id" ref="mrp_bom_7"/> | 314 | <field name="bom_id" ref="mrp_bom_4"/> |
948 | 323 | </record> | 315 | </record> |
949 | 324 | 316 | ||
952 | 325 | <record id="mrp_bom_9" model="mrp.bom"> | 317 | <record id="mrp_bom_line_5" model="mrp.bom.line"> |
951 | 326 | <field name="name">USB Keyboard, QWERTY</field> | ||
953 | 327 | <field name="product_id" ref="product.product_product_8"/> | 318 | <field name="product_id" ref="product.product_product_8"/> |
954 | 328 | <field name="product_qty">1</field> | 319 | <field name="product_qty">1</field> |
955 | 329 | <field name="product_uom" ref="product.product_uom_unit"/> | 320 | <field name="product_uom" ref="product.product_uom_unit"/> |
956 | 330 | <field name="sequence">4</field> | 321 | <field name="sequence">4</field> |
957 | 331 | <field name="type">normal</field> | 322 | <field name="type">normal</field> |
959 | 332 | <field name="bom_id" ref="mrp_bom_7"/> | 323 | <field name="bom_id" ref="mrp_bom_4"/> |
960 | 333 | </record> | 324 | </record> |
961 | 334 | 325 | ||
964 | 335 | <record id="mrp_bom_10" model="mrp.bom"> | 326 | <record id="mrp_bom_line_6" model="mrp.bom.line"> |
963 | 336 | <field name="name">Mouse, Wireless</field> | ||
965 | 337 | <field name="product_id" ref="product.product_product_12"/> | 327 | <field name="product_id" ref="product.product_product_12"/> |
966 | 338 | <field name="product_qty">1</field> | 328 | <field name="product_qty">1</field> |
967 | 339 | <field name="product_uom" ref="product.product_uom_unit"/> | 329 | <field name="product_uom" ref="product.product_uom_unit"/> |
968 | 340 | <field name="sequence">6</field> | 330 | <field name="sequence">6</field> |
969 | 341 | <field name="type">normal</field> | 331 | <field name="type">normal</field> |
971 | 342 | <field name="bom_id" ref="mrp_bom_7"/> | 332 | <field name="bom_id" ref="mrp_bom_4"/> |
972 | 343 | </record> | 333 | </record> |
973 | 344 | 334 | ||
975 | 345 | <record id="mrp_bom_11" model="mrp.bom"> | 335 | <record id="mrp_bom_5" model="mrp.bom"> |
976 | 346 | <field name="name">Laptop Customized + Azerty</field> | 336 | <field name="name">Laptop Customized + Azerty</field> |
979 | 347 | <field name="product_id" ref="product.product_product_27"/> | 337 | <field name="product_tmpl_id" ref="product.product_product_27_product_template"/> |
978 | 348 | <field name="product_qty">1</field> | ||
980 | 349 | <field name="product_uom" ref="product.product_uom_unit"/> | 338 | <field name="product_uom" ref="product.product_uom_unit"/> |
981 | 350 | <field name="sequence">10</field> | 339 | <field name="sequence">10</field> |
982 | 351 | <field name="type">normal</field> | 340 | <field name="type">normal</field> |
983 | 352 | </record> | 341 | </record> |
984 | 353 | 342 | ||
987 | 354 | <record id="mrp_bom_12" model="mrp.bom"> | 343 | <record id="mrp_bom_line_7" model="mrp.bom.line"> |
986 | 355 | <field name="name">Windows 7 Professional</field> | ||
988 | 356 | <field name="product_id" ref="product.product_product_40"/> | 344 | <field name="product_id" ref="product.product_product_40"/> |
989 | 357 | <field name="product_qty">1</field> | 345 | <field name="product_qty">1</field> |
990 | 358 | <field name="product_uom" ref="product.product_uom_unit"/> | 346 | <field name="product_uom" ref="product.product_uom_unit"/> |
991 | 359 | <field name="sequence">2</field> | 347 | <field name="sequence">2</field> |
992 | 360 | <field name="type">normal</field> | 348 | <field name="type">normal</field> |
994 | 361 | <field name="bom_id" ref="mrp_bom_11"/> | 349 | <field name="bom_id" ref="mrp_bom_5"/> |
995 | 362 | </record> | 350 | </record> |
996 | 363 | 351 | ||
999 | 364 | <record id="mrp_bom_13" model="mrp.bom"> | 352 | <record id="mrp_bom_line_8" model="mrp.bom.line"> |
998 | 365 | <field name="name">USB Keyboard, AZERTY</field> | ||
1000 | 366 | <field name="product_id" ref="product.product_product_9"/> | 353 | <field name="product_id" ref="product.product_product_9"/> |
1001 | 367 | <field name="product_qty">1</field> | 354 | <field name="product_qty">1</field> |
1002 | 368 | <field name="product_uom" ref="product.product_uom_unit"/> | 355 | <field name="product_uom" ref="product.product_uom_unit"/> |
1003 | 369 | <field name="sequence">4</field> | 356 | <field name="sequence">4</field> |
1004 | 370 | <field name="type">normal</field> | 357 | <field name="type">normal</field> |
1006 | 371 | <field name="bom_id" ref="mrp_bom_11"/> | 358 | <field name="bom_id" ref="mrp_bom_5"/> |
1007 | 372 | </record> | 359 | </record> |
1008 | 373 | 360 | ||
1011 | 374 | <record id="mrp_bom_14" model="mrp.bom"> | 361 | <record id="mrp_bom_line_9" model="mrp.bom.line"> |
1010 | 375 | <field name="name">Mouse, Laser</field> | ||
1012 | 376 | <field name="product_id" ref="product.product_product_11"/> | 362 | <field name="product_id" ref="product.product_product_11"/> |
1013 | 377 | <field name="product_qty">1</field> | 363 | <field name="product_qty">1</field> |
1014 | 378 | <field name="product_uom" ref="product.product_uom_unit"/> | 364 | <field name="product_uom" ref="product.product_uom_unit"/> |
1015 | 379 | <field name="sequence">6</field> | 365 | <field name="sequence">6</field> |
1016 | 380 | <field name="type">normal</field> | 366 | <field name="type">normal</field> |
1018 | 381 | <field name="bom_id" ref="mrp_bom_11"/> | 367 | <field name="bom_id" ref="mrp_bom_5"/> |
1019 | 382 | </record> | 368 | </record> |
1020 | 383 | 369 | ||
1022 | 384 | <record id="mrp_bom_15" model="mrp.bom"> | 370 | <record id="mrp_bom_6" model="mrp.bom"> |
1023 | 385 | <field name="name">Computer Case-1</field> | 371 | <field name="name">Computer Case-1</field> |
1026 | 386 | <field name="product_id" ref="product.product_product_16"/> | 372 | <field name="product_tmpl_id" ref="product.product_product_16_product_template"/> |
1025 | 387 | <field name="product_qty">1</field> | ||
1027 | 388 | <field name="product_uom" ref="product.product_uom_unit"/> | 373 | <field name="product_uom" ref="product.product_uom_unit"/> |
1028 | 389 | <field name="sequence">5</field> | 374 | <field name="sequence">5</field> |
1029 | 390 | <field name="type">normal</field> | 375 | <field name="type">normal</field> |
1030 | 391 | </record> | 376 | </record> |
1031 | 392 | 377 | ||
1034 | 393 | <record id="mrp_bom_16" model="mrp.bom"> | 378 | <record id="mrp_bom_line_10" model="mrp.bom.line"> |
1033 | 394 | <field name="name">Processesor AMD 8-Core</field> | ||
1035 | 395 | <field name="product_id" ref="product.product_product_23"/> | 379 | <field name="product_id" ref="product.product_product_23"/> |
1036 | 396 | <field name="product_qty">1</field> | 380 | <field name="product_qty">1</field> |
1037 | 397 | <field name="product_uom" ref="product.product_uom_unit"/> | 381 | <field name="product_uom" ref="product.product_uom_unit"/> |
1038 | 398 | <field name="sequence">4</field> | 382 | <field name="sequence">4</field> |
1039 | 399 | <field name="type">normal</field> | 383 | <field name="type">normal</field> |
1041 | 400 | <field name="bom_id" ref="mrp_bom_15"/> | 384 | <field name="bom_id" ref="mrp_bom_6"/> |
1042 | 401 | </record> | 385 | </record> |
1043 | 402 | 386 | ||
1046 | 403 | <record id="mrp_bom_17" model="mrp.bom"> | 387 | <record id="mrp_bom_line_11" model="mrp.bom.line"> |
1045 | 404 | <field name="name">Motherboard I9P57</field> | ||
1047 | 405 | <field name="product_id" ref="product.product_product_20"/> | 388 | <field name="product_id" ref="product.product_product_20"/> |
1048 | 406 | <field name="product_qty">1</field> | 389 | <field name="product_qty">1</field> |
1049 | 407 | <field name="product_uom" ref="product.product_uom_unit"/> | 390 | <field name="product_uom" ref="product.product_uom_unit"/> |
1050 | 408 | <field name="sequence">6</field> | 391 | <field name="sequence">6</field> |
1051 | 409 | <field name="type">normal</field> | 392 | <field name="type">normal</field> |
1053 | 410 | <field name="bom_id" ref="mrp_bom_15"/> | 393 | <field name="bom_id" ref="mrp_bom_6"/> |
1054 | 411 | </record> | 394 | </record> |
1055 | 412 | 395 | ||
1058 | 413 | <record id="mrp_bom_18" model="mrp.bom"> | 396 | <record id="mrp_bom_line_12" model="mrp.bom.line"> |
1057 | 414 | <field name="name">HDD 320GB</field> | ||
1059 | 415 | <field name="product_id" ref="product.product_product_17"/> | 397 | <field name="product_id" ref="product.product_product_17"/> |
1060 | 416 | <field name="product_qty">1</field> | 398 | <field name="product_qty">1</field> |
1061 | 417 | <field name="product_uom" ref="product.product_uom_unit"/> | 399 | <field name="product_uom" ref="product.product_uom_unit"/> |
1062 | 418 | <field name="sequence">8</field> | 400 | <field name="sequence">8</field> |
1063 | 419 | <field name="type">normal</field> | 401 | <field name="type">normal</field> |
1065 | 420 | <field name="bom_id" ref="mrp_bom_15"/> | 402 | <field name="bom_id" ref="mrp_bom_6"/> |
1066 | 421 | </record> | 403 | </record> |
1067 | 422 | 404 | ||
1069 | 423 | <record id="mrp_bom_19" model="mrp.bom"> | 405 | <record id="mrp_bom_7" model="mrp.bom"> |
1070 | 424 | <field name="name">Computer Case-2</field> | 406 | <field name="name">Computer Case-2</field> |
1073 | 425 | <field name="product_id" ref="product.product_product_16"/> | 407 | <field name="product_tmpl_id" ref="product.product_product_16_product_template"/> |
1072 | 426 | <field name="product_qty">1</field> | ||
1074 | 427 | <field name="product_uom" ref="product.product_uom_unit"/> | 408 | <field name="product_uom" ref="product.product_uom_unit"/> |
1075 | 428 | <field name="sequence">10</field> | 409 | <field name="sequence">10</field> |
1076 | 429 | <field name="type">normal</field> | 410 | <field name="type">normal</field> |
1077 | 430 | </record> | 411 | </record> |
1078 | 431 | 412 | ||
1081 | 432 | <record id="mrp_bom_20" model="mrp.bom"> | 413 | <record id="mrp_bom_line_13" model="mrp.bom.line"> |
1080 | 433 | <field name="name">Processor Core i5 2.70 Ghz</field> | ||
1082 | 434 | <field name="product_id" ref="product.product_product_22"/> | 414 | <field name="product_id" ref="product.product_product_22"/> |
1083 | 435 | <field name="product_qty">1</field> | 415 | <field name="product_qty">1</field> |
1084 | 436 | <field name="product_uom" ref="product.product_uom_unit"/> | 416 | <field name="product_uom" ref="product.product_uom_unit"/> |
1085 | 437 | <field name="sequence">2</field> | 417 | <field name="sequence">2</field> |
1086 | 438 | <field name="type">normal</field> | 418 | <field name="type">normal</field> |
1088 | 439 | <field name="bom_id" ref="mrp_bom_19"/> | 419 | <field name="bom_id" ref="mrp_bom_7"/> |
1089 | 440 | </record> | 420 | </record> |
1090 | 441 | 421 | ||
1093 | 442 | <record id="mrp_bom_21" model="mrp.bom"> | 422 | <record id="mrp_bom_line_14" model="mrp.bom.line"> |
1092 | 443 | <field name="name">Motherboard A20Z7</field> | ||
1094 | 444 | <field name="product_id" ref="product.product_product_21"/> | 423 | <field name="product_id" ref="product.product_product_21"/> |
1095 | 445 | <field name="product_qty">1</field> | 424 | <field name="product_qty">1</field> |
1096 | 446 | <field name="product_uom" ref="product.product_uom_unit"/> | 425 | <field name="product_uom" ref="product.product_uom_unit"/> |
1097 | 447 | <field name="sequence">4</field> | 426 | <field name="sequence">4</field> |
1098 | 448 | <field name="type">normal</field> | 427 | <field name="type">normal</field> |
1100 | 449 | <field name="bom_id" ref="mrp_bom_19"/> | 428 | <field name="bom_id" ref="mrp_bom_7"/> |
1101 | 450 | </record> | 429 | </record> |
1102 | 451 | 430 | ||
1105 | 452 | <record id="mrp_bom_22" model="mrp.bom"> | 431 | <record id="mrp_bom_line_15" model="mrp.bom.line"> |
1104 | 453 | <field name="name">HDD 500GB</field> | ||
1106 | 454 | <field name="product_id" ref="product.product_product_18"/> | 432 | <field name="product_id" ref="product.product_product_18"/> |
1107 | 455 | <field name="product_qty">1</field> | 433 | <field name="product_qty">1</field> |
1108 | 456 | <field name="product_uom" ref="product.product_uom_unit"/> | 434 | <field name="product_uom" ref="product.product_uom_unit"/> |
1109 | 457 | <field name="sequence">6</field> | 435 | <field name="sequence">6</field> |
1110 | 458 | <field name="type">normal</field> | 436 | <field name="type">normal</field> |
1112 | 459 | <field name="bom_id" ref="mrp_bom_19"/> | 437 | <field name="bom_id" ref="mrp_bom_7"/> |
1113 | 460 | </record> | 438 | </record> |
1114 | 461 | 439 | ||
1117 | 462 | <record id="mrp_bom_23" model="mrp.bom"> | 440 | <record id="mrp_bom_line_16" model="mrp.bom.line"> |
1116 | 463 | <field name="name">Graphics Card</field> | ||
1118 | 464 | <field name="product_id" ref="product.product_product_24"/> | 441 | <field name="product_id" ref="product.product_product_24"/> |
1119 | 465 | <field name="product_qty">1</field> | 442 | <field name="product_qty">1</field> |
1120 | 466 | <field name="product_uom" ref="product.product_uom_unit"/> | 443 | <field name="product_uom" ref="product.product_uom_unit"/> |
1121 | 467 | <field name="sequence">10</field> | 444 | <field name="sequence">10</field> |
1122 | 468 | <field name="type">normal</field> | 445 | <field name="type">normal</field> |
1124 | 469 | <field name="bom_id" ref="mrp_bom_19"/> | 446 | <field name="bom_id" ref="mrp_bom_7"/> |
1125 | 470 | </record> | 447 | </record> |
1126 | 471 | 448 | ||
1128 | 472 | <record id="mrp_bom_24" model="mrp.bom"> | 449 | <record id="mrp_bom_8" model="mrp.bom"> |
1129 | 473 | <field name="name">PC Assemble + 2GB RAM</field> | 450 | <field name="name">PC Assemble + 2GB RAM</field> |
1132 | 474 | <field name="product_id" ref="product.product_product_4"/> | 451 | <field name="product_tmpl_id" ref="product.product_product_4_product_template"/> |
1131 | 475 | <field name="product_qty">1</field> | ||
1133 | 476 | <field name="product_uom" ref="product.product_uom_unit"/> | 452 | <field name="product_uom" ref="product.product_uom_unit"/> |
1134 | 477 | <field name="sequence">5</field> | 453 | <field name="sequence">5</field> |
1135 | 478 | <field name="type">phantom</field> | 454 | <field name="type">phantom</field> |
1136 | 479 | </record> | 455 | </record> |
1137 | 480 | 456 | ||
1140 | 481 | <record id="mrp_bom_25" model="mrp.bom"> | 457 | <record id="mrp_bom_line_17" model="mrp.bom.line"> |
1139 | 482 | <field name="name">15" LCD Monitor </field> | ||
1141 | 483 | <field name="product_id" ref="product.product_product_6"/> | 458 | <field name="product_id" ref="product.product_product_6"/> |
1142 | 484 | <field name="product_qty">1</field> | 459 | <field name="product_qty">1</field> |
1143 | 485 | <field name="product_uom" ref="product.product_uom_unit"/> | 460 | <field name="product_uom" ref="product.product_uom_unit"/> |
1144 | 486 | <field name="sequence">2</field> | 461 | <field name="sequence">2</field> |
1145 | 487 | <field name="type">normal</field> | 462 | <field name="type">normal</field> |
1147 | 488 | <field name="bom_id" ref="mrp_bom_24"/> | 463 | <field name="bom_id" ref="mrp_bom_8"/> |
1148 | 489 | </record> | 464 | </record> |
1149 | 490 | 465 | ||
1152 | 491 | <record id="mrp_bom_26" model="mrp.bom"> | 466 | <record id="mrp_bom_line_18" model="mrp.bom.line"> |
1151 | 492 | <field name="name">Computer Case-1</field> | ||
1153 | 493 | <field name="product_id" ref="product.product_product_16"/> | 467 | <field name="product_id" ref="product.product_product_16"/> |
1154 | 494 | <field name="product_qty">1</field> | 468 | <field name="product_qty">1</field> |
1155 | 495 | <field name="product_uom" ref="product.product_uom_unit"/> | 469 | <field name="product_uom" ref="product.product_uom_unit"/> |
1156 | 496 | <field name="sequence">4</field> | 470 | <field name="sequence">4</field> |
1157 | 497 | <field name="type">normal</field> | 471 | <field name="type">normal</field> |
1159 | 498 | <field name="bom_id" ref="mrp_bom_24"/> | 472 | <field name="bom_id" ref="mrp_bom_8"/> |
1160 | 499 | </record> | 473 | </record> |
1161 | 500 | 474 | ||
1164 | 501 | <record id="mrp_bom_27" model="mrp.bom"> | 475 | <record id="mrp_bom_line_19" model="mrp.bom.line"> |
1163 | 502 | <field name="name">Mouse, Laser</field> | ||
1165 | 503 | <field name="product_id" ref="product.product_product_11"/> | 476 | <field name="product_id" ref="product.product_product_11"/> |
1166 | 504 | <field name="product_qty">1</field> | 477 | <field name="product_qty">1</field> |
1167 | 505 | <field name="product_uom" ref="product.product_uom_unit"/> | 478 | <field name="product_uom" ref="product.product_uom_unit"/> |
1168 | 506 | <field name="sequence">6</field> | 479 | <field name="sequence">6</field> |
1169 | 507 | <field name="type">normal</field> | 480 | <field name="type">normal</field> |
1171 | 508 | <field name="bom_id" ref="mrp_bom_24"/> | 481 | <field name="bom_id" ref="mrp_bom_8"/> |
1172 | 509 | </record> | 482 | </record> |
1173 | 510 | 483 | ||
1176 | 511 | <record id="mrp_bom_28" model="mrp.bom"> | 484 | <record id="mrp_bom_line_20" model="mrp.bom.line"> |
1175 | 512 | <field name="name">USB Keyboard, QWERTY</field> | ||
1177 | 513 | <field name="product_id" ref="product.product_product_8"/> | 485 | <field name="product_id" ref="product.product_product_8"/> |
1178 | 514 | <field name="product_qty">1</field> | 486 | <field name="product_qty">1</field> |
1179 | 515 | <field name="product_uom" ref="product.product_uom_unit"/> | 487 | <field name="product_uom" ref="product.product_uom_unit"/> |
1180 | 516 | <field name="sequence">8</field> | 488 | <field name="sequence">8</field> |
1181 | 517 | <field name="type">normal</field> | 489 | <field name="type">normal</field> |
1183 | 518 | <field name="bom_id" ref="mrp_bom_24"/> | 490 | <field name="bom_id" ref="mrp_bom_8"/> |
1184 | 519 | </record> | 491 | </record> |
1185 | 520 | 492 | ||
1188 | 521 | <record id="mrp_bom_29" model="mrp.bom"> | 493 | <record id="mrp_bom_line_21" model="mrp.bom.line"> |
1187 | 522 | <field name="name">RAM DDR2 1GB</field> | ||
1189 | 523 | <field name="product_id" ref="product.product_product_15"/> | 494 | <field name="product_id" ref="product.product_product_15"/> |
1190 | 524 | <field name="product_qty">2</field> | 495 | <field name="product_qty">2</field> |
1191 | 525 | <field name="product_uom" ref="product.product_uom_unit"/> | 496 | <field name="product_uom" ref="product.product_uom_unit"/> |
1192 | 526 | <field name="sequence">10</field> | 497 | <field name="sequence">10</field> |
1193 | 527 | <field name="type">normal</field> | 498 | <field name="type">normal</field> |
1195 | 528 | <field name="bom_id" ref="mrp_bom_24"/> | 499 | <field name="bom_id" ref="mrp_bom_8"/> |
1196 | 529 | </record> | 500 | </record> |
1197 | 530 | 501 | ||
1199 | 531 | <record id="mrp_bom_30" model="mrp.bom"> | 502 | <record id="mrp_bom_9" model="mrp.bom"> |
1200 | 532 | <field name="name">PC Assemble + 512MB RAM</field> | 503 | <field name="name">PC Assemble + 512MB RAM</field> |
1203 | 533 | <field name="product_id" ref="product.product_product_3"/> | 504 | <field name="product_tmpl_id" ref="product.product_product_3_product_template"/> |
1202 | 534 | <field name="product_qty">1</field> | ||
1204 | 535 | <field name="product_uom" ref="product.product_uom_unit"/> | 505 | <field name="product_uom" ref="product.product_uom_unit"/> |
1205 | 536 | <field name="sequence">5</field> | 506 | <field name="sequence">5</field> |
1206 | 537 | <field name="routing_id" ref="mrp_routing_2"/> | 507 | <field name="routing_id" ref="mrp_routing_2"/> |
1207 | 538 | <field name="type">phantom</field> | 508 | <field name="type">phantom</field> |
1208 | 539 | </record> | 509 | </record> |
1209 | 540 | 510 | ||
1212 | 541 | <record id="mrp_bom_31" model="mrp.bom"> | 511 | <record id="mrp_bom_line_22" model="mrp.bom.line"> |
1211 | 542 | <field name="name">17" LCD Monitor</field> | ||
1213 | 543 | <field name="product_id" ref="product.product_product_7"/> | 512 | <field name="product_id" ref="product.product_product_7"/> |
1214 | 544 | <field name="product_qty">1</field> | 513 | <field name="product_qty">1</field> |
1215 | 545 | <field name="product_uom" ref="product.product_uom_unit"/> | 514 | <field name="product_uom" ref="product.product_uom_unit"/> |
1216 | 546 | <field name="sequence">2</field> | 515 | <field name="sequence">2</field> |
1217 | 547 | <field name="type">normal</field> | 516 | <field name="type">normal</field> |
1219 | 548 | <field name="bom_id" ref="mrp_bom_30"/> | 517 | <field name="bom_id" ref="mrp_bom_9"/> |
1220 | 549 | </record> | 518 | </record> |
1221 | 550 | 519 | ||
1224 | 551 | <record id="mrp_bom_32" model="mrp.bom"> | 520 | <record id="mrp_bom_line_23" model="mrp.bom.line"> |
1223 | 552 | <field name="name">Computer Case-2</field> | ||
1225 | 553 | <field name="product_id" ref="product.product_product_16"/> | 521 | <field name="product_id" ref="product.product_product_16"/> |
1226 | 554 | <field name="product_qty">1</field> | 522 | <field name="product_qty">1</field> |
1227 | 555 | <field name="product_uom" ref="product.product_uom_unit"/> | 523 | <field name="product_uom" ref="product.product_uom_unit"/> |
1228 | 556 | <field name="sequence">4</field> | 524 | <field name="sequence">4</field> |
1229 | 557 | <field name="type">normal</field> | 525 | <field name="type">normal</field> |
1231 | 558 | <field name="bom_id" ref="mrp_bom_30"/> | 526 | <field name="bom_id" ref="mrp_bom_9"/> |
1232 | 559 | </record> | 527 | </record> |
1233 | 560 | 528 | ||
1236 | 561 | <record id="mrp_bom_33" model="mrp.bom"> | 529 | <record id="mrp_bom_line_24" model="mrp.bom.line"> |
1235 | 562 | <field name="name">Mouse, Laser</field> | ||
1237 | 563 | <field name="product_id" ref="product.product_product_11"/> | 530 | <field name="product_id" ref="product.product_product_11"/> |
1238 | 564 | <field name="product_qty">1</field> | 531 | <field name="product_qty">1</field> |
1239 | 565 | <field name="product_uom" ref="product.product_uom_unit"/> | 532 | <field name="product_uom" ref="product.product_uom_unit"/> |
1240 | 566 | <field name="sequence">6</field> | 533 | <field name="sequence">6</field> |
1241 | 567 | <field name="type">normal</field> | 534 | <field name="type">normal</field> |
1243 | 568 | <field name="bom_id" ref="mrp_bom_30"/> | 535 | <field name="bom_id" ref="mrp_bom_9"/> |
1244 | 569 | </record> | 536 | </record> |
1245 | 570 | 537 | ||
1248 | 571 | <record id="mrp_bom_34" model="mrp.bom"> | 538 | <record id="mrp_bom_line_25" model="mrp.bom.line"> |
1247 | 572 | <field name="name">USB Keyboard, QWERTY</field> | ||
1249 | 573 | <field name="product_id" ref="product.product_product_8"/> | 539 | <field name="product_id" ref="product.product_product_8"/> |
1250 | 574 | <field name="product_qty">1</field> | 540 | <field name="product_qty">1</field> |
1251 | 575 | <field name="product_uom" ref="product.product_uom_unit"/> | 541 | <field name="product_uom" ref="product.product_uom_unit"/> |
1252 | 576 | <field name="sequence">8</field> | 542 | <field name="sequence">8</field> |
1253 | 577 | <field name="type">normal</field> | 543 | <field name="type">normal</field> |
1255 | 578 | <field name="bom_id" ref="mrp_bom_30"/> | 544 | <field name="bom_id" ref="mrp_bom_9"/> |
1256 | 579 | </record> | 545 | </record> |
1257 | 580 | 546 | ||
1260 | 581 | <record id="mrp_bom_35" model="mrp.bom"> | 547 | <record id="mrp_bom_line_26" model="mrp.bom.line"> |
1259 | 582 | <field name="name">RAM DDR 512MB</field> | ||
1261 | 583 | <field name="product_id" ref="product.product_product_13"/> | 548 | <field name="product_id" ref="product.product_product_13"/> |
1262 | 584 | <field name="product_qty">1</field> | 549 | <field name="product_qty">1</field> |
1263 | 585 | <field name="product_uom" ref="product.product_uom_unit"/> | 550 | <field name="product_uom" ref="product.product_uom_unit"/> |
1264 | 586 | <field name="sequence">10</field> | 551 | <field name="sequence">10</field> |
1265 | 587 | <field name="type">normal</field> | 552 | <field name="type">normal</field> |
1267 | 588 | <field name="bom_id" ref="mrp_bom_30"/> | 553 | <field name="bom_id" ref="mrp_bom_9"/> |
1268 | 589 | </record> | 554 | </record> |
1269 | 590 | 555 | ||
1271 | 591 | <record id="mrp_bom_36" model="mrp.bom"> | 556 | <record id="mrp_bom_10" model="mrp.bom"> |
1272 | 592 | <field name="name">PC Assemble + Custom RAM (PC on Demand)</field> | 557 | <field name="name">PC Assemble + Custom RAM (PC on Demand)</field> |
1275 | 593 | <field name="product_id" ref="product.product_product_5"/> | 558 | <field name="product_tmpl_id" ref="product.product_product_5_product_template"/> |
1274 | 594 | <field name="product_qty">1</field> | ||
1276 | 595 | <field name="product_uom" ref="product.product_uom_unit"/> | 559 | <field name="product_uom" ref="product.product_uom_unit"/> |
1277 | 596 | <field name="sequence">5</field> | 560 | <field name="sequence">5</field> |
1278 | 597 | <field name="routing_id" ref="mrp_routing_2"/> | 561 | <field name="routing_id" ref="mrp_routing_2"/> |
1279 | 598 | <field name="type">phantom</field> | 562 | <field name="type">phantom</field> |
1280 | 599 | </record> | 563 | </record> |
1281 | 600 | 564 | ||
1284 | 601 | <record id="mrp_bom_37" model="mrp.bom"> | 565 | <record id="mrp_bom_line_27" model="mrp.bom.line"> |
1283 | 602 | <field name="name">15" LCD Monitor </field> | ||
1285 | 603 | <field name="product_id" ref="product.product_product_6"/> | 566 | <field name="product_id" ref="product.product_product_6"/> |
1286 | 604 | <field name="product_qty">1</field> | 567 | <field name="product_qty">1</field> |
1287 | 605 | <field name="product_uom" ref="product.product_uom_unit"/> | 568 | <field name="product_uom" ref="product.product_uom_unit"/> |
1288 | 606 | <field name="sequence">2</field> | 569 | <field name="sequence">2</field> |
1289 | 607 | <field name="type">normal</field> | 570 | <field name="type">normal</field> |
1291 | 608 | <field name="bom_id" ref="mrp_bom_36"/> | 571 | <field name="bom_id" ref="mrp_bom_10"/> |
1292 | 609 | </record> | 572 | </record> |
1293 | 610 | 573 | ||
1296 | 611 | <record id="mrp_bom_38" model="mrp.bom"> | 574 | <record id="mrp_bom_line_28" model="mrp.bom.line"> |
1295 | 612 | <field name="name">Computer Case-1</field> | ||
1297 | 613 | <field name="product_id" ref="product.product_product_16"/> | 575 | <field name="product_id" ref="product.product_product_16"/> |
1298 | 614 | <field name="product_qty">1</field> | 576 | <field name="product_qty">1</field> |
1299 | 615 | <field name="product_uom" ref="product.product_uom_unit"/> | 577 | <field name="product_uom" ref="product.product_uom_unit"/> |
1300 | 616 | <field name="sequence">4</field> | 578 | <field name="sequence">4</field> |
1301 | 617 | <field name="type">normal</field> | 579 | <field name="type">normal</field> |
1303 | 618 | <field name="bom_id" ref="mrp_bom_36"/> | 580 | <field name="bom_id" ref="mrp_bom_10"/> |
1304 | 619 | </record> | 581 | </record> |
1305 | 620 | 582 | ||
1308 | 621 | <record id="mrp_bom_39" model="mrp.bom"> | 583 | <record id="mrp_bom_line_29" model="mrp.bom.line"> |
1307 | 622 | <field name="name">RAM DDR 512MB</field> | ||
1309 | 623 | <field name="product_id" ref="product.product_product_13"/> | 584 | <field name="product_id" ref="product.product_product_13"/> |
1310 | 624 | <field name="product_qty">1</field> | 585 | <field name="product_qty">1</field> |
1311 | 625 | <field name="product_uom" ref="product.product_uom_unit"/> | 586 | <field name="product_uom" ref="product.product_uom_unit"/> |
1312 | 626 | <field name="sequence">6</field> | 587 | <field name="sequence">6</field> |
1313 | 627 | <field name="type">normal</field> | 588 | <field name="type">normal</field> |
1315 | 628 | <field name="bom_id" ref="mrp_bom_36"/> | 589 | <field name="bom_id" ref="mrp_bom_10"/> |
1316 | 629 | </record> | 590 | </record> |
1317 | 630 | 591 | ||
1320 | 631 | <record id="mrp_bom_40" model="mrp.bom"> | 592 | <record id="mrp_bom_line_30" model="mrp.bom.line"> |
1319 | 632 | <field name="name">Mouse, Laser</field> | ||
1321 | 633 | <field name="product_id" ref="product.product_product_11"/> | 593 | <field name="product_id" ref="product.product_product_11"/> |
1322 | 634 | <field name="product_qty">1</field> | 594 | <field name="product_qty">1</field> |
1323 | 635 | <field name="product_uom" ref="product.product_uom_unit"/> | 595 | <field name="product_uom" ref="product.product_uom_unit"/> |
1324 | 636 | <field name="sequence">8</field> | 596 | <field name="sequence">8</field> |
1325 | 637 | <field name="type">normal</field> | 597 | <field name="type">normal</field> |
1327 | 638 | <field name="bom_id" ref="mrp_bom_36"/> | 598 | <field name="bom_id" ref="mrp_bom_10"/> |
1328 | 639 | </record> | 599 | </record> |
1329 | 640 | 600 | ||
1332 | 641 | <record id="mrp_bom_41" model="mrp.bom"> | 601 | <record id="mrp_bom_line_31" model="mrp.bom.line"> |
1331 | 642 | <field name="name">USB Keyboard, QWERTY</field> | ||
1333 | 643 | <field name="product_id" ref="product.product_product_8"/> | 602 | <field name="product_id" ref="product.product_product_8"/> |
1334 | 644 | <field name="product_qty">1</field> | 603 | <field name="product_qty">1</field> |
1335 | 645 | <field name="product_uom" ref="product.product_uom_unit"/> | 604 | <field name="product_uom" ref="product.product_uom_unit"/> |
1336 | 646 | <field name="sequence">10</field> | 605 | <field name="sequence">10</field> |
1337 | 647 | <field name="type">normal</field> | 606 | <field name="type">normal</field> |
1339 | 648 | <field name="bom_id" ref="mrp_bom_36"/> | 607 | <field name="bom_id" ref="mrp_bom_10"/> |
1340 | 649 | </record> | 608 | </record> |
1341 | 650 | 609 | ||
1342 | 651 | <record id="mrp_production_1" model="mrp.production"> | 610 | <record id="mrp_production_1" model="mrp.production"> |
1343 | @@ -654,7 +613,7 @@ | |||
1344 | 654 | <field name="product_qty">3</field> | 613 | <field name="product_qty">3</field> |
1345 | 655 | <field name="location_src_id" ref="stock.stock_location_stock"/> | 614 | <field name="location_src_id" ref="stock.stock_location_stock"/> |
1346 | 656 | <field name="location_dest_id" ref="stock.stock_location_output"/> | 615 | <field name="location_dest_id" ref="stock.stock_location_output"/> |
1348 | 657 | <field name="bom_id" ref="mrp_bom_24"/> | 616 | <field name="bom_id" ref="mrp_bom_8"/> |
1349 | 658 | <field name="routing_id" ref="mrp.mrp_routing_2"/> | 617 | <field name="routing_id" ref="mrp.mrp_routing_2"/> |
1350 | 659 | </record> | 618 | </record> |
1351 | 660 | 619 | ||
1352 | @@ -663,7 +622,7 @@ | |||
1353 | 663 | <field name="product_uom" ref="product.product_uom_unit"/> | 622 | <field name="product_uom" ref="product.product_uom_unit"/> |
1354 | 664 | <field name="location_src_id" ref="stock.stock_location_stock"/> | 623 | <field name="location_src_id" ref="stock.stock_location_stock"/> |
1355 | 665 | <field name="location_dest_id" ref="stock.stock_location_output"/> | 624 | <field name="location_dest_id" ref="stock.stock_location_output"/> |
1357 | 666 | <field name="bom_id" ref="mrp.mrp_bom_7"/> | 625 | <field name="bom_id" ref="mrp.mrp_bom_4"/> |
1358 | 667 | <field name="routing_id" ref="mrp.mrp_routing_1"/> | 626 | <field name="routing_id" ref="mrp.mrp_routing_1"/> |
1359 | 668 | </record> | 627 | </record> |
1360 | 669 | <workflow action="button_confirm" model="mrp.production" ref="mrp_production_1"/> | 628 | <workflow action="button_confirm" model="mrp.production" ref="mrp_production_1"/> |
1361 | 670 | 629 | ||
1362 | === modified file 'mrp/mrp_view.xml' | |||
1363 | --- mrp/mrp_view.xml 2014-05-07 18:29:17 +0000 | |||
1364 | +++ mrp/mrp_view.xml 2014-05-26 16:10:21 +0000 | |||
1365 | @@ -347,22 +347,17 @@ | |||
1366 | 347 | <form string="Bill of Material" version="7.0"> | 347 | <form string="Bill of Material" version="7.0"> |
1367 | 348 | <group> | 348 | <group> |
1368 | 349 | <group> | 349 | <group> |
1370 | 350 | <field name="product_id" on_change="onchange_product_id(product_id, name, product_qty, context)" class="oe_inline"/> | 350 | <field name="product_tmpl_id" on_change="onchange_product_tmpl_id(product_tmpl_id, product_qty, context)"/> |
1371 | 351 | <field name="product_id"/> | ||
1372 | 352 | <field name="product_uom" class="oe_inline" on_change="onchange_uom(product_tmpl_id, product_uom)" groups="product.group_uom"/> | ||
1373 | 351 | <label for="product_qty" string="Quantity"/> | 353 | <label for="product_qty" string="Quantity"/> |
1374 | 352 | <div> | 354 | <div> |
1384 | 353 | <field name="product_qty" class="oe_inline" on_change="onchange_product_id(product_id, name, product_qty, context)"/> | 355 | <field name="product_qty" class="oe_inline" on_change="onchange_product_tmpl_id(product_tmpl_id, product_qty, context)"/> |
1385 | 354 | <field name="product_uom" class="oe_inline" on_change="onchange_uom(product_id, product_uom)" groups="product.group_uom"/> | 356 | <field name="product_uom" class="oe_inline" on_change="onchange_uom(product_tmpl_id, product_uom)" groups="product.group_uom"/> |
1377 | 355 | </div> | ||
1378 | 356 | <label for="product_uos_qty" groups="product.group_uos"/> | ||
1379 | 357 | <div groups="product.group_uos" > | ||
1380 | 358 | <field name="product_uos_qty" | ||
1381 | 359 | class="oe_inline"/> | ||
1382 | 360 | <label string="-" attrs="{'invisible':[('product_uos','=',False)]}" class="oe_inline"/> | ||
1383 | 361 | <field name="product_uos" class="oe_inline"/> | ||
1386 | 362 | </div> | 357 | </div> |
1387 | 363 | <label for="routing_id" class="oe_inline" groups="mrp.group_mrp_routings"/> | 358 | <label for="routing_id" class="oe_inline" groups="mrp.group_mrp_routings"/> |
1388 | 364 | <div groups="mrp.group_mrp_routings"> | 359 | <div groups="mrp.group_mrp_routings"> |
1390 | 365 | <field name="routing_id" class="oe_inline"/> | 360 | <field name="routing_id" class="oe_inline"/> |
1391 | 366 | </div> | 361 | </div> |
1392 | 367 | </group> | 362 | </group> |
1393 | 368 | <group> | 363 | <group> |
1394 | @@ -378,14 +373,19 @@ | |||
1395 | 378 | </group> | 373 | </group> |
1396 | 379 | <notebook> | 374 | <notebook> |
1397 | 380 | <page string="Components"> | 375 | <page string="Components"> |
1399 | 381 | <field name="bom_lines" widget="one2many_list"> | 376 | <field name="bom_line_ids" widget="one2many_list"> |
1400 | 382 | <tree string="Components" editable="bottom"> | 377 | <tree string="Components" editable="bottom"> |
1402 | 383 | <field name="product_id" on_change="onchange_product_id(product_id, name)"/> | 378 | <field name="sequence" widget="handle"/> |
1403 | 379 | <field name="product_id" on_change="onchange_product_id(product_id, product_qty)"/> | ||
1404 | 380 | <field name="type"/> | ||
1405 | 384 | <field name="product_qty"/> | 381 | <field name="product_qty"/> |
1406 | 382 | <field name="product_rounding"/> | ||
1407 | 383 | <field name="product_efficiency"/> | ||
1408 | 385 | <field name="product_uom" on_change="onchange_uom(product_id, product_uom)" groups="product.group_uom"/> | 384 | <field name="product_uom" on_change="onchange_uom(product_id, product_uom)" groups="product.group_uom"/> |
1409 | 386 | <field name="name" invisible="1"/> | ||
1410 | 387 | <field name="date_start"/> | 385 | <field name="date_start"/> |
1411 | 388 | <field name="date_stop"/> | 386 | <field name="date_stop"/> |
1412 | 387 | <field name="routing_id"/> | ||
1413 | 388 | <field name="variants_ids" widget="many2many_tags"/> | ||
1414 | 389 | </tree> | 389 | </tree> |
1415 | 390 | </field> | 390 | </field> |
1416 | 391 | </page> | 391 | </page> |
1417 | @@ -393,7 +393,6 @@ | |||
1418 | 393 | <group> | 393 | <group> |
1419 | 394 | <group> | 394 | <group> |
1420 | 395 | <field name="position"/> | 395 | <field name="position"/> |
1421 | 396 | <field name="bom_id"/> | ||
1422 | 397 | <field name="sequence"/> | 396 | <field name="sequence"/> |
1423 | 398 | <field name="active"/> | 397 | <field name="active"/> |
1424 | 399 | </group> | 398 | </group> |
1425 | @@ -422,11 +421,11 @@ | |||
1426 | 422 | <field name="arch" type="xml"> | 421 | <field name="arch" type="xml"> |
1427 | 423 | <search string="Search Bill Of Material"> | 422 | <search string="Search Bill Of Material"> |
1428 | 424 | <field name="name" string="Bill Of Material" filter_domain="['|',('name','ilike',self),('code','ilike',self)]"/> | 423 | <field name="name" string="Bill Of Material" filter_domain="['|',('name','ilike',self),('code','ilike',self)]"/> |
1431 | 425 | <field name="bom_lines" string="Components"/> | 424 | <field name="bom_line_ids" string="Components"/> |
1432 | 426 | <field name="product_id"/> | 425 | <field name="product_tmpl_id"/> |
1433 | 427 | <field name="company_id" groups="base.group_multi_company"/> | 426 | <field name="company_id" groups="base.group_multi_company"/> |
1434 | 428 | <group expand="0" string="Group By..."> | 427 | <group expand="0" string="Group By..."> |
1436 | 429 | <filter string="Product" icon="terp-accessories-archiver" domain="[]" context="{'group_by':'product_id'}"/> | 428 | <filter string="Product" icon="terp-accessories-archiver" domain="[]" context="{'group_by':'product_tmpl_id'}"/> |
1437 | 430 | <filter string='Default Unit of Measure' icon="terp-mrp" domain="[]" context="{'group_by' : 'product_uom'}"/> | 429 | <filter string='Default Unit of Measure' icon="terp-mrp" domain="[]" context="{'group_by' : 'product_uom'}"/> |
1438 | 431 | <filter string="Routing" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'routing_id'}"/> | 430 | <filter string="Routing" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'routing_id'}"/> |
1439 | 432 | <filter string='Type' icon="terp-stock_symbol-selection" domain="[]" context="{'group_by' : 'type'}"/> | 431 | <filter string='Type' icon="terp-stock_symbol-selection" domain="[]" context="{'group_by' : 'type'}"/> |
1440 | @@ -439,13 +438,13 @@ | |||
1441 | 439 | <record id="mrp_bom_tree_view" model="ir.ui.view"> | 438 | <record id="mrp_bom_tree_view" model="ir.ui.view"> |
1442 | 440 | <field name="name">mrp.bom.tree</field> | 439 | <field name="name">mrp.bom.tree</field> |
1443 | 441 | <field name="model">mrp.bom</field> | 440 | <field name="model">mrp.bom</field> |
1445 | 442 | <field name="field_parent">child_complete_ids</field> | 441 | <!--field name="field_parent">child_complete_ids</field--> |
1446 | 443 | <field name="arch" type="xml"> | 442 | <field name="arch" type="xml"> |
1447 | 444 | <tree string="Bill of Materials"> | 443 | <tree string="Bill of Materials"> |
1448 | 445 | <field name="sequence" invisible="1"/> | 444 | <field name="sequence" invisible="1"/> |
1449 | 446 | <field name="name" invisible="1"/> | 445 | <field name="name" invisible="1"/> |
1450 | 446 | <field name="product_tmpl_id"/> | ||
1451 | 447 | <field name="product_id"/> | 447 | <field name="product_id"/> |
1452 | 448 | <field name="product_qty"/> | ||
1453 | 449 | <field name="product_uom" groups="product.group_uom"/> | 448 | <field name="product_uom" groups="product.group_uom"/> |
1454 | 450 | <field name="code"/> | 449 | <field name="code"/> |
1455 | 451 | <field name="type"/> | 450 | <field name="type"/> |
1456 | @@ -455,32 +454,12 @@ | |||
1457 | 455 | </tree> | 454 | </tree> |
1458 | 456 | </field> | 455 | </field> |
1459 | 457 | </record> | 456 | </record> |
1480 | 458 | <record id="mrp_bom_component_tree_view" model="ir.ui.view"> | 457 | |
1461 | 459 | <field name="name">mrp.bom.component.tree</field> | ||
1462 | 460 | <field name="model">mrp.bom</field> | ||
1463 | 461 | <field name="field_parent">child_complete_ids</field> | ||
1464 | 462 | <field name="arch" type="xml"> | ||
1465 | 463 | <tree string="BoM Structure"> | ||
1466 | 464 | <field name="sequence" invisible="1"/> | ||
1467 | 465 | <field name="name" groups="base.group_no_one"/> | ||
1468 | 466 | <field name="code"/> | ||
1469 | 467 | <field name="product_id"/> | ||
1470 | 468 | <field name="bom_id" groups="product.group_mrp_properties"/> | ||
1471 | 469 | <field name="product_qty"/> | ||
1472 | 470 | <field name="product_uom" groups="product.group_uom"/> | ||
1473 | 471 | <field name="type"/> | ||
1474 | 472 | <field name="routing_id" groups="mrp.group_mrp_routings"/> | ||
1475 | 473 | <field name="date_start" groups="product.group_mrp_properties"/> | ||
1476 | 474 | <field name="date_stop" groups="product.group_mrp_properties"/> | ||
1477 | 475 | </tree> | ||
1478 | 476 | </field> | ||
1479 | 477 | </record> | ||
1481 | 478 | <record id="mrp_bom_form_action" model="ir.actions.act_window"> | 458 | <record id="mrp_bom_form_action" model="ir.actions.act_window"> |
1482 | 479 | <field name="name">Bill of Materials</field> | 459 | <field name="name">Bill of Materials</field> |
1483 | 480 | <field name="type">ir.actions.act_window</field> | 460 | <field name="type">ir.actions.act_window</field> |
1484 | 481 | <field name="res_model">mrp.bom</field> | 461 | <field name="res_model">mrp.bom</field> |
1485 | 482 | <field name="view_type">form</field> | 462 | <field name="view_type">form</field> |
1486 | 483 | <field name="domain">[('bom_id','=',False)]</field> | ||
1487 | 484 | <field name="search_view_id" ref="view_mrp_bom_filter"/> | 463 | <field name="search_view_id" ref="view_mrp_bom_filter"/> |
1488 | 485 | <field name="help" type="html"> | 464 | <field name="help" type="html"> |
1489 | 486 | <p class="oe_view_nocontent_create"> | 465 | <p class="oe_view_nocontent_create"> |
1490 | @@ -495,13 +474,56 @@ | |||
1491 | 495 | </p> | 474 | </p> |
1492 | 496 | </field> | 475 | </field> |
1493 | 497 | </record> | 476 | </record> |
1494 | 477 | |||
1495 | 478 | <record id="mrp_bom_component_tree_view" model="ir.ui.view"> | ||
1496 | 479 | <field name="name">mrp.bom.component.tree</field> | ||
1497 | 480 | <field name="model">mrp.bom.line</field> | ||
1498 | 481 | <field name="arch" type="xml"> | ||
1499 | 482 | <tree string="Components" editable="top"> | ||
1500 | 483 | <field name="sequence" widget="handle"/> | ||
1501 | 484 | <field name="bom_id"/> | ||
1502 | 485 | <field name="product_id" on_change="onchange_product_id(product_id)"/> | ||
1503 | 486 | <field name="type"/> | ||
1504 | 487 | <field name="product_qty"/> | ||
1505 | 488 | <field name="product_rounding"/> | ||
1506 | 489 | <field name="product_efficiency"/> | ||
1507 | 490 | <field name="product_uom" on_change="onchange_uom(product_id, product_uom)" groups="product.group_uom"/> | ||
1508 | 491 | <field name="product_uos_qty" groups="product.group_uos"/> | ||
1509 | 492 | <field name="product_uos" groups="product.group_uos"/> | ||
1510 | 493 | <field name="date_start"/> | ||
1511 | 494 | <field name="date_stop"/> | ||
1512 | 495 | <field name="routing_id"/> | ||
1513 | 496 | <field name="variants_ids" widget="many2many_tags"/> | ||
1514 | 497 | <field name="property_ids" widget="many2many_tags"/> | ||
1515 | 498 | </tree> | ||
1516 | 499 | </field> | ||
1517 | 500 | </record> | ||
1518 | 501 | |||
1519 | 502 | <record id="view_mrp_bom_line_filter" model="ir.ui.view"> | ||
1520 | 503 | <field name="name">mrp.bom.line.select</field> | ||
1521 | 504 | <field name="model">mrp.bom.line</field> | ||
1522 | 505 | <field name="arch" type="xml"> | ||
1523 | 506 | <search string="Search Bill Of Material Components"> | ||
1524 | 507 | <field name="bom_id"/> | ||
1525 | 508 | <field name="product_id"/> | ||
1526 | 509 | <group expand="0" string="Group By..."> | ||
1527 | 510 | <filter string="Bill Of Material" icon="terp-accessories-archiver" domain="[]" context="{'group_by':'bom_id'}"/> | ||
1528 | 511 | <filter string="Product" icon="terp-accessories-archiver" domain="[]" context="{'group_by':'product_id'}"/> | ||
1529 | 512 | <filter string='Default Unit of Measure' icon="terp-mrp" domain="[]" context="{'group_by' : 'product_uom'}"/> | ||
1530 | 513 | <filter string="Routing" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'routing_id'}"/> | ||
1531 | 514 | <filter string='Type' icon="terp-stock_symbol-selection" domain="[]" context="{'group_by' : 'type'}"/> | ||
1532 | 515 | <filter string=" Valid From Month" icon="terp-go-month" domain="[]" context="{'group_by':'date_start'}" help="Valid From Date by Month"/> | ||
1533 | 516 | </group> | ||
1534 | 517 | </search> | ||
1535 | 518 | </field> | ||
1536 | 519 | </record> | ||
1537 | 520 | |||
1538 | 498 | <record id="mrp_bom_form_action2" model="ir.actions.act_window"> | 521 | <record id="mrp_bom_form_action2" model="ir.actions.act_window"> |
1539 | 499 | <field name="name">Bill of Material Components</field> | 522 | <field name="name">Bill of Material Components</field> |
1540 | 500 | <field name="type">ir.actions.act_window</field> | 523 | <field name="type">ir.actions.act_window</field> |
1545 | 501 | <field name="res_model">mrp.bom</field> | 524 | <field name="res_model">mrp.bom.line</field> |
1546 | 502 | <field name="view_type">form</field> | 525 | <field name="view_type">tree</field> |
1547 | 503 | <field name="view_id" ref="mrp_bom_component_tree_view"/> | 526 | <field name="view_mode">tree</field> |
1544 | 504 | <field name="domain">[]</field> | ||
1548 | 505 | <field name="help" type="html"> | 527 | <field name="help" type="html"> |
1549 | 506 | <p class="oe_view_nocontent_create"> | 528 | <p class="oe_view_nocontent_create"> |
1550 | 507 | Click to add a component to a bill of material. | 529 | Click to add a component to a bill of material. |
1551 | @@ -512,47 +534,32 @@ | |||
1552 | 512 | </p> | 534 | </p> |
1553 | 513 | </field> | 535 | </field> |
1554 | 514 | </record> | 536 | </record> |
1559 | 515 | <record id="product_search_form_view_procurment" model="ir.ui.view"> | 537 | |
1560 | 516 | <field name="name">product.search.bom</field> | 538 | <record id="product_template_search_view_procurment" model="ir.ui.view"> |
1561 | 517 | <field name="model">product.product</field> | 539 | <field name="name">product.template.search.bom</field> |
1562 | 518 | <field name="inherit_id" ref="product.product_search_form_view"/> | 540 | <field name="model">product.template</field> |
1563 | 541 | <field name="inherit_id" ref="product.product_template_search_view"/> | ||
1564 | 519 | <field name="arch" type="xml"> | 542 | <field name="arch" type="xml"> |
1565 | 520 | <xpath expr="//filter[@string='Consumable']" position="after"> | 543 | <xpath expr="//filter[@string='Consumable']" position="after"> |
1566 | 521 | <separator/> | 544 | <separator/> |
1568 | 522 | <filter string="Components" name="components" icon="terp-accessories-archiver" domain="[('bom_ids','not in',[]),('bom_ids.bom_id','!=',False)]"/> | 545 | <filter string="Components" name="components" icon="terp-accessories-archiver" domain="[('bom_ids','not in',[])]"/> |
1569 | 523 | </xpath> | 546 | </xpath> |
1570 | 524 | </field> | 547 | </field> |
1571 | 525 | </record> | 548 | </record> |
1572 | 526 | 549 | ||
1573 | 527 | <record id="product_template_form_view_inherit" model="ir.ui.view"> | 550 | <record id="product_template_form_view_inherit" model="ir.ui.view"> |
1575 | 528 | <field name="name">product.template.form.view.inherited</field> | 551 | <field name="name">product.product.form.view.inherited</field> |
1576 | 529 | <field name="model">product.product</field> | 552 | <field name="model">product.product</field> |
1578 | 530 | <field name="inherit_id" ref="product.product_template_form_view"/> | 553 | <field name="inherit_id" ref="product.product_normal_form_view"/> |
1579 | 531 | <field name="arch" type="xml"> | 554 | <field name="arch" type="xml"> |
1583 | 532 | <xpath expr="//field[@name='warranty']" position="before"> | 555 | <group name="sale_condition" position="inside"> |
1584 | 533 | <label for="produce_delay"/> | 556 | <label for="produce_delay" attrs="{'invisible':[('type','=','service')]}"/> |
1585 | 534 | <div> | 557 | <div attrs="{'invisible':[('type','=','service')]}"> |
1586 | 535 | <field name="produce_delay" class="oe_inline"/> days | 558 | <field name="produce_delay" class="oe_inline"/> days |
1587 | 536 | </div> | 559 | </div> |
1589 | 537 | </xpath> | 560 | </group> |
1590 | 538 | </field> | 561 | </field> |
1591 | 539 | </record> | 562 | </record> |
1592 | 540 | |||
1593 | 541 | <record id="view_normal_procurement_locations_form_inherited" model="ir.ui.view"> | ||
1594 | 542 | <field name="name">product.normal.procurement.locations.inherited</field> | ||
1595 | 543 | <field name="model">product.product</field> | ||
1596 | 544 | <field name="inherit_id" ref="product.product_normal_form_view"/> | ||
1597 | 545 | <field name="arch" type="xml"> | ||
1598 | 546 | <xpath expr="//group[@name='procurement_uom']" position="after"> | ||
1599 | 547 | <group name="delay" string="Delays" attrs="{'invisible':[('type','=','service')]}"> | ||
1600 | 548 | <label for="produce_delay" /> | ||
1601 | 549 | <div attrs="{'invisible':[('type','=','service')]}"> | ||
1602 | 550 | <field name="produce_delay" class="oe_inline" style="vertical-align:baseline"/> days | ||
1603 | 551 | </div> | ||
1604 | 552 | </group> | ||
1605 | 553 | </xpath> | ||
1606 | 554 | </field> | ||
1607 | 555 | </record> | ||
1608 | 556 | 563 | ||
1609 | 557 | <record id="view_mrp_product_form_inherited" model="ir.ui.view"> | 564 | <record id="view_mrp_product_form_inherited" model="ir.ui.view"> |
1610 | 558 | <field name="name">product.form.mrp.inherited</field> | 565 | <field name="name">product.form.mrp.inherited</field> |
1611 | @@ -686,7 +693,7 @@ | |||
1612 | 686 | </div> | 693 | </div> |
1613 | 687 | <group> | 694 | <group> |
1614 | 688 | <group> | 695 | <group> |
1616 | 689 | <field name="product_id" on_change="product_id_change(product_id, product_qty)" domain="[('bom_ids','!=',False),('bom_ids.bom_id','=',False),('bom_ids.type','!=','phantom')]" class="oe_inline" context='{"default_type": "product"}'/> | 696 | <field name="product_id" on_change="product_id_change(product_id, product_qty)" domain="[('bom_ids','!=',False),('bom_ids.type','!=','phantom')]" class="oe_inline" context='{"default_type": "product"}'/> |
1617 | 690 | <label for="product_qty"/> | 697 | <label for="product_qty"/> |
1618 | 691 | <div> | 698 | <div> |
1619 | 692 | <field name="product_qty" class="oe_inline" on_change="product_id_change(product_id, product_qty)"/> | 699 | <field name="product_qty" class="oe_inline" on_change="product_id_change(product_id, product_qty)"/> |
1620 | @@ -980,7 +987,7 @@ | |||
1621 | 980 | <field name="arch" type="xml"> | 987 | <field name="arch" type="xml"> |
1622 | 981 | <data> | 988 | <data> |
1623 | 982 | <xpath expr="//field[@name='origin']" position="before"> | 989 | <xpath expr="//field[@name='origin']" position="before"> |
1625 | 983 | <field name="bom_id" domain="[('product_id','=',product_id),('bom_id','=',False)]"/> | 990 | <field name="bom_id" domain="[('product_id','=',product_id)]"/> |
1626 | 984 | <field name="production_id" attrs="{'invisible': [('production_id','=',False)]}"/> | 991 | <field name="production_id" attrs="{'invisible': [('production_id','=',False)]}"/> |
1627 | 985 | </xpath> | 992 | </xpath> |
1628 | 986 | <xpath expr="//field[@name='origin']" position="after"> | 993 | <xpath expr="//field[@name='origin']" position="after"> |
1629 | @@ -992,7 +999,6 @@ | |||
1630 | 992 | </field> | 999 | </field> |
1631 | 993 | </record> | 1000 | </record> |
1632 | 994 | 1001 | ||
1633 | 995 | |||
1634 | 996 | <!-- Menu for Resource for MRP--> | 1002 | <!-- Menu for Resource for MRP--> |
1635 | 997 | 1003 | ||
1636 | 998 | <record id="mrp_workcenter_action" model="ir.actions.act_window"> | 1004 | <record id="mrp_workcenter_action" model="ir.actions.act_window"> |
1637 | @@ -1029,14 +1035,13 @@ | |||
1638 | 1029 | 1035 | ||
1639 | 1030 | <record id="act_product_mrp_bom_open" model="ir.actions.act_window"> | 1036 | <record id="act_product_mrp_bom_open" model="ir.actions.act_window"> |
1640 | 1031 | <field name="name">BoM Structure</field> | 1037 | <field name="name">BoM Structure</field> |
1643 | 1032 | <field name="context">{'default_product_id': active_id}</field> | 1038 | <field name="context">{'default_product_tmpl_id': active_id}</field> |
1644 | 1033 | <field name="domain">[('product_id', 'in', active_ids),('bom_id','=',False)]</field> | 1039 | <field name="domain">[('product_tmpl_id', 'in', active_ids)]</field> |
1645 | 1034 | <field name="res_model">mrp.bom</field> | 1040 | <field name="res_model">mrp.bom</field> |
1646 | 1035 | </record> | 1041 | </record> |
1647 | 1036 | <record model="ir.actions.act_window" id="product_open_bom"> | 1042 | <record model="ir.actions.act_window" id="product_open_bom"> |
1649 | 1037 | <field name="context">{'default_product_id': active_id, 'search_default_product_id': active_id}</field> | 1043 | <field name="context">{'default_product_tmpl_id': active_id, 'search_default_product_tmpl_id': active_id}</field> |
1650 | 1038 | <field name="name">Bill of Materials</field> | 1044 | <field name="name">Bill of Materials</field> |
1651 | 1039 | <field name="domain">[('bom_id','=',False)]</field> | ||
1652 | 1040 | <field name="res_model">mrp.bom</field> | 1045 | <field name="res_model">mrp.bom</field> |
1653 | 1041 | <field name="view_type">form</field> | 1046 | <field name="view_type">form</field> |
1654 | 1042 | </record> | 1047 | </record> |
1655 | @@ -1046,12 +1051,12 @@ | |||
1656 | 1046 | <field name="res_model">mrp.production</field> | 1051 | <field name="res_model">mrp.production</field> |
1657 | 1047 | <field name="view_id" ref="mrp_production_tree_view"/> | 1052 | <field name="view_id" ref="mrp_production_tree_view"/> |
1658 | 1048 | </record> | 1053 | </record> |
1663 | 1049 | <record model="ir.ui.view" id="product_form_view_bom_button"> | 1054 | <record model="ir.ui.view" id="product_template_form_view_bom_button"> |
1664 | 1050 | <field name="name">product.product.procurement</field> | 1055 | <field name="name">product.template.procurement</field> |
1665 | 1051 | <field name="model">product.product</field> | 1056 | <field name="model">product.template</field> |
1666 | 1052 | <field name="inherit_id" ref="product.product_normal_form_view"/> | 1057 | <field name="inherit_id" ref="product.product_template_form_view"/> |
1667 | 1053 | <field name="arch" type="xml"> | 1058 | <field name="arch" type="xml"> |
1669 | 1054 | <xpath expr="//div[@name='buttons']" position="inside"> | 1059 | <div name="buttons" position="inside"> |
1670 | 1055 | <button class="oe_inline oe_stat_button" name="%(product_open_bom)d" type="action" | 1060 | <button class="oe_inline oe_stat_button" name="%(product_open_bom)d" type="action" |
1671 | 1056 | groups="mrp.group_mrp_user" attrs="{'invisible':[('type', '=', 'service')]}" icon="fa-flask"> | 1061 | groups="mrp.group_mrp_user" attrs="{'invisible':[('type', '=', 'service')]}" icon="fa-flask"> |
1672 | 1057 | <field string="Bill of Materials" name="bom_count" widget="statinfo" /> | 1062 | <field string="Bill of Materials" name="bom_count" widget="statinfo" /> |
1673 | @@ -1064,7 +1069,7 @@ | |||
1674 | 1064 | groups="mrp.group_mrp_user" attrs="{'invisible':[('type', '=', 'service')]}" icon="fa-list-alt"> | 1069 | groups="mrp.group_mrp_user" attrs="{'invisible':[('type', '=', 'service')]}" icon="fa-list-alt"> |
1675 | 1065 | <field string="Manufacturing" name="mo_count" widget="statinfo" /> | 1070 | <field string="Manufacturing" name="mo_count" widget="statinfo" /> |
1676 | 1066 | </button> | 1071 | </button> |
1678 | 1067 | </xpath> | 1072 | </div> |
1679 | 1068 | </field> | 1073 | </field> |
1680 | 1069 | </record> | 1074 | </record> |
1681 | 1070 | 1075 | ||
1682 | 1071 | 1076 | ||
1683 | === modified file 'mrp/procurement.py' | |||
1684 | --- mrp/procurement.py 2014-05-07 17:14:31 +0000 | |||
1685 | +++ mrp/procurement.py 2014-05-26 16:10:21 +0000 | |||
1686 | @@ -62,7 +62,8 @@ | |||
1687 | 62 | """ | 62 | """ |
1688 | 63 | for procurement in self.browse(cr, uid, ids, context=context): | 63 | for procurement in self.browse(cr, uid, ids, context=context): |
1689 | 64 | properties = [x.id for x in procurement.property_ids] | 64 | properties = [x.id for x in procurement.property_ids] |
1691 | 65 | bom_id = self.pool.get('mrp.bom')._bom_find(cr, uid, procurement.product_id.id, procurement.product_uom.id, properties) | 65 | bom_id = self.pool.get('mrp.bom')._bom_find(cr, uid, procurement.product_uom.id, |
1692 | 66 | product_id=procurement.product_id.id, properties=properties) | ||
1693 | 66 | if not bom_id: | 67 | if not bom_id: |
1694 | 67 | return False | 68 | return False |
1695 | 68 | return True | 69 | return True |
1696 | @@ -83,7 +84,8 @@ | |||
1697 | 83 | routing_id = procurement.bom_id.routing_id.id | 84 | routing_id = procurement.bom_id.routing_id.id |
1698 | 84 | else: | 85 | else: |
1699 | 85 | properties = [x.id for x in procurement.property_ids] | 86 | properties = [x.id for x in procurement.property_ids] |
1701 | 86 | bom_id = bom_obj._bom_find(cr, uid, procurement.product_id.id, procurement.product_uom.id, properties) | 87 | bom_id = bom_obj._bom_find(cr, uid, procurement.product_uom.id, |
1702 | 88 | product_id=procurement.product_id.id, properties=properties) | ||
1703 | 87 | bom = bom_obj.browse(cr, uid, bom_id, context=context) | 89 | bom = bom_obj.browse(cr, uid, bom_id, context=context) |
1704 | 88 | routing_id = bom.routing_id.id | 90 | routing_id = bom.routing_id.id |
1705 | 89 | 91 | ||
1706 | 90 | 92 | ||
1707 | === modified file 'mrp/product.py' | |||
1708 | --- mrp/product.py 2014-01-07 10:39:15 +0000 | |||
1709 | +++ mrp/product.py 2014-05-26 16:10:21 +0000 | |||
1710 | @@ -20,27 +20,59 @@ | |||
1711 | 20 | ############################################################################## | 20 | ############################################################################## |
1712 | 21 | 21 | ||
1713 | 22 | from openerp.osv import fields, osv | 22 | from openerp.osv import fields, osv |
1716 | 23 | from openerp.tools.translate import _ | 23 | |
1717 | 24 | 24 | ||
1718 | 25 | class product_template(osv.osv): | ||
1719 | 26 | _inherit = "product.template" | ||
1720 | 27 | def _bom_orders_count(self, cr, uid, ids, field_name, arg, context=None): | ||
1721 | 28 | Bom = self.pool('mrp.bom') | ||
1722 | 29 | res = {} | ||
1723 | 30 | for product_tmpl_id in ids: | ||
1724 | 31 | nb = Bom.search_count(cr, uid, [('product_tmpl_id', '=', product_tmpl_id)], context=context) | ||
1725 | 32 | res[product_tmpl_id] = { | ||
1726 | 33 | 'bom_count': nb, | ||
1727 | 34 | 'bom_strct': nb, | ||
1728 | 35 | } | ||
1729 | 36 | return res | ||
1730 | 37 | |||
1731 | 38 | def _bom_orders_count_mo(self, cr, uid, ids, name, arg, context=None): | ||
1732 | 39 | res = {} | ||
1733 | 40 | for product_tmpl_id in self.browse(cr, uid, ids): | ||
1734 | 41 | res[product_tmpl_id.id] = sum([p.mo_count for p in product_tmpl_id.product_variant_ids]) | ||
1735 | 42 | return res | ||
1736 | 43 | |||
1737 | 44 | _columns = { | ||
1738 | 45 | "bom_ids": fields.one2many('mrp.bom', 'product_tmpl_id','Bill of Materials'), | ||
1739 | 46 | 'bom_count': fields.function(_bom_orders_count, string='# Bill of Material', type='integer', multi="_bom_order_count"), | ||
1740 | 47 | 'bom_strct': fields.function(_bom_orders_count, string='# Bill of Material Structure', type='integer', multi="_bom_order_count"), | ||
1741 | 48 | 'mo_count': fields.function(_bom_orders_count_mo, string='# Manufacturing Orders', type='integer'), | ||
1742 | 49 | } | ||
1743 | 50 | def copy(self, cr, uid, id, default=None, context=None): | ||
1744 | 51 | if not default: | ||
1745 | 52 | default = {} | ||
1746 | 53 | default.update({ | ||
1747 | 54 | 'bom_ids': [] | ||
1748 | 55 | }) | ||
1749 | 56 | return super(product_template, self).copy(cr, uid, id, default, context=context) | ||
1750 | 25 | 57 | ||
1751 | 26 | class product_product(osv.osv): | 58 | class product_product(osv.osv): |
1753 | 27 | _inherit = "product.product" | 59 | _inherit = "product.product" |
1754 | 60 | def _bom_orders_count(self, cr, uid, ids, field_name, arg, context=None): | ||
1755 | 61 | Production = self.pool('mrp.production') | ||
1756 | 62 | res = {} | ||
1757 | 63 | for product_id in ids: | ||
1758 | 64 | res[product_id] = Production.search_count(cr,uid, [('product_id', '=', product_id)], context=context) | ||
1759 | 65 | return res | ||
1760 | 66 | |||
1761 | 28 | _columns = { | 67 | _columns = { |
1762 | 29 | "bom_ids": fields.one2many('mrp.bom', 'product_id','Bill of Materials', domain=[('bom_id','=',False)]), | ||
1763 | 30 | "produce_delay": fields.float('Manufacturing Lead Time', help="Average delay in days to produce this product. In the case of multi-level BOM, the manufacturing lead times of the components will be added."), | 68 | "produce_delay": fields.float('Manufacturing Lead Time', help="Average delay in days to produce this product. In the case of multi-level BOM, the manufacturing lead times of the components will be added."), |
1764 | 31 | 'track_production': fields.boolean('Track Manufacturing Lots', help="Forces to specify a Serial Number for all moves containing this product and generated by a Manufacturing Order"), | 69 | 'track_production': fields.boolean('Track Manufacturing Lots', help="Forces to specify a Serial Number for all moves containing this product and generated by a Manufacturing Order"), |
1765 | 70 | 'mo_count': fields.function(_bom_orders_count, string='# Manufacturing Orders', type='integer'), | ||
1766 | 32 | } | 71 | } |
1767 | 33 | 72 | ||
1768 | 34 | _defaults = { | 73 | _defaults = { |
1769 | 35 | "produce_delay": 1, | 74 | "produce_delay": 1, |
1770 | 36 | } | 75 | } |
1771 | 37 | def copy(self, cr, uid, id, default=None, context=None): | ||
1772 | 38 | if not default: | ||
1773 | 39 | default = {} | ||
1774 | 40 | default.update({ | ||
1775 | 41 | 'bom_ids': [] | ||
1776 | 42 | }) | ||
1777 | 43 | return super(product_product, self).copy(cr, uid, id, default, context=context) | ||
1778 | 44 | 76 | ||
1779 | 45 | 77 | ||
1780 | 46 | 78 | ||
1781 | 47 | 79 | ||
1782 | === modified file 'mrp/report/price.py' | |||
1783 | --- mrp/report/price.py 2014-01-06 13:57:00 +0000 | |||
1784 | +++ mrp/report/price.py 2014-05-26 16:10:21 +0000 | |||
1785 | @@ -144,7 +144,7 @@ | |||
1786 | 144 | 144 | ||
1787 | 145 | for product in product_pool.browse(cr, uid, ids, context=context): | 145 | for product in product_pool.browse(cr, uid, ids, context=context): |
1788 | 146 | product_uom_name = to_xml(product.uom_id.name) | 146 | product_uom_name = to_xml(product.uom_id.name) |
1790 | 147 | bom_id = bom_pool._bom_find(cr, uid, product.id, product.uom_id.id) | 147 | bom_id = bom_pool._bom_find(cr, uid, product.uom_id.id, product_id=product.id) |
1791 | 148 | title = "<title>%s</title>" %(_("Cost Structure")) | 148 | title = "<title>%s</title>" %(_("Cost Structure")) |
1792 | 149 | title += "<title>%s</title>" % (to_xml(product.name)) | 149 | title += "<title>%s</title>" % (to_xml(product.name)) |
1793 | 150 | xml += "<lines style='header'>" + title + prod_header + "</lines>" | 150 | xml += "<lines style='header'>" + title + prod_header + "</lines>" |
1794 | @@ -168,7 +168,7 @@ | |||
1795 | 168 | else: | 168 | else: |
1796 | 169 | bom = bom_pool.browse(cr, uid, bom_id, context=context) | 169 | bom = bom_pool.browse(cr, uid, bom_id, context=context) |
1797 | 170 | factor = number * product.uom_id.factor / bom.product_uom.factor | 170 | factor = number * product.uom_id.factor / bom.product_uom.factor |
1799 | 171 | sub_boms = bom_pool._bom_explode(cr, uid, bom, factor / bom.product_qty) | 171 | sub_boms = bom_pool._bom_explode(cr, uid, bom, product, factor / bom.product_qty) |
1800 | 172 | total = 0 | 172 | total = 0 |
1801 | 173 | total_strd = 0 | 173 | total_strd = 0 |
1802 | 174 | parent_bom = { | 174 | parent_bom = { |
1803 | 175 | 175 | ||
1804 | === modified file 'mrp/security/ir.model.access.csv' | |||
1805 | --- mrp/security/ir.model.access.csv 2014-05-02 13:03:52 +0000 | |||
1806 | +++ mrp/security/ir.model.access.csv 2014-05-26 16:10:21 +0000 | |||
1807 | @@ -4,6 +4,7 @@ | |||
1808 | 4 | access_mrp_routing,mrp.routing,model_mrp_routing,mrp.group_mrp_user,1,0,0,0 | 4 | access_mrp_routing,mrp.routing,model_mrp_routing,mrp.group_mrp_user,1,0,0,0 |
1809 | 5 | access_mrp_routing_workcenter,mrp.routing.workcenter,model_mrp_routing_workcenter,mrp.group_mrp_user,1,0,0,0 | 5 | access_mrp_routing_workcenter,mrp.routing.workcenter,model_mrp_routing_workcenter,mrp.group_mrp_user,1,0,0,0 |
1810 | 6 | access_mrp_bom,mrp.bom,model_mrp_bom,group_mrp_user,1,0,0,0 | 6 | access_mrp_bom,mrp.bom,model_mrp_bom,group_mrp_user,1,0,0,0 |
1811 | 7 | access_mrp_bom_line,mrp.bom.line,model_mrp_bom_line,group_mrp_user,1,0,0,0 | ||
1812 | 7 | access_mrp_production,mrp.production user,model_mrp_production,mrp.group_mrp_user,1,1,1,1 | 8 | access_mrp_production,mrp.production user,model_mrp_production,mrp.group_mrp_user,1,1,1,1 |
1813 | 8 | access_mrp_production_salesman,mrp.production salesman,model_mrp_production,base.group_sale_salesman,1,1,1,0 | 9 | access_mrp_production_salesman,mrp.production salesman,model_mrp_production,base.group_sale_salesman,1,1,1,0 |
1814 | 9 | access_mrp_production_product_line_salesman,mrp.production.product.line salesman,model_mrp_production_product_line,base.group_sale_salesman,1,0,1,0 | 10 | access_mrp_production_product_line_salesman,mrp.production.product.line salesman,model_mrp_production_product_line,base.group_sale_salesman,1,0,1,0 |
1815 | @@ -14,6 +15,7 @@ | |||
1816 | 14 | access_mrp_routing_manager,mrp.routing.manager,model_mrp_routing,mrp.group_mrp_manager,1,1,1,1 | 15 | access_mrp_routing_manager,mrp.routing.manager,model_mrp_routing,mrp.group_mrp_manager,1,1,1,1 |
1817 | 15 | access_mrp_routing_workcenter_manager,mrp.routing.workcenter.manager,model_mrp_routing_workcenter,mrp.group_mrp_manager,1,1,1,1 | 16 | access_mrp_routing_workcenter_manager,mrp.routing.workcenter.manager,model_mrp_routing_workcenter,mrp.group_mrp_manager,1,1,1,1 |
1818 | 16 | access_mrp_bom_manager,mrp.bom.manager,model_mrp_bom,mrp.group_mrp_manager,1,1,1,1 | 17 | access_mrp_bom_manager,mrp.bom.manager,model_mrp_bom,mrp.group_mrp_manager,1,1,1,1 |
1819 | 18 | access_mrp_bom_line_manager,mrp.bom.line.manager,model_mrp_bom_line,mrp.group_mrp_manager,1,1,1,1 | ||
1820 | 17 | access_stock_location_mrp_worker,stock.location mrp_worker,stock.model_stock_location,mrp.group_mrp_user,1,0,0,0 | 19 | access_stock_location_mrp_worker,stock.location mrp_worker,stock.model_stock_location,mrp.group_mrp_user,1,0,0,0 |
1821 | 18 | access_stock_move_mrp_worker,stock.move mrp_worker,stock.model_stock_move,mrp.group_mrp_user,1,1,1,0 | 20 | access_stock_move_mrp_worker,stock.move mrp_worker,stock.model_stock_move,mrp.group_mrp_user,1,1,1,0 |
1822 | 19 | access_stock_picking_mrp_worker,stock.picking mrp_worker,stock.model_stock_picking,mrp.group_mrp_user,1,1,1,1 | 21 | access_stock_picking_mrp_worker,stock.picking mrp_worker,stock.model_stock_picking,mrp.group_mrp_user,1,1,1,1 |
1823 | @@ -55,6 +57,8 @@ | |||
1824 | 55 | access_report_workcenter_load_user,report.workcenter.load.user,model_report_workcenter_load,mrp.group_mrp_user,1,0,0,0 | 57 | access_report_workcenter_load_user,report.workcenter.load.user,model_report_workcenter_load,mrp.group_mrp_user,1,0,0,0 |
1825 | 56 | access_mrp_bom_salesman,mrp.bom,model_mrp_bom,base.group_sale_salesman,1,0,0,0 | 58 | access_mrp_bom_salesman,mrp.bom,model_mrp_bom,base.group_sale_salesman,1,0,0,0 |
1826 | 57 | access_mrp_bom_stockuser,mrp.bom,model_mrp_bom,stock.group_stock_user,1,0,0,0 | 59 | access_mrp_bom_stockuser,mrp.bom,model_mrp_bom,stock.group_stock_user,1,0,0,0 |
1827 | 60 | access_mrp_bom_line_salesman,mrp.bom.line,model_mrp_bom_line,base.group_sale_salesman,1,0,0,0 | ||
1828 | 61 | access_mrp_bom_line_stockuser,mrp.bom.line,model_mrp_bom_line,stock.group_stock_user,1,0,0,0 | ||
1829 | 58 | access_product_uom_categ_mrp_manager,product.uom.categ mrp_manager,product.model_product_uom_categ,mrp.group_mrp_manager,1,1,1,1 | 62 | access_product_uom_categ_mrp_manager,product.uom.categ mrp_manager,product.model_product_uom_categ,mrp.group_mrp_manager,1,1,1,1 |
1830 | 59 | access_product_uom_mrp_manager,product.uom mrp_manager,product.model_product_uom,mrp.group_mrp_manager,1,1,1,1 | 63 | access_product_uom_mrp_manager,product.uom mrp_manager,product.model_product_uom,mrp.group_mrp_manager,1,1,1,1 |
1831 | 60 | access_product_ul_mrp_manager,product.ul mrp_manager,product.model_product_ul,mrp.group_mrp_manager,1,1,1,1 | 64 | access_product_ul_mrp_manager,product.ul mrp_manager,product.model_product_ul,mrp.group_mrp_manager,1,1,1,1 |
1832 | 61 | 65 | ||
1833 | === modified file 'mrp/stock.py' | |||
1834 | --- mrp/stock.py 2014-05-07 17:24:46 +0000 | |||
1835 | +++ mrp/stock.py 2014-05-26 16:10:21 +0000 | |||
1836 | @@ -55,13 +55,14 @@ | |||
1837 | 55 | user_company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id | 55 | user_company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id |
1838 | 56 | #doing the search as SUPERUSER because a user with the permission to write on a stock move should be able to explode it | 56 | #doing the search as SUPERUSER because a user with the permission to write on a stock move should be able to explode it |
1839 | 57 | #without giving him the right to read the boms. | 57 | #without giving him the right to read the boms. |
1843 | 58 | return self.pool.get('mrp.bom').search(cr, SUPERUSER_ID, [ | 58 | domain = [ |
1844 | 59 | ('product_id', '=', move.product_id.id), | 59 | '|', ('product_id', '=', move.product_id.id), |
1845 | 60 | ('bom_id', '=', False), | 60 | '&', ('product_id', '=', False), ('product_tmpl_id.product_variant_ids', '=', move.product_id.id), |
1846 | 61 | ('type', '=', 'phantom'), | 61 | ('type', '=', 'phantom'), |
1847 | 62 | '|', ('date_start', '=', False), ('date_start', '<=', time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)), | 62 | '|', ('date_start', '=', False), ('date_start', '<=', time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)), |
1848 | 63 | '|', ('date_stop', '=', False), ('date_stop', '>=', time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)), | 63 | '|', ('date_stop', '=', False), ('date_stop', '>=', time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)), |
1850 | 64 | ('company_id', '=', user_company)], context=context) | 64 | ('company_id', '=', user_company)] |
1851 | 65 | return self.pool.get('mrp.bom').search(cr, SUPERUSER_ID, domain, context=context) | ||
1852 | 65 | 66 | ||
1853 | 66 | def _action_explode(self, cr, uid, move, context=None): | 67 | def _action_explode(self, cr, uid, move, context=None): |
1854 | 67 | """ Explodes pickings. | 68 | """ Explodes pickings. |
1855 | @@ -76,7 +77,7 @@ | |||
1856 | 76 | if bis: | 77 | if bis: |
1857 | 77 | factor = move.product_qty | 78 | factor = move.product_qty |
1858 | 78 | bom_point = bom_obj.browse(cr, SUPERUSER_ID, bis[0], context=context) | 79 | bom_point = bom_obj.browse(cr, SUPERUSER_ID, bis[0], context=context) |
1860 | 79 | res = bom_obj._bom_explode(cr, SUPERUSER_ID, bom_point, factor, []) | 80 | res = bom_obj._bom_explode(cr, SUPERUSER_ID, bom_point, move.product_id, factor, []) |
1861 | 80 | state = 'confirmed' | 81 | state = 'confirmed' |
1862 | 81 | if move.state == 'assigned': | 82 | if move.state == 'assigned': |
1863 | 82 | state = 'assigned' | 83 | state = 'assigned' |
1864 | 83 | 84 | ||
1865 | === modified file 'mrp/test/bom_with_service_type_product.yml' | |||
1866 | --- mrp/test/bom_with_service_type_product.yml 2014-02-05 09:34:11 +0000 | |||
1867 | +++ mrp/test/bom_with_service_type_product.yml 2014-05-26 16:10:21 +0000 | |||
1868 | @@ -4,17 +4,17 @@ | |||
1869 | 4 | !record {model: mrp.bom, id: mrp_bom_test1}: | 4 | !record {model: mrp.bom, id: mrp_bom_test1}: |
1870 | 5 | company_id: base.main_company | 5 | company_id: base.main_company |
1871 | 6 | name: PC Assemble SC234 | 6 | name: PC Assemble SC234 |
1872 | 7 | product_tmpl_id: product.product_product_3_product_template | ||
1873 | 7 | product_id: product.product_product_3 | 8 | product_id: product.product_product_3 |
1874 | 9 | product_uom: product.product_uom_unit | ||
1875 | 8 | product_qty: 1.0 | 10 | product_qty: 1.0 |
1876 | 9 | type: normal | 11 | type: normal |
1881 | 10 | bom_lines: | 12 | bom_line_ids: |
1882 | 11 | - company_id: base.main_company | 13 | - product_id: product.product_product_2 |
1883 | 12 | name: On Site Assistance | 14 | product_uom: product.product_uom_unit |
1880 | 13 | product_id: product.product_product_2 | ||
1884 | 14 | product_qty: 1.0 | 15 | product_qty: 1.0 |
1888 | 15 | - company_id: base.main_company | 16 | - product_id: product.product_product_44 |
1889 | 16 | name: GrapWorks Software | 17 | product_uom: product.product_uom_unit |
1887 | 17 | product_id: product.product_product_44 | ||
1890 | 18 | product_qty: 1.0 | 18 | product_qty: 1.0 |
1891 | 19 | - | 19 | - |
1892 | 20 | I make the production order using BoM having one service type product and one consumable product. | 20 | I make the production order using BoM having one service type product and one consumable product. |
1893 | 21 | 21 | ||
1894 | === modified file 'mrp/test/order_demo.yml' | |||
1895 | --- mrp/test/order_demo.yml 2014-04-04 16:17:13 +0000 | |||
1896 | +++ mrp/test/order_demo.yml 2014-05-26 16:10:21 +0000 | |||
1897 | @@ -7,11 +7,11 @@ | |||
1898 | 7 | I create Production Order of PC Assemble SC349 to produce 5.0 Unit. | 7 | I create Production Order of PC Assemble SC349 to produce 5.0 Unit. |
1899 | 8 | - | 8 | - |
1900 | 9 | !record {model: mrp.production, id: mrp_production_test1}: | 9 | !record {model: mrp.production, id: mrp_production_test1}: |
1902 | 10 | product_id: product.product_product_4 | 10 | product_id: product.product_product_3 |
1903 | 11 | product_qty: 5.0 | 11 | product_qty: 5.0 |
1904 | 12 | location_src_id: stock.stock_location_14 | 12 | location_src_id: stock.stock_location_14 |
1905 | 13 | location_dest_id: stock.stock_location_output | 13 | location_dest_id: stock.stock_location_output |
1907 | 14 | bom_id: mrp_bom_24 | 14 | bom_id: mrp_bom_9 |
1908 | 15 | routing_id: mrp.mrp_routing_1 | 15 | routing_id: mrp.mrp_routing_1 |
1909 | 16 | 16 | ||
1910 | 17 | 17 | ||
1911 | 18 | 18 | ||
1912 | === modified file 'mrp/views/report_mrpbomstructure.xml' | |||
1913 | --- mrp/views/report_mrpbomstructure.xml 2014-02-24 10:34:53 +0000 | |||
1914 | +++ mrp/views/report_mrpbomstructure.xml 2014-05-26 16:10:21 +0000 | |||
1915 | @@ -27,10 +27,9 @@ | |||
1916 | 27 | </td> | 27 | </td> |
1917 | 28 | <td><span t-field="o.code"/></td> | 28 | <td><span t-field="o.code"/></td> |
1918 | 29 | </tr> | 29 | </tr> |
1920 | 30 | <tr t-foreach="get_children(o.bom_lines)" t-as="l"> | 30 | <tr t-foreach="get_children(o.bom_line_ids)" t-as="l"> |
1921 | 31 | <td> | 31 | <td> |
1922 | 32 | <span style="color: white;" t-esc="'... '*(l['level'])"/> | 32 | <span style="color: white;" t-esc="'... '*(l['level'])"/> |
1923 | 33 | - <span t-esc="l['name']"/> | ||
1924 | 34 | </td> | 33 | </td> |
1925 | 35 | <td> | 34 | <td> |
1926 | 36 | [ <span t-esc="l['pcode']"/> ] | 35 | [ <span t-esc="l['pcode']"/> ] |
1927 | 37 | 36 | ||
1928 | === modified file 'mrp/wizard/change_production_qty.py' | |||
1929 | --- mrp/wizard/change_production_qty.py 2013-11-29 16:56:44 +0000 | |||
1930 | +++ mrp/wizard/change_production_qty.py 2014-05-26 16:10:21 +0000 | |||
1931 | @@ -78,7 +78,7 @@ | |||
1932 | 78 | bom_point = prod.bom_id | 78 | bom_point = prod.bom_id |
1933 | 79 | bom_id = prod.bom_id.id | 79 | bom_id = prod.bom_id.id |
1934 | 80 | if not bom_point: | 80 | if not bom_point: |
1936 | 81 | bom_id = bom_obj._bom_find(cr, uid, prod.product_id.id, prod.product_uom.id) | 81 | bom_id = bom_obj._bom_find(cr, uid, prod.product_uom.id, product_id=prod.product_id.id) |
1937 | 82 | if not bom_id: | 82 | if not bom_id: |
1938 | 83 | raise osv.except_osv(_('Error!'), _("Cannot find bill of material for this product.")) | 83 | raise osv.except_osv(_('Error!'), _("Cannot find bill of material for this product.")) |
1939 | 84 | prod_obj.write(cr, uid, [prod.id], {'bom_id': bom_id}) | 84 | prod_obj.write(cr, uid, [prod.id], {'bom_id': bom_id}) |
1940 | @@ -89,7 +89,7 @@ | |||
1941 | 89 | 89 | ||
1942 | 90 | factor = prod.product_qty * prod.product_uom.factor / bom_point.product_uom.factor | 90 | factor = prod.product_qty * prod.product_uom.factor / bom_point.product_uom.factor |
1943 | 91 | product_details, workcenter_details = \ | 91 | product_details, workcenter_details = \ |
1945 | 92 | bom_obj._bom_explode(cr, uid, bom_point, factor / bom_point.product_qty, []) | 92 | bom_obj._bom_explode(cr, uid, bom_point, prod.product_id, factor / bom_point.product_qty, []) |
1946 | 93 | for r in product_details: | 93 | for r in product_details: |
1947 | 94 | if r['product_id'] == move.product_id.id: | 94 | if r['product_id'] == move.product_id.id: |
1948 | 95 | move_obj.write(cr, uid, [move.id], {'product_uom_qty': r['product_qty']}) | 95 | move_obj.write(cr, uid, [move.id], {'product_uom_qty': r['product_qty']}) |
1949 | 96 | 96 | ||
1950 | === modified file 'mrp_byproduct/test/mrp_byproduct.yml' | |||
1951 | --- mrp_byproduct/test/mrp_byproduct.yml 2014-01-22 12:52:11 +0000 | |||
1952 | +++ mrp_byproduct/test/mrp_byproduct.yml 2014-05-26 16:10:21 +0000 | |||
1953 | @@ -4,7 +4,7 @@ | |||
1954 | 4 | - | 4 | - |
1955 | 5 | I add a sub product in Bill of material for product External Hard Disk. | 5 | I add a sub product in Bill of material for product External Hard Disk. |
1956 | 6 | - | 6 | - |
1958 | 7 | !record {model: mrp.bom, id: mrp.mrp_bom_24}: | 7 | !record {model: mrp.bom, id: mrp.mrp_bom_9}: |
1959 | 8 | product_id: product.product_product_28 | 8 | product_id: product.product_product_28 |
1960 | 9 | name: External Hard Disk + Subproduct | 9 | name: External Hard Disk + Subproduct |
1961 | 10 | product_uom: product.product_uom_unit | 10 | product_uom: product.product_uom_unit |
1962 | @@ -20,7 +20,7 @@ | |||
1963 | 20 | product_id: product.product_product_28 | 20 | product_id: product.product_product_28 |
1964 | 21 | product_qty: 2.0 | 21 | product_qty: 2.0 |
1965 | 22 | product_uom: product.product_uom_unit | 22 | product_uom: product.product_uom_unit |
1967 | 23 | bom_id: mrp.mrp_bom_24 | 23 | bom_id: mrp.mrp_bom_9 |
1968 | 24 | location_src_id: stock.stock_location_stock | 24 | location_src_id: stock.stock_location_stock |
1969 | 25 | - | 25 | - |
1970 | 26 | I compute the data of production order. | 26 | I compute the data of production order. |
1971 | 27 | 27 | ||
1972 | === modified file 'point_of_sale/point_of_sale.py' | |||
1973 | --- point_of_sale/point_of_sale.py 2014-05-08 14:39:40 +0000 | |||
1974 | +++ point_of_sale/point_of_sale.py 2014-05-26 16:10:21 +0000 | |||
1975 | @@ -1318,30 +1318,80 @@ | |||
1976 | 1318 | self.pool[m].write(cr,uid,[m_id],{'ean13':ean13}) | 1318 | self.pool[m].write(cr,uid,[m_id],{'ean13':ean13}) |
1977 | 1319 | return { 'type' : 'ir.actions.act_window_close' } | 1319 | return { 'type' : 'ir.actions.act_window_close' } |
1978 | 1320 | 1320 | ||
1997 | 1321 | class product_product(osv.osv): | 1321 | class pos_category(osv.osv): |
1998 | 1322 | _inherit = 'product.product' | 1322 | _name = "pos.category" |
1999 | 1323 | 1323 | _description = "Public Category" | |
2000 | 1324 | 1324 | _order = "sequence, name" | |
2001 | 1325 | #def _get_small_image(self, cr, uid, ids, prop, unknow_none, context=None): | 1325 | |
2002 | 1326 | # result = {} | 1326 | _constraints = [ |
2003 | 1327 | # for obj in self.browse(cr, uid, ids, context=context): | 1327 | (osv.osv._check_recursion, 'Error ! You cannot create recursive categories.', ['parent_id']) |
2004 | 1328 | # if not obj.product_image: | 1328 | ] |
2005 | 1329 | # result[obj.id] = False | 1329 | |
2006 | 1330 | # continue | 1330 | def name_get(self, cr, uid, ids, context=None): |
2007 | 1331 | 1331 | if not len(ids): | |
2008 | 1332 | # image_stream = io.BytesIO(obj.product_image.decode('base64')) | 1332 | return [] |
2009 | 1333 | # img = Image.open(image_stream) | 1333 | reads = self.read(cr, uid, ids, ['name','parent_id'], context=context) |
2010 | 1334 | # img.thumbnail((120, 100), Image.ANTIALIAS) | 1334 | res = [] |
2011 | 1335 | # img_stream = StringIO.StringIO() | 1335 | for record in reads: |
2012 | 1336 | # img.save(img_stream, "JPEG") | 1336 | name = record['name'] |
2013 | 1337 | # result[obj.id] = img_stream.getvalue().encode('base64') | 1337 | if record['parent_id']: |
2014 | 1338 | # return result | 1338 | name = record['parent_id'][1]+' / '+name |
2015 | 1339 | res.append((record['id'], name)) | ||
2016 | 1340 | return res | ||
2017 | 1341 | |||
2018 | 1342 | def _name_get_fnc(self, cr, uid, ids, prop, unknow_none, context=None): | ||
2019 | 1343 | res = self.name_get(cr, uid, ids, context=context) | ||
2020 | 1344 | return dict(res) | ||
2021 | 1345 | |||
2022 | 1346 | def _get_image(self, cr, uid, ids, name, args, context=None): | ||
2023 | 1347 | result = dict.fromkeys(ids, False) | ||
2024 | 1348 | for obj in self.browse(cr, uid, ids, context=context): | ||
2025 | 1349 | result[obj.id] = tools.image_get_resized_images(obj.image) | ||
2026 | 1350 | return result | ||
2027 | 1351 | |||
2028 | 1352 | def _set_image(self, cr, uid, id, name, value, args, context=None): | ||
2029 | 1353 | return self.write(cr, uid, [id], {'image': tools.image_resize_image_big(value)}, context=context) | ||
2030 | 1354 | |||
2031 | 1355 | _columns = { | ||
2032 | 1356 | 'name': fields.char('Name', required=True, translate=True), | ||
2033 | 1357 | 'complete_name': fields.function(_name_get_fnc, type="char", string='Name'), | ||
2034 | 1358 | 'parent_id': fields.many2one('product.public.category','Parent Category', select=True), | ||
2035 | 1359 | 'child_id': fields.one2many('product.public.category', 'parent_id', string='Children Categories'), | ||
2036 | 1360 | 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of product categories."), | ||
2037 | 1361 | |||
2038 | 1362 | # NOTE: there is no 'default image', because by default we don't show thumbnails for categories. However if we have a thumbnail | ||
2039 | 1363 | # for at least one category, then we display a default image on the other, so that the buttons have consistent styling. | ||
2040 | 1364 | # In this case, the default image is set by the js code. | ||
2041 | 1365 | # NOTE2: image: all image fields are base64 encoded and PIL-supported | ||
2042 | 1366 | 'image': fields.binary("Image", | ||
2043 | 1367 | help="This field holds the image used as image for the cateogry, limited to 1024x1024px."), | ||
2044 | 1368 | 'image_medium': fields.function(_get_image, fnct_inv=_set_image, | ||
2045 | 1369 | string="Medium-sized image", type="binary", multi="_get_image", | ||
2046 | 1370 | store={ | ||
2047 | 1371 | 'product.public.category': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10), | ||
2048 | 1372 | }, | ||
2049 | 1373 | help="Medium-sized image of the category. It is automatically "\ | ||
2050 | 1374 | "resized as a 128x128px image, with aspect ratio preserved. "\ | ||
2051 | 1375 | "Use this field in form views or some kanban views."), | ||
2052 | 1376 | 'image_small': fields.function(_get_image, fnct_inv=_set_image, | ||
2053 | 1377 | string="Smal-sized image", type="binary", multi="_get_image", | ||
2054 | 1378 | store={ | ||
2055 | 1379 | 'product.public.category': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10), | ||
2056 | 1380 | }, | ||
2057 | 1381 | help="Small-sized image of the category. It is automatically "\ | ||
2058 | 1382 | "resized as a 64x64px image, with aspect ratio preserved. "\ | ||
2059 | 1383 | "Use this field anywhere a small image is required."), | ||
2060 | 1384 | } | ||
2061 | 1385 | |||
2062 | 1386 | class product_template(osv.osv): | ||
2063 | 1387 | _inherit = 'product.template' | ||
2064 | 1339 | 1388 | ||
2065 | 1340 | _columns = { | 1389 | _columns = { |
2066 | 1341 | 'income_pdt': fields.boolean('Point of Sale Cash In', help="Check if, this is a product you can use to put cash into a statement for the point of sale backend."), | 1390 | 'income_pdt': fields.boolean('Point of Sale Cash In', help="Check if, this is a product you can use to put cash into a statement for the point of sale backend."), |
2067 | 1342 | 'expense_pdt': fields.boolean('Point of Sale Cash Out', help="Check if, this is a product you can use to take cash from a statement for the point of sale backend, example: money lost, transfer to bank, etc."), | 1391 | 'expense_pdt': fields.boolean('Point of Sale Cash Out', help="Check if, this is a product you can use to take cash from a statement for the point of sale backend, example: money lost, transfer to bank, etc."), |
2068 | 1343 | 'available_in_pos': fields.boolean('Available in the Point of Sale', help='Check if you want this product to appear in the Point of Sale'), | 1392 | 'available_in_pos': fields.boolean('Available in the Point of Sale', help='Check if you want this product to appear in the Point of Sale'), |
2069 | 1344 | 'to_weight' : fields.boolean('To Weigh', help="Check if the product should be weighted (mainly used with self check-out interface)."), | 1393 | 'to_weight' : fields.boolean('To Weigh', help="Check if the product should be weighted (mainly used with self check-out interface)."), |
2070 | 1394 | 'pos_categ_id': fields.many2one('pos.category','Point of Sale Category', help="Those categories are used to group similar products for point of sale."), | ||
2071 | 1345 | } | 1395 | } |
2072 | 1346 | 1396 | ||
2073 | 1347 | _defaults = { | 1397 | _defaults = { |
2074 | 1348 | 1398 | ||
2075 | === modified file 'point_of_sale/point_of_sale_demo.xml' | |||
2076 | --- point_of_sale/point_of_sale_demo.xml 2014-01-27 17:21:21 +0000 | |||
2077 | +++ point_of_sale/point_of_sale_demo.xml 2014-05-26 16:10:21 +0000 | |||
2078 | @@ -39,145 +39,146 @@ | |||
2079 | 39 | <field name="journal_ids" eval="[(6, 0, [ref('account.cash_journal'), ref('account.bank_journal'), ref('account.check_journal')])]" /> | 39 | <field name="journal_ids" eval="[(6, 0, [ref('account.cash_journal'), ref('account.bank_journal'), ref('account.check_journal')])]" /> |
2080 | 40 | </record> | 40 | </record> |
2081 | 41 | 41 | ||
2083 | 42 | <!-- Resource: product.public.category --> | 42 | <!-- Resource: pos.category --> |
2084 | 43 | 43 | ||
2086 | 44 | <record id="product.computers" model="product.public.category"> | 44 | <record id="computers" model="pos.category"> |
2087 | 45 | <field name="name">Computers</field> | ||
2088 | 45 | <field name="image" type="base64" file="point_of_sale/static/img/computer.png"/> | 46 | <field name="image" type="base64" file="point_of_sale/static/img/computer.png"/> |
2089 | 46 | </record> | 47 | </record> |
2090 | 47 | 48 | ||
2092 | 48 | <record id="beverage" model="product.public.category"> | 49 | <record id="beverage" model="pos.category"> |
2093 | 49 | <field name="name">Beverages</field> | 50 | <field name="name">Beverages</field> |
2094 | 50 | <field name="image" type="base64" file="point_of_sale/static/img/beverage-image.jpg"/> | 51 | <field name="image" type="base64" file="point_of_sale/static/img/beverage-image.jpg"/> |
2095 | 51 | </record> | 52 | </record> |
2096 | 52 | 53 | ||
2098 | 53 | <record id="water" model="product.public.category"> | 54 | <record id="water" model="pos.category"> |
2099 | 54 | <field name="parent_id" ref="beverage"/> | 55 | <field name="parent_id" ref="beverage"/> |
2100 | 55 | <field name="name">Water</field> | 56 | <field name="name">Water</field> |
2101 | 56 | <field name="image" type="base64" file="point_of_sale/static/img/water-image.jpg"/> | 57 | <field name="image" type="base64" file="point_of_sale/static/img/water-image.jpg"/> |
2102 | 57 | </record> | 58 | </record> |
2104 | 58 | <record id="plain_water" model="product.public.category"> | 59 | <record id="plain_water" model="pos.category"> |
2105 | 59 | <field name="parent_id" ref="water"/> | 60 | <field name="parent_id" ref="water"/> |
2106 | 60 | <field name="name">Plain Water</field> | 61 | <field name="name">Plain Water</field> |
2107 | 61 | <field name="image" type="base64" file="point_of_sale/static/img/plain_water-image.jpg"/> | 62 | <field name="image" type="base64" file="point_of_sale/static/img/plain_water-image.jpg"/> |
2108 | 62 | </record> | 63 | </record> |
2110 | 63 | <record id="sparkling_water" model="product.public.category"> | 64 | <record id="sparkling_water" model="pos.category"> |
2111 | 64 | <field name="parent_id" ref="water"/> | 65 | <field name="parent_id" ref="water"/> |
2112 | 65 | <field name="name">Sparkling Water</field> | 66 | <field name="name">Sparkling Water</field> |
2113 | 66 | <field name="image" type="base64" file="point_of_sale/static/img/sparkling_water-image.jpg"/> | 67 | <field name="image" type="base64" file="point_of_sale/static/img/sparkling_water-image.jpg"/> |
2114 | 67 | </record> | 68 | </record> |
2116 | 68 | <record id="soda" model="product.public.category"> | 69 | <record id="soda" model="pos.category"> |
2117 | 69 | <field name="parent_id" ref="beverage"/> | 70 | <field name="parent_id" ref="beverage"/> |
2118 | 70 | <field name="name">Soda</field> | 71 | <field name="name">Soda</field> |
2119 | 71 | <field name="image" type="base64" file="point_of_sale/static/img/soda-image.jpg"/> | 72 | <field name="image" type="base64" file="point_of_sale/static/img/soda-image.jpg"/> |
2120 | 72 | </record> | 73 | </record> |
2122 | 73 | <record id="coke" model="product.public.category"> | 74 | <record id="coke" model="pos.category"> |
2123 | 74 | <field name="parent_id" ref="soda"/> | 75 | <field name="parent_id" ref="soda"/> |
2124 | 75 | <field name="name">Coke</field> | 76 | <field name="name">Coke</field> |
2125 | 76 | <field name="image" type="base64" file="point_of_sale/static/img/coke-image.jpg"/> | 77 | <field name="image" type="base64" file="point_of_sale/static/img/coke-image.jpg"/> |
2126 | 77 | </record> | 78 | </record> |
2128 | 78 | <record id="soda_orange" model="product.public.category"> | 79 | <record id="soda_orange" model="pos.category"> |
2129 | 79 | <field name="parent_id" ref="soda"/> | 80 | <field name="parent_id" ref="soda"/> |
2130 | 80 | <field name="name">Orange</field> | 81 | <field name="name">Orange</field> |
2131 | 81 | <field name="image" type="base64" file="point_of_sale/static/img/soda_orange-image.jpg"/> | 82 | <field name="image" type="base64" file="point_of_sale/static/img/soda_orange-image.jpg"/> |
2132 | 82 | </record> | 83 | </record> |
2134 | 83 | <record id="beers" model="product.public.category"> | 84 | <record id="beers" model="pos.category"> |
2135 | 84 | <field name="parent_id" ref="beverage"/> | 85 | <field name="parent_id" ref="beverage"/> |
2136 | 85 | <field name="name">Beers</field> | 86 | <field name="name">Beers</field> |
2137 | 86 | <field name="image" type="base64" file="point_of_sale/static/img/beers-image.jpg"/> | 87 | <field name="image" type="base64" file="point_of_sale/static/img/beers-image.jpg"/> |
2138 | 87 | </record> | 88 | </record> |
2140 | 88 | <record id="pils" model="product.public.category"> | 89 | <record id="pils" model="pos.category"> |
2141 | 89 | <field name="parent_id" ref="beers"/> | 90 | <field name="parent_id" ref="beers"/> |
2142 | 90 | <field name="name">Pils</field> | 91 | <field name="name">Pils</field> |
2143 | 91 | <field name="image" type="base64" file="point_of_sale/static/img/pils-image.jpg"/> | 92 | <field name="image" type="base64" file="point_of_sale/static/img/pils-image.jpg"/> |
2144 | 92 | </record> | 93 | </record> |
2146 | 93 | <record id="fruity_beers" model="product.public.category"> | 94 | <record id="fruity_beers" model="pos.category"> |
2147 | 94 | <field name="parent_id" ref="beers"/> | 95 | <field name="parent_id" ref="beers"/> |
2148 | 95 | <field name="name">Fruity Beers</field> | 96 | <field name="name">Fruity Beers</field> |
2149 | 96 | <field name="image" type="base64" file="point_of_sale/static/img/fruity_beers-image.jpg"/> | 97 | <field name="image" type="base64" file="point_of_sale/static/img/fruity_beers-image.jpg"/> |
2150 | 97 | </record> | 98 | </record> |
2152 | 98 | <record id="special_beers" model="product.public.category"> | 99 | <record id="special_beers" model="pos.category"> |
2153 | 99 | <field name="parent_id" ref="beers"/> | 100 | <field name="parent_id" ref="beers"/> |
2154 | 100 | <field name="name">Special Beers</field> | 101 | <field name="name">Special Beers</field> |
2155 | 101 | <field name="image" type="base64" file="point_of_sale/static/img/special_beers-image.jpg"/> | 102 | <field name="image" type="base64" file="point_of_sale/static/img/special_beers-image.jpg"/> |
2156 | 102 | </record> | 103 | </record> |
2158 | 103 | <record id="food" model="product.public.category"> | 104 | <record id="food" model="pos.category"> |
2159 | 104 | <field name="name">Food</field> | 105 | <field name="name">Food</field> |
2160 | 105 | <field name="image" type="base64" file="point_of_sale/static/img/food-image.jpg"/> | 106 | <field name="image" type="base64" file="point_of_sale/static/img/food-image.jpg"/> |
2161 | 106 | </record> | 107 | </record> |
2163 | 107 | <record id="pizza" model="product.public.category"> | 108 | <record id="pizza" model="pos.category"> |
2164 | 108 | <field name="parent_id" ref="food"/> | 109 | <field name="parent_id" ref="food"/> |
2165 | 109 | <field name="name">Pizza</field> | 110 | <field name="name">Pizza</field> |
2166 | 110 | <field name="image" type="base64" file="point_of_sale/static/img/pizza-image.jpg"/> | 111 | <field name="image" type="base64" file="point_of_sale/static/img/pizza-image.jpg"/> |
2167 | 111 | </record> | 112 | </record> |
2169 | 112 | <record id="ice_cream" model="product.public.category"> | 113 | <record id="ice_cream" model="pos.category"> |
2170 | 113 | <field name="parent_id" ref="food"/> | 114 | <field name="parent_id" ref="food"/> |
2171 | 114 | <field name="name">Ice Cream</field> | 115 | <field name="name">Ice Cream</field> |
2172 | 115 | <field name="image" type="base64" file="point_of_sale/static/img/ice_cream-image.jpg"/> | 116 | <field name="image" type="base64" file="point_of_sale/static/img/ice_cream-image.jpg"/> |
2173 | 116 | </record> | 117 | </record> |
2175 | 117 | <record id="chips" model="product.public.category"> | 118 | <record id="chips" model="pos.category"> |
2176 | 118 | <field name="parent_id" ref="food"/> | 119 | <field name="parent_id" ref="food"/> |
2177 | 119 | <field name="name">Chips</field> | 120 | <field name="name">Chips</field> |
2178 | 120 | <field name="image" type="base64" file="point_of_sale/static/img/chips-image.jpg"/> | 121 | <field name="image" type="base64" file="point_of_sale/static/img/chips-image.jpg"/> |
2179 | 121 | </record> | 122 | </record> |
2181 | 122 | <record id="fruits" model="product.public.category"> | 123 | <record id="fruits" model="pos.category"> |
2182 | 123 | <field name="name">Fresh Fruits</field> | 124 | <field name="name">Fresh Fruits</field> |
2183 | 124 | <field name="image" type="base64" file="point_of_sale/static/img/fruits-image.jpg"/> | 125 | <field name="image" type="base64" file="point_of_sale/static/img/fruits-image.jpg"/> |
2184 | 125 | </record> | 126 | </record> |
2186 | 126 | <record id="oranges" model="product.public.category"> | 127 | <record id="oranges" model="pos.category"> |
2187 | 127 | <field name="parent_id" ref="fruits"/> | 128 | <field name="parent_id" ref="fruits"/> |
2188 | 128 | <field name="name">Oranges</field> | 129 | <field name="name">Oranges</field> |
2189 | 129 | <field name="image" type="base64" file="point_of_sale/static/img/oranges-image.jpg"/> | 130 | <field name="image" type="base64" file="point_of_sale/static/img/oranges-image.jpg"/> |
2190 | 130 | </record> | 131 | </record> |
2192 | 131 | <record id="pomme" model="product.public.category"> | 132 | <record id="pomme" model="pos.category"> |
2193 | 132 | <field name="parent_id" ref="fruits"/> | 133 | <field name="parent_id" ref="fruits"/> |
2194 | 133 | <field name="name">Apples</field> | 134 | <field name="name">Apples</field> |
2195 | 134 | <field name="image" type="base64" file="point_of_sale/static/img/pomme-image.jpg"/> | 135 | <field name="image" type="base64" file="point_of_sale/static/img/pomme-image.jpg"/> |
2196 | 135 | </record> | 136 | </record> |
2198 | 136 | <record id="autres_agrumes" model="product.public.category"> | 137 | <record id="autres_agrumes" model="pos.category"> |
2199 | 137 | <field name="parent_id" ref="fruits"/> | 138 | <field name="parent_id" ref="fruits"/> |
2200 | 138 | <field name="name">Other Citrus</field> | 139 | <field name="name">Other Citrus</field> |
2201 | 139 | <field name="image" type="base64" file="point_of_sale/static/img/autres_agrumes-image.jpg"/> | 140 | <field name="image" type="base64" file="point_of_sale/static/img/autres_agrumes-image.jpg"/> |
2202 | 140 | </record> | 141 | </record> |
2204 | 141 | <record id="poire" model="product.public.category"> | 142 | <record id="poire" model="pos.category"> |
2205 | 142 | <field name="parent_id" ref="fruits"/> | 143 | <field name="parent_id" ref="fruits"/> |
2206 | 143 | <field name="name">Pears</field> | 144 | <field name="name">Pears</field> |
2207 | 144 | <field name="image" type="base64" file="point_of_sale/static/img/poire-image.jpg"/> | 145 | <field name="image" type="base64" file="point_of_sale/static/img/poire-image.jpg"/> |
2208 | 145 | </record> | 146 | </record> |
2210 | 146 | <record id="rouges_noyau_fruits" model="product.public.category"> | 147 | <record id="rouges_noyau_fruits" model="pos.category"> |
2211 | 147 | <field name="parent_id" ref="fruits"/> | 148 | <field name="parent_id" ref="fruits"/> |
2212 | 148 | <field name="name">Berries</field> | 149 | <field name="name">Berries</field> |
2213 | 149 | <field name="image" type="base64" file="point_of_sale/static/img/rouges_noyau_fruits-image.jpg"/> | 150 | <field name="image" type="base64" file="point_of_sale/static/img/rouges_noyau_fruits-image.jpg"/> |
2214 | 150 | </record> | 151 | </record> |
2216 | 151 | <record id="raisins" model="product.public.category"> | 152 | <record id="raisins" model="pos.category"> |
2217 | 152 | <field name="parent_id" ref="fruits"/> | 153 | <field name="parent_id" ref="fruits"/> |
2218 | 153 | <field name="name">Grapes</field> | 154 | <field name="name">Grapes</field> |
2219 | 154 | <field name="image" type="base64" file="point_of_sale/static/img/raisins-image.jpg"/> | 155 | <field name="image" type="base64" file="point_of_sale/static/img/raisins-image.jpg"/> |
2220 | 155 | </record> | 156 | </record> |
2222 | 156 | <record id="legumes" model="product.public.category"> | 157 | <record id="legumes" model="pos.category"> |
2223 | 157 | <field name="name">Fresh vegetables</field> | 158 | <field name="name">Fresh vegetables</field> |
2224 | 158 | <field name="image" type="base64" file="point_of_sale/static/img/legumes-image.jpg"/> | 159 | <field name="image" type="base64" file="point_of_sale/static/img/legumes-image.jpg"/> |
2225 | 159 | </record> | 160 | </record> |
2227 | 160 | <record id="pommes_de_terre" model="product.public.category"> | 161 | <record id="pommes_de_terre" model="pos.category"> |
2228 | 161 | <field name="parent_id" ref="legumes"/> | 162 | <field name="parent_id" ref="legumes"/> |
2229 | 162 | <field name="name">Potatoes</field> | 163 | <field name="name">Potatoes</field> |
2230 | 163 | <field name="image" type="base64" file="point_of_sale/static/img/pommes_de_terre-image.jpg"/> | 164 | <field name="image" type="base64" file="point_of_sale/static/img/pommes_de_terre-image.jpg"/> |
2231 | 164 | </record> | 165 | </record> |
2233 | 165 | <record id="legumes_racine" model="product.public.category"> | 166 | <record id="legumes_racine" model="pos.category"> |
2234 | 166 | <field name="parent_id" ref="legumes"/> | 167 | <field name="parent_id" ref="legumes"/> |
2235 | 167 | <field name="name">Root vegetables</field> | 168 | <field name="name">Root vegetables</field> |
2236 | 168 | <field name="image" type="base64" file="point_of_sale/static/img/legumes_racine-image.jpg"/> | 169 | <field name="image" type="base64" file="point_of_sale/static/img/legumes_racine-image.jpg"/> |
2237 | 169 | </record> | 170 | </record> |
2239 | 170 | <record id="tomates" model="product.public.category"> | 171 | <record id="tomates" model="pos.category"> |
2240 | 171 | <field name="parent_id" ref="legumes"/> | 172 | <field name="parent_id" ref="legumes"/> |
2241 | 172 | <field name="name">Tomatos</field> | 173 | <field name="name">Tomatos</field> |
2242 | 173 | <field name="image" type="base64" file="point_of_sale/static/img/tomates-image.jpg"/> | 174 | <field name="image" type="base64" file="point_of_sale/static/img/tomates-image.jpg"/> |
2243 | 174 | </record> | 175 | </record> |
2245 | 175 | <record id="oignons_ail_echalotes" model="product.public.category"> | 176 | <record id="oignons_ail_echalotes" model="pos.category"> |
2246 | 176 | <field name="parent_id" ref="legumes"/> | 177 | <field name="parent_id" ref="legumes"/> |
2247 | 177 | <field name="name">Onions / Garlic / Shallots</field> | 178 | <field name="name">Onions / Garlic / Shallots</field> |
2248 | 178 | <field name="image" type="base64" file="point_of_sale/static/img/oignons_ail_echalotes-image.jpg"/> | 179 | <field name="image" type="base64" file="point_of_sale/static/img/oignons_ail_echalotes-image.jpg"/> |
2249 | 179 | </record> | 180 | </record> |
2251 | 180 | <record id="autres_legumes_frais" model="product.public.category"> | 181 | <record id="autres_legumes_frais" model="pos.category"> |
2252 | 181 | <field name="parent_id" ref="legumes"/> | 182 | <field name="parent_id" ref="legumes"/> |
2253 | 182 | <field name="name">Other fresh vegetables</field> | 183 | <field name="name">Other fresh vegetables</field> |
2254 | 183 | <field name="image" type="base64" file="point_of_sale/static/img/autres_legumes_frais-image.jpg"/> | 184 | <field name="image" type="base64" file="point_of_sale/static/img/autres_legumes_frais-image.jpg"/> |
2255 | @@ -191,7 +192,7 @@ | |||
2256 | 191 | <field name="name">Boni Oranges</field> | 192 | <field name="name">Boni Oranges</field> |
2257 | 192 | <field name="to_weight">True</field> | 193 | <field name="to_weight">True</field> |
2258 | 193 | <field name="ean13">2100002000003</field> | 194 | <field name="ean13">2100002000003</field> |
2260 | 194 | <field name="public_categ_id" ref="oranges"/> | 195 | <field name="pos_categ_id" ref="oranges"/> |
2261 | 195 | <field name="uom_id" ref="product.product_uom_kgm" /> | 196 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2262 | 196 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 197 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2263 | 197 | <field name="image" type="base64" file="point_of_sale/static/img/boni_orange-image.jpg"/> | 198 | <field name="image" type="base64" file="point_of_sale/static/img/boni_orange-image.jpg"/> |
2264 | @@ -200,7 +201,7 @@ | |||
2265 | 200 | <field name="available_in_pos">True</field> | 201 | <field name="available_in_pos">True</field> |
2266 | 201 | <field name="list_price">2.83</field> | 202 | <field name="list_price">2.83</field> |
2267 | 202 | <field name="name">Orange Butterfly</field> | 203 | <field name="name">Orange Butterfly</field> |
2269 | 203 | <field name="public_categ_id" ref="oranges"/> | 204 | <field name="pos_categ_id" ref="oranges"/> |
2270 | 204 | <field name="to_weight">True</field> | 205 | <field name="to_weight">True</field> |
2271 | 205 | <field name="uom_id" ref="product.product_uom_kgm" /> | 206 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2272 | 206 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 207 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2273 | @@ -213,7 +214,7 @@ | |||
2274 | 213 | <field name="name">Lemon</field> | 214 | <field name="name">Lemon</field> |
2275 | 214 | <field name="ean13">2301000000006</field> | 215 | <field name="ean13">2301000000006</field> |
2276 | 215 | <field name="to_weight">True</field> | 216 | <field name="to_weight">True</field> |
2278 | 216 | <field name="public_categ_id" ref="autres_agrumes"/> | 217 | <field name="pos_categ_id" ref="autres_agrumes"/> |
2279 | 217 | <field name="uom_id" ref="product.product_uom_kgm" /> | 218 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2280 | 218 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 219 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2281 | 219 | <field name="image" type="base64" file="point_of_sale/static/img/citron-image.jpg"/> | 220 | <field name="image" type="base64" file="point_of_sale/static/img/citron-image.jpg"/> |
2282 | @@ -223,7 +224,7 @@ | |||
2283 | 223 | <field name="list_price">3.19</field> | 224 | <field name="list_price">3.19</field> |
2284 | 224 | <field name="name">Stringers</field> | 225 | <field name="name">Stringers</field> |
2285 | 225 | <field name="to_weight">True</field> | 226 | <field name="to_weight">True</field> |
2287 | 226 | <field name="public_categ_id" ref="autres_agrumes"/> | 227 | <field name="pos_categ_id" ref="autres_agrumes"/> |
2288 | 227 | <field name="uom_id" ref="product.product_uom_kgm" /> | 228 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2289 | 228 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 229 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2290 | 229 | <field name="image" type="base64" file="point_of_sale/static/img/limon-image.jpg"/> | 230 | <field name="image" type="base64" file="point_of_sale/static/img/limon-image.jpg"/> |
2291 | @@ -233,7 +234,7 @@ | |||
2292 | 233 | <field name="list_price">1.98</field> | 234 | <field name="list_price">1.98</field> |
2293 | 234 | <field name="name">Red grapefruit</field> | 235 | <field name="name">Red grapefruit</field> |
2294 | 235 | <field name="to_weight">True</field> | 236 | <field name="to_weight">True</field> |
2296 | 236 | <field name="public_categ_id" ref="autres_agrumes"/> | 237 | <field name="pos_categ_id" ref="autres_agrumes"/> |
2297 | 237 | <field name="uom_id" ref="product.product_uom_kgm" /> | 238 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2298 | 238 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 239 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2299 | 239 | <field name="image" type="base64" file="point_of_sale/static/img/pamplemousse_rouge_pamplemousse-image.jpg"/> | 240 | <field name="image" type="base64" file="point_of_sale/static/img/pamplemousse_rouge_pamplemousse-image.jpg"/> |
2300 | @@ -244,7 +245,7 @@ | |||
2301 | 244 | <field name="list_price">2.09</field> | 245 | <field name="list_price">2.09</field> |
2302 | 245 | <field name="name">Granny Smith apples</field> | 246 | <field name="name">Granny Smith apples</field> |
2303 | 246 | <field name="to_weight">True</field> | 247 | <field name="to_weight">True</field> |
2305 | 247 | <field name="public_categ_id" ref="pomme"/> | 248 | <field name="pos_categ_id" ref="pomme"/> |
2306 | 248 | <field name="uom_id" ref="product.product_uom_kgm" /> | 249 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2307 | 249 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 250 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2308 | 250 | <field name="image" type="base64" file="point_of_sale/static/img/pomme_granny_smith-image.jpg"/> | 251 | <field name="image" type="base64" file="point_of_sale/static/img/pomme_granny_smith-image.jpg"/> |
2309 | @@ -254,7 +255,7 @@ | |||
2310 | 254 | <field name="list_price">1.10</field> | 255 | <field name="list_price">1.10</field> |
2311 | 255 | <field name="name">Jonagold apples</field> | 256 | <field name="name">Jonagold apples</field> |
2312 | 256 | <field name="to_weight">True</field> | 257 | <field name="to_weight">True</field> |
2314 | 257 | <field name="public_categ_id" ref="pomme"/> | 258 | <field name="pos_categ_id" ref="pomme"/> |
2315 | 258 | <field name="uom_id" ref="product.product_uom_kgm" /> | 259 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2316 | 259 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 260 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2317 | 260 | <field name="image" type="base64" file="point_of_sale/static/img/pomme_jonagold-image.jpg"/> | 261 | <field name="image" type="base64" file="point_of_sale/static/img/pomme_jonagold-image.jpg"/> |
2318 | @@ -264,7 +265,7 @@ | |||
2319 | 264 | <field name="list_price">1.69</field> | 265 | <field name="list_price">1.69</field> |
2320 | 265 | <field name="name">Golden Apples Perlim</field> | 266 | <field name="name">Golden Apples Perlim</field> |
2321 | 266 | <field name="to_weight">True</field> | 267 | <field name="to_weight">True</field> |
2323 | 267 | <field name="public_categ_id" ref="pomme"/> | 268 | <field name="pos_categ_id" ref="pomme"/> |
2324 | 268 | <field name="uom_id" ref="product.product_uom_kgm" /> | 269 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2325 | 269 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 270 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2326 | 270 | <field name="image" type="base64" file="point_of_sale/static/img/pomme_golden_perlim-image.jpg"/> | 271 | <field name="image" type="base64" file="point_of_sale/static/img/pomme_golden_perlim-image.jpg"/> |
2327 | @@ -275,7 +276,7 @@ | |||
2328 | 275 | <field name="list_price">1.70</field> | 276 | <field name="list_price">1.70</field> |
2329 | 276 | <field name="name">Conference pears</field> | 277 | <field name="name">Conference pears</field> |
2330 | 277 | <field name="to_weight">True</field> | 278 | <field name="to_weight">True</field> |
2332 | 278 | <field name="public_categ_id" ref="poire"/> | 279 | <field name="pos_categ_id" ref="poire"/> |
2333 | 279 | <field name="uom_id" ref="product.product_uom_kgm" /> | 280 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2334 | 280 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 281 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2335 | 281 | <field name="image" type="base64" file="point_of_sale/static/img/poire_conference-image.jpg"/> | 282 | <field name="image" type="base64" file="point_of_sale/static/img/poire_conference-image.jpg"/> |
2336 | @@ -286,7 +287,7 @@ | |||
2337 | 286 | <field name="list_price">5.70</field> | 287 | <field name="list_price">5.70</field> |
2338 | 287 | <field name="name">Peach</field> | 288 | <field name="name">Peach</field> |
2339 | 288 | <field name="to_weight">True</field> | 289 | <field name="to_weight">True</field> |
2341 | 289 | <field name="public_categ_id" ref="rouges_noyau_fruits"/> | 290 | <field name="pos_categ_id" ref="rouges_noyau_fruits"/> |
2342 | 290 | <field name="uom_id" ref="product.product_uom_kgm" /> | 291 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2343 | 291 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 292 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2344 | 292 | <field name="image" type="base64" file="point_of_sale/static/img/nectarine-image.jpg"/> | 293 | <field name="image" type="base64" file="point_of_sale/static/img/nectarine-image.jpg"/> |
2345 | @@ -297,7 +298,7 @@ | |||
2346 | 297 | <field name="name">Peaches</field> | 298 | <field name="name">Peaches</field> |
2347 | 298 | <field name="to_weight">True</field> | 299 | <field name="to_weight">True</field> |
2348 | 299 | <field name="ean13">2300001000008</field> | 300 | <field name="ean13">2300001000008</field> |
2350 | 300 | <field name="public_categ_id" ref="rouges_noyau_fruits"/> | 301 | <field name="pos_categ_id" ref="rouges_noyau_fruits"/> |
2351 | 301 | <field name="uom_id" ref="product.product_uom_kgm" /> | 302 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2352 | 302 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 303 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2353 | 303 | <field name="image" type="base64" file="point_of_sale/static/img/peche-image.jpg"/> | 304 | <field name="image" type="base64" file="point_of_sale/static/img/peche-image.jpg"/> |
2354 | @@ -308,7 +309,7 @@ | |||
2355 | 308 | <field name="list_price">4.80</field> | 309 | <field name="list_price">4.80</field> |
2356 | 309 | <field name="name">Black Grapes</field> | 310 | <field name="name">Black Grapes</field> |
2357 | 310 | <field name="to_weight">True</field> | 311 | <field name="to_weight">True</field> |
2359 | 311 | <field name="public_categ_id" ref="raisins"/> | 312 | <field name="pos_categ_id" ref="raisins"/> |
2360 | 312 | <field name="uom_id" ref="product.product_uom_kgm" /> | 313 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2361 | 313 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 314 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2362 | 314 | <field name="image" type="base64" file="point_of_sale/static/img/raisins_noir-image.jpg"/> | 315 | <field name="image" type="base64" file="point_of_sale/static/img/raisins_noir-image.jpg"/> |
2363 | @@ -319,7 +320,7 @@ | |||
2364 | 319 | <field name="list_price">1.39</field> | 320 | <field name="list_price">1.39</field> |
2365 | 320 | <field name="name">Potatoes</field> | 321 | <field name="name">Potatoes</field> |
2366 | 321 | <field name="to_weight">True</field> | 322 | <field name="to_weight">True</field> |
2368 | 322 | <field name="public_categ_id" ref="pommes_de_terre"/> | 323 | <field name="pos_categ_id" ref="pommes_de_terre"/> |
2369 | 323 | <field name="uom_id" ref="product.product_uom_kgm" /> | 324 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2370 | 324 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 325 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2371 | 325 | <field name="image" type="base64" file="point_of_sale/static/img/pomme_de_terre-image.jpg"/> | 326 | <field name="image" type="base64" file="point_of_sale/static/img/pomme_de_terre-image.jpg"/> |
2372 | @@ -330,7 +331,7 @@ | |||
2373 | 330 | <field name="list_price">2.20</field> | 331 | <field name="list_price">2.20</field> |
2374 | 331 | <field name="name">Extra Flandria chicory</field> | 332 | <field name="name">Extra Flandria chicory</field> |
2375 | 332 | <field name="to_weight">True</field> | 333 | <field name="to_weight">True</field> |
2377 | 333 | <field name="public_categ_id" ref="legumes_racine"/> | 334 | <field name="pos_categ_id" ref="legumes_racine"/> |
2378 | 334 | <field name="uom_id" ref="product.product_uom_kgm" /> | 335 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2379 | 335 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 336 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2380 | 336 | <field name="image" type="base64" file="point_of_sale/static/img/chicon_flandria_extra-image.jpg"/> | 337 | <field name="image" type="base64" file="point_of_sale/static/img/chicon_flandria_extra-image.jpg"/> |
2381 | @@ -340,7 +341,7 @@ | |||
2382 | 340 | <field name="list_price">0.90</field> | 341 | <field name="list_price">0.90</field> |
2383 | 341 | <field name="name">Carrots</field> | 342 | <field name="name">Carrots</field> |
2384 | 342 | <field name="to_weight">True</field> | 343 | <field name="to_weight">True</field> |
2386 | 343 | <field name="public_categ_id" ref="legumes_racine"/> | 344 | <field name="pos_categ_id" ref="legumes_racine"/> |
2387 | 344 | <field name="uom_id" ref="product.product_uom_kgm" /> | 345 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2388 | 345 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 346 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2389 | 346 | <field name="image" type="base64" file="point_of_sale/static/img/carotte-image.jpg"/> | 347 | <field name="image" type="base64" file="point_of_sale/static/img/carotte-image.jpg"/> |
2390 | @@ -350,7 +351,7 @@ | |||
2391 | 350 | <field name="list_price">2.10</field> | 351 | <field name="list_price">2.10</field> |
2392 | 351 | <field name="name">Fennel</field> | 352 | <field name="name">Fennel</field> |
2393 | 352 | <field name="to_weight">True</field> | 353 | <field name="to_weight">True</field> |
2395 | 353 | <field name="public_categ_id" ref="legumes_racine"/> | 354 | <field name="pos_categ_id" ref="legumes_racine"/> |
2396 | 354 | <field name="uom_id" ref="product.product_uom_kgm" /> | 355 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2397 | 355 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 356 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2398 | 356 | <field name="image" type="base64" file="point_of_sale/static/img/fenouil_fenouil-image.jpg"/> | 357 | <field name="image" type="base64" file="point_of_sale/static/img/fenouil_fenouil-image.jpg"/> |
2399 | @@ -361,7 +362,7 @@ | |||
2400 | 361 | <field name="list_price">1.90</field> | 362 | <field name="list_price">1.90</field> |
2401 | 362 | <field name="name">In Cluster Tomatoes</field> | 363 | <field name="name">In Cluster Tomatoes</field> |
2402 | 363 | <field name="to_weight">True</field> | 364 | <field name="to_weight">True</field> |
2404 | 364 | <field name="public_categ_id" ref="tomates"/> | 365 | <field name="pos_categ_id" ref="tomates"/> |
2405 | 365 | <field name="uom_id" ref="product.product_uom_kgm" /> | 366 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2406 | 366 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 367 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2407 | 367 | <field name="image" type="base64" file="point_of_sale/static/img/tomate_en_grappe-image.jpg"/> | 368 | <field name="image" type="base64" file="point_of_sale/static/img/tomate_en_grappe-image.jpg"/> |
2408 | @@ -373,7 +374,7 @@ | |||
2409 | 373 | <field name="name">Onions</field> | 374 | <field name="name">Onions</field> |
2410 | 374 | <field name="to_weight">True</field> | 375 | <field name="to_weight">True</field> |
2411 | 375 | <field name="ean13">2100001000004</field> | 376 | <field name="ean13">2100001000004</field> |
2413 | 376 | <field name="public_categ_id" ref="oignons_ail_echalotes"/> | 377 | <field name="pos_categ_id" ref="oignons_ail_echalotes"/> |
2414 | 377 | <field name="uom_id" ref="product.product_uom_kgm" /> | 378 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2415 | 378 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 379 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2416 | 379 | <field name="image" type="base64" file="point_of_sale/static/img/Onions-image.jpg"/> | 380 | <field name="image" type="base64" file="point_of_sale/static/img/Onions-image.jpg"/> |
2417 | @@ -384,7 +385,7 @@ | |||
2418 | 384 | <field name="list_price">3.10</field> | 385 | <field name="list_price">3.10</field> |
2419 | 385 | <field name="name">Red Pepper</field> | 386 | <field name="name">Red Pepper</field> |
2420 | 386 | <field name="to_weight">True</field> | 387 | <field name="to_weight">True</field> |
2422 | 387 | <field name="public_categ_id" ref="autres_legumes_frais"/> | 388 | <field name="pos_categ_id" ref="autres_legumes_frais"/> |
2423 | 388 | <field name="uom_id" ref="product.product_uom_kgm" /> | 389 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2424 | 389 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 390 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2425 | 390 | <field name="image" type="base64" file="point_of_sale/static/img/poivron_rouges-image.jpg"/> | 391 | <field name="image" type="base64" file="point_of_sale/static/img/poivron_rouges-image.jpg"/> |
2426 | @@ -394,7 +395,7 @@ | |||
2427 | 394 | <field name="list_price">3.00</field> | 395 | <field name="list_price">3.00</field> |
2428 | 395 | <field name="name">Green Peppers</field> | 396 | <field name="name">Green Peppers</field> |
2429 | 396 | <field name="to_weight">True</field> | 397 | <field name="to_weight">True</field> |
2431 | 397 | <field name="public_categ_id" ref="autres_legumes_frais"/> | 398 | <field name="pos_categ_id" ref="autres_legumes_frais"/> |
2432 | 398 | <field name="uom_id" ref="product.product_uom_kgm" /> | 399 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2433 | 399 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 400 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2434 | 400 | <field name="image" type="base64" file="point_of_sale/static/img/poivron_verts-image.jpg"/> | 401 | <field name="image" type="base64" file="point_of_sale/static/img/poivron_verts-image.jpg"/> |
2435 | @@ -404,7 +405,7 @@ | |||
2436 | 404 | <field name="list_price">2.70</field> | 405 | <field name="list_price">2.70</field> |
2437 | 405 | <field name="name">Yellow Peppers</field> | 406 | <field name="name">Yellow Peppers</field> |
2438 | 406 | <field name="to_weight">True</field> | 407 | <field name="to_weight">True</field> |
2440 | 407 | <field name="public_categ_id" ref="autres_legumes_frais"/> | 408 | <field name="pos_categ_id" ref="autres_legumes_frais"/> |
2441 | 408 | <field name="uom_id" ref="product.product_uom_kgm" /> | 409 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2442 | 409 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 410 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2443 | 410 | <field name="image" type="base64" file="point_of_sale/static/img/poivron_jaunes-image.jpg"/> | 411 | <field name="image" type="base64" file="point_of_sale/static/img/poivron_jaunes-image.jpg"/> |
2444 | @@ -414,7 +415,7 @@ | |||
2445 | 414 | <field name="list_price">2.29</field> | 415 | <field name="list_price">2.29</field> |
2446 | 415 | <field name="name">Leeks</field> | 416 | <field name="name">Leeks</field> |
2447 | 416 | <field name="to_weight">True</field> | 417 | <field name="to_weight">True</field> |
2449 | 417 | <field name="public_categ_id" ref="autres_legumes_frais"/> | 418 | <field name="pos_categ_id" ref="autres_legumes_frais"/> |
2450 | 418 | <field name="uom_id" ref="product.product_uom_kgm" /> | 419 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2451 | 419 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 420 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2452 | 420 | <field name="image" type="base64" file="point_of_sale/static/img/poireaux_poireaux-image.jpg"/> | 421 | <field name="image" type="base64" file="point_of_sale/static/img/poireaux_poireaux-image.jpg"/> |
2453 | @@ -424,7 +425,7 @@ | |||
2454 | 424 | <field name="list_price">1.20</field> | 425 | <field name="list_price">1.20</field> |
2455 | 425 | <field name="name">Zucchini</field> | 426 | <field name="name">Zucchini</field> |
2456 | 426 | <field name="to_weight">True</field> | 427 | <field name="to_weight">True</field> |
2458 | 427 | <field name="public_categ_id" ref="autres_legumes_frais"/> | 428 | <field name="pos_categ_id" ref="autres_legumes_frais"/> |
2459 | 428 | <field name="uom_id" ref="product.product_uom_kgm" /> | 429 | <field name="uom_id" ref="product.product_uom_kgm" /> |
2460 | 429 | <field name="uom_po_id" ref="product.product_uom_kgm" /> | 430 | <field name="uom_po_id" ref="product.product_uom_kgm" /> |
2461 | 430 | <field name="image" type="base64" file="point_of_sale/static/img/courgette-image.jpg"/> | 431 | <field name="image" type="base64" file="point_of_sale/static/img/courgette-image.jpg"/> |
2462 | @@ -435,21 +436,21 @@ | |||
2463 | 435 | <field name="list_price">1.49</field> | 436 | <field name="list_price">1.49</field> |
2464 | 436 | <field name="name">Coca-Cola Regular 1L</field> | 437 | <field name="name">Coca-Cola Regular 1L</field> |
2465 | 437 | <field name="ean13">5449000054227</field> | 438 | <field name="ean13">5449000054227</field> |
2467 | 438 | <field name="public_categ_id" ref="coke"/> | 439 | <field name="pos_categ_id" ref="coke"/> |
2468 | 439 | <field name="image" type="base64" file="point_of_sale/static/img/coca_regular_1l-image.jpg"/> | 440 | <field name="image" type="base64" file="point_of_sale/static/img/coca_regular_1l-image.jpg"/> |
2469 | 440 | </record> | 441 | </record> |
2470 | 441 | <record id="coca_regular_2l" model="product.product"> | 442 | <record id="coca_regular_2l" model="product.product"> |
2471 | 442 | <field name="available_in_pos">True</field> | 443 | <field name="available_in_pos">True</field> |
2472 | 443 | <field name="list_price">2.38</field> | 444 | <field name="list_price">2.38</field> |
2473 | 444 | <field name="name">Coca-Cola Regular 2L</field> | 445 | <field name="name">Coca-Cola Regular 2L</field> |
2475 | 445 | <field name="public_categ_id" ref="coke"/> | 446 | <field name="pos_categ_id" ref="coke"/> |
2476 | 446 | <field name="image" type="base64" file="point_of_sale/static/img/coca_regular_2l-image.jpg"/> | 447 | <field name="image" type="base64" file="point_of_sale/static/img/coca_regular_2l-image.jpg"/> |
2477 | 447 | </record> | 448 | </record> |
2478 | 448 | <record id="coca_regular_50cl" model="product.product"> | 449 | <record id="coca_regular_50cl" model="product.product"> |
2479 | 449 | <field name="available_in_pos">True</field> | 450 | <field name="available_in_pos">True</field> |
2480 | 450 | <field name="list_price">0.97</field> | 451 | <field name="list_price">0.97</field> |
2481 | 451 | <field name="name">Coca-Cola Regular 50cl</field> | 452 | <field name="name">Coca-Cola Regular 50cl</field> |
2483 | 452 | <field name="public_categ_id" ref="coke"/> | 453 | <field name="pos_categ_id" ref="coke"/> |
2484 | 453 | <field name="image" type="base64" file="point_of_sale/static/img/coca_regular_50cl-image.jpg"/> | 454 | <field name="image" type="base64" file="point_of_sale/static/img/coca_regular_50cl-image.jpg"/> |
2485 | 454 | </record> | 455 | </record> |
2486 | 455 | <record id="coca_regular_33cl" model="product.product"> | 456 | <record id="coca_regular_33cl" model="product.product"> |
2487 | @@ -457,7 +458,7 @@ | |||
2488 | 457 | <field name="list_price">0.51</field> | 458 | <field name="list_price">0.51</field> |
2489 | 458 | <field name="name">Coca-Cola Regular 33cl</field> | 459 | <field name="name">Coca-Cola Regular 33cl</field> |
2490 | 459 | <field name="ean13">5449000000996</field> | 460 | <field name="ean13">5449000000996</field> |
2492 | 460 | <field name="public_categ_id" ref="coke"/> | 461 | <field name="pos_categ_id" ref="coke"/> |
2493 | 461 | <field name="image" type="base64" file="point_of_sale/static/img/coca_regular_33cl-image.jpg"/> | 462 | <field name="image" type="base64" file="point_of_sale/static/img/coca_regular_33cl-image.jpg"/> |
2494 | 462 | </record> | 463 | </record> |
2495 | 463 | 464 | ||
2496 | @@ -465,35 +466,35 @@ | |||
2497 | 465 | <field name="available_in_pos">True</field> | 466 | <field name="available_in_pos">True</field> |
2498 | 466 | <field name="list_price">1.49</field> | 467 | <field name="list_price">1.49</field> |
2499 | 467 | <field name="name">Coca-Cola Light 1L</field> | 468 | <field name="name">Coca-Cola Light 1L</field> |
2501 | 468 | <field name="public_categ_id" ref="coke"/> | 469 | <field name="pos_categ_id" ref="coke"/> |
2502 | 469 | <field name="image" type="base64" file="point_of_sale/static/img/coca_light_1l-image.jpg"/> | 470 | <field name="image" type="base64" file="point_of_sale/static/img/coca_light_1l-image.jpg"/> |
2503 | 470 | </record> | 471 | </record> |
2504 | 471 | <record id="coca_light_2l" model="product.product"> | 472 | <record id="coca_light_2l" model="product.product"> |
2505 | 472 | <field name="available_in_pos">True</field> | 473 | <field name="available_in_pos">True</field> |
2506 | 473 | <field name="list_price">2.38</field> | 474 | <field name="list_price">2.38</field> |
2507 | 474 | <field name="name">Coca-Cola Light 2L</field> | 475 | <field name="name">Coca-Cola Light 2L</field> |
2509 | 475 | <field name="public_categ_id" ref="coke"/> | 476 | <field name="pos_categ_id" ref="coke"/> |
2510 | 476 | <field name="image" type="base64" file="point_of_sale/static/img/coca_light_2l-image.jpg"/> | 477 | <field name="image" type="base64" file="point_of_sale/static/img/coca_light_2l-image.jpg"/> |
2511 | 477 | </record> | 478 | </record> |
2512 | 478 | <record id="coca_light_50cl" model="product.product"> | 479 | <record id="coca_light_50cl" model="product.product"> |
2513 | 479 | <field name="available_in_pos">True</field> | 480 | <field name="available_in_pos">True</field> |
2514 | 480 | <field name="list_price">0.97</field> | 481 | <field name="list_price">0.97</field> |
2515 | 481 | <field name="name">Coca-Cola Light 50cl</field> | 482 | <field name="name">Coca-Cola Light 50cl</field> |
2517 | 482 | <field name="public_categ_id" ref="coke"/> | 483 | <field name="pos_categ_id" ref="coke"/> |
2518 | 483 | <field name="image" type="base64" file="point_of_sale/static/img/coca_light_50cl-image.jpg"/> | 484 | <field name="image" type="base64" file="point_of_sale/static/img/coca_light_50cl-image.jpg"/> |
2519 | 484 | </record> | 485 | </record> |
2520 | 485 | <record id="coca_light_33cl" model="product.product"> | 486 | <record id="coca_light_33cl" model="product.product"> |
2521 | 486 | <field name="available_in_pos">True</field> | 487 | <field name="available_in_pos">True</field> |
2522 | 487 | <field name="list_price">0.51</field> | 488 | <field name="list_price">0.51</field> |
2523 | 488 | <field name="name">Coca-Cola Light 33cl</field> | 489 | <field name="name">Coca-Cola Light 33cl</field> |
2525 | 489 | <field name="public_categ_id" ref="coke"/> | 490 | <field name="pos_categ_id" ref="coke"/> |
2526 | 490 | <field name="image" type="base64" file="point_of_sale/static/img/coca_light_33cl-image.jpg"/> | 491 | <field name="image" type="base64" file="point_of_sale/static/img/coca_light_33cl-image.jpg"/> |
2527 | 491 | </record> | 492 | </record> |
2528 | 492 | <record id="coca_light_decaf_33cl" model="product.product"> | 493 | <record id="coca_light_decaf_33cl" model="product.product"> |
2529 | 493 | <field name="available_in_pos">True</field> | 494 | <field name="available_in_pos">True</field> |
2530 | 494 | <field name="list_price">0.53</field> | 495 | <field name="list_price">0.53</field> |
2531 | 495 | <field name="name">Coca-Cola Light 33cl Decaf</field> | 496 | <field name="name">Coca-Cola Light 33cl Decaf</field> |
2533 | 496 | <field name="public_categ_id" ref="coke"/> | 497 | <field name="pos_categ_id" ref="coke"/> |
2534 | 497 | <field name="image" type="base64" file="point_of_sale/static/img/coca_light_decaf_33cl-image.jpg"/> | 498 | <field name="image" type="base64" file="point_of_sale/static/img/coca_light_decaf_33cl-image.jpg"/> |
2535 | 498 | </record> | 499 | </record> |
2536 | 499 | 500 | ||
2537 | @@ -501,35 +502,35 @@ | |||
2538 | 501 | <field name="available_in_pos">True</field> | 502 | <field name="available_in_pos">True</field> |
2539 | 502 | <field name="list_price">1.49</field> | 503 | <field name="list_price">1.49</field> |
2540 | 503 | <field name="name">Coca-Cola Zero 1L</field> | 504 | <field name="name">Coca-Cola Zero 1L</field> |
2542 | 504 | <field name="public_categ_id" ref="coke"/> | 505 | <field name="pos_categ_id" ref="coke"/> |
2543 | 505 | <field name="image" type="base64" file="point_of_sale/static/img/coca_zero_1l-image.jpg"/> | 506 | <field name="image" type="base64" file="point_of_sale/static/img/coca_zero_1l-image.jpg"/> |
2544 | 506 | </record> | 507 | </record> |
2545 | 507 | <record id="coca_zero_2l" model="product.product"> | 508 | <record id="coca_zero_2l" model="product.product"> |
2546 | 508 | <field name="available_in_pos">True</field> | 509 | <field name="available_in_pos">True</field> |
2547 | 509 | <field name="list_price">2.38</field> | 510 | <field name="list_price">2.38</field> |
2548 | 510 | <field name="name">Coca-Cola Zero 2L</field> | 511 | <field name="name">Coca-Cola Zero 2L</field> |
2550 | 511 | <field name="public_categ_id" ref="coke"/> | 512 | <field name="pos_categ_id" ref="coke"/> |
2551 | 512 | <field name="image" type="base64" file="point_of_sale/static/img/coca_zero_2l-image.jpg"/> | 513 | <field name="image" type="base64" file="point_of_sale/static/img/coca_zero_2l-image.jpg"/> |
2552 | 513 | </record> | 514 | </record> |
2553 | 514 | <record id="coca_zero_50cl" model="product.product"> | 515 | <record id="coca_zero_50cl" model="product.product"> |
2554 | 515 | <field name="available_in_pos">True</field> | 516 | <field name="available_in_pos">True</field> |
2555 | 516 | <field name="list_price">0.97</field> | 517 | <field name="list_price">0.97</field> |
2556 | 517 | <field name="name">Coca-Cola Zero 50cl</field> | 518 | <field name="name">Coca-Cola Zero 50cl</field> |
2558 | 518 | <field name="public_categ_id" ref="coke"/> | 519 | <field name="pos_categ_id" ref="coke"/> |
2559 | 519 | <field name="image" type="base64" file="point_of_sale/static/img/coca_zero_50cl-image.jpg"/> | 520 | <field name="image" type="base64" file="point_of_sale/static/img/coca_zero_50cl-image.jpg"/> |
2560 | 520 | </record> | 521 | </record> |
2561 | 521 | <record id="coca_zero_33cl" model="product.product"> | 522 | <record id="coca_zero_33cl" model="product.product"> |
2562 | 522 | <field name="available_in_pos">True</field> | 523 | <field name="available_in_pos">True</field> |
2563 | 523 | <field name="list_price">0.51</field> | 524 | <field name="list_price">0.51</field> |
2564 | 524 | <field name="name">Coca-Cola Zero 33cl</field> | 525 | <field name="name">Coca-Cola Zero 33cl</field> |
2566 | 525 | <field name="public_categ_id" ref="coke"/> | 526 | <field name="pos_categ_id" ref="coke"/> |
2567 | 526 | <field name="image" type="base64" file="point_of_sale/static/img/coca_zero_33cl-image.jpg"/> | 527 | <field name="image" type="base64" file="point_of_sale/static/img/coca_zero_33cl-image.jpg"/> |
2568 | 527 | </record> | 528 | </record> |
2569 | 528 | <record id="coca_zero_decaf_33cl" model="product.product"> | 529 | <record id="coca_zero_decaf_33cl" model="product.product"> |
2570 | 529 | <field name="available_in_pos">True</field> | 530 | <field name="available_in_pos">True</field> |
2571 | 530 | <field name="list_price">0.67</field> | 531 | <field name="list_price">0.67</field> |
2572 | 531 | <field name="name">Coca-Cola Zero Decaf 33cl</field> | 532 | <field name="name">Coca-Cola Zero Decaf 33cl</field> |
2574 | 532 | <field name="public_categ_id" ref="coke"/> | 533 | <field name="pos_categ_id" ref="coke"/> |
2575 | 533 | <field name="image" type="base64" file="point_of_sale/static/img/coca_zero_decaf_33cl-image.jpg"/> | 534 | <field name="image" type="base64" file="point_of_sale/static/img/coca_zero_decaf_33cl-image.jpg"/> |
2576 | 534 | </record> | 535 | </record> |
2577 | 535 | 536 | ||
2578 | @@ -537,21 +538,21 @@ | |||
2579 | 537 | <field name="available_in_pos">True</field> | 538 | <field name="available_in_pos">True</field> |
2580 | 538 | <field name="list_price">2.83</field> | 539 | <field name="list_price">2.83</field> |
2581 | 539 | <field name="name">Coca-Cola Light Lemon 2L</field> | 540 | <field name="name">Coca-Cola Light Lemon 2L</field> |
2583 | 540 | <field name="public_categ_id" ref="coke"/> | 541 | <field name="pos_categ_id" ref="coke"/> |
2584 | 541 | <field name="image" type="base64" file="point_of_sale/static/img/coca_light_lemon_2l-image.jpg"/> | 542 | <field name="image" type="base64" file="point_of_sale/static/img/coca_light_lemon_2l-image.jpg"/> |
2585 | 542 | </record> | 543 | </record> |
2586 | 543 | <record id="coca_light_lemon_50cl" model="product.product"> | 544 | <record id="coca_light_lemon_50cl" model="product.product"> |
2587 | 544 | <field name="available_in_pos">True</field> | 545 | <field name="available_in_pos">True</field> |
2588 | 545 | <field name="list_price">1.16</field> | 546 | <field name="list_price">1.16</field> |
2589 | 546 | <field name="name">Coca-Cola Light Lemon 50cl</field> | 547 | <field name="name">Coca-Cola Light Lemon 50cl</field> |
2591 | 547 | <field name="public_categ_id" ref="coke"/> | 548 | <field name="pos_categ_id" ref="coke"/> |
2592 | 548 | <field name="image" type="base64" file="point_of_sale/static/img/coca_light_lemon_50cl-image.jpg"/> | 549 | <field name="image" type="base64" file="point_of_sale/static/img/coca_light_lemon_50cl-image.jpg"/> |
2593 | 549 | </record> | 550 | </record> |
2594 | 550 | <record id="coca_light_lemon_33cl" model="product.product"> | 551 | <record id="coca_light_lemon_33cl" model="product.product"> |
2595 | 551 | <field name="available_in_pos">True</field> | 552 | <field name="available_in_pos">True</field> |
2596 | 552 | <field name="list_price">0.53</field> | 553 | <field name="list_price">0.53</field> |
2597 | 553 | <field name="name">Coca-Cola Light Lemon 33cl</field> | 554 | <field name="name">Coca-Cola Light Lemon 33cl</field> |
2599 | 554 | <field name="public_categ_id" ref="coke"/> | 555 | <field name="pos_categ_id" ref="coke"/> |
2600 | 555 | <field name="image" type="base64" file="point_of_sale/static/img/coca_light_lemon_33cl-image.jpg"/> | 556 | <field name="image" type="base64" file="point_of_sale/static/img/coca_light_lemon_33cl-image.jpg"/> |
2601 | 556 | </record> | 557 | </record> |
2602 | 557 | 558 | ||
2603 | @@ -559,42 +560,42 @@ | |||
2604 | 559 | <field name="available_in_pos">True</field> | 560 | <field name="available_in_pos">True</field> |
2605 | 560 | <field name="list_price">1.70</field> | 561 | <field name="list_price">1.70</field> |
2606 | 561 | <field name="name">Pepsi 2L</field> | 562 | <field name="name">Pepsi 2L</field> |
2608 | 562 | <field name="public_categ_id" ref="coke"/> | 563 | <field name="pos_categ_id" ref="coke"/> |
2609 | 563 | <field name="image" type="base64" file="point_of_sale/static/img/pepsi_2l-image.jpg"/> | 564 | <field name="image" type="base64" file="point_of_sale/static/img/pepsi_2l-image.jpg"/> |
2610 | 564 | </record> | 565 | </record> |
2611 | 565 | <record id="pepsi_33cl" model="product.product"> | 566 | <record id="pepsi_33cl" model="product.product"> |
2612 | 566 | <field name="available_in_pos">True</field> | 567 | <field name="available_in_pos">True</field> |
2613 | 567 | <field name="list_price">0.43</field> | 568 | <field name="list_price">0.43</field> |
2614 | 568 | <field name="name">Pepsi 33cl</field> | 569 | <field name="name">Pepsi 33cl</field> |
2616 | 569 | <field name="public_categ_id" ref="coke"/> | 570 | <field name="pos_categ_id" ref="coke"/> |
2617 | 570 | <field name="image" type="base64" file="point_of_sale/static/img/pepsi_33cl-image.jpg"/> | 571 | <field name="image" type="base64" file="point_of_sale/static/img/pepsi_33cl-image.jpg"/> |
2618 | 571 | </record> | 572 | </record> |
2619 | 572 | <record id="pepsi_max_2l" model="product.product"> | 573 | <record id="pepsi_max_2l" model="product.product"> |
2620 | 573 | <field name="available_in_pos">True</field> | 574 | <field name="available_in_pos">True</field> |
2621 | 574 | <field name="list_price">1.71</field> | 575 | <field name="list_price">1.71</field> |
2622 | 575 | <field name="name">Pepsi Max 2L</field> | 576 | <field name="name">Pepsi Max 2L</field> |
2624 | 576 | <field name="public_categ_id" ref="coke"/> | 577 | <field name="pos_categ_id" ref="coke"/> |
2625 | 577 | <field name="image" type="base64" file="point_of_sale/static/img/pepsi_max_2l-image.jpg"/> | 578 | <field name="image" type="base64" file="point_of_sale/static/img/pepsi_max_2l-image.jpg"/> |
2626 | 578 | </record> | 579 | </record> |
2627 | 579 | <record id="pepsi_max_33cl" model="product.product"> | 580 | <record id="pepsi_max_33cl" model="product.product"> |
2628 | 580 | <field name="available_in_pos">True</field> | 581 | <field name="available_in_pos">True</field> |
2629 | 581 | <field name="list_price">0.40</field> | 582 | <field name="list_price">0.40</field> |
2630 | 582 | <field name="name">Pepsi Max 33cl</field> | 583 | <field name="name">Pepsi Max 33cl</field> |
2632 | 583 | <field name="public_categ_id" ref="coke"/> | 584 | <field name="pos_categ_id" ref="coke"/> |
2633 | 584 | <field name="image" type="base64" file="point_of_sale/static/img/pepsi_max_33cl-image.jpg"/> | 585 | <field name="image" type="base64" file="point_of_sale/static/img/pepsi_max_33cl-image.jpg"/> |
2634 | 585 | </record> | 586 | </record> |
2635 | 586 | <record id="pepsi_max_50cl" model="product.product"> | 587 | <record id="pepsi_max_50cl" model="product.product"> |
2636 | 587 | <field name="available_in_pos">True</field> | 588 | <field name="available_in_pos">True</field> |
2637 | 588 | <field name="list_price">0.61</field> | 589 | <field name="list_price">0.61</field> |
2638 | 589 | <field name="name">Pepsi Max 50cl</field> | 590 | <field name="name">Pepsi Max 50cl</field> |
2640 | 590 | <field name="public_categ_id" ref="coke"/> | 591 | <field name="pos_categ_id" ref="coke"/> |
2641 | 591 | <field name="image" type="base64" file="point_of_sale/static/img/pepsi_max_50cl-image.jpg"/> | 592 | <field name="image" type="base64" file="point_of_sale/static/img/pepsi_max_50cl-image.jpg"/> |
2642 | 592 | </record> | 593 | </record> |
2643 | 593 | <record id="pepsi_max_lemon_33cl" model="product.product"> | 594 | <record id="pepsi_max_lemon_33cl" model="product.product"> |
2644 | 594 | <field name="available_in_pos">True</field> | 595 | <field name="available_in_pos">True</field> |
2645 | 595 | <field name="list_price">0.40</field> | 596 | <field name="list_price">0.40</field> |
2646 | 596 | <field name="name">Pepsi Max Cool Lemon 33cl</field> | 597 | <field name="name">Pepsi Max Cool Lemon 33cl</field> |
2648 | 597 | <field name="public_categ_id" ref="coke"/> | 598 | <field name="pos_categ_id" ref="coke"/> |
2649 | 598 | <field name="image" type="base64" file="point_of_sale/static/img/pepsi_max_lemon_33cl-image.jpg"/> | 599 | <field name="image" type="base64" file="point_of_sale/static/img/pepsi_max_lemon_33cl-image.jpg"/> |
2650 | 599 | </record> | 600 | </record> |
2651 | 600 | 601 | ||
2652 | @@ -602,63 +603,63 @@ | |||
2653 | 602 | <field name="available_in_pos">True</field> | 603 | <field name="available_in_pos">True</field> |
2654 | 603 | <field name="list_price">0.75</field> | 604 | <field name="list_price">0.75</field> |
2655 | 604 | <field name="name">Spa Fruit and Orange 50cl</field> | 605 | <field name="name">Spa Fruit and Orange 50cl</field> |
2657 | 605 | <field name="public_categ_id" ref="soda_orange"/> | 606 | <field name="pos_categ_id" ref="soda_orange"/> |
2658 | 606 | <field name="image" type="base64" file="point_of_sale/static/img/spa_et_fruit_50cl-image.jpg"/> | 607 | <field name="image" type="base64" file="point_of_sale/static/img/spa_et_fruit_50cl-image.jpg"/> |
2659 | 607 | </record> | 608 | </record> |
2660 | 608 | <record id="orangina_33cl" model="product.product"> | 609 | <record id="orangina_33cl" model="product.product"> |
2661 | 609 | <field name="available_in_pos">True</field> | 610 | <field name="available_in_pos">True</field> |
2662 | 610 | <field name="list_price">0.72</field> | 611 | <field name="list_price">0.72</field> |
2663 | 611 | <field name="name">Orangina 33cl</field> | 612 | <field name="name">Orangina 33cl</field> |
2665 | 612 | <field name="public_categ_id" ref="soda_orange"/> | 613 | <field name="pos_categ_id" ref="soda_orange"/> |
2666 | 613 | <field name="image" type="base64" file="point_of_sale/static/img/orangina_33cl-image.jpg"/> | 614 | <field name="image" type="base64" file="point_of_sale/static/img/orangina_33cl-image.jpg"/> |
2667 | 614 | </record> | 615 | </record> |
2668 | 615 | <record id="orangina_1,5l" model="product.product"> | 616 | <record id="orangina_1,5l" model="product.product"> |
2669 | 616 | <field name="available_in_pos">True</field> | 617 | <field name="available_in_pos">True</field> |
2670 | 617 | <field name="list_price">2.42</field> | 618 | <field name="list_price">2.42</field> |
2671 | 618 | <field name="name">Orangina 1.5L</field> | 619 | <field name="name">Orangina 1.5L</field> |
2673 | 619 | <field name="public_categ_id" ref="soda_orange"/> | 620 | <field name="pos_categ_id" ref="soda_orange"/> |
2674 | 620 | <field name="image" type="base64" file="point_of_sale/static/img/orangina_1,5l-image.jpg"/> | 621 | <field name="image" type="base64" file="point_of_sale/static/img/orangina_1,5l-image.jpg"/> |
2675 | 621 | </record> | 622 | </record> |
2676 | 622 | <record id="fanta_orange_50cl" model="product.product"> | 623 | <record id="fanta_orange_50cl" model="product.product"> |
2677 | 623 | <field name="available_in_pos">True</field> | 624 | <field name="available_in_pos">True</field> |
2678 | 624 | <field name="list_price">0.98</field> | 625 | <field name="list_price">0.98</field> |
2679 | 625 | <field name="name">Fanta Orange 50cl</field> | 626 | <field name="name">Fanta Orange 50cl</field> |
2681 | 626 | <field name="public_categ_id" ref="soda_orange"/> | 627 | <field name="pos_categ_id" ref="soda_orange"/> |
2682 | 627 | <field name="image" type="base64" file="point_of_sale/static/img/fanta_orange_50cl-image.jpg"/> | 628 | <field name="image" type="base64" file="point_of_sale/static/img/fanta_orange_50cl-image.jpg"/> |
2683 | 628 | </record> | 629 | </record> |
2684 | 629 | <record id="fanta_orange_2l" model="product.product"> | 630 | <record id="fanta_orange_2l" model="product.product"> |
2685 | 630 | <field name="available_in_pos">True</field> | 631 | <field name="available_in_pos">True</field> |
2686 | 631 | <field name="list_price">2.28</field> | 632 | <field name="list_price">2.28</field> |
2687 | 632 | <field name="name">Fanta Orange 2L</field> | 633 | <field name="name">Fanta Orange 2L</field> |
2689 | 633 | <field name="public_categ_id" ref="soda_orange"/> | 634 | <field name="pos_categ_id" ref="soda_orange"/> |
2690 | 634 | <field name="image" type="base64" file="point_of_sale/static/img/fanta_orange_2l-image.jpg"/> | 635 | <field name="image" type="base64" file="point_of_sale/static/img/fanta_orange_2l-image.jpg"/> |
2691 | 635 | </record> | 636 | </record> |
2692 | 636 | <record id="fanta_orange_33cl" model="product.product"> | 637 | <record id="fanta_orange_33cl" model="product.product"> |
2693 | 637 | <field name="available_in_pos">True</field> | 638 | <field name="available_in_pos">True</field> |
2694 | 638 | <field name="list_price">0.51</field> | 639 | <field name="list_price">0.51</field> |
2695 | 639 | <field name="name">Fanta Orange 33cl</field> | 640 | <field name="name">Fanta Orange 33cl</field> |
2697 | 640 | <field name="public_categ_id" ref="soda_orange"/> | 641 | <field name="pos_categ_id" ref="soda_orange"/> |
2698 | 641 | <field name="image" type="base64" file="point_of_sale/static/img/fanta_orange_33cl-image.jpg"/> | 642 | <field name="image" type="base64" file="point_of_sale/static/img/fanta_orange_33cl-image.jpg"/> |
2699 | 642 | </record> | 643 | </record> |
2700 | 643 | <record id="fanta_orange_25cl" model="product.product"> | 644 | <record id="fanta_orange_25cl" model="product.product"> |
2701 | 644 | <field name="available_in_pos">True</field> | 645 | <field name="available_in_pos">True</field> |
2702 | 645 | <field name="list_price">0.84</field> | 646 | <field name="list_price">0.84</field> |
2703 | 646 | <field name="name">Fanta Orange 25cl</field> | 647 | <field name="name">Fanta Orange 25cl</field> |
2705 | 647 | <field name="public_categ_id" ref="soda_orange"/> | 648 | <field name="pos_categ_id" ref="soda_orange"/> |
2706 | 648 | <field name="image" type="base64" file="point_of_sale/static/img/fanta_orange_25cl-image.jpg"/> | 649 | <field name="image" type="base64" file="point_of_sale/static/img/fanta_orange_25cl-image.jpg"/> |
2707 | 649 | </record> | 650 | </record> |
2708 | 650 | <record id="fanta_zero_orange_1,5l" model="product.product"> | 651 | <record id="fanta_zero_orange_1,5l" model="product.product"> |
2709 | 651 | <field name="available_in_pos">True</field> | 652 | <field name="available_in_pos">True</field> |
2710 | 652 | <field name="list_price">2.08</field> | 653 | <field name="list_price">2.08</field> |
2711 | 653 | <field name="name">Fanta Orange Zero 1.5L</field> | 654 | <field name="name">Fanta Orange Zero 1.5L</field> |
2713 | 654 | <field name="public_categ_id" ref="soda_orange"/> | 655 | <field name="pos_categ_id" ref="soda_orange"/> |
2714 | 655 | <field name="image" type="base64" file="point_of_sale/static/img/fanta_zero_orange_1,5l-image.jpg"/> | 656 | <field name="image" type="base64" file="point_of_sale/static/img/fanta_zero_orange_1,5l-image.jpg"/> |
2715 | 656 | </record> | 657 | </record> |
2716 | 657 | <record id="fanta_zero_orange_33cl" model="product.product"> | 658 | <record id="fanta_zero_orange_33cl" model="product.product"> |
2717 | 658 | <field name="available_in_pos">True</field> | 659 | <field name="available_in_pos">True</field> |
2718 | 659 | <field name="list_price">0.53</field> | 660 | <field name="list_price">0.53</field> |
2719 | 660 | <field name="name">Fanta Zero Orange 33cl</field> | 661 | <field name="name">Fanta Zero Orange 33cl</field> |
2721 | 661 | <field name="public_categ_id" ref="soda_orange"/> | 662 | <field name="pos_categ_id" ref="soda_orange"/> |
2722 | 662 | <field name="image" type="base64" file="point_of_sale/static/img/fanta_zero_orange_33cl-image.jpg"/> | 663 | <field name="image" type="base64" file="point_of_sale/static/img/fanta_zero_orange_33cl-image.jpg"/> |
2723 | 663 | </record> | 664 | </record> |
2724 | 664 | 665 | ||
2725 | @@ -666,56 +667,56 @@ | |||
2726 | 666 | <field name="available_in_pos">True</field> | 667 | <field name="available_in_pos">True</field> |
2727 | 667 | <field name="list_price">0.52</field> | 668 | <field name="list_price">0.52</field> |
2728 | 668 | <field name="name">Evian 50cl</field> | 669 | <field name="name">Evian 50cl</field> |
2730 | 669 | <field name="public_categ_id" ref="plain_water"/> | 670 | <field name="pos_categ_id" ref="plain_water"/> |
2731 | 670 | <field name="image" type="base64" file="point_of_sale/static/img/evian_50cl-image.jpg"/> | 671 | <field name="image" type="base64" file="point_of_sale/static/img/evian_50cl-image.jpg"/> |
2732 | 671 | </record> | 672 | </record> |
2733 | 672 | <record id="evian_1l" model="product.product"> | 673 | <record id="evian_1l" model="product.product"> |
2734 | 673 | <field name="available_in_pos">True</field> | 674 | <field name="available_in_pos">True</field> |
2735 | 674 | <field name="list_price">0.70</field> | 675 | <field name="list_price">0.70</field> |
2736 | 675 | <field name="name">Evian 1L</field> | 676 | <field name="name">Evian 1L</field> |
2738 | 676 | <field name="public_categ_id" ref="plain_water"/> | 677 | <field name="pos_categ_id" ref="plain_water"/> |
2739 | 677 | <field name="image" type="base64" file="point_of_sale/static/img/evian_1l-image.jpg"/> | 678 | <field name="image" type="base64" file="point_of_sale/static/img/evian_1l-image.jpg"/> |
2740 | 678 | </record> | 679 | </record> |
2741 | 679 | <record id="evian_2l" model="product.product"> | 680 | <record id="evian_2l" model="product.product"> |
2742 | 680 | <field name="available_in_pos">True</field> | 681 | <field name="available_in_pos">True</field> |
2743 | 681 | <field name="list_price">1.26</field> | 682 | <field name="list_price">1.26</field> |
2744 | 682 | <field name="name">2L Evian</field> | 683 | <field name="name">2L Evian</field> |
2746 | 683 | <field name="public_categ_id" ref="plain_water"/> | 684 | <field name="pos_categ_id" ref="plain_water"/> |
2747 | 684 | <field name="image" type="base64" file="point_of_sale/static/img/evian_2l-image.jpg"/> | 685 | <field name="image" type="base64" file="point_of_sale/static/img/evian_2l-image.jpg"/> |
2748 | 685 | </record> | 686 | </record> |
2749 | 686 | <record id="spa_33cl" model="product.product"> | 687 | <record id="spa_33cl" model="product.product"> |
2750 | 687 | <field name="available_in_pos">True</field> | 688 | <field name="available_in_pos">True</field> |
2751 | 688 | <field name="list_price">0.40</field> | 689 | <field name="list_price">0.40</field> |
2752 | 689 | <field name="name">Spa Reine 33cl</field> | 690 | <field name="name">Spa Reine 33cl</field> |
2754 | 690 | <field name="public_categ_id" ref="plain_water"/> | 691 | <field name="pos_categ_id" ref="plain_water"/> |
2755 | 691 | <field name="image" type="base64" file="point_of_sale/static/img/spa_33cl-image.jpg"/> | 692 | <field name="image" type="base64" file="point_of_sale/static/img/spa_33cl-image.jpg"/> |
2756 | 692 | </record> | 693 | </record> |
2757 | 693 | <record id="spa_50cl" model="product.product"> | 694 | <record id="spa_50cl" model="product.product"> |
2758 | 694 | <field name="available_in_pos">True</field> | 695 | <field name="available_in_pos">True</field> |
2759 | 695 | <field name="list_price">0.46</field> | 696 | <field name="list_price">0.46</field> |
2760 | 696 | <field name="name">Spa Reine 50cl</field> | 697 | <field name="name">Spa Reine 50cl</field> |
2762 | 697 | <field name="public_categ_id" ref="plain_water"/> | 698 | <field name="pos_categ_id" ref="plain_water"/> |
2763 | 698 | <field name="image" type="base64" file="point_of_sale/static/img/spa_50cl-image.jpg"/> | 699 | <field name="image" type="base64" file="point_of_sale/static/img/spa_50cl-image.jpg"/> |
2764 | 699 | </record> | 700 | </record> |
2765 | 700 | <record id="spa_1l" model="product.product"> | 701 | <record id="spa_1l" model="product.product"> |
2766 | 701 | <field name="available_in_pos">True</field> | 702 | <field name="available_in_pos">True</field> |
2767 | 702 | <field name="list_price">0.65</field> | 703 | <field name="list_price">0.65</field> |
2768 | 703 | <field name="name">Spa Reine 1L</field> | 704 | <field name="name">Spa Reine 1L</field> |
2770 | 704 | <field name="public_categ_id" ref="plain_water"/> | 705 | <field name="pos_categ_id" ref="plain_water"/> |
2771 | 705 | <field name="image" type="base64" file="point_of_sale/static/img/spa_1l-image.jpg"/> | 706 | <field name="image" type="base64" file="point_of_sale/static/img/spa_1l-image.jpg"/> |
2772 | 706 | </record> | 707 | </record> |
2773 | 707 | <record id="spa_2l" model="product.product"> | 708 | <record id="spa_2l" model="product.product"> |
2774 | 708 | <field name="available_in_pos">True</field> | 709 | <field name="available_in_pos">True</field> |
2775 | 709 | <field name="list_price">1.30</field> | 710 | <field name="list_price">1.30</field> |
2776 | 710 | <field name="name">Spa Reine 2L</field> | 711 | <field name="name">Spa Reine 2L</field> |
2778 | 711 | <field name="public_categ_id" ref="plain_water"/> | 712 | <field name="pos_categ_id" ref="plain_water"/> |
2779 | 712 | <field name="image" type="base64" file="point_of_sale/static/img/spa_2l-image.jpg"/> | 713 | <field name="image" type="base64" file="point_of_sale/static/img/spa_2l-image.jpg"/> |
2780 | 713 | </record> | 714 | </record> |
2781 | 714 | <record id="chaudfontaine_33cl" model="product.product"> | 715 | <record id="chaudfontaine_33cl" model="product.product"> |
2782 | 715 | <field name="available_in_pos">True</field> | 716 | <field name="available_in_pos">True</field> |
2783 | 716 | <field name="list_price">0.34</field> | 717 | <field name="list_price">0.34</field> |
2784 | 717 | <field name="name">Chaudfontaine 33cl</field> | 718 | <field name="name">Chaudfontaine 33cl</field> |
2786 | 718 | <field name="public_categ_id" ref="plain_water"/> | 719 | <field name="pos_categ_id" ref="plain_water"/> |
2787 | 719 | <field name="image" type="base64" file="point_of_sale/static/img/chaudfontaine_33cl-image.jpg"/> | 720 | <field name="image" type="base64" file="point_of_sale/static/img/chaudfontaine_33cl-image.jpg"/> |
2788 | 720 | </record> | 721 | </record> |
2789 | 721 | <record id="chaudfontaine_50cl" model="product.product"> | 722 | <record id="chaudfontaine_50cl" model="product.product"> |
2790 | @@ -723,14 +724,14 @@ | |||
2791 | 723 | <field name="list_price">0.44</field> | 724 | <field name="list_price">0.44</field> |
2792 | 724 | <field name="ean13">5449000111715</field> | 725 | <field name="ean13">5449000111715</field> |
2793 | 725 | <field name="name">Chaudfontaine 50cl</field> | 726 | <field name="name">Chaudfontaine 50cl</field> |
2795 | 726 | <field name="public_categ_id" ref="plain_water"/> | 727 | <field name="pos_categ_id" ref="plain_water"/> |
2796 | 727 | <field name="image" type="base64" file="point_of_sale/static/img/chaudfontaine_50cl-image.jpg"/> | 728 | <field name="image" type="base64" file="point_of_sale/static/img/chaudfontaine_50cl-image.jpg"/> |
2797 | 728 | </record> | 729 | </record> |
2798 | 729 | <record id="chaudfontaine_1,5l" model="product.product"> | 730 | <record id="chaudfontaine_1,5l" model="product.product"> |
2799 | 730 | <field name="available_in_pos">True</field> | 731 | <field name="available_in_pos">True</field> |
2800 | 731 | <field name="list_price">0.86</field> | 732 | <field name="list_price">0.86</field> |
2801 | 732 | <field name="name">Chaudfontaine 1.5l</field> | 733 | <field name="name">Chaudfontaine 1.5l</field> |
2803 | 733 | <field name="public_categ_id" ref="plain_water"/> | 734 | <field name="pos_categ_id" ref="plain_water"/> |
2804 | 734 | <field name="image" type="base64" file="point_of_sale/static/img/chaudfontaine_1,5l-image.jpg"/> | 735 | <field name="image" type="base64" file="point_of_sale/static/img/chaudfontaine_1,5l-image.jpg"/> |
2805 | 735 | </record> | 736 | </record> |
2806 | 736 | 737 | ||
2807 | @@ -738,63 +739,63 @@ | |||
2808 | 738 | <field name="available_in_pos">True</field> | 739 | <field name="available_in_pos">True</field> |
2809 | 739 | <field name="list_price">0.38</field> | 740 | <field name="list_price">0.38</field> |
2810 | 740 | <field name="name">Spa Barisart 33cl</field> | 741 | <field name="name">Spa Barisart 33cl</field> |
2812 | 741 | <field name="public_categ_id" ref="sparkling_water"/> | 742 | <field name="pos_categ_id" ref="sparkling_water"/> |
2813 | 742 | <field name="image" type="base64" file="point_of_sale/static/img/spa_gazeuse_33cl-image.jpg"/> | 743 | <field name="image" type="base64" file="point_of_sale/static/img/spa_gazeuse_33cl-image.jpg"/> |
2814 | 743 | </record> | 744 | </record> |
2815 | 744 | <record id="spa_gazeuse_50cl" model="product.product"> | 745 | <record id="spa_gazeuse_50cl" model="product.product"> |
2816 | 745 | <field name="available_in_pos">True</field> | 746 | <field name="available_in_pos">True</field> |
2817 | 746 | <field name="list_price">0.49</field> | 747 | <field name="list_price">0.49</field> |
2818 | 747 | <field name="name">Spa Barisart 50cl</field> | 748 | <field name="name">Spa Barisart 50cl</field> |
2820 | 748 | <field name="public_categ_id" ref="sparkling_water"/> | 749 | <field name="pos_categ_id" ref="sparkling_water"/> |
2821 | 749 | <field name="image" type="base64" file="point_of_sale/static/img/spa_gazeuse_50cl-image.jpg"/> | 750 | <field name="image" type="base64" file="point_of_sale/static/img/spa_gazeuse_50cl-image.jpg"/> |
2822 | 750 | </record> | 751 | </record> |
2823 | 751 | <record id="spa_gazeuse_1,5l" model="product.product"> | 752 | <record id="spa_gazeuse_1,5l" model="product.product"> |
2824 | 752 | <field name="available_in_pos">True</field> | 753 | <field name="available_in_pos">True</field> |
2825 | 753 | <field name="list_price">1.00</field> | 754 | <field name="list_price">1.00</field> |
2826 | 754 | <field name="name">Spa Barisart 1.5l</field> | 755 | <field name="name">Spa Barisart 1.5l</field> |
2828 | 755 | <field name="public_categ_id" ref="sparkling_water"/> | 756 | <field name="pos_categ_id" ref="sparkling_water"/> |
2829 | 756 | <field name="image" type="base64" file="point_of_sale/static/img/spa_gazeuse_1,5l-image.jpg"/> | 757 | <field name="image" type="base64" file="point_of_sale/static/img/spa_gazeuse_1,5l-image.jpg"/> |
2830 | 757 | </record> | 758 | </record> |
2831 | 758 | <record id="chaudfontaine_petillante_33cl" model="product.product"> | 759 | <record id="chaudfontaine_petillante_33cl" model="product.product"> |
2832 | 759 | <field name="available_in_pos">True</field> | 760 | <field name="available_in_pos">True</field> |
2833 | 760 | <field name="list_price">0.41</field> | 761 | <field name="list_price">0.41</field> |
2834 | 761 | <field name="name">Chaudfontaine Petillante 33cl</field> | 762 | <field name="name">Chaudfontaine Petillante 33cl</field> |
2836 | 762 | <field name="public_categ_id" ref="sparkling_water"/> | 763 | <field name="pos_categ_id" ref="sparkling_water"/> |
2837 | 763 | <field name="image" type="base64" file="point_of_sale/static/img/chaudfontaine_petillante_33cl-image.jpg"/> | 764 | <field name="image" type="base64" file="point_of_sale/static/img/chaudfontaine_petillante_33cl-image.jpg"/> |
2838 | 764 | </record> | 765 | </record> |
2839 | 765 | <record id="chaudfontaine_petillante_50cl" model="product.product"> | 766 | <record id="chaudfontaine_petillante_50cl" model="product.product"> |
2840 | 766 | <field name="available_in_pos">True</field> | 767 | <field name="available_in_pos">True</field> |
2841 | 767 | <field name="list_price">0.57</field> | 768 | <field name="list_price">0.57</field> |
2842 | 768 | <field name="name">Chaudfontaine Petillante 50cl</field> | 769 | <field name="name">Chaudfontaine Petillante 50cl</field> |
2844 | 769 | <field name="public_categ_id" ref="sparkling_water"/> | 770 | <field name="pos_categ_id" ref="sparkling_water"/> |
2845 | 770 | <field name="image" type="base64" file="point_of_sale/static/img/chaudfontaine_petillante_50cl-image.jpg"/> | 771 | <field name="image" type="base64" file="point_of_sale/static/img/chaudfontaine_petillante_50cl-image.jpg"/> |
2846 | 771 | </record> | 772 | </record> |
2847 | 772 | <record id="chaudfontaine_petillante_1,5l" model="product.product"> | 773 | <record id="chaudfontaine_petillante_1,5l" model="product.product"> |
2848 | 773 | <field name="available_in_pos">True</field> | 774 | <field name="available_in_pos">True</field> |
2849 | 774 | <field name="list_price">0.98</field> | 775 | <field name="list_price">0.98</field> |
2850 | 775 | <field name="name">Chaudfontaine Petillante 1.5l</field> | 776 | <field name="name">Chaudfontaine Petillante 1.5l</field> |
2852 | 776 | <field name="public_categ_id" ref="sparkling_water"/> | 777 | <field name="pos_categ_id" ref="sparkling_water"/> |
2853 | 777 | <field name="image" type="base64" file="point_of_sale/static/img/chaudfontaine_petillante_1,5l-image.jpg"/> | 778 | <field name="image" type="base64" file="point_of_sale/static/img/chaudfontaine_petillante_1,5l-image.jpg"/> |
2854 | 778 | </record> | 779 | </record> |
2855 | 779 | <record id="perrier_50cl" model="product.product"> | 780 | <record id="perrier_50cl" model="product.product"> |
2856 | 780 | <field name="available_in_pos">True</field> | 781 | <field name="available_in_pos">True</field> |
2857 | 781 | <field name="list_price">0.71</field> | 782 | <field name="list_price">0.71</field> |
2858 | 782 | <field name="name">50cl Perrier</field> | 783 | <field name="name">50cl Perrier</field> |
2860 | 783 | <field name="public_categ_id" ref="sparkling_water"/> | 784 | <field name="pos_categ_id" ref="sparkling_water"/> |
2861 | 784 | <field name="image" type="base64" file="point_of_sale/static/img/perrier_50cl-image.jpg"/> | 785 | <field name="image" type="base64" file="point_of_sale/static/img/perrier_50cl-image.jpg"/> |
2862 | 785 | </record> | 786 | </record> |
2863 | 786 | <record id="perrier_1l" model="product.product"> | 787 | <record id="perrier_1l" model="product.product"> |
2864 | 787 | <field name="available_in_pos">True</field> | 788 | <field name="available_in_pos">True</field> |
2865 | 788 | <field name="list_price">0.96</field> | 789 | <field name="list_price">0.96</field> |
2866 | 789 | <field name="name">Perrier 1L</field> | 790 | <field name="name">Perrier 1L</field> |
2868 | 790 | <field name="public_categ_id" ref="sparkling_water"/> | 791 | <field name="pos_categ_id" ref="sparkling_water"/> |
2869 | 791 | <field name="image" type="base64" file="point_of_sale/static/img/perrier_1l-image.jpg"/> | 792 | <field name="image" type="base64" file="point_of_sale/static/img/perrier_1l-image.jpg"/> |
2870 | 792 | </record> | 793 | </record> |
2871 | 793 | <record id="san_pellegrino_1l" model="product.product"> | 794 | <record id="san_pellegrino_1l" model="product.product"> |
2872 | 794 | <field name="available_in_pos">True</field> | 795 | <field name="available_in_pos">True</field> |
2873 | 795 | <field name="list_price">0.98</field> | 796 | <field name="list_price">0.98</field> |
2874 | 796 | <field name="name">San Pellegrino 1L</field> | 797 | <field name="name">San Pellegrino 1L</field> |
2876 | 797 | <field name="public_categ_id" ref="sparkling_water"/> | 798 | <field name="pos_categ_id" ref="sparkling_water"/> |
2877 | 798 | <field name="image" type="base64" file="point_of_sale/static/img/san_pellegrino_1l-image.jpg"/> | 799 | <field name="image" type="base64" file="point_of_sale/static/img/san_pellegrino_1l-image.jpg"/> |
2878 | 799 | </record> | 800 | </record> |
2879 | 800 | 801 | ||
2880 | @@ -802,35 +803,35 @@ | |||
2881 | 802 | <field name="available_in_pos">True</field> | 803 | <field name="available_in_pos">True</field> |
2882 | 803 | <field name="list_price">1.19</field> | 804 | <field name="list_price">1.19</field> |
2883 | 804 | <field name="name">Stella Artois 50cl</field> | 805 | <field name="name">Stella Artois 50cl</field> |
2885 | 805 | <field name="public_categ_id" ref="pils"/> | 806 | <field name="pos_categ_id" ref="pils"/> |
2886 | 806 | <field name="image" type="base64" file="point_of_sale/static/img/stella_50cl-image.jpg"/> | 807 | <field name="image" type="base64" file="point_of_sale/static/img/stella_50cl-image.jpg"/> |
2887 | 807 | </record> | 808 | </record> |
2888 | 808 | <record id="stella_33cl" model="product.product"> | 809 | <record id="stella_33cl" model="product.product"> |
2889 | 809 | <field name="available_in_pos">True</field> | 810 | <field name="available_in_pos">True</field> |
2890 | 810 | <field name="list_price">0.82</field> | 811 | <field name="list_price">0.82</field> |
2891 | 811 | <field name="name">Stella Artois 33cl</field> | 812 | <field name="name">Stella Artois 33cl</field> |
2893 | 812 | <field name="public_categ_id" ref="pils"/> | 813 | <field name="pos_categ_id" ref="pils"/> |
2894 | 813 | <field name="image" type="base64" file="point_of_sale/static/img/stella_33cl-image.jpg"/> | 814 | <field name="image" type="base64" file="point_of_sale/static/img/stella_33cl-image.jpg"/> |
2895 | 814 | </record> | 815 | </record> |
2896 | 815 | <record id="maes_50cl" model="product.product"> | 816 | <record id="maes_50cl" model="product.product"> |
2897 | 816 | <field name="available_in_pos">True</field> | 817 | <field name="available_in_pos">True</field> |
2898 | 817 | <field name="list_price">0.95</field> | 818 | <field name="list_price">0.95</field> |
2899 | 818 | <field name="name">Maes 50cl</field> | 819 | <field name="name">Maes 50cl</field> |
2901 | 819 | <field name="public_categ_id" ref="pils"/> | 820 | <field name="pos_categ_id" ref="pils"/> |
2902 | 820 | <field name="image" type="base64" file="point_of_sale/static/img/maes_50cl-image.jpg"/> | 821 | <field name="image" type="base64" file="point_of_sale/static/img/maes_50cl-image.jpg"/> |
2903 | 821 | </record> | 822 | </record> |
2904 | 822 | <record id="maes_33cl" model="product.product"> | 823 | <record id="maes_33cl" model="product.product"> |
2905 | 823 | <field name="available_in_pos">True</field> | 824 | <field name="available_in_pos">True</field> |
2906 | 824 | <field name="list_price">0.77</field> | 825 | <field name="list_price">0.77</field> |
2907 | 825 | <field name="name">Maes 33cl</field> | 826 | <field name="name">Maes 33cl</field> |
2909 | 826 | <field name="public_categ_id" ref="pils"/> | 827 | <field name="pos_categ_id" ref="pils"/> |
2910 | 827 | <field name="image" type="base64" file="point_of_sale/static/img/maes_33cl-image.jpg"/> | 828 | <field name="image" type="base64" file="point_of_sale/static/img/maes_33cl-image.jpg"/> |
2911 | 828 | </record> | 829 | </record> |
2912 | 829 | <record id="jupiler_50cl" model="product.product"> | 830 | <record id="jupiler_50cl" model="product.product"> |
2913 | 830 | <field name="available_in_pos">True</field> | 831 | <field name="available_in_pos">True</field> |
2914 | 831 | <field name="list_price">0.97</field> | 832 | <field name="list_price">0.97</field> |
2915 | 832 | <field name="name">Jupiler 50cl</field> | 833 | <field name="name">Jupiler 50cl</field> |
2917 | 833 | <field name="public_categ_id" ref="pils"/> | 834 | <field name="pos_categ_id" ref="pils"/> |
2918 | 834 | <field name="image" type="base64" file="point_of_sale/static/img/jupiler_50cl-image.jpg"/> | 835 | <field name="image" type="base64" file="point_of_sale/static/img/jupiler_50cl-image.jpg"/> |
2919 | 835 | </record> | 836 | </record> |
2920 | 836 | <record id="jupiler_33cl" model="product.product"> | 837 | <record id="jupiler_33cl" model="product.product"> |
2921 | @@ -838,7 +839,7 @@ | |||
2922 | 838 | <field name="list_price">0.77</field> | 839 | <field name="list_price">0.77</field> |
2923 | 839 | <field name="ean13">5410228142027</field> | 840 | <field name="ean13">5410228142027</field> |
2924 | 840 | <field name="name">Jupiler 33cl</field> | 841 | <field name="name">Jupiler 33cl</field> |
2926 | 841 | <field name="public_categ_id" ref="pils"/> | 842 | <field name="pos_categ_id" ref="pils"/> |
2927 | 842 | <field name="image" type="base64" file="point_of_sale/static/img/jupiler_33cl-image.jpg"/> | 843 | <field name="image" type="base64" file="point_of_sale/static/img/jupiler_33cl-image.jpg"/> |
2928 | 843 | </record> | 844 | </record> |
2929 | 844 | 845 | ||
2930 | @@ -846,49 +847,49 @@ | |||
2931 | 846 | <field name="available_in_pos">True</field> | 847 | <field name="available_in_pos">True</field> |
2932 | 847 | <field name="list_price">2.53</field> | 848 | <field name="list_price">2.53</field> |
2933 | 848 | <field name="name">Boon Framboise 37.5cl</field> | 849 | <field name="name">Boon Framboise 37.5cl</field> |
2935 | 849 | <field name="public_categ_id" ref="fruity_beers"/> | 850 | <field name="pos_categ_id" ref="fruity_beers"/> |
2936 | 850 | <field name="image" type="base64" file="point_of_sale/static/img/boon_framboise_37,5cl-image.jpg"/> | 851 | <field name="image" type="base64" file="point_of_sale/static/img/boon_framboise_37,5cl-image.jpg"/> |
2937 | 851 | </record> | 852 | </record> |
2938 | 852 | <record id="timmermans_geuze_37,5cl" model="product.product"> | 853 | <record id="timmermans_geuze_37,5cl" model="product.product"> |
2939 | 853 | <field name="available_in_pos">True</field> | 854 | <field name="available_in_pos">True</field> |
2940 | 854 | <field name="list_price">1.54</field> | 855 | <field name="list_price">1.54</field> |
2941 | 855 | <field name="name">Timmermans Geuze 37.5cl</field> | 856 | <field name="name">Timmermans Geuze 37.5cl</field> |
2943 | 856 | <field name="public_categ_id" ref="fruity_beers"/> | 857 | <field name="pos_categ_id" ref="fruity_beers"/> |
2944 | 857 | <field name="image" type="base64" file="point_of_sale/static/img/timmermans_geuze_37,5cl-image.jpg"/> | 858 | <field name="image" type="base64" file="point_of_sale/static/img/timmermans_geuze_37,5cl-image.jpg"/> |
2945 | 858 | </record> | 859 | </record> |
2946 | 859 | <record id="timmermans_kriek_37,5cl" model="product.product"> | 860 | <record id="timmermans_kriek_37,5cl" model="product.product"> |
2947 | 860 | <field name="available_in_pos">True</field> | 861 | <field name="available_in_pos">True</field> |
2948 | 861 | <field name="list_price">1.7</field> | 862 | <field name="list_price">1.7</field> |
2949 | 862 | <field name="name">Timmermans Kriek 37.5cl</field> | 863 | <field name="name">Timmermans Kriek 37.5cl</field> |
2951 | 863 | <field name="public_categ_id" ref="fruity_beers"/> | 864 | <field name="pos_categ_id" ref="fruity_beers"/> |
2952 | 864 | <field name="image" type="base64" file="point_of_sale/static/img/timmermans_kriek_37,5cl-image.jpg"/> | 865 | <field name="image" type="base64" file="point_of_sale/static/img/timmermans_kriek_37,5cl-image.jpg"/> |
2953 | 865 | </record> | 866 | </record> |
2954 | 866 | <record id="timmermans_faro_37,5cl" model="product.product"> | 867 | <record id="timmermans_faro_37,5cl" model="product.product"> |
2955 | 867 | <field name="available_in_pos">True</field> | 868 | <field name="available_in_pos">True</field> |
2956 | 868 | <field name="list_price">1.56</field> | 869 | <field name="list_price">1.56</field> |
2957 | 869 | <field name="name">Timmermans Faro 37.5cl</field> | 870 | <field name="name">Timmermans Faro 37.5cl</field> |
2959 | 870 | <field name="public_categ_id" ref="fruity_beers"/> | 871 | <field name="pos_categ_id" ref="fruity_beers"/> |
2960 | 871 | <field name="image" type="base64" file="point_of_sale/static/img/timmermans_faro_37,5cl-image.jpg"/> | 872 | <field name="image" type="base64" file="point_of_sale/static/img/timmermans_faro_37,5cl-image.jpg"/> |
2961 | 872 | </record> | 873 | </record> |
2962 | 873 | <record id="lindemans_pecheresse_37,,5cl" model="product.product"> | 874 | <record id="lindemans_pecheresse_37,,5cl" model="product.product"> |
2963 | 874 | <field name="available_in_pos">True</field> | 875 | <field name="available_in_pos">True</field> |
2964 | 875 | <field name="list_price">1.94</field> | 876 | <field name="list_price">1.94</field> |
2965 | 876 | <field name="name">Lindemans sinful 37.5cl</field> | 877 | <field name="name">Lindemans sinful 37.5cl</field> |
2967 | 877 | <field name="public_categ_id" ref="fruity_beers"/> | 878 | <field name="pos_categ_id" ref="fruity_beers"/> |
2968 | 878 | <field name="image" type="base64" file="point_of_sale/static/img/lindemans_pecheresse_37,,5cl-image.jpg"/> | 879 | <field name="image" type="base64" file="point_of_sale/static/img/lindemans_pecheresse_37,,5cl-image.jpg"/> |
2969 | 879 | </record> | 880 | </record> |
2970 | 880 | <record id="lindemans_kriek_37,5cl" model="product.product"> | 881 | <record id="lindemans_kriek_37,5cl" model="product.product"> |
2971 | 881 | <field name="available_in_pos">True</field> | 882 | <field name="available_in_pos">True</field> |
2972 | 882 | <field name="list_price">1.51</field> | 883 | <field name="list_price">1.51</field> |
2973 | 883 | <field name="name">Lindemans Kriek 37.5cl</field> | 884 | <field name="name">Lindemans Kriek 37.5cl</field> |
2975 | 884 | <field name="public_categ_id" ref="fruity_beers"/> | 885 | <field name="pos_categ_id" ref="fruity_beers"/> |
2976 | 885 | <field name="image" type="base64" file="point_of_sale/static/img/lindemans_kriek_37,5cl-image.jpg"/> | 886 | <field name="image" type="base64" file="point_of_sale/static/img/lindemans_kriek_37,5cl-image.jpg"/> |
2977 | 886 | </record> | 887 | </record> |
2978 | 887 | <record id="grisette_cerise_25cl" model="product.product"> | 888 | <record id="grisette_cerise_25cl" model="product.product"> |
2979 | 888 | <field name="available_in_pos">True</field> | 889 | <field name="available_in_pos">True</field> |
2980 | 889 | <field name="list_price">1.04</field> | 890 | <field name="list_price">1.04</field> |
2981 | 890 | <field name="name">Grisette Cherry 25cl</field> | 891 | <field name="name">Grisette Cherry 25cl</field> |
2983 | 891 | <field name="public_categ_id" ref="fruity_beers"/> | 892 | <field name="pos_categ_id" ref="fruity_beers"/> |
2984 | 892 | <field name="image" type="base64" file="point_of_sale/static/img/grisette_cerise_25cl-image.jpg"/> | 893 | <field name="image" type="base64" file="point_of_sale/static/img/grisette_cerise_25cl-image.jpg"/> |
2985 | 893 | </record> | 894 | </record> |
2986 | 894 | <record id="belle_vue_kriek_25cl" model="product.product"> | 895 | <record id="belle_vue_kriek_25cl" model="product.product"> |
2987 | @@ -896,7 +897,7 @@ | |||
2988 | 896 | <field name="list_price">0.83</field> | 897 | <field name="list_price">0.83</field> |
2989 | 897 | <field name="name">Belle-Vue Kriek 25cl</field> | 898 | <field name="name">Belle-Vue Kriek 25cl</field> |
2990 | 898 | <field name='ean13'>5410228193449</field> | 899 | <field name='ean13'>5410228193449</field> |
2992 | 899 | <field name="public_categ_id" ref="fruity_beers"/> | 900 | <field name="pos_categ_id" ref="fruity_beers"/> |
2993 | 900 | <field name="image" type="base64" file="point_of_sale/static/img/belle_vue_kriek_25cl-image.jpg"/> | 901 | <field name="image" type="base64" file="point_of_sale/static/img/belle_vue_kriek_25cl-image.jpg"/> |
2994 | 901 | </record> | 902 | </record> |
2995 | 902 | 903 | ||
2996 | @@ -905,7 +906,7 @@ | |||
2997 | 905 | <field name="list_price">1.00</field> | 906 | <field name="list_price">1.00</field> |
2998 | 906 | <field name="name">Leffe Brune 33cl</field> | 907 | <field name="name">Leffe Brune 33cl</field> |
2999 | 907 | <field name='ean13'>5410228142164</field> | 908 | <field name='ean13'>5410228142164</field> |
3001 | 908 | <field name="public_categ_id" ref="special_beers"/> | 909 | <field name="pos_categ_id" ref="special_beers"/> |
3002 | 909 | <field name="image" type="base64" file="point_of_sale/static/img/leffe_brune_33cl-image.jpg"/> | 910 | <field name="image" type="base64" file="point_of_sale/static/img/leffe_brune_33cl-image.jpg"/> |
3003 | 910 | </record> | 911 | </record> |
3004 | 911 | <record id="leffe_blonde_33cl" model="product.product"> | 912 | <record id="leffe_blonde_33cl" model="product.product"> |
3005 | @@ -913,49 +914,49 @@ | |||
3006 | 913 | <field name="list_price">1.00</field> | 914 | <field name="list_price">1.00</field> |
3007 | 914 | <field name="name">Leffe Blonde 33cl</field> | 915 | <field name="name">Leffe Blonde 33cl</field> |
3008 | 915 | <field name='ean13'>5410228142218</field> | 916 | <field name='ean13'>5410228142218</field> |
3010 | 916 | <field name="public_categ_id" ref="special_beers"/> | 917 | <field name="pos_categ_id" ref="special_beers"/> |
3011 | 917 | <field name="image" type="base64" file="point_of_sale/static/img/leffe_blonde_33cl-image.jpg"/> | 918 | <field name="image" type="base64" file="point_of_sale/static/img/leffe_blonde_33cl-image.jpg"/> |
3012 | 918 | </record> | 919 | </record> |
3013 | 919 | <record id="leffe_9_33cl" model="product.product"> | 920 | <record id="leffe_9_33cl" model="product.product"> |
3014 | 920 | <field name="available_in_pos">True</field> | 921 | <field name="available_in_pos">True</field> |
3015 | 921 | <field name="list_price">1.16</field> | 922 | <field name="list_price">1.16</field> |
3016 | 922 | <field name="name">Leffe Brune "9" 33cl</field> | 923 | <field name="name">Leffe Brune "9" 33cl</field> |
3018 | 923 | <field name="public_categ_id" ref="special_beers"/> | 924 | <field name="pos_categ_id" ref="special_beers"/> |
3019 | 924 | <field name="image" type="base64" file="point_of_sale/static/img/leffe_9_33cl-image.jpg"/> | 925 | <field name="image" type="base64" file="point_of_sale/static/img/leffe_9_33cl-image.jpg"/> |
3020 | 925 | </record> | 926 | </record> |
3021 | 926 | <record id="orval_33cl" model="product.product"> | 927 | <record id="orval_33cl" model="product.product"> |
3022 | 927 | <field name="available_in_pos">True</field> | 928 | <field name="available_in_pos">True</field> |
3023 | 928 | <field name="list_price">1.59</field> | 929 | <field name="list_price">1.59</field> |
3024 | 929 | <field name="name">Orval 33cl</field> | 930 | <field name="name">Orval 33cl</field> |
3026 | 930 | <field name="public_categ_id" ref="special_beers"/> | 931 | <field name="pos_categ_id" ref="special_beers"/> |
3027 | 931 | <field name="image" type="base64" file="point_of_sale/static/img/orval_33cl-image.jpg"/> | 932 | <field name="image" type="base64" file="point_of_sale/static/img/orval_33cl-image.jpg"/> |
3028 | 932 | </record> | 933 | </record> |
3029 | 933 | <record id="rochefort_8_33cl" model="product.product"> | 934 | <record id="rochefort_8_33cl" model="product.product"> |
3030 | 934 | <field name="available_in_pos">True</field> | 935 | <field name="available_in_pos">True</field> |
3031 | 935 | <field name="list_price">1.75</field> | 936 | <field name="list_price">1.75</field> |
3032 | 936 | <field name="name">Rochefort "8" 33cl</field> | 937 | <field name="name">Rochefort "8" 33cl</field> |
3034 | 937 | <field name="public_categ_id" ref="special_beers"/> | 938 | <field name="pos_categ_id" ref="special_beers"/> |
3035 | 938 | <field name="image" type="base64" file="point_of_sale/static/img/rochefort_8_33cl-image.jpg"/> | 939 | <field name="image" type="base64" file="point_of_sale/static/img/rochefort_8_33cl-image.jpg"/> |
3036 | 939 | </record> | 940 | </record> |
3037 | 940 | <record id="chimay_bleu_33cl" model="product.product"> | 941 | <record id="chimay_bleu_33cl" model="product.product"> |
3038 | 941 | <field name="available_in_pos">True</field> | 942 | <field name="available_in_pos">True</field> |
3039 | 942 | <field name="list_price">1.46</field> | 943 | <field name="list_price">1.46</field> |
3040 | 943 | <field name="name">Chimay Bleu 33cl</field> | 944 | <field name="name">Chimay Bleu 33cl</field> |
3042 | 944 | <field name="public_categ_id" ref="special_beers"/> | 945 | <field name="pos_categ_id" ref="special_beers"/> |
3043 | 945 | <field name="image" type="base64" file="point_of_sale/static/img/chimay_bleu_33cl-image.jpg"/> | 946 | <field name="image" type="base64" file="point_of_sale/static/img/chimay_bleu_33cl-image.jpg"/> |
3044 | 946 | </record> | 947 | </record> |
3045 | 947 | <record id="chimay_bleu_75cl" model="product.product"> | 948 | <record id="chimay_bleu_75cl" model="product.product"> |
3046 | 948 | <field name="available_in_pos">True</field> | 949 | <field name="available_in_pos">True</field> |
3047 | 949 | <field name="list_price">3.57</field> | 950 | <field name="list_price">3.57</field> |
3048 | 950 | <field name="name">Chimay Bleu 75cl</field> | 951 | <field name="name">Chimay Bleu 75cl</field> |
3050 | 951 | <field name="public_categ_id" ref="special_beers"/> | 952 | <field name="pos_categ_id" ref="special_beers"/> |
3051 | 952 | <field name="image" type="base64" file="point_of_sale/static/img/chimay_bleu_75cl-image.jpg"/> | 953 | <field name="image" type="base64" file="point_of_sale/static/img/chimay_bleu_75cl-image.jpg"/> |
3052 | 953 | </record> | 954 | </record> |
3053 | 954 | <record id="chimay_rouge_33cl" model="product.product"> | 955 | <record id="chimay_rouge_33cl" model="product.product"> |
3054 | 955 | <field name="available_in_pos">True</field> | 956 | <field name="available_in_pos">True</field> |
3055 | 956 | <field name="list_price">1.02</field> | 957 | <field name="list_price">1.02</field> |
3056 | 957 | <field name="name">Chimay Red 33cl</field> | 958 | <field name="name">Chimay Red 33cl</field> |
3058 | 958 | <field name="public_categ_id" ref="special_beers"/> | 959 | <field name="pos_categ_id" ref="special_beers"/> |
3059 | 959 | <field name="image" type="base64" file="point_of_sale/static/img/chimay_rouge_33cl-image.jpg"/> | 960 | <field name="image" type="base64" file="point_of_sale/static/img/chimay_rouge_33cl-image.jpg"/> |
3060 | 960 | </record> | 961 | </record> |
3061 | 961 | 962 | ||
3062 | @@ -963,84 +964,84 @@ | |||
3063 | 963 | <field name="available_in_pos">True</field> | 964 | <field name="available_in_pos">True</field> |
3064 | 964 | <field name="list_price">2.86</field> | 965 | <field name="list_price">2.86</field> |
3065 | 965 | <field name="name">Dr. Oetker Ristorante Mozzarella</field> | 966 | <field name="name">Dr. Oetker Ristorante Mozzarella</field> |
3067 | 966 | <field name="public_categ_id" ref="pizza"/> | 967 | <field name="pos_categ_id" ref="pizza"/> |
3068 | 967 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_mozzarella-image.jpg"/> | 968 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_mozzarella-image.jpg"/> |
3069 | 968 | </record> | 969 | </record> |
3070 | 969 | <record id="oetker_bolognese" model="product.product"> | 970 | <record id="oetker_bolognese" model="product.product"> |
3071 | 970 | <field name="available_in_pos">True</field> | 971 | <field name="available_in_pos">True</field> |
3072 | 971 | <field name="list_price">2.86</field> | 972 | <field name="list_price">2.86</field> |
3073 | 972 | <field name="name">Dr. Oetker Ristorante Bolognese</field> | 973 | <field name="name">Dr. Oetker Ristorante Bolognese</field> |
3075 | 973 | <field name="public_categ_id" ref="pizza"/> | 974 | <field name="pos_categ_id" ref="pizza"/> |
3076 | 974 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_bolognese-image.jpg"/> | 975 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_bolognese-image.jpg"/> |
3077 | 975 | </record> | 976 | </record> |
3078 | 976 | <record id="oetker_funghi" model="product.product"> | 977 | <record id="oetker_funghi" model="product.product"> |
3079 | 977 | <field name="available_in_pos">True</field> | 978 | <field name="available_in_pos">True</field> |
3080 | 978 | <field name="list_price">2.86</field> | 979 | <field name="list_price">2.86</field> |
3081 | 979 | <field name="name">Dr. Oetker Ristorante Funghi</field> | 980 | <field name="name">Dr. Oetker Ristorante Funghi</field> |
3083 | 980 | <field name="public_categ_id" ref="pizza"/> | 981 | <field name="pos_categ_id" ref="pizza"/> |
3084 | 981 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_funghi-image.jpg"/> | 982 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_funghi-image.jpg"/> |
3085 | 982 | </record> | 983 | </record> |
3086 | 983 | <record id="oetker_hawaii" model="product.product"> | 984 | <record id="oetker_hawaii" model="product.product"> |
3087 | 984 | <field name="available_in_pos">True</field> | 985 | <field name="available_in_pos">True</field> |
3088 | 985 | <field name="list_price">2.86</field> | 986 | <field name="list_price">2.86</field> |
3089 | 986 | <field name="name">Dr. Oetker Ristorante Hawaii</field> | 987 | <field name="name">Dr. Oetker Ristorante Hawaii</field> |
3091 | 987 | <field name="public_categ_id" ref="pizza"/> | 988 | <field name="pos_categ_id" ref="pizza"/> |
3092 | 988 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_hawaii-image.jpg"/> | 989 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_hawaii-image.jpg"/> |
3093 | 989 | </record> | 990 | </record> |
3094 | 990 | <record id="oetker_pollo" model="product.product"> | 991 | <record id="oetker_pollo" model="product.product"> |
3095 | 991 | <field name="available_in_pos">True</field> | 992 | <field name="available_in_pos">True</field> |
3096 | 992 | <field name="list_price">2.86</field> | 993 | <field name="list_price">2.86</field> |
3097 | 993 | <field name="name">Dr. Oetker Ristorante Pollo</field> | 994 | <field name="name">Dr. Oetker Ristorante Pollo</field> |
3099 | 994 | <field name="public_categ_id" ref="pizza"/> | 995 | <field name="pos_categ_id" ref="pizza"/> |
3100 | 995 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_pollo-image.jpg"/> | 996 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_pollo-image.jpg"/> |
3101 | 996 | </record> | 997 | </record> |
3102 | 997 | <record id="oetker_prosciutto" model="product.product"> | 998 | <record id="oetker_prosciutto" model="product.product"> |
3103 | 998 | <field name="available_in_pos">True</field> | 999 | <field name="available_in_pos">True</field> |
3104 | 999 | <field name="list_price">2.86</field> | 1000 | <field name="list_price">2.86</field> |
3105 | 1000 | <field name="name">Dr. Oetker Ristorante Prosciutto</field> | 1001 | <field name="name">Dr. Oetker Ristorante Prosciutto</field> |
3107 | 1001 | <field name="public_categ_id" ref="pizza"/> | 1002 | <field name="pos_categ_id" ref="pizza"/> |
3108 | 1002 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_prosciutto-image.jpg"/> | 1003 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_prosciutto-image.jpg"/> |
3109 | 1003 | </record> | 1004 | </record> |
3110 | 1004 | <record id="oetker_4formaggi" model="product.product"> | 1005 | <record id="oetker_4formaggi" model="product.product"> |
3111 | 1005 | <field name="available_in_pos">True</field> | 1006 | <field name="available_in_pos">True</field> |
3112 | 1006 | <field name="list_price">2.86</field> | 1007 | <field name="list_price">2.86</field> |
3113 | 1007 | <field name="name">Dr. Oetker Ristorante Quattro Formaggi</field> | 1008 | <field name="name">Dr. Oetker Ristorante Quattro Formaggi</field> |
3115 | 1008 | <field name="public_categ_id" ref="pizza"/> | 1009 | <field name="pos_categ_id" ref="pizza"/> |
3116 | 1009 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_4formaggi-image.jpg"/> | 1010 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_4formaggi-image.jpg"/> |
3117 | 1010 | </record> | 1011 | </record> |
3118 | 1011 | <record id="oetker_speciale" model="product.product"> | 1012 | <record id="oetker_speciale" model="product.product"> |
3119 | 1012 | <field name="available_in_pos">True</field> | 1013 | <field name="available_in_pos">True</field> |
3120 | 1013 | <field name="list_price">2.86</field> | 1014 | <field name="list_price">2.86</field> |
3121 | 1014 | <field name="name">Dr. Oetker Ristorante Speciale</field> | 1015 | <field name="name">Dr. Oetker Ristorante Speciale</field> |
3123 | 1015 | <field name="public_categ_id" ref="pizza"/> | 1016 | <field name="pos_categ_id" ref="pizza"/> |
3124 | 1016 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_speciale-image.jpg"/> | 1017 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_speciale-image.jpg"/> |
3125 | 1017 | </record> | 1018 | </record> |
3126 | 1018 | <record id="oetker_spinaci" model="product.product"> | 1019 | <record id="oetker_spinaci" model="product.product"> |
3127 | 1019 | <field name="available_in_pos">True</field> | 1020 | <field name="available_in_pos">True</field> |
3128 | 1020 | <field name="list_price">2.86</field> | 1021 | <field name="list_price">2.86</field> |
3129 | 1021 | <field name="name">Dr. Oetker Ristorante Spinaci</field> | 1022 | <field name="name">Dr. Oetker Ristorante Spinaci</field> |
3131 | 1022 | <field name="public_categ_id" ref="pizza"/> | 1023 | <field name="pos_categ_id" ref="pizza"/> |
3132 | 1023 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_spinaci-image.jpg"/> | 1024 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_spinaci-image.jpg"/> |
3133 | 1024 | </record> | 1025 | </record> |
3134 | 1025 | <record id="oetker_tonno" model="product.product"> | 1026 | <record id="oetker_tonno" model="product.product"> |
3135 | 1026 | <field name="available_in_pos">True</field> | 1027 | <field name="available_in_pos">True</field> |
3136 | 1027 | <field name="list_price">2.86</field> | 1028 | <field name="list_price">2.86</field> |
3137 | 1028 | <field name="name">Dr. Oetker Ristorante Tonno</field> | 1029 | <field name="name">Dr. Oetker Ristorante Tonno</field> |
3139 | 1029 | <field name="public_categ_id" ref="pizza"/> | 1030 | <field name="pos_categ_id" ref="pizza"/> |
3140 | 1030 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_tonno-image.jpg"/> | 1031 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_tonno-image.jpg"/> |
3141 | 1031 | </record> | 1032 | </record> |
3142 | 1032 | <record id="oetker_vegetale" model="product.product"> | 1033 | <record id="oetker_vegetale" model="product.product"> |
3143 | 1033 | <field name="available_in_pos">True</field> | 1034 | <field name="available_in_pos">True</field> |
3144 | 1034 | <field name="list_price">2.86</field> | 1035 | <field name="list_price">2.86</field> |
3145 | 1035 | <field name="name">Dr. Oetker Ristorante Vegetable</field> | 1036 | <field name="name">Dr. Oetker Ristorante Vegetable</field> |
3147 | 1036 | <field name="public_categ_id" ref="pizza"/> | 1037 | <field name="pos_categ_id" ref="pizza"/> |
3148 | 1037 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_vegetale-image.jpg"/> | 1038 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_vegetale-image.jpg"/> |
3149 | 1038 | </record> | 1039 | </record> |
3150 | 1039 | <record id="oetker_margherita" model="product.product"> | 1040 | <record id="oetker_margherita" model="product.product"> |
3151 | 1040 | <field name="available_in_pos">True</field> | 1041 | <field name="available_in_pos">True</field> |
3152 | 1041 | <field name="list_price">2.67</field> | 1042 | <field name="list_price">2.67</field> |
3153 | 1042 | <field name="name">Dr. Oetker La Margherita</field> | 1043 | <field name="name">Dr. Oetker La Margherita</field> |
3155 | 1043 | <field name="public_categ_id" ref="pizza"/> | 1044 | <field name="pos_categ_id" ref="pizza"/> |
3156 | 1044 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_margherita-image.jpg"/> | 1045 | <field name="image" type="base64" file="point_of_sale/static/img/oetker_margherita-image.jpg"/> |
3157 | 1045 | </record> | 1046 | </record> |
3158 | 1046 | 1047 | ||
3159 | @@ -1048,42 +1049,42 @@ | |||
3160 | 1048 | <field name="available_in_pos">True</field> | 1049 | <field name="available_in_pos">True</field> |
3161 | 1049 | <field name="list_price">0.33</field> | 1050 | <field name="list_price">0.33</field> |
3162 | 1050 | <field name="name">Croky Paprika 45g</field> | 1051 | <field name="name">Croky Paprika 45g</field> |
3164 | 1051 | <field name="public_categ_id" ref="chips"/> | 1052 | <field name="pos_categ_id" ref="chips"/> |
3165 | 1052 | <field name="image" type="base64" file="point_of_sale/static/img/croky_paprika_45g-image.jpg"/> | 1053 | <field name="image" type="base64" file="point_of_sale/static/img/croky_paprika_45g-image.jpg"/> |
3166 | 1053 | </record> | 1054 | </record> |
3167 | 1054 | <record id="croky_naturel_45g" model="product.product"> | 1055 | <record id="croky_naturel_45g" model="product.product"> |
3168 | 1055 | <field name="available_in_pos">True</field> | 1056 | <field name="available_in_pos">True</field> |
3169 | 1056 | <field name="list_price">0.39</field> | 1057 | <field name="list_price">0.39</field> |
3170 | 1057 | <field name="name">Croky Natural 45g</field> | 1058 | <field name="name">Croky Natural 45g</field> |
3172 | 1058 | <field name="public_categ_id" ref="chips"/> | 1059 | <field name="pos_categ_id" ref="chips"/> |
3173 | 1059 | <field name="image" type="base64" file="point_of_sale/static/img/croky_naturel_45g-image.jpg"/> | 1060 | <field name="image" type="base64" file="point_of_sale/static/img/croky_naturel_45g-image.jpg"/> |
3174 | 1060 | </record> | 1061 | </record> |
3175 | 1061 | <record id="croky_bolognaise_250g" model="product.product"> | 1062 | <record id="croky_bolognaise_250g" model="product.product"> |
3176 | 1062 | <field name="available_in_pos">True</field> | 1063 | <field name="available_in_pos">True</field> |
3177 | 1063 | <field name="list_price">1.78</field> | 1064 | <field name="list_price">1.78</field> |
3178 | 1064 | <field name="name">Croky Bolognese 250g</field> | 1065 | <field name="name">Croky Bolognese 250g</field> |
3180 | 1065 | <field name="public_categ_id" ref="chips"/> | 1066 | <field name="pos_categ_id" ref="chips"/> |
3181 | 1066 | <field name="image" type="base64" file="point_of_sale/static/img/croky_bolognaise_250g-image.jpg"/> | 1067 | <field name="image" type="base64" file="point_of_sale/static/img/croky_bolognaise_250g-image.jpg"/> |
3182 | 1067 | </record> | 1068 | </record> |
3183 | 1068 | <record id="lays_pickles_250g" model="product.product"> | 1069 | <record id="lays_pickles_250g" model="product.product"> |
3184 | 1069 | <field name="available_in_pos">True</field> | 1070 | <field name="available_in_pos">True</field> |
3185 | 1070 | <field name="list_price">1.48</field> | 1071 | <field name="list_price">1.48</field> |
3186 | 1071 | <field name="name">250g Lays Pickels</field> | 1072 | <field name="name">250g Lays Pickels</field> |
3188 | 1072 | <field name="public_categ_id" ref="chips"/> | 1073 | <field name="pos_categ_id" ref="chips"/> |
3189 | 1073 | <field name="image" type="base64" file="point_of_sale/static/img/lays_pickles_250g-image.jpg"/> | 1074 | <field name="image" type="base64" file="point_of_sale/static/img/lays_pickles_250g-image.jpg"/> |
3190 | 1074 | </record> | 1075 | </record> |
3191 | 1075 | <record id="lays_ketchup_250g" model="product.product"> | 1076 | <record id="lays_ketchup_250g" model="product.product"> |
3192 | 1076 | <field name="available_in_pos">True</field> | 1077 | <field name="available_in_pos">True</field> |
3193 | 1077 | <field name="list_price">1.48</field> | 1078 | <field name="list_price">1.48</field> |
3194 | 1078 | <field name="name">Lays Ketchup 250g</field> | 1079 | <field name="name">Lays Ketchup 250g</field> |
3196 | 1079 | <field name="public_categ_id" ref="chips"/> | 1080 | <field name="pos_categ_id" ref="chips"/> |
3197 | 1080 | <field name="image" type="base64" file="point_of_sale/static/img/lays_ketchup_250g-image.jpg"/> | 1081 | <field name="image" type="base64" file="point_of_sale/static/img/lays_ketchup_250g-image.jpg"/> |
3198 | 1081 | </record> | 1082 | </record> |
3199 | 1082 | <record id="lays_poivre_sel_oven_150g" model="product.product"> | 1083 | <record id="lays_poivre_sel_oven_150g" model="product.product"> |
3200 | 1083 | <field name="available_in_pos">True</field> | 1084 | <field name="available_in_pos">True</field> |
3201 | 1084 | <field name="list_price">1.58</field> | 1085 | <field name="list_price">1.58</field> |
3202 | 1085 | <field name="name">Lays Salt and Pepper Oven Baked 150g</field> | 1086 | <field name="name">Lays Salt and Pepper Oven Baked 150g</field> |
3204 | 1086 | <field name="public_categ_id" ref="chips"/> | 1087 | <field name="pos_categ_id" ref="chips"/> |
3205 | 1087 | <field name="image" type="base64" file="point_of_sale/static/img/lays_poivre_sel_oven_150g-image.jpg"/> | 1088 | <field name="image" type="base64" file="point_of_sale/static/img/lays_poivre_sel_oven_150g-image.jpg"/> |
3206 | 1088 | </record> | 1089 | </record> |
3207 | 1089 | 1090 | ||
3208 | @@ -1091,35 +1092,35 @@ | |||
3209 | 1091 | <field name="available_in_pos">True</field> | 1092 | <field name="available_in_pos">True</field> |
3210 | 1092 | <field name="list_price">1.54</field> | 1093 | <field name="list_price">1.54</field> |
3211 | 1093 | <field name="name">Oven Baked Lays Paprika 150g</field> | 1094 | <field name="name">Oven Baked Lays Paprika 150g</field> |
3213 | 1094 | <field name="public_categ_id" ref="chips"/> | 1095 | <field name="pos_categ_id" ref="chips"/> |
3214 | 1095 | <field name="image" type="base64" file="point_of_sale/static/img/lays_paprika_oven_150g-image.jpg"/> | 1096 | <field name="image" type="base64" file="point_of_sale/static/img/lays_paprika_oven_150g-image.jpg"/> |
3215 | 1096 | </record> | 1097 | </record> |
3216 | 1097 | <record id="lays_paprika_300g" model="product.product"> | 1098 | <record id="lays_paprika_300g" model="product.product"> |
3217 | 1098 | <field name="available_in_pos">True</field> | 1099 | <field name="available_in_pos">True</field> |
3218 | 1099 | <field name="list_price">1.55</field> | 1100 | <field name="list_price">1.55</field> |
3219 | 1100 | <field name="name">Lays Paprika XXL 300g</field> | 1101 | <field name="name">Lays Paprika XXL 300g</field> |
3221 | 1101 | <field name="public_categ_id" ref="chips"/> | 1102 | <field name="pos_categ_id" ref="chips"/> |
3222 | 1102 | <field name="image" type="base64" file="point_of_sale/static/img/lays_paprika_300g-image.jpg"/> | 1103 | <field name="image" type="base64" file="point_of_sale/static/img/lays_paprika_300g-image.jpg"/> |
3223 | 1103 | </record> | 1104 | </record> |
3224 | 1104 | <record id="lays_paprika_170g" model="product.product"> | 1105 | <record id="lays_paprika_170g" model="product.product"> |
3225 | 1105 | <field name="available_in_pos">True</field> | 1106 | <field name="available_in_pos">True</field> |
3226 | 1106 | <field name="list_price">1.48</field> | 1107 | <field name="list_price">1.48</field> |
3227 | 1107 | <field name="name">Lays Light Paprika 170g</field> | 1108 | <field name="name">Lays Light Paprika 170g</field> |
3229 | 1108 | <field name="public_categ_id" ref="chips"/> | 1109 | <field name="pos_categ_id" ref="chips"/> |
3230 | 1109 | <field name="image" type="base64" file="point_of_sale/static/img/lays_paprika_170g-image.jpg"/> | 1110 | <field name="image" type="base64" file="point_of_sale/static/img/lays_paprika_170g-image.jpg"/> |
3231 | 1110 | </record> | 1111 | </record> |
3232 | 1111 | <record id="lays_light_paprika_170g" model="product.product"> | 1112 | <record id="lays_light_paprika_170g" model="product.product"> |
3233 | 1112 | <field name="available_in_pos">True</field> | 1113 | <field name="available_in_pos">True</field> |
3234 | 1113 | <field name="list_price">1.48</field> | 1114 | <field name="list_price">1.48</field> |
3235 | 1114 | <field name="name">Lays Light Paprika 170g</field> | 1115 | <field name="name">Lays Light Paprika 170g</field> |
3237 | 1115 | <field name="public_categ_id" ref="chips"/> | 1116 | <field name="pos_categ_id" ref="chips"/> |
3238 | 1116 | <field name="image" type="base64" file="point_of_sale/static/img/lays_light_paprika_170g-image.jpg"/> | 1117 | <field name="image" type="base64" file="point_of_sale/static/img/lays_light_paprika_170g-image.jpg"/> |
3239 | 1117 | </record> | 1118 | </record> |
3240 | 1118 | <record id="lays_paprika_45g" model="product.product"> | 1119 | <record id="lays_paprika_45g" model="product.product"> |
3241 | 1119 | <field name="available_in_pos">True</field> | 1120 | <field name="available_in_pos">True</field> |
3242 | 1120 | <field name="list_price">0.39</field> | 1121 | <field name="list_price">0.39</field> |
3243 | 1121 | <field name="name">Lays Paprika 45g</field> | 1122 | <field name="name">Lays Paprika 45g</field> |
3245 | 1122 | <field name="public_categ_id" ref="chips"/> | 1123 | <field name="pos_categ_id" ref="chips"/> |
3246 | 1123 | <field name="image" type="base64" file="point_of_sale/static/img/lays_paprika_45g-image.jpg"/> | 1124 | <field name="image" type="base64" file="point_of_sale/static/img/lays_paprika_45g-image.jpg"/> |
3247 | 1124 | </record> | 1125 | </record> |
3248 | 1125 | 1126 | ||
3249 | @@ -1127,35 +1128,35 @@ | |||
3250 | 1127 | <field name="available_in_pos">True</field> | 1128 | <field name="available_in_pos">True</field> |
3251 | 1128 | <field name="list_price">1.54</field> | 1129 | <field name="list_price">1.54</field> |
3252 | 1129 | <field name="name">Oven Baked Lays Natural 150g</field> | 1130 | <field name="name">Oven Baked Lays Natural 150g</field> |
3254 | 1130 | <field name="public_categ_id" ref="chips"/> | 1131 | <field name="pos_categ_id" ref="chips"/> |
3255 | 1131 | <field name="image" type="base64" file="point_of_sale/static/img/lays_naturel_oven_150g-image.jpg"/> | 1132 | <field name="image" type="base64" file="point_of_sale/static/img/lays_naturel_oven_150g-image.jpg"/> |
3256 | 1132 | </record> | 1133 | </record> |
3257 | 1133 | <record id="lays_naturel_300g" model="product.product"> | 1134 | <record id="lays_naturel_300g" model="product.product"> |
3258 | 1134 | <field name="available_in_pos">True</field> | 1135 | <field name="available_in_pos">True</field> |
3259 | 1135 | <field name="list_price">1.55</field> | 1136 | <field name="list_price">1.55</field> |
3260 | 1136 | <field name="name">Lays Natural XXL 300g</field> | 1137 | <field name="name">Lays Natural XXL 300g</field> |
3262 | 1137 | <field name="public_categ_id" ref="chips"/> | 1138 | <field name="pos_categ_id" ref="chips"/> |
3263 | 1138 | <field name="image" type="base64" file="point_of_sale/static/img/lays_naturel_300g-image.jpg"/> | 1139 | <field name="image" type="base64" file="point_of_sale/static/img/lays_naturel_300g-image.jpg"/> |
3264 | 1139 | </record> | 1140 | </record> |
3265 | 1140 | <record id="lays_naturel_170g" model="product.product"> | 1141 | <record id="lays_naturel_170g" model="product.product"> |
3266 | 1141 | <field name="available_in_pos">True</field> | 1142 | <field name="available_in_pos">True</field> |
3267 | 1142 | <field name="list_price">1.48</field> | 1143 | <field name="list_price">1.48</field> |
3268 | 1143 | <field name="name">Lays Natural Light 170g</field> | 1144 | <field name="name">Lays Natural Light 170g</field> |
3270 | 1144 | <field name="public_categ_id" ref="chips"/> | 1145 | <field name="pos_categ_id" ref="chips"/> |
3271 | 1145 | <field name="image" type="base64" file="point_of_sale/static/img/lays_naturel_170g-image.jpg"/> | 1146 | <field name="image" type="base64" file="point_of_sale/static/img/lays_naturel_170g-image.jpg"/> |
3272 | 1146 | </record> | 1147 | </record> |
3273 | 1147 | <record id="lays_light_naturel_170g" model="product.product"> | 1148 | <record id="lays_light_naturel_170g" model="product.product"> |
3274 | 1148 | <field name="available_in_pos">True</field> | 1149 | <field name="available_in_pos">True</field> |
3275 | 1149 | <field name="list_price">1.48</field> | 1150 | <field name="list_price">1.48</field> |
3276 | 1150 | <field name="name">Lays Natural Light 170g</field> | 1151 | <field name="name">Lays Natural Light 170g</field> |
3278 | 1151 | <field name="public_categ_id" ref="chips"/> | 1152 | <field name="pos_categ_id" ref="chips"/> |
3279 | 1152 | <field name="image" type="base64" file="point_of_sale/static/img/lays_light_naturel_170g-image.jpg"/> | 1153 | <field name="image" type="base64" file="point_of_sale/static/img/lays_light_naturel_170g-image.jpg"/> |
3280 | 1153 | </record> | 1154 | </record> |
3281 | 1154 | <record id="lays_naturel_45g" model="product.product"> | 1155 | <record id="lays_naturel_45g" model="product.product"> |
3282 | 1155 | <field name="available_in_pos">True</field> | 1156 | <field name="available_in_pos">True</field> |
3283 | 1156 | <field name="list_price">0.39</field> | 1157 | <field name="list_price">0.39</field> |
3284 | 1157 | <field name="name">Lays Natural 45g</field> | 1158 | <field name="name">Lays Natural 45g</field> |
3286 | 1158 | <field name="public_categ_id" ref="chips"/> | 1159 | <field name="pos_categ_id" ref="chips"/> |
3287 | 1159 | <field name="image" type="base64" file="point_of_sale/static/img/lays_naturel_45g-image.jpg"/> | 1160 | <field name="image" type="base64" file="point_of_sale/static/img/lays_naturel_45g-image.jpg"/> |
3288 | 1160 | </record> | 1161 | </record> |
3289 | 1161 | 1162 | ||
3290 | @@ -1163,35 +1164,35 @@ | |||
3291 | 1163 | <field name="available_in_pos">True</field> | 1164 | <field name="available_in_pos">True</field> |
3292 | 1164 | <field name="list_price">7.60</field> | 1165 | <field name="list_price">7.60</field> |
3293 | 1165 | <field name="name">IJsboerke Chocolat 2.5L</field> | 1166 | <field name="name">IJsboerke Chocolat 2.5L</field> |
3295 | 1166 | <field name="public_categ_id" ref="ice_cream"/> | 1167 | <field name="pos_categ_id" ref="ice_cream"/> |
3296 | 1167 | <field name="image" type="base64" file="point_of_sale/static/img/ijsboerke_chocolat_2,5l-image.jpg"/> | 1168 | <field name="image" type="base64" file="point_of_sale/static/img/ijsboerke_chocolat_2,5l-image.jpg"/> |
3297 | 1168 | </record> | 1169 | </record> |
3298 | 1169 | <record id="ijsboerke_moka_2,5l" model="product.product"> | 1170 | <record id="ijsboerke_moka_2,5l" model="product.product"> |
3299 | 1170 | <field name="available_in_pos">True</field> | 1171 | <field name="available_in_pos">True</field> |
3300 | 1171 | <field name="list_price">7.60</field> | 1172 | <field name="list_price">7.60</field> |
3301 | 1172 | <field name="name">IJsboerke Mocha 2.5L</field> | 1173 | <field name="name">IJsboerke Mocha 2.5L</field> |
3303 | 1173 | <field name="public_categ_id" ref="ice_cream"/> | 1174 | <field name="pos_categ_id" ref="ice_cream"/> |
3304 | 1174 | <field name="image" type="base64" file="point_of_sale/static/img/ijsboerke_moka_2,5l-image.jpg"/> | 1175 | <field name="image" type="base64" file="point_of_sale/static/img/ijsboerke_moka_2,5l-image.jpg"/> |
3305 | 1175 | </record> | 1176 | </record> |
3306 | 1176 | <record id="ijsboerke_vanille_2,5l" model="product.product"> | 1177 | <record id="ijsboerke_vanille_2,5l" model="product.product"> |
3307 | 1177 | <field name="available_in_pos">True</field> | 1178 | <field name="available_in_pos">True</field> |
3308 | 1178 | <field name="list_price">7.40</field> | 1179 | <field name="list_price">7.40</field> |
3309 | 1179 | <field name="name">IJsboerke Vanilla 2.5L</field> | 1180 | <field name="name">IJsboerke Vanilla 2.5L</field> |
3311 | 1180 | <field name="public_categ_id" ref="ice_cream"/> | 1181 | <field name="pos_categ_id" ref="ice_cream"/> |
3312 | 1181 | <field name="image" type="base64" file="point_of_sale/static/img/ijsboerke_vanille_2,5l-image.jpg"/> | 1182 | <field name="image" type="base64" file="point_of_sale/static/img/ijsboerke_vanille_2,5l-image.jpg"/> |
3313 | 1182 | </record> | 1183 | </record> |
3314 | 1183 | <record id="ijsboerke_stracciatella_2,5l" model="product.product"> | 1184 | <record id="ijsboerke_stracciatella_2,5l" model="product.product"> |
3315 | 1184 | <field name="available_in_pos">True</field> | 1185 | <field name="available_in_pos">True</field> |
3316 | 1185 | <field name="list_price">8.40</field> | 1186 | <field name="list_price">8.40</field> |
3317 | 1186 | <field name="name">IJsboerke Stracciatella 2.5L</field> | 1187 | <field name="name">IJsboerke Stracciatella 2.5L</field> |
3319 | 1187 | <field name="public_categ_id" ref="ice_cream"/> | 1188 | <field name="pos_categ_id" ref="ice_cream"/> |
3320 | 1188 | <field name="image" type="base64" file="point_of_sale/static/img/ijsboerke_stracciatella_2,5l-image.jpg"/> | 1189 | <field name="image" type="base64" file="point_of_sale/static/img/ijsboerke_stracciatella_2,5l-image.jpg"/> |
3321 | 1189 | </record> | 1190 | </record> |
3322 | 1190 | <record id="ijsboerke_dame_blanche_2,5l" model="product.product"> | 1191 | <record id="ijsboerke_dame_blanche_2,5l" model="product.product"> |
3323 | 1191 | <field name="available_in_pos">True</field> | 1192 | <field name="available_in_pos">True</field> |
3324 | 1192 | <field name="list_price">7.60</field> | 1193 | <field name="list_price">7.60</field> |
3325 | 1193 | <field name="name">IJsboerke 2.5L White Lady</field> | 1194 | <field name="name">IJsboerke 2.5L White Lady</field> |
3327 | 1194 | <field name="public_categ_id" ref="ice_cream"/> | 1195 | <field name="pos_categ_id" ref="ice_cream"/> |
3328 | 1195 | <field name="image" type="base64" file="point_of_sale/static/img/ijsboerke_dame_blanche_2,5l-image.jpg"/> | 1196 | <field name="image" type="base64" file="point_of_sale/static/img/ijsboerke_dame_blanche_2,5l-image.jpg"/> |
3329 | 1196 | </record> | 1197 | </record> |
3330 | 1197 | 1198 | ||
3331 | 1198 | 1199 | ||
3332 | === modified file 'point_of_sale/point_of_sale_view.xml' | |||
3333 | --- point_of_sale/point_of_sale_view.xml 2014-05-07 18:29:17 +0000 | |||
3334 | +++ point_of_sale/point_of_sale_view.xml 2014-05-26 16:10:21 +0000 | |||
3335 | @@ -477,13 +477,68 @@ | |||
3336 | 477 | 477 | ||
3337 | 478 | 478 | ||
3338 | 479 | 479 | ||
3345 | 480 | <record id="product_normal_form_view" model="ir.ui.view"> | 480 | <!-- Product Public Categories --> |
3346 | 481 | <field name="name">product.normal.form.inherit</field> | 481 | <record id="product_pos_category_form_view" model="ir.ui.view"> |
3347 | 482 | <field name="model">product.product</field> | 482 | <field name="name">pos.category.form</field> |
3348 | 483 | <field name="inherit_id" ref="stock.view_normal_procurement_locations_form"/> | 483 | <field name="model">pos.category</field> |
3349 | 484 | <field name="arch" type="xml"> | 484 | <field name="arch" type="xml"> |
3350 | 485 | <group name="sale" position="inside"> | 485 | <form string="Pos Categories" version="7.0"> |
3351 | 486 | <sheet> | ||
3352 | 487 | <field name="image_medium" widget='image' class="oe_avatar oe_right"/> | ||
3353 | 488 | <div class="oe_left"> | ||
3354 | 489 | <group> | ||
3355 | 490 | <field name="name"/> | ||
3356 | 491 | <field name="parent_id"/> | ||
3357 | 492 | <field name="sequence"/> | ||
3358 | 493 | </group> | ||
3359 | 494 | </div> | ||
3360 | 495 | </sheet> | ||
3361 | 496 | </form> | ||
3362 | 497 | </field> | ||
3363 | 498 | </record> | ||
3364 | 499 | <record id="product_pos_category_tree_view" model="ir.ui.view"> | ||
3365 | 500 | <field name="name">pos.category.tree</field> | ||
3366 | 501 | <field name="model">pos.category</field> | ||
3367 | 502 | <field name="field_parent" eval="False"/> | ||
3368 | 503 | <field name="arch" type="xml"> | ||
3369 | 504 | <tree string="Product Product Categories"> | ||
3370 | 505 | <field name="sequence" invisible="1"/> | ||
3371 | 506 | <field name="complete_name"/> | ||
3372 | 507 | </tree> | ||
3373 | 508 | </field> | ||
3374 | 509 | </record> | ||
3375 | 510 | <record id="product_pos_category_action" model="ir.actions.act_window"> | ||
3376 | 511 | <field name="name">Pos Product Categories</field> | ||
3377 | 512 | <field name="type">ir.actions.act_window</field> | ||
3378 | 513 | <field name="res_model">pos.category</field> | ||
3379 | 514 | <field name="view_type">form</field> | ||
3380 | 515 | <field name="view_mode">tree,form</field> | ||
3381 | 516 | <field name="view_id" eval="False"/> | ||
3382 | 517 | <field name="help" type="html"> | ||
3383 | 518 | <p class="oe_view_nocontent_create"> | ||
3384 | 519 | Click to define a new category. | ||
3385 | 520 | </p><p> | ||
3386 | 521 | Categories are used to browse your products through the | ||
3387 | 522 | touchscreen interface. | ||
3388 | 523 | </p><p> | ||
3389 | 524 | If you put a photo on the category, the layout of the | ||
3390 | 525 | touchscreen interface will automatically. We suggest not to put | ||
3391 | 526 | a photo on categories for small (1024x768) screens. | ||
3392 | 527 | </p> | ||
3393 | 528 | </field> | ||
3394 | 529 | </record> | ||
3395 | 530 | <menuitem action="product_pos_category_action" id="menu_product_pos_category" parent="menu_point_of_sale_product" sequence="0" /> | ||
3396 | 531 | <!-- END --> | ||
3397 | 532 | |||
3398 | 533 | |||
3399 | 534 | <record id="product_template_form_view" model="ir.ui.view"> | ||
3400 | 535 | <field name="name">product.template.form.inherit</field> | ||
3401 | 536 | <field name="model">product.template</field> | ||
3402 | 537 | <field name="inherit_id" ref="product.product_template_form_view"/> | ||
3403 | 538 | <field name="arch" type="xml"> | ||
3404 | 539 | <group name="website_and_pos" position="inside"> | ||
3405 | 486 | <group name="pos" string="Point of Sale"> | 540 | <group name="pos" string="Point of Sale"> |
3406 | 541 | <field name="pos_categ_id"/> | ||
3407 | 487 | <field name="available_in_pos"/> | 542 | <field name="available_in_pos"/> |
3408 | 488 | <field name="to_weight" /> | 543 | <field name="to_weight" /> |
3409 | 489 | <field name="income_pdt"/> | 544 | <field name="income_pdt"/> |
3410 | @@ -495,9 +550,6 @@ | |||
3411 | 495 | </field> | 550 | </field> |
3412 | 496 | </field> | 551 | </field> |
3413 | 497 | </record> | 552 | </record> |
3414 | 498 | |||
3415 | 499 | <!-- Categories tree view --> | ||
3416 | 500 | <menuitem action="product.product_public_category_action" id="menu_product_public_category" parent="menu_point_of_sale_product" sequence="0" /> | ||
3417 | 501 | <!-- END --> | 553 | <!-- END --> |
3418 | 502 | 554 | ||
3419 | 503 | <menuitem name="Configuration" parent="menu_point_root" | 555 | <menuitem name="Configuration" parent="menu_point_root" |
3420 | 504 | 556 | ||
3421 | === modified file 'point_of_sale/security/ir.model.access.csv' | |||
3422 | --- point_of_sale/security/ir.model.access.csv 2014-02-03 17:30:00 +0000 | |||
3423 | +++ point_of_sale/security/ir.model.access.csv 2014-05-26 16:10:21 +0000 | |||
3424 | @@ -57,5 +57,5 @@ | |||
3425 | 57 | access_pos_session_user,pos.session user,model_pos_session,group_pos_user,1,1,1,0 | 57 | access_pos_session_user,pos.session user,model_pos_session,group_pos_user,1,1,1,0 |
3426 | 58 | access_pos_config_user,pos.config user,model_pos_config,group_pos_user,1,1,1,0 | 58 | access_pos_config_user,pos.config user,model_pos_config,group_pos_user,1,1,1,0 |
3427 | 59 | access_ir_sequence_manager,ir.sequence manager,base.model_ir_sequence,group_pos_manager,1,1,1,1 | 59 | access_ir_sequence_manager,ir.sequence manager,base.model_ir_sequence,group_pos_manager,1,1,1,1 |
3430 | 60 | access_product_category_pos_manager,product.public.category manager,product.model_product_public_category,group_pos_manager,1,1,1,1 | 60 | access_product_category_pos_manager,pos.category manager,model_pos_category,group_pos_manager,1,1,1,1 |
3431 | 61 | access_product_category_pos_user,product.public.category user,product.model_product_public_category,group_pos_user,1,0,0,0 | 61 | access_product_category_pos_user,pos.category user,model_pos_category,group_pos_user,1,0,0,0 |
3432 | 62 | 62 | ||
3433 | === modified file 'point_of_sale/static/src/js/db.js' | |||
3434 | --- point_of_sale/static/src/js/db.js 2014-01-27 16:10:05 +0000 | |||
3435 | +++ point_of_sale/static/src/js/db.js 2014-05-26 16:10:21 +0000 | |||
3436 | @@ -145,7 +145,7 @@ | |||
3437 | 145 | for(var i = 0, len = products.length; i < len; i++){ | 145 | for(var i = 0, len = products.length; i < len; i++){ |
3438 | 146 | var product = products[i]; | 146 | var product = products[i]; |
3439 | 147 | var search_string = this._product_search_string(product); | 147 | var search_string = this._product_search_string(product); |
3441 | 148 | var categ_id = product.public_categ_id ? product.public_categ_id[0] : this.root_category_id; | 148 | var categ_id = product.pos_categ_id ? product.pos_categ_id[0] : this.root_category_id; |
3442 | 149 | if(!stored_categories[categ_id]){ | 149 | if(!stored_categories[categ_id]){ |
3443 | 150 | stored_categories[categ_id] = []; | 150 | stored_categories[categ_id] = []; |
3444 | 151 | } | 151 | } |
3445 | 152 | 152 | ||
3446 | === modified file 'point_of_sale/static/src/js/models.js' | |||
3447 | --- point_of_sale/static/src/js/models.js 2014-03-28 14:57:10 +0000 | |||
3448 | +++ point_of_sale/static/src/js/models.js 2014-05-26 16:10:21 +0000 | |||
3449 | @@ -208,13 +208,13 @@ | |||
3450 | 208 | }).then(function(packagings){ | 208 | }).then(function(packagings){ |
3451 | 209 | self.db.add_packagings(packagings); | 209 | self.db.add_packagings(packagings); |
3452 | 210 | 210 | ||
3454 | 211 | return self.fetch('product.public.category', ['id','name','parent_id','child_id','image']) | 211 | return self.fetch('pos.category', ['id','name','parent_id','child_id','image']) |
3455 | 212 | }).then(function(categories){ | 212 | }).then(function(categories){ |
3456 | 213 | self.db.add_categories(categories); | 213 | self.db.add_categories(categories); |
3457 | 214 | 214 | ||
3458 | 215 | return self.fetch( | 215 | return self.fetch( |
3459 | 216 | 'product.product', | 216 | 'product.product', |
3461 | 217 | ['name', 'list_price','price','public_categ_id', 'taxes_id', 'ean13', 'default_code', | 217 | ['name', 'list_price','price','pos_categ_id', 'taxes_id', 'ean13', 'default_code', |
3462 | 218 | 'to_weight', 'uom_id', 'uos_id', 'uos_coeff', 'mes_type', 'description_sale', 'description'], | 218 | 'to_weight', 'uom_id', 'uos_id', 'uos_coeff', 'mes_type', 'description_sale', 'description'], |
3463 | 219 | [['sale_ok','=',true],['available_in_pos','=',true]], | 219 | [['sale_ok','=',true],['available_in_pos','=',true]], |
3464 | 220 | {pricelist: self.pricelist.id} // context for price | 220 | {pricelist: self.pricelist.id} // context for price |
3465 | 221 | 221 | ||
3466 | === modified file 'point_of_sale/static/src/js/widgets.js' | |||
3467 | --- point_of_sale/static/src/js/widgets.js 2014-04-25 12:22:20 +0000 | |||
3468 | +++ point_of_sale/static/src/js/widgets.js 2014-05-26 16:10:21 +0000 | |||
3469 | @@ -436,7 +436,7 @@ | |||
3470 | 436 | }, | 436 | }, |
3471 | 437 | 437 | ||
3472 | 438 | get_image_url: function(category){ | 438 | get_image_url: function(category){ |
3474 | 439 | return window.location.origin + '/web/binary/image?model=product.public.category&field=image_medium&id='+category.id; | 439 | return window.location.origin + '/web/binary/image?model=pos.category&field=image_medium&id='+category.id; |
3475 | 440 | }, | 440 | }, |
3476 | 441 | 441 | ||
3477 | 442 | render_category: function( category, with_image ){ | 442 | render_category: function( category, with_image ){ |
3478 | 443 | 443 | ||
3479 | === modified file 'product/pricelist.py' | |||
3480 | --- product/pricelist.py 2014-03-17 12:01:26 +0000 | |||
3481 | +++ product/pricelist.py 2014-05-26 16:10:21 +0000 | |||
3482 | @@ -188,10 +188,13 @@ | |||
3483 | 188 | 188 | ||
3484 | 189 | products = map(lambda x: x[0], products_by_qty_by_partner) | 189 | products = map(lambda x: x[0], products_by_qty_by_partner) |
3485 | 190 | currency_obj = self.pool.get('res.currency') | 190 | currency_obj = self.pool.get('res.currency') |
3487 | 191 | product_obj = self.pool.get('product.product') | 191 | product_obj = self.pool.get('product.template') |
3488 | 192 | product_uom_obj = self.pool.get('product.uom') | 192 | product_uom_obj = self.pool.get('product.uom') |
3489 | 193 | price_type_obj = self.pool.get('product.price.type') | 193 | price_type_obj = self.pool.get('product.price.type') |
3490 | 194 | 194 | ||
3491 | 195 | if not products: | ||
3492 | 196 | return {} | ||
3493 | 197 | |||
3494 | 195 | version = False | 198 | version = False |
3495 | 196 | for v in pricelist.version_id: | 199 | for v in pricelist.version_id: |
3496 | 197 | if ((v.date_start is False) or (v.date_start <= date)) and ((v.date_end is False) or (v.date_end >= date)): | 200 | if ((v.date_start is False) or (v.date_start <= date)) and ((v.date_end is False) or (v.date_end >= date)): |
3497 | @@ -207,8 +210,13 @@ | |||
3498 | 207 | categ = categ.parent_id | 210 | categ = categ.parent_id |
3499 | 208 | categ_ids = categ_ids.keys() | 211 | categ_ids = categ_ids.keys() |
3500 | 209 | 212 | ||
3503 | 210 | prod_ids = [x.id for x in products] | 213 | is_product_template = products[0]._name == "product.template" |
3504 | 211 | prod_tmpl_ids = [x.product_tmpl_id.id for x in products] | 214 | if is_product_template: |
3505 | 215 | prod_tmpl_ids = [tmpl.id for tmpl in products] | ||
3506 | 216 | prod_ids = [product.id for product in tmpl.product_variant_ids for tmpl in products] | ||
3507 | 217 | else: | ||
3508 | 218 | prod_ids = [product.id for product in products] | ||
3509 | 219 | prod_tmpl_ids = [product.product_tmpl_id.id for product in products] | ||
3510 | 212 | 220 | ||
3511 | 213 | # Load all rules | 221 | # Load all rules |
3512 | 214 | cr.execute( | 222 | cr.execute( |
3513 | @@ -234,10 +242,17 @@ | |||
3514 | 234 | for rule in items: | 242 | for rule in items: |
3515 | 235 | if rule.min_quantity and qty<rule.min_quantity: | 243 | if rule.min_quantity and qty<rule.min_quantity: |
3516 | 236 | continue | 244 | continue |
3521 | 237 | if rule.product_tmpl_id and product.product_tmpl_id.id<>rule.product_tmpl_id.id: | 245 | if is_product_template: |
3522 | 238 | continue | 246 | if rule.product_tmpl_id and product.id<>rule.product_tmpl_id.id: |
3523 | 239 | if rule.product_id and product.id<>rule.product_id.id: | 247 | continue |
3524 | 240 | continue | 248 | if rule.product_id: |
3525 | 249 | continue | ||
3526 | 250 | else: | ||
3527 | 251 | if rule.product_tmpl_id and product.product_tmpl_id.id<>rule.product_tmpl_id.id: | ||
3528 | 252 | continue | ||
3529 | 253 | if rule.product_id and product.id<>rule.product_id.id: | ||
3530 | 254 | continue | ||
3531 | 255 | |||
3532 | 241 | if rule.categ_id: | 256 | if rule.categ_id: |
3533 | 242 | cat = product.categ_id | 257 | cat = product.categ_id |
3534 | 243 | while cat: | 258 | while cat: |
3535 | 244 | 259 | ||
3536 | === modified file 'product/product.py' | |||
3537 | --- product/product.py 2014-05-09 07:33:15 +0000 | |||
3538 | +++ product/product.py 2014-05-26 16:10:21 +0000 | |||
3539 | @@ -29,6 +29,7 @@ | |||
3540 | 29 | from openerp.osv import osv, fields | 29 | from openerp.osv import osv, fields |
3541 | 30 | from openerp.tools.translate import _ | 30 | from openerp.tools.translate import _ |
3542 | 31 | from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT | 31 | from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT |
3543 | 32 | import psycopg2 | ||
3544 | 32 | 33 | ||
3545 | 33 | import openerp.addons.decimal_precision as dp | 34 | import openerp.addons.decimal_precision as dp |
3546 | 34 | 35 | ||
3547 | @@ -316,69 +317,78 @@ | |||
3548 | 316 | } | 317 | } |
3549 | 317 | 318 | ||
3550 | 318 | 319 | ||
3578 | 319 | class product_public_category(osv.osv): | 320 | #---------------------------------------------------------- |
3579 | 320 | _name = "product.public.category" | 321 | # Attributes / Variants |
3580 | 321 | _description = "Public Category" | 322 | #---------------------------------------------------------- |
3581 | 322 | _order = "sequence, name" | 323 | class product_attribute(osv.osv): |
3582 | 323 | 324 | _name = "product.attribute" | |
3583 | 324 | _constraints = [ | 325 | _description = "Product Attribute" |
3584 | 325 | (osv.osv._check_recursion, 'Error ! You cannot create recursive categories.', ['parent_id']) | 326 | _columns = { |
3585 | 326 | ] | 327 | 'name': fields.char('Name', translate=True, required=True), |
3586 | 327 | 328 | 'value_ids': fields.one2many('product.attribute.value', 'attribute_id', 'Values'), | |
3587 | 328 | def name_get(self, cr, uid, ids, context=None): | 329 | } |
3588 | 329 | if not len(ids): | 330 | |
3589 | 330 | return [] | 331 | class product_attribute_value(osv.osv): |
3590 | 331 | reads = self.read(cr, uid, ids, ['name','parent_id'], context=context) | 332 | _name = "product.attribute.value" |
3591 | 332 | res = [] | 333 | _order = 'sequence' |
3592 | 333 | for record in reads: | 334 | def _get_price_extra(self, cr, uid, ids, name, args, context=None): |
3593 | 334 | name = record['name'] | 335 | result = dict.fromkeys(ids, 0) |
3594 | 335 | if record['parent_id']: | 336 | if not context.get('active_id'): |
3595 | 336 | name = record['parent_id'][1]+' / '+name | 337 | return result |
3596 | 337 | res.append((record['id'], name)) | 338 | |
3570 | 338 | return res | ||
3571 | 339 | |||
3572 | 340 | def _name_get_fnc(self, cr, uid, ids, prop, unknow_none, context=None): | ||
3573 | 341 | res = self.name_get(cr, uid, ids, context=context) | ||
3574 | 342 | return dict(res) | ||
3575 | 343 | |||
3576 | 344 | def _get_image(self, cr, uid, ids, name, args, context=None): | ||
3577 | 345 | result = dict.fromkeys(ids, False) | ||
3597 | 346 | for obj in self.browse(cr, uid, ids, context=context): | 339 | for obj in self.browse(cr, uid, ids, context=context): |
3599 | 347 | result[obj.id] = tools.image_get_resized_images(obj.image) | 340 | for price_id in obj.price_ids: |
3600 | 341 | if price_id.product_tmpl_id.id == context.get('active_id'): | ||
3601 | 342 | result[obj.id] = price_id.price_extra | ||
3602 | 343 | break | ||
3603 | 348 | return result | 344 | return result |
3637 | 349 | 345 | ||
3638 | 350 | def _set_image(self, cr, uid, id, name, value, args, context=None): | 346 | def _set_price_extra(self, cr, uid, id, name, value, args, context=None): |
3639 | 351 | return self.write(cr, uid, [id], {'image': tools.image_resize_image_big(value)}, context=context) | 347 | if 'active_id' not in context: |
3640 | 352 | 348 | return None | |
3641 | 353 | _columns = { | 349 | p_obj = self.pool['product.attribute.price'] |
3642 | 354 | 'name': fields.char('Name', required=True, translate=True), | 350 | p_ids = p_obj.search(cr, uid, [('value_id', '=', id), ('product_tmpl_id', '=', context['active_id'])], context=context) |
3643 | 355 | 'complete_name': fields.function(_name_get_fnc, type="char", string='Name'), | 351 | if p_ids: |
3644 | 356 | 'parent_id': fields.many2one('product.public.category','Parent Category', select=True), | 352 | p_obj.write(cr, uid, p_ids, {'price_extra': value}, context=context) |
3645 | 357 | 'child_id': fields.one2many('product.public.category', 'parent_id', string='Children Categories'), | 353 | else: |
3646 | 358 | 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of product categories."), | 354 | p_obj.create(cr, uid, p_ids, { |
3647 | 359 | 355 | 'product_tmpl_id': context['active_id'], | |
3648 | 360 | # NOTE: there is no 'default image', because by default we don't show thumbnails for categories. However if we have a thumbnail | 356 | 'value_id': id, |
3649 | 361 | # for at least one category, then we display a default image on the other, so that the buttons have consistent styling. | 357 | 'price_extra': value, |
3650 | 362 | # In this case, the default image is set by the js code. | 358 | }, context=context) |
3651 | 363 | # NOTE2: image: all image fields are base64 encoded and PIL-supported | 359 | |
3652 | 364 | 'image': fields.binary("Image", | 360 | _columns = { |
3653 | 365 | help="This field holds the image used as image for the cateogry, limited to 1024x1024px."), | 361 | 'sequence': fields.integer('Sequence', help="Determine the display order"), |
3654 | 366 | 'image_medium': fields.function(_get_image, fnct_inv=_set_image, | 362 | 'name': fields.char('Value', translate=True, required=True), |
3655 | 367 | string="Medium-sized image", type="binary", multi="_get_image", | 363 | 'attribute_id': fields.many2one('product.attribute', 'Attribute', required=True), |
3656 | 368 | store={ | 364 | 'product_ids': fields.many2many('product.product', id1='att_id', id2='prod_id', string='Variants', readonly=True), |
3657 | 369 | 'product.public.category': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10), | 365 | 'price_extra': fields.function(_get_price_extra, type='float', string='Variant Price Extra', |
3658 | 370 | }, | 366 | fnct_inv=_set_price_extra, |
3659 | 371 | help="Medium-sized image of the category. It is automatically "\ | 367 | digits_compute=dp.get_precision('Product Price'), |
3660 | 372 | "resized as a 128x128px image, with aspect ratio preserved. "\ | 368 | help="Price Extra: Extra price for the variant with this attribute value on sale price. eg. 200 price extra, 1000 + 200 = 1200."), |
3661 | 373 | "Use this field in form views or some kanban views."), | 369 | 'price_ids': fields.one2many('product.attribute.price', 'value_id', string='Variant Prices', readonly=True), |
3662 | 374 | 'image_small': fields.function(_get_image, fnct_inv=_set_image, | 370 | } |
3663 | 375 | string="Smal-sized image", type="binary", multi="_get_image", | 371 | _sql_constraints = [ |
3664 | 376 | store={ | 372 | ('value_company_uniq', 'unique (name,attribute_id)', 'This attribute value already exists !') |
3665 | 377 | 'product.public.category': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10), | 373 | ] |
3666 | 378 | }, | 374 | _defaults = { |
3667 | 379 | help="Small-sized image of the category. It is automatically "\ | 375 | 'price_extra': lambda *a: 0.0, |
3668 | 380 | "resized as a 64x64px image, with aspect ratio preserved. "\ | 376 | } |
3669 | 381 | "Use this field anywhere a small image is required."), | 377 | |
3670 | 378 | class product_attribute_price(osv.osv): | ||
3671 | 379 | _name = "product.attribute.price" | ||
3672 | 380 | _columns = { | ||
3673 | 381 | 'product_tmpl_id': fields.many2one('product.template', 'Product Template', required=True), | ||
3674 | 382 | 'value_id': fields.many2one('product.attribute.value', 'Product Attribute Value', required=True), | ||
3675 | 383 | 'price_extra': fields.float('Price Extra', digits_compute=dp.get_precision('Product Price')), | ||
3676 | 384 | } | ||
3677 | 385 | |||
3678 | 386 | class product_attribute_line(osv.osv): | ||
3679 | 387 | _name = "product.attribute.line" | ||
3680 | 388 | _columns = { | ||
3681 | 389 | 'product_tmpl_id': fields.many2one('product.template', 'Product Template', required=True), | ||
3682 | 390 | 'attribute_id': fields.many2one('product.attribute', 'Attribute', required=True), | ||
3683 | 391 | 'value_ids': fields.many2many('product.attribute.value', id1='line_id', id2='val_id', string='Product Attribute Value'), | ||
3684 | 382 | } | 392 | } |
3685 | 383 | 393 | ||
3686 | 384 | 394 | ||
3687 | @@ -399,6 +409,38 @@ | |||
3688 | 399 | def _set_image(self, cr, uid, id, name, value, args, context=None): | 409 | def _set_image(self, cr, uid, id, name, value, args, context=None): |
3689 | 400 | return self.write(cr, uid, [id], {'image': tools.image_resize_image_big(value)}, context=context) | 410 | return self.write(cr, uid, [id], {'image': tools.image_resize_image_big(value)}, context=context) |
3690 | 401 | 411 | ||
3691 | 412 | def _is_product_variant(self, cr, uid, ids, name, arg, context=None): | ||
3692 | 413 | prod = self.pool.get('product.product') | ||
3693 | 414 | res = dict.fromkeys(ids, False) | ||
3694 | 415 | ctx = dict(context, active_test=True) | ||
3695 | 416 | for product in self.browse(cr, uid, ids, context=context): | ||
3696 | 417 | res[product.id] = prod.search(cr, uid, [('product_tmpl_id','=',product.id)], context=ctx, count=True) == 1 | ||
3697 | 418 | return res | ||
3698 | 419 | |||
3699 | 420 | def _product_template_price(self, cr, uid, ids, name, arg, context=None): | ||
3700 | 421 | plobj = self.pool.get('product.pricelist') | ||
3701 | 422 | res = {} | ||
3702 | 423 | quantity = context.get('quantity') or 1.0 | ||
3703 | 424 | pricelist = context.get('pricelist', False) | ||
3704 | 425 | partner = context.get('partner', False) | ||
3705 | 426 | if pricelist: | ||
3706 | 427 | # Support context pricelists specified as display_name or ID for compatibility | ||
3707 | 428 | if isinstance(pricelist, basestring): | ||
3708 | 429 | pricelist_ids = plobj.name_search( | ||
3709 | 430 | cr, uid, pricelist, operator='=', context=context, limit=1) | ||
3710 | 431 | pricelist = pricelist_ids[0][0] if pricelist_ids else pricelist | ||
3711 | 432 | |||
3712 | 433 | if isinstance(pricelist, (int, long)): | ||
3713 | 434 | products = self.browse(cr, uid, ids, context=context) | ||
3714 | 435 | qtys = map(lambda x: (x, quantity, partner), products) | ||
3715 | 436 | pl = plobj.browse(cr, uid, pricelist, context=context) | ||
3716 | 437 | price = plobj._price_get_multi(cr,uid, pl, qtys, context=context) | ||
3717 | 438 | for id in ids: | ||
3718 | 439 | res[id] = price.get(id, 0.0) | ||
3719 | 440 | for id in ids: | ||
3720 | 441 | res.setdefault(id, 0.0) | ||
3721 | 442 | return res | ||
3722 | 443 | |||
3723 | 402 | def get_history_price(self, cr, uid, product_tmpl, company_id, date=None, context=None): | 444 | def get_history_price(self, cr, uid, product_tmpl, company_id, date=None, context=None): |
3724 | 403 | if context is None: | 445 | if context is None: |
3725 | 404 | context = {} | 446 | context = {} |
3726 | @@ -421,6 +463,12 @@ | |||
3727 | 421 | 'company_id': company_id, | 463 | 'company_id': company_id, |
3728 | 422 | }, context=context) | 464 | }, context=context) |
3729 | 423 | 465 | ||
3730 | 466 | def _get_product_variant_count(self, cr, uid, ids, name, arg, context=None): | ||
3731 | 467 | res = {} | ||
3732 | 468 | for product in self.browse(cr, uid, ids): | ||
3733 | 469 | res[product.id] = len(product.product_variant_ids) | ||
3734 | 470 | return res | ||
3735 | 471 | |||
3736 | 424 | _columns = { | 472 | _columns = { |
3737 | 425 | 'name': fields.char('Name', required=True, translate=True, select=True), | 473 | 'name': fields.char('Name', required=True, translate=True, select=True), |
3738 | 426 | 'product_manager': fields.many2one('res.users','Product Manager'), | 474 | 'product_manager': fields.many2one('res.users','Product Manager'), |
3739 | @@ -434,9 +482,10 @@ | |||
3740 | 434 | "This description will be copied to every Sale Order, Delivery Order and Customer Invoice/Refund"), | 482 | "This description will be copied to every Sale Order, Delivery Order and Customer Invoice/Refund"), |
3741 | 435 | 'type': fields.selection([('consu', 'Consumable'),('service','Service')], 'Product Type', required=True, help="Consumable are product where you don't manage stock, a service is a non-material product provided by a company or an individual."), | 483 | 'type': fields.selection([('consu', 'Consumable'),('service','Service')], 'Product Type', required=True, help="Consumable are product where you don't manage stock, a service is a non-material product provided by a company or an individual."), |
3742 | 436 | 'rental': fields.boolean('Can be Rent'), | 484 | 'rental': fields.boolean('Can be Rent'), |
3745 | 437 | 'categ_id': fields.many2one('product.category','Category', required=True, change_default=True, domain="[('type','=','normal')]" ,help="Select category for the current product"), | 485 | 'categ_id': fields.many2one('product.category','Internal Category', required=True, change_default=True, domain="[('type','=','normal')]" ,help="Select category for the current product"), |
3746 | 438 | 'public_categ_id': fields.many2one('product.public.category','Public Category', help="Those categories are used to group similar products for public sales (eg.: point of sale, e-commerce)."), | 486 | 'price': fields.function(_product_template_price, type='float', string='Price', digits_compute=dp.get_precision('Product Price')), |
3747 | 439 | 'list_price': fields.float('Sale Price', digits_compute=dp.get_precision('Product Price'), help="Base price to compute the customer price. Sometimes called the catalog price."), | 487 | 'list_price': fields.float('Sale Price', digits_compute=dp.get_precision('Product Price'), help="Base price to compute the customer price. Sometimes called the catalog price."), |
3748 | 488 | 'lst_price' : fields.related('list_price', type="float", string='Public Price', digits_compute=dp.get_precision('Product Price')), | ||
3749 | 440 | 'standard_price': fields.property(type = 'float', digits_compute=dp.get_precision('Product Price'), | 489 | 'standard_price': fields.property(type = 'float', digits_compute=dp.get_precision('Product Price'), |
3750 | 441 | help="Cost price of the product template used for standard stock valuation in accounting and used as a base price on purchase orders.", | 490 | help="Cost price of the product template used for standard stock valuation in accounting and used as a base price on purchase orders.", |
3751 | 442 | groups="base.group_user", string="Cost Price"), | 491 | groups="base.group_user", string="Cost Price"), |
3752 | @@ -445,6 +494,7 @@ | |||
3753 | 445 | 'weight_net': fields.float('Net Weight', digits_compute=dp.get_precision('Stock Weight'), help="The net weight in Kg."), | 494 | 'weight_net': fields.float('Net Weight', digits_compute=dp.get_precision('Stock Weight'), help="The net weight in Kg."), |
3754 | 446 | 'warranty': fields.float('Warranty'), | 495 | 'warranty': fields.float('Warranty'), |
3755 | 447 | 'sale_ok': fields.boolean('Can be Sold', help="Specify if the product can be selected in a sales order line."), | 496 | 'sale_ok': fields.boolean('Can be Sold', help="Specify if the product can be selected in a sales order line."), |
3756 | 497 | 'pricelist_id': fields.dummy(string='Pricelist', relation='product.pricelist', type='many2one'), | ||
3757 | 448 | 'state': fields.selection([('',''), | 498 | 'state': fields.selection([('',''), |
3758 | 449 | ('draft', 'In Development'), | 499 | ('draft', 'In Development'), |
3759 | 450 | ('sellable','Normal'), | 500 | ('sellable','Normal'), |
3760 | @@ -458,13 +508,12 @@ | |||
3761 | 458 | help='Coefficient to convert default Unit of Measure to Unit of Sale\n' | 508 | help='Coefficient to convert default Unit of Measure to Unit of Sale\n' |
3762 | 459 | ' uos = uom * coeff'), | 509 | ' uos = uom * coeff'), |
3763 | 460 | 'mes_type': fields.selection((('fixed', 'Fixed'), ('variable', 'Variable')), 'Measure Type'), | 510 | 'mes_type': fields.selection((('fixed', 'Fixed'), ('variable', 'Variable')), 'Measure Type'), |
3764 | 461 | 'seller_ids': fields.one2many('product.supplierinfo', 'product_tmpl_id', 'Supplier'), | ||
3765 | 462 | 'company_id': fields.many2one('res.company', 'Company', select=1), | 511 | 'company_id': fields.many2one('res.company', 'Company', select=1), |
3766 | 463 | # image: all image fields are base64 encoded and PIL-supported | 512 | # image: all image fields are base64 encoded and PIL-supported |
3767 | 464 | 'image': fields.binary("Image", | 513 | 'image': fields.binary("Image", |
3768 | 465 | help="This field holds the image used as image for the product, limited to 1024x1024px."), | 514 | help="This field holds the image used as image for the product, limited to 1024x1024px."), |
3769 | 466 | 'image_medium': fields.function(_get_image, fnct_inv=_set_image, | 515 | 'image_medium': fields.function(_get_image, fnct_inv=_set_image, |
3771 | 467 | string="Medium-sized image", type="binary", multi="_get_image", | 516 | string="Medium-sized image", type="binary", multi="_get_image", |
3772 | 468 | store={ | 517 | store={ |
3773 | 469 | 'product.template': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10), | 518 | 'product.template': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10), |
3774 | 470 | }, | 519 | }, |
3775 | @@ -479,13 +528,64 @@ | |||
3776 | 479 | help="Small-sized image of the product. It is automatically "\ | 528 | help="Small-sized image of the product. It is automatically "\ |
3777 | 480 | "resized as a 64x64px image, with aspect ratio preserved. "\ | 529 | "resized as a 64x64px image, with aspect ratio preserved. "\ |
3778 | 481 | "Use this field anywhere a small image is required."), | 530 | "Use this field anywhere a small image is required."), |
3780 | 482 | 'product_variant_ids': fields.one2many('product.product', 'product_tmpl_id', 'Product Variants', required=True), | 531 | |
3781 | 532 | 'packaging' : fields.one2many('product.packaging', 'product_id', 'Logistical Units', | ||
3782 | 533 | help="Gives the different ways to package the same product. This has no impact on the picking order and is mainly used if you use the EDI module."), | ||
3783 | 534 | |||
3784 | 535 | 'seller_ids': fields.one2many('product.supplierinfo', 'product_tmpl_id', 'Supplier'), | ||
3785 | 536 | 'seller_delay': fields.related('seller_ids','delay', type='integer', string='Supplier Lead Time', | ||
3786 | 537 | help="This is the average delay in days between the purchase order confirmation and the reception of goods for this product and for the default supplier. It is used by the scheduler to order requests based on reordering delays."), | ||
3787 | 538 | 'seller_qty': fields.related('seller_ids','qty', type='float', string='Supplier Quantity', | ||
3788 | 539 | help="This is minimum quantity to purchase from Main Supplier."), | ||
3789 | 540 | 'seller_id': fields.related('seller_ids','name', type='many2one', relation='res.partner', string='Main Supplier', | ||
3790 | 541 | help="Main Supplier who has highest priority in Supplier List."), | ||
3791 | 542 | |||
3792 | 543 | 'active': fields.boolean('Active', help="If unchecked, it will allow you to hide the product without removing it."), | ||
3793 | 544 | 'color': fields.integer('Color Index'), | ||
3794 | 545 | 'is_product_variant': fields.function( _is_product_variant, type='boolean', string='Only one product variant'), | ||
3795 | 546 | |||
3796 | 547 | 'variant_ids': fields.one2many('product.attribute.line', 'product_tmpl_id', 'Product Variants'), | ||
3797 | 548 | 'product_variant_ids': fields.one2many('product.product', 'product_tmpl_id', 'Products', required=True), | ||
3798 | 549 | 'product_variant_count': fields.function( _get_product_variant_count, type='integer', string='Product Variant Number'), | ||
3799 | 550 | |||
3800 | 551 | # related to display product product information if is_product_variant | ||
3801 | 552 | 'ean13': fields.related('product_variant_ids', 'ean13', type='char', string='EAN13 Barcode'), | ||
3802 | 553 | 'default_code': fields.related('product_variant_ids', 'default_code', type='char', string='Internal Reference'), | ||
3803 | 483 | } | 554 | } |
3804 | 484 | 555 | ||
3805 | 556 | def _price_get_list_price(self, product): | ||
3806 | 557 | return 0.0 | ||
3807 | 558 | |||
3808 | 559 | def _price_get(self, cr, uid, products, ptype='list_price', context=None): | ||
3809 | 560 | if context is None: | ||
3810 | 561 | context = {} | ||
3811 | 562 | |||
3812 | 563 | if 'currency_id' in context: | ||
3813 | 564 | pricetype_obj = self.pool.get('product.price.type') | ||
3814 | 565 | price_type_id = pricetype_obj.search(cr, uid, [('field','=',ptype)])[0] | ||
3815 | 566 | price_type_currency_id = pricetype_obj.browse(cr,uid,price_type_id).currency_id.id | ||
3816 | 567 | |||
3817 | 568 | res = {} | ||
3818 | 569 | product_uom_obj = self.pool.get('product.uom') | ||
3819 | 570 | for product in products: | ||
3820 | 571 | res[product.id] = product[ptype] or 0.0 | ||
3821 | 572 | if ptype == 'list_price': | ||
3822 | 573 | res[product.id] += product._name == "product.product" and product.price_extra or 0.0 | ||
3823 | 574 | if 'uom' in context: | ||
3824 | 575 | uom = product.uom_id or product.uos_id | ||
3825 | 576 | res[product.id] = product_uom_obj._compute_price(cr, uid, | ||
3826 | 577 | uom.id, res[product.id], context['uom']) | ||
3827 | 578 | # Convert from price_type currency to asked one | ||
3828 | 579 | if 'currency_id' in context: | ||
3829 | 580 | # Take the price_type currency from the product field | ||
3830 | 581 | # This is right cause a field cannot be in more than one currency | ||
3831 | 582 | res[product.id] = self.pool.get('res.currency').compute(cr, uid, price_type_currency_id, | ||
3832 | 583 | context['currency_id'], res[product.id],context=context) | ||
3833 | 584 | |||
3834 | 585 | return res | ||
3835 | 586 | |||
3836 | 485 | def _get_uom_id(self, cr, uid, *args): | 587 | def _get_uom_id(self, cr, uid, *args): |
3840 | 486 | cr.execute('select id from product_uom order by id limit 1') | 588 | return self.pool["product.uom"].search(cr, uid, [], limit=1, order='id')[0] |
3838 | 487 | res = cr.fetchone() | ||
3839 | 488 | return res and res[0] or False | ||
3841 | 489 | 589 | ||
3842 | 490 | def _default_category(self, cr, uid, context=None): | 590 | def _default_category(self, cr, uid, context=None): |
3843 | 491 | if context is None: | 591 | if context is None: |
3844 | @@ -505,9 +605,65 @@ | |||
3845 | 505 | return {'value': {'uom_po_id': uom_id}} | 605 | return {'value': {'uom_po_id': uom_id}} |
3846 | 506 | return {} | 606 | return {} |
3847 | 507 | 607 | ||
3848 | 608 | def create_variant_ids(self, cr, uid, ids, context=None): | ||
3849 | 609 | product_obj = self.pool.get("product.product") | ||
3850 | 610 | ctx = context and context.copy() or {} | ||
3851 | 611 | |||
3852 | 612 | if ctx.get("create_product_variant"): | ||
3853 | 613 | return None | ||
3854 | 614 | |||
3855 | 615 | ctx.update(active_test=False, create_product_variant=True) | ||
3856 | 616 | |||
3857 | 617 | tmpl_ids = self.browse(cr, uid, ids, context=ctx) | ||
3858 | 618 | for tmpl_id in tmpl_ids: | ||
3859 | 619 | |||
3860 | 620 | # list of values combination | ||
3861 | 621 | all_variants = [[]] | ||
3862 | 622 | for variant_id in tmpl_id.variant_ids: | ||
3863 | 623 | if len(variant_id.value_ids) > 1: | ||
3864 | 624 | temp_variants = [] | ||
3865 | 625 | for value_id in variant_id.value_ids: | ||
3866 | 626 | for variant in all_variants: | ||
3867 | 627 | temp_variants.append(variant + [int(value_id)]) | ||
3868 | 628 | all_variants = temp_variants | ||
3869 | 629 | |||
3870 | 630 | # check product | ||
3871 | 631 | variants_active_ids = [] | ||
3872 | 632 | variants_inactive = [] | ||
3873 | 633 | for product_id in tmpl_id.product_variant_ids: | ||
3874 | 634 | variants = map(int,product_id.variant_ids) | ||
3875 | 635 | if variants in all_variants: | ||
3876 | 636 | variants_active_ids.append(product_id.id) | ||
3877 | 637 | all_variants.pop(all_variants.index(variants)) | ||
3878 | 638 | # TODO all write in same time | ||
3879 | 639 | if product_id.active: | ||
3880 | 640 | product_id.write({'active': True}, context=ctx) | ||
3881 | 641 | else: | ||
3882 | 642 | variants_inactive.append(product_id) | ||
3883 | 643 | |||
3884 | 644 | # create new product | ||
3885 | 645 | for variant_ids in all_variants: | ||
3886 | 646 | values = { | ||
3887 | 647 | 'product_tmpl_id': tmpl_id.id, | ||
3888 | 648 | 'variant_ids': [(6, 0, variant_ids)] | ||
3889 | 649 | } | ||
3890 | 650 | id = product_obj.create(cr, uid, values, context=ctx) | ||
3891 | 651 | variants_active_ids.append(id) | ||
3892 | 652 | |||
3893 | 653 | # unlink or inactive product | ||
3894 | 654 | for variant_id in map(int,variants_inactive): | ||
3895 | 655 | try: | ||
3896 | 656 | with cr.savepoint(): | ||
3897 | 657 | product_obj.unlink(cr, uid, [variant_id], context=ctx) | ||
3898 | 658 | except (psycopg2.Error, osv.except_osv): | ||
3899 | 659 | product_obj.write(cr, uid, [variant_id], {'active': False}, context=ctx) | ||
3900 | 660 | pass | ||
3901 | 661 | return True | ||
3902 | 662 | |||
3903 | 508 | def create(self, cr, uid, vals, context=None): | 663 | def create(self, cr, uid, vals, context=None): |
3904 | 509 | ''' Store the initial standard price in order to be able to retrieve the cost of a product template for a given date''' | 664 | ''' Store the initial standard price in order to be able to retrieve the cost of a product template for a given date''' |
3905 | 510 | product_template_id = super(product_template, self).create(cr, uid, vals, context=context) | 665 | product_template_id = super(product_template, self).create(cr, uid, vals, context=context) |
3906 | 666 | self.create_variant_ids(cr, uid, [product_template_id], context=context) | ||
3907 | 511 | self._set_standard_price(cr, uid, product_template_id, vals.get('standard_price', 0.0), context=context) | 667 | self._set_standard_price(cr, uid, product_template_id, vals.get('standard_price', 0.0), context=context) |
3908 | 512 | return product_template_id | 668 | return product_template_id |
3909 | 513 | 669 | ||
3910 | @@ -524,7 +680,15 @@ | |||
3911 | 524 | if 'standard_price' in vals: | 680 | if 'standard_price' in vals: |
3912 | 525 | for prod_template_id in ids: | 681 | for prod_template_id in ids: |
3913 | 526 | self._set_standard_price(cr, uid, prod_template_id, vals['standard_price'], context=context) | 682 | self._set_standard_price(cr, uid, prod_template_id, vals['standard_price'], context=context) |
3915 | 527 | return super(product_template, self).write(cr, uid, ids, vals, context=context) | 683 | if 'active' in vals: |
3916 | 684 | product_ids = [] | ||
3917 | 685 | for product in self.browse(cr, uid, ids, context=context): | ||
3918 | 686 | product_ids = map(int, product.product_variant_ids) | ||
3919 | 687 | self.write(cr, uid, product_ids, {'active': vals.get('active')}, context=context) | ||
3920 | 688 | res = super(product_template, self).write(cr, uid, ids, vals, context=context) | ||
3921 | 689 | if 'variant_ids' in vals: | ||
3922 | 690 | self.create_variant_ids(cr, uid, ids, context=context) | ||
3923 | 691 | return res | ||
3924 | 528 | 692 | ||
3925 | 529 | def copy(self, cr, uid, id, default=None, context=None): | 693 | def copy(self, cr, uid, id, default=None, context=None): |
3926 | 530 | if default is None: | 694 | if default is None: |
3927 | @@ -544,6 +708,7 @@ | |||
3928 | 544 | 'mes_type': 'fixed', | 708 | 'mes_type': 'fixed', |
3929 | 545 | 'categ_id' : _default_category, | 709 | 'categ_id' : _default_category, |
3930 | 546 | 'type' : 'consu', | 710 | 'type' : 'consu', |
3931 | 711 | 'active': lambda *a: 1, | ||
3932 | 547 | } | 712 | } |
3933 | 548 | 713 | ||
3934 | 549 | def _check_uom(self, cursor, user, ids, context=None): | 714 | def _check_uom(self, cursor, user, ids, context=None): |
3935 | @@ -579,6 +744,32 @@ | |||
3936 | 579 | _inherit = ['mail.thread'] | 744 | _inherit = ['mail.thread'] |
3937 | 580 | _order = 'default_code,name_template' | 745 | _order = 'default_code,name_template' |
3938 | 581 | 746 | ||
3939 | 747 | def _product_price(self, cr, uid, ids, name, arg, context=None): | ||
3940 | 748 | plobj = self.pool.get('product.pricelist') | ||
3941 | 749 | res = {} | ||
3942 | 750 | if context is None: | ||
3943 | 751 | context = {} | ||
3944 | 752 | quantity = context.get('quantity') or 1.0 | ||
3945 | 753 | pricelist = context.get('pricelist', False) | ||
3946 | 754 | partner = context.get('partner', False) | ||
3947 | 755 | if pricelist: | ||
3948 | 756 | # Support context pricelists specified as display_name or ID for compatibility | ||
3949 | 757 | if isinstance(pricelist, basestring): | ||
3950 | 758 | pricelist_ids = plobj.name_search( | ||
3951 | 759 | cr, uid, pricelist, operator='=', context=context, limit=1) | ||
3952 | 760 | pricelist = pricelist_ids[0][0] if pricelist_ids else pricelist | ||
3953 | 761 | |||
3954 | 762 | if isinstance(pricelist, (int, long)): | ||
3955 | 763 | products = self.browse(cr, uid, ids, context=context) | ||
3956 | 764 | qtys = map(lambda x: (x, quantity, partner), products) | ||
3957 | 765 | pl = plobj.browse(cr, uid, pricelist, context=context) | ||
3958 | 766 | price = plobj._price_get_multi(cr,uid, pl, qtys, context=context) | ||
3959 | 767 | for id in ids: | ||
3960 | 768 | res[id] = price.get(id, 0.0) | ||
3961 | 769 | for id in ids: | ||
3962 | 770 | res.setdefault(id, 0.0) | ||
3963 | 771 | return res | ||
3964 | 772 | |||
3965 | 582 | def view_header_get(self, cr, uid, view_id, view_type, context=None): | 773 | def view_header_get(self, cr, uid, view_id, view_type, context=None): |
3966 | 583 | if context is None: | 774 | if context is None: |
3967 | 584 | context = {} | 775 | context = {} |
3968 | @@ -587,37 +778,11 @@ | |||
3969 | 587 | return _('Products: ') + self.pool.get('product.category').browse(cr, uid, context['categ_id'], context=context).name | 778 | return _('Products: ') + self.pool.get('product.category').browse(cr, uid, context['categ_id'], context=context).name |
3970 | 588 | return res | 779 | return res |
3971 | 589 | 780 | ||
3972 | 590 | def _product_price(self, cr, uid, ids, name, arg, context=None): | ||
3973 | 591 | plobj = self.pool.get('product.pricelist') | ||
3974 | 592 | res = {} | ||
3975 | 593 | if context is None: | ||
3976 | 594 | context = {} | ||
3977 | 595 | quantity = context.get('quantity') or 1.0 | ||
3978 | 596 | pricelist = context.get('pricelist', False) | ||
3979 | 597 | partner = context.get('partner', False) | ||
3980 | 598 | if pricelist: | ||
3981 | 599 | # Support context pricelists specified as display_name or ID for compatibility | ||
3982 | 600 | if isinstance(pricelist, basestring): | ||
3983 | 601 | pricelist_ids = plobj.name_search( | ||
3984 | 602 | cr, uid, pricelist, operator='=', context=context, limit=1) | ||
3985 | 603 | pricelist = pricelist_ids[0][0] if pricelist_ids else pricelist | ||
3986 | 604 | |||
3987 | 605 | if isinstance(pricelist, (int, long)): | ||
3988 | 606 | products = self.browse(cr, uid, ids, context=context) | ||
3989 | 607 | qtys = map(lambda x: (x, quantity, partner), products) | ||
3990 | 608 | pl = plobj.browse(cr, uid, pricelist, context=context) | ||
3991 | 609 | price = plobj._price_get_multi(cr,uid, pl, qtys, context=context) | ||
3992 | 610 | for id in ids: | ||
3993 | 611 | res[id] = price.get(id, 0.0) | ||
3994 | 612 | for id in ids: | ||
3995 | 613 | res.setdefault(id, 0.0) | ||
3996 | 614 | return res | ||
3997 | 615 | |||
3998 | 616 | def _product_lst_price(self, cr, uid, ids, name, arg, context=None): | 781 | def _product_lst_price(self, cr, uid, ids, name, arg, context=None): |
3999 | 617 | res = {} | 782 | res = {} |
4000 | 618 | product_uom_obj = self.pool.get('product.uom') | 783 | product_uom_obj = self.pool.get('product.uom') |
4003 | 619 | for id in ids: | 784 | res = dict.fromkeys(ids, 0.0) |
4004 | 620 | res.setdefault(id, 0.0) | 785 | |
4005 | 621 | for product in self.browse(cr, uid, ids, context=context): | 786 | for product in self.browse(cr, uid, ids, context=context): |
4006 | 622 | if 'uom' in context: | 787 | if 'uom' in context: |
4007 | 623 | uom = product.uos_id or product.uom_id | 788 | uom = product.uos_id or product.uom_id |
4008 | @@ -625,20 +790,17 @@ | |||
4009 | 625 | uom.id, product.list_price, context['uom']) | 790 | uom.id, product.list_price, context['uom']) |
4010 | 626 | else: | 791 | else: |
4011 | 627 | res[product.id] = product.list_price | 792 | res[product.id] = product.list_price |
4013 | 628 | res[product.id] = (res[product.id] or 0.0) * (product.price_margin or 1.0) + product.price_extra | 793 | price_extra = 0.0 |
4014 | 794 | for variant_id in product.variant_ids: | ||
4015 | 795 | price_extra += variant_id.price_extra | ||
4016 | 796 | res[product.id] = (res[product.id] or 0.0) + price_extra | ||
4017 | 629 | return res | 797 | return res |
4018 | 630 | 798 | ||
4019 | 631 | def _save_product_lst_price(self, cr, uid, product_id, field_name, field_value, arg, context=None): | ||
4020 | 632 | field_value = field_value or 0.0 | ||
4021 | 633 | product = self.browse(cr, uid, product_id, context=context) | ||
4022 | 634 | list_price = (field_value - product.price_extra) / (product.price_margin or 1.0) | ||
4023 | 635 | return self.write(cr, uid, [product_id], {'list_price': list_price}, context=context) | ||
4024 | 636 | |||
4025 | 637 | def _get_partner_code_name(self, cr, uid, ids, product, partner_id, context=None): | 799 | def _get_partner_code_name(self, cr, uid, ids, product, partner_id, context=None): |
4026 | 638 | for supinfo in product.seller_ids: | 800 | for supinfo in product.seller_ids: |
4027 | 639 | if supinfo.name.id == partner_id: | 801 | if supinfo.name.id == partner_id: |
4030 | 640 | return {'code': supinfo.product_code or product.default_code, 'name': supinfo.product_name or product.name, 'variants': ''} | 802 | return {'code': supinfo.product_code or product.default_code, 'name': supinfo.product_name or product.name} |
4031 | 641 | res = {'code': product.default_code, 'name': product.name, 'variants': product.variants} | 803 | res = {'code': product.default_code, 'name': product.name} |
4032 | 642 | return res | 804 | return res |
4033 | 643 | 805 | ||
4034 | 644 | def _product_code(self, cr, uid, ids, name, arg, context=None): | 806 | def _product_code(self, cr, uid, ids, name, arg, context=None): |
4035 | @@ -655,48 +817,15 @@ | |||
4036 | 655 | context = {} | 817 | context = {} |
4037 | 656 | for p in self.browse(cr, uid, ids, context=context): | 818 | for p in self.browse(cr, uid, ids, context=context): |
4038 | 657 | data = self._get_partner_code_name(cr, uid, [], p, context.get('partner_id', None), context=context) | 819 | data = self._get_partner_code_name(cr, uid, [], p, context.get('partner_id', None), context=context) |
4039 | 658 | if not data['variants']: | ||
4040 | 659 | data['variants'] = p.variants | ||
4041 | 660 | if not data['code']: | 820 | if not data['code']: |
4042 | 661 | data['code'] = p.code | 821 | data['code'] = p.code |
4043 | 662 | if not data['name']: | 822 | if not data['name']: |
4044 | 663 | data['name'] = p.name | 823 | data['name'] = p.name |
4081 | 664 | res[p.id] = (data['code'] and ('['+data['code']+'] ') or '') + \ | 824 | res[p.id] = (data['code'] and ('['+data['code']+'] ') or '') + (data['name'] or '') |
4082 | 665 | (data['name'] or '') + (data['variants'] and (' - '+data['variants']) or '') | 825 | return res |
4083 | 666 | return res | 826 | |
4084 | 667 | 827 | def _is_product_variant(self, cr, uid, ids, name, arg, context=None): | |
4085 | 668 | def _is_only_child(self, cr, uid, ids, name, arg, context=None): | 828 | return dict.fromkeys(ids, True) |
4050 | 669 | res = dict.fromkeys(ids, True) | ||
4051 | 670 | for product in self.browse(cr, uid, ids, context=context): | ||
4052 | 671 | if product.product_tmpl_id and len(product.product_tmpl_id.product_variant_ids) > 1: | ||
4053 | 672 | res[product.id] = False | ||
4054 | 673 | return res | ||
4055 | 674 | |||
4056 | 675 | def _get_main_product_supplier(self, cr, uid, product, context=None): | ||
4057 | 676 | """Determines the main (best) product supplier for ``product``, | ||
4058 | 677 | returning the corresponding ``supplierinfo`` record, or False | ||
4059 | 678 | if none were found. The default strategy is to select the | ||
4060 | 679 | supplier with the highest priority (i.e. smallest sequence). | ||
4061 | 680 | |||
4062 | 681 | :param browse_record product: product to supply | ||
4063 | 682 | :rtype: product.supplierinfo browse_record or False | ||
4064 | 683 | """ | ||
4065 | 684 | sellers = [(seller_info.sequence, seller_info) | ||
4066 | 685 | for seller_info in product.seller_ids or [] | ||
4067 | 686 | if seller_info and isinstance(seller_info.sequence, (int, long))] | ||
4068 | 687 | return sellers and sellers[0][1] or False | ||
4069 | 688 | |||
4070 | 689 | def _calc_seller(self, cr, uid, ids, fields, arg, context=None): | ||
4071 | 690 | result = {} | ||
4072 | 691 | for product in self.browse(cr, uid, ids, context=context): | ||
4073 | 692 | main_supplier = self._get_main_product_supplier(cr, uid, product, context=context) | ||
4074 | 693 | result[product.id] = { | ||
4075 | 694 | 'seller_info_id': main_supplier and main_supplier.id or False, | ||
4076 | 695 | 'seller_delay': main_supplier.delay if main_supplier else 1, | ||
4077 | 696 | 'seller_qty': main_supplier and main_supplier.qty or 0.0, | ||
4078 | 697 | 'seller_id': main_supplier and main_supplier.name.id or False | ||
4079 | 698 | } | ||
4080 | 699 | return result | ||
4086 | 700 | 829 | ||
4087 | 701 | def _get_name_template_ids(self, cr, uid, ids, context=None): | 830 | def _get_name_template_ids(self, cr, uid, ids, context=None): |
4088 | 702 | result = set() | 831 | result = set() |
4089 | @@ -705,39 +834,69 @@ | |||
4090 | 705 | result.add(el) | 834 | result.add(el) |
4091 | 706 | return list(result) | 835 | return list(result) |
4092 | 707 | 836 | ||
4093 | 837 | def _get_image_variant(self, cr, uid, ids, name, args, context=None): | ||
4094 | 838 | result = dict.fromkeys(ids, False) | ||
4095 | 839 | for obj in self.browse(cr, uid, ids, context=context): | ||
4096 | 840 | result[obj.id] = obj.image_variant or getattr(obj.product_tmpl_id, name) | ||
4097 | 841 | return result | ||
4098 | 842 | |||
4099 | 843 | def _set_image_variant(self, cr, uid, id, name, value, args, context=None): | ||
4100 | 844 | image = tools.image_resize_image_big(value) | ||
4101 | 845 | res = self.write(cr, uid, [id], {'image_variant': image}, context=context) | ||
4102 | 846 | product = self.browse(cr, uid, id, context=context) | ||
4103 | 847 | if not product.product_tmpl_id.image: | ||
4104 | 848 | product.write({'image_variant': None}, context=context) | ||
4105 | 849 | product.product_tmpl_id.write({'image': image}, context=context) | ||
4106 | 850 | return res | ||
4107 | 851 | |||
4108 | 852 | def _get_price_extra(self, cr, uid, ids, name, args, context=None): | ||
4109 | 853 | result = dict.fromkeys(ids, False) | ||
4110 | 854 | for product in self.browse(cr, uid, ids, context=context): | ||
4111 | 855 | price_extra = 0.0 | ||
4112 | 856 | for variant_id in product.variant_ids: | ||
4113 | 857 | for price_id in variant_id.price_ids: | ||
4114 | 858 | if price_id.product_tmpl_id.id == product.product_tmpl_id.id: | ||
4115 | 859 | price_extra += price_id.price_extra | ||
4116 | 860 | result[product.id] = price_extra | ||
4117 | 861 | return result | ||
4118 | 862 | |||
4119 | 708 | _columns = { | 863 | _columns = { |
4122 | 709 | 'price': fields.function(_product_price, fnct_inv=_save_product_lst_price, type='float', string='Price', digits_compute=dp.get_precision('Product Price')), | 864 | 'price': fields.function(_product_price, type='float', string='Price', digits_compute=dp.get_precision('Product Price')), |
4123 | 710 | 'lst_price' : fields.function(_product_lst_price, fnct_inv=_save_product_lst_price, type='float', string='Public Price', digits_compute=dp.get_precision('Product Price')), | 865 | 'price_extra': fields.function(_get_price_extra, type='float', string='Sum of Variant Price Extra'), |
4124 | 866 | 'lst_price': fields.function(_product_lst_price, type='float', string='Public Price', digits_compute=dp.get_precision('Product Price')), | ||
4125 | 711 | 'code': fields.function(_product_code, type='char', string='Internal Reference'), | 867 | 'code': fields.function(_product_code, type='char', string='Internal Reference'), |
4126 | 712 | 'partner_ref' : fields.function(_product_partner_ref, type='char', string='Customer ref'), | 868 | 'partner_ref' : fields.function(_product_partner_ref, type='char', string='Customer ref'), |
4127 | 713 | 'default_code' : fields.char('Internal Reference', select=True), | 869 | 'default_code' : fields.char('Internal Reference', select=True), |
4128 | 714 | 'active': fields.boolean('Active', help="If unchecked, it will allow you to hide the product without removing it."), | 870 | 'active': fields.boolean('Active', help="If unchecked, it will allow you to hide the product without removing it."), |
4129 | 715 | 'variants': fields.char('Variants', translate=True), | ||
4130 | 716 | 'product_tmpl_id': fields.many2one('product.template', 'Product Template', required=True, ondelete="cascade", select=True), | 871 | 'product_tmpl_id': fields.many2one('product.template', 'Product Template', required=True, ondelete="cascade", select=True), |
4131 | 717 | 'is_only_child': fields.function( | ||
4132 | 718 | _is_only_child, type='boolean', string='Sole child of the parent template'), | ||
4133 | 719 | 'ean13': fields.char('EAN13 Barcode', size=13, help="International Article Number used for product identification."), | 872 | 'ean13': fields.char('EAN13 Barcode', size=13, help="International Article Number used for product identification."), |
4134 | 873 | 'is_product_variant': fields.function( _is_product_variant, type='boolean', string='Only one product variant'), | ||
4135 | 720 | 'packaging': fields.one2many('product.packaging', 'product_id', 'Packaging', help="Gives the different ways to package the same product. This has no impact on the picking order and is mainly used if you use the EDI module."), | 874 | 'packaging': fields.one2many('product.packaging', 'product_id', 'Packaging', help="Gives the different ways to package the same product. This has no impact on the picking order and is mainly used if you use the EDI module."), |
4136 | 721 | 'price_extra': fields.float('Variant Price Extra', digits_compute=dp.get_precision('Product Price'), help="Price Extra: Extra price for the variant on sale price. eg. 200 price extra, 1000 + 200 = 1200."), | ||
4137 | 722 | 'price_margin': fields.float('Variant Price Margin', digits_compute=dp.get_precision('Product Price'), help="Price Margin: Margin in percentage amount on sale price for the variant. eg. 10 price margin, 1000 * 1.1 = 1100."), | ||
4138 | 723 | 'pricelist_id': fields.dummy(string='Pricelist', relation='product.pricelist', type='many2one'), | ||
4139 | 724 | 'name_template': fields.related('product_tmpl_id', 'name', string="Template Name", type='char', store={ | 875 | 'name_template': fields.related('product_tmpl_id', 'name', string="Template Name", type='char', store={ |
4140 | 725 | 'product.template': (_get_name_template_ids, ['name'], 10), | 876 | 'product.template': (_get_name_template_ids, ['name'], 10), |
4141 | 726 | 'product.product': (lambda self, cr, uid, ids, c=None: ids, [], 10), | 877 | 'product.product': (lambda self, cr, uid, ids, c=None: ids, [], 10), |
4142 | 727 | }, select=True), | 878 | }, select=True), |
4148 | 728 | 'color': fields.integer('Color Index'), | 879 | 'variant_ids': fields.many2many('product.attribute.value', id1='prod_id', id2='att_id', string='Variants', readonly=True), |
4149 | 729 | 'seller_info_id': fields.function(_calc_seller, type='many2one', relation="product.supplierinfo", string="Supplier Info", multi="seller_info"), | 880 | |
4150 | 730 | 'seller_delay': fields.function(_calc_seller, type='integer', string='Supplier Lead Time', multi="seller_info", help="This is the average delay in days between the purchase order confirmation and the reception of goods for this product and for the default supplier. It is used by the scheduler to order requests based on reordering delays."), | 881 | # image: all image fields are base64 encoded and PIL-supported |
4151 | 731 | 'seller_qty': fields.function(_calc_seller, type='float', string='Supplier Quantity', multi="seller_info", help="This is minimum quantity to purchase from Main Supplier."), | 882 | 'image_variant': fields.binary("Variant Image", |
4152 | 732 | 'seller_id': fields.function(_calc_seller, type='many2one', relation="res.partner", string='Main Supplier', help="Main Supplier who has highest priority in Supplier List.", multi="seller_info"), | 883 | help="This field holds the image used as image for the product variant, limited to 1024x1024px."), |
4153 | 884 | |||
4154 | 885 | 'image': fields.function(_get_image_variant, fnct_inv=_set_image_variant, | ||
4155 | 886 | string="Big-sized image", type="binary", | ||
4156 | 887 | help="Image of the product variant (Big-sized image of product template if false). It is automatically "\ | ||
4157 | 888 | "resized as a 1024x1024px image, with aspect ratio preserved."), | ||
4158 | 889 | 'image_small': fields.function(_get_image_variant, fnct_inv=_set_image_variant, | ||
4159 | 890 | string="Small-sized image", type="binary", | ||
4160 | 891 | help="Image of the product variant (Small-sized image of product template if false)."), | ||
4161 | 892 | 'image_medium': fields.function(_get_image_variant, fnct_inv=_set_image_variant, | ||
4162 | 893 | string="Medium-sized image", type="binary", | ||
4163 | 894 | help="Image of the product variant (Medium-sized image of product template if false)."), | ||
4164 | 733 | } | 895 | } |
4165 | 734 | 896 | ||
4166 | 735 | _defaults = { | 897 | _defaults = { |
4167 | 736 | 'active': lambda *a: 1, | 898 | 'active': lambda *a: 1, |
4168 | 737 | 'price_extra': lambda *a: 0.0, | ||
4169 | 738 | 'price_margin': lambda *a: 1.0, | ||
4170 | 739 | 'color': 0, | 899 | 'color': 0, |
4171 | 740 | 'is_only_child': True, | ||
4172 | 741 | } | 900 | } |
4173 | 742 | 901 | ||
4174 | 743 | def unlink(self, cr, uid, ids, context=None): | 902 | def unlink(self, cr, uid, ids, context=None): |
4175 | @@ -767,8 +926,9 @@ | |||
4176 | 767 | 926 | ||
4177 | 768 | def _check_ean_key(self, cr, uid, ids, context=None): | 927 | def _check_ean_key(self, cr, uid, ids, context=None): |
4178 | 769 | for product in self.read(cr, uid, ids, ['ean13'], context=context): | 928 | for product in self.read(cr, uid, ids, ['ean13'], context=context): |
4181 | 770 | res = check_ean(product['ean13']) | 929 | if not check_ean(product['ean13']): |
4182 | 771 | return res | 930 | return False |
4183 | 931 | return True | ||
4184 | 772 | 932 | ||
4185 | 773 | _constraints = [(_check_ean_key, 'You provided an invalid "EAN13 Barcode" reference. You may use the "Internal Reference" field instead.', ['ean13'])] | 933 | _constraints = [(_check_ean_key, 'You provided an invalid "EAN13 Barcode" reference. You may use the "Internal Reference" field instead.', ['ean13'])] |
4186 | 774 | 934 | ||
4187 | @@ -782,13 +942,12 @@ | |||
4188 | 782 | ids = [ids] | 942 | ids = [ids] |
4189 | 783 | if not len(ids): | 943 | if not len(ids): |
4190 | 784 | return [] | 944 | return [] |
4191 | 945 | |||
4192 | 785 | def _name_get(d): | 946 | def _name_get(d): |
4193 | 786 | name = d.get('name','') | 947 | name = d.get('name','') |
4194 | 787 | code = d.get('default_code',False) | 948 | code = d.get('default_code',False) |
4195 | 788 | if code: | 949 | if code: |
4196 | 789 | name = '[%s] %s' % (code,name) | 950 | name = '[%s] %s' % (code,name) |
4197 | 790 | if d.get('variants'): | ||
4198 | 791 | name = name + ' - %s' % (d['variants'],) | ||
4199 | 792 | return (d['id'], name) | 951 | return (d['id'], name) |
4200 | 793 | 952 | ||
4201 | 794 | partner_id = context.get('partner_id', False) | 953 | partner_id = context.get('partner_id', False) |
4202 | @@ -800,6 +959,8 @@ | |||
4203 | 800 | 959 | ||
4204 | 801 | result = [] | 960 | result = [] |
4205 | 802 | for product in self.browse(cr, SUPERUSER_ID, ids, context=context): | 961 | for product in self.browse(cr, SUPERUSER_ID, ids, context=context): |
4206 | 962 | variant = ", ".join([v.name for v in product.variant_ids]) | ||
4207 | 963 | name = variant and "%s (%s)" % (product.name, variant) or product.name | ||
4208 | 803 | sellers = [] | 964 | sellers = [] |
4209 | 804 | if partner_id: | 965 | if partner_id: |
4210 | 805 | sellers = filter(lambda x: x.name.id == partner_id, product.seller_ids) | 966 | sellers = filter(lambda x: x.name.id == partner_id, product.seller_ids) |
4211 | @@ -807,17 +968,15 @@ | |||
4212 | 807 | for s in sellers: | 968 | for s in sellers: |
4213 | 808 | mydict = { | 969 | mydict = { |
4214 | 809 | 'id': product.id, | 970 | 'id': product.id, |
4216 | 810 | 'name': s.product_name or product.name, | 971 | 'name': s.product_name or name, |
4217 | 811 | 'default_code': s.product_code or product.default_code, | 972 | 'default_code': s.product_code or product.default_code, |
4218 | 812 | 'variants': product.variants | ||
4219 | 813 | } | 973 | } |
4220 | 814 | result.append(_name_get(mydict)) | 974 | result.append(_name_get(mydict)) |
4221 | 815 | else: | 975 | else: |
4222 | 816 | mydict = { | 976 | mydict = { |
4223 | 817 | 'id': product.id, | 977 | 'id': product.id, |
4225 | 818 | 'name': product.name, | 978 | 'name': name, |
4226 | 819 | 'default_code': product.default_code, | 979 | 'default_code': product.default_code, |
4227 | 820 | 'variants': product.variants | ||
4228 | 821 | } | 980 | } |
4229 | 822 | result.append(_name_get(mydict)) | 981 | result.append(_name_get(mydict)) |
4230 | 823 | return result | 982 | return result |
4231 | @@ -855,44 +1014,7 @@ | |||
4232 | 855 | # | 1014 | # |
4233 | 856 | def price_get(self, cr, uid, ids, ptype='list_price', context=None): | 1015 | def price_get(self, cr, uid, ids, ptype='list_price', context=None): |
4234 | 857 | products = self.browse(cr, uid, ids, context=context) | 1016 | products = self.browse(cr, uid, ids, context=context) |
4273 | 858 | return self._price_get(cr, uid, products, ptype=ptype, context=context) | 1017 | return self.pool.get("product.template")._price_get(cr, uid, products, ptype=ptype, context=context) |
4236 | 859 | |||
4237 | 860 | def _price_get(self, cr, uid, products, ptype='list_price', context=None): | ||
4238 | 861 | if context is None: | ||
4239 | 862 | context = {} | ||
4240 | 863 | |||
4241 | 864 | if 'currency_id' in context: | ||
4242 | 865 | pricetype_obj = self.pool.get('product.price.type') | ||
4243 | 866 | price_type_id = pricetype_obj.search(cr, uid, [('field','=',ptype)])[0] | ||
4244 | 867 | price_type_currency_id = pricetype_obj.browse(cr,uid,price_type_id).currency_id.id | ||
4245 | 868 | |||
4246 | 869 | res = {} | ||
4247 | 870 | # standard_price field can only be seen by users in base.group_user | ||
4248 | 871 | # Thus, in order to compute the sale price from the cost price for users not in this group | ||
4249 | 872 | # We fetch the standard price as the superuser | ||
4250 | 873 | for product in products: | ||
4251 | 874 | if ptype != 'standard_price': | ||
4252 | 875 | res[product.id] = product[ptype] or 0.0 | ||
4253 | 876 | else: | ||
4254 | 877 | res[product.id] = self.read(cr, SUPERUSER_ID, product.id, [ptype], context=context)[ptype] or 0.0 | ||
4255 | 878 | |||
4256 | 879 | product_uom_obj = self.pool.get('product.uom') | ||
4257 | 880 | for product in products: | ||
4258 | 881 | if ptype == 'list_price': | ||
4259 | 882 | res[product.id] = (res[product.id] * (product.price_margin or 1.0)) + \ | ||
4260 | 883 | product.price_extra | ||
4261 | 884 | if 'uom' in context: | ||
4262 | 885 | uom = product.uom_id or product.uos_id | ||
4263 | 886 | res[product.id] = product_uom_obj._compute_price(cr, uid, | ||
4264 | 887 | uom.id, res[product.id], context['uom']) | ||
4265 | 888 | # Convert from price_type currency to asked one | ||
4266 | 889 | if 'currency_id' in context: | ||
4267 | 890 | # Take the price_type currency from the product field | ||
4268 | 891 | # This is right cause a field cannot be in more than one currency | ||
4269 | 892 | res[product.id] = self.pool.get('res.currency').compute(cr, uid, price_type_currency_id, | ||
4270 | 893 | context['currency_id'], res[product.id],context=context) | ||
4271 | 894 | |||
4272 | 895 | return res | ||
4274 | 896 | 1018 | ||
4275 | 897 | def copy(self, cr, uid, id, default=None, context=None): | 1019 | def copy(self, cr, uid, id, default=None, context=None): |
4276 | 898 | context = context or {} | 1020 | context = context or {} |
4277 | @@ -952,8 +1074,9 @@ | |||
4278 | 952 | 1074 | ||
4279 | 953 | def _check_ean_key(self, cr, uid, ids, context=None): | 1075 | def _check_ean_key(self, cr, uid, ids, context=None): |
4280 | 954 | for pack in self.browse(cr, uid, ids, context=context): | 1076 | for pack in self.browse(cr, uid, ids, context=context): |
4283 | 955 | res = check_ean(pack.ean) | 1077 | if not check_ean(pack.ean): |
4284 | 956 | return res | 1078 | return False |
4285 | 1079 | return True | ||
4286 | 957 | 1080 | ||
4287 | 958 | _constraints = [(_check_ean_key, 'Error: Invalid ean code', ['ean'])] | 1081 | _constraints = [(_check_ean_key, 'Error: Invalid ean code', ['ean'])] |
4288 | 959 | 1082 | ||
4289 | 960 | 1083 | ||
4290 | === modified file 'product/product_data.xml' | |||
4291 | --- product/product_data.xml 2014-05-02 13:03:52 +0000 | |||
4292 | +++ product/product_data.xml 2014-05-26 16:10:21 +0000 | |||
4293 | @@ -255,10 +255,5 @@ | |||
4294 | 255 | <field name="type">service</field> | 255 | <field name="type">service</field> |
4295 | 256 | <field name="sale_ok" eval="False"/> | 256 | <field name="sale_ok" eval="False"/> |
4296 | 257 | </record> | 257 | </record> |
4297 | 258 | |||
4298 | 259 | <!-- Product Public Categories --> | ||
4299 | 260 | <record id="categ_others" model="product.public.category"> | ||
4300 | 261 | <field name="name">Others</field> | ||
4301 | 262 | </record> | ||
4302 | 263 | </data> | 258 | </data> |
4303 | 264 | </openerp> | 259 | </openerp> |
4304 | 265 | 260 | ||
4305 | === modified file 'product/product_demo.xml' | |||
4306 | --- product/product_demo.xml 2014-01-28 12:53:40 +0000 | |||
4307 | +++ product/product_demo.xml 2014-05-26 16:10:21 +0000 | |||
4308 | @@ -56,127 +56,6 @@ | |||
4309 | 56 | <field name="type">box</field> | 56 | <field name="type">box</field> |
4310 | 57 | </record> | 57 | </record> |
4311 | 58 | 58 | ||
4312 | 59 | |||
4313 | 60 | <!-- product.public.category --> | ||
4314 | 61 | |||
4315 | 62 | <record id="computers" model="product.public.category"> | ||
4316 | 63 | <field name="name">Computers</field> | ||
4317 | 64 | </record> | ||
4318 | 65 | |||
4319 | 66 | <record id="Components" model="product.public.category"> | ||
4320 | 67 | <field name="parent_id" ref="computers"/> | ||
4321 | 68 | <field name="name">Components</field> | ||
4322 | 69 | </record> | ||
4323 | 70 | |||
4324 | 71 | <record id="case" model="product.public.category"> | ||
4325 | 72 | <field name="parent_id" ref="Components"/> | ||
4326 | 73 | <field name="name">Case</field> | ||
4327 | 74 | </record> | ||
4328 | 75 | <record id="HDD" model="product.public.category"> | ||
4329 | 76 | <field name="parent_id" ref="Components"/> | ||
4330 | 77 | <field name="name">Hard Drive</field> | ||
4331 | 78 | </record> | ||
4332 | 79 | <record id="motherboard" model="product.public.category"> | ||
4333 | 80 | <field name="parent_id" ref="Components"/> | ||
4334 | 81 | <field name="name">Motherboard</field> | ||
4335 | 82 | </record> | ||
4336 | 83 | <record id="graphics_card" model="product.public.category"> | ||
4337 | 84 | <field name="parent_id" ref="Components"/> | ||
4338 | 85 | <field name="name">Graphics Card</field> | ||
4339 | 86 | </record> | ||
4340 | 87 | <record id="Memory" model="product.public.category"> | ||
4341 | 88 | <field name="parent_id" ref="Components"/> | ||
4342 | 89 | <field name="name">Memory</field> | ||
4343 | 90 | </record> | ||
4344 | 91 | <record id="processor" model="product.public.category"> | ||
4345 | 92 | <field name="parent_id" ref="Components"/> | ||
4346 | 93 | <field name="name">Processor</field> | ||
4347 | 94 | </record> | ||
4348 | 95 | <record id="video_acquisition" model="product.public.category"> | ||
4349 | 96 | <field name="parent_id" ref="Components"/> | ||
4350 | 97 | <field name="name">Video Acquisition</field> | ||
4351 | 98 | </record> | ||
4352 | 99 | |||
4353 | 100 | <record id="devices" model="product.public.category"> | ||
4354 | 101 | <field name="parent_id" ref="computers"/> | ||
4355 | 102 | <field name="name">Devices</field> | ||
4356 | 103 | </record> | ||
4357 | 104 | |||
4358 | 105 | <record id="Screen" model="product.public.category"> | ||
4359 | 106 | <field name="parent_id" ref="devices"/> | ||
4360 | 107 | <field name="name">Screen</field> | ||
4361 | 108 | </record> | ||
4362 | 109 | <record id="Pen_Drive" model="product.public.category"> | ||
4363 | 110 | <field name="parent_id" ref="devices"/> | ||
4364 | 111 | <field name="name">Pen Drive</field> | ||
4365 | 112 | </record> | ||
4366 | 113 | <record id="External_Hard_Drive" model="product.public.category"> | ||
4367 | 114 | <field name="parent_id" ref="devices"/> | ||
4368 | 115 | <field name="name">External Hard Drive</field> | ||
4369 | 116 | </record> | ||
4370 | 117 | <record id="Keyboard_Mouse" model="product.public.category"> | ||
4371 | 118 | <field name="parent_id" ref="devices"/> | ||
4372 | 119 | <field name="name">Keyboard / Mouse</field> | ||
4373 | 120 | </record> | ||
4374 | 121 | <record id="printer" model="product.public.category"> | ||
4375 | 122 | <field name="parent_id" ref="devices"/> | ||
4376 | 123 | <field name="name">Printer</field> | ||
4377 | 124 | </record> | ||
4378 | 125 | <record id="Speakers" model="product.public.category"> | ||
4379 | 126 | <field name="parent_id" ref="devices"/> | ||
4380 | 127 | <field name="name">Speakers</field> | ||
4381 | 128 | </record> | ||
4382 | 129 | <record id="Headset" model="product.public.category"> | ||
4383 | 130 | <field name="parent_id" ref="devices"/> | ||
4384 | 131 | <field name="name">Headset</field> | ||
4385 | 132 | </record> | ||
4386 | 133 | <record id="Software" model="product.public.category"> | ||
4387 | 134 | <field name="parent_id" ref="devices"/> | ||
4388 | 135 | <field name="name">Software</field> | ||
4389 | 136 | </record> | ||
4390 | 137 | |||
4391 | 138 | <record id="laptops" model="product.public.category"> | ||
4392 | 139 | <field name="parent_id" ref="computers"/> | ||
4393 | 140 | <field name="name">Laptops</field> | ||
4394 | 141 | </record> | ||
4395 | 142 | |||
4396 | 143 | <record id="sub_computers" model="product.public.category"> | ||
4397 | 144 | <field name="parent_id" ref="computers"/> | ||
4398 | 145 | <field name="name">Computers</field> | ||
4399 | 146 | </record> | ||
4400 | 147 | |||
4401 | 148 | <record id="Computer_all_in_one" model="product.public.category"> | ||
4402 | 149 | <field name="parent_id" ref="sub_computers"/> | ||
4403 | 150 | <field name="name">Computer all-in-one</field> | ||
4404 | 151 | </record> | ||
4405 | 152 | <record id="server" model="product.public.category"> | ||
4406 | 153 | <field name="parent_id" ref="sub_computers"/> | ||
4407 | 154 | <field name="name">Server</field> | ||
4408 | 155 | </record> | ||
4409 | 156 | |||
4410 | 157 | <record id="network" model="product.public.category"> | ||
4411 | 158 | <field name="parent_id" ref="computers"/> | ||
4412 | 159 | <field name="name">Network</field> | ||
4413 | 160 | </record> | ||
4414 | 161 | |||
4415 | 162 | <record id="Switch" model="product.public.category"> | ||
4416 | 163 | <field name="parent_id" ref="network"/> | ||
4417 | 164 | <field name="name">Switch</field> | ||
4418 | 165 | </record> | ||
4419 | 166 | <record id="Modem_Router" model="product.public.category"> | ||
4420 | 167 | <field name="parent_id" ref="network"/> | ||
4421 | 168 | <field name="name">Modem & Router</field> | ||
4422 | 169 | </record> | ||
4423 | 170 | <record id="Switch" model="product.public.category"> | ||
4424 | 171 | <field name="parent_id" ref="network"/> | ||
4425 | 172 | <field name="name">Switch</field> | ||
4426 | 173 | </record> | ||
4427 | 174 | |||
4428 | 175 | <record id="services" model="product.public.category"> | ||
4429 | 176 | <field name="parent_id" ref="computers"/> | ||
4430 | 177 | <field name="name">Services</field> | ||
4431 | 178 | </record> | ||
4432 | 179 | |||
4433 | 180 | <!-- Apple Products --> | 59 | <!-- Apple Products --> |
4434 | 181 | <record id="apple" model="product.category"> | 60 | <record id="apple" model="product.category"> |
4435 | 182 | <field name="name">Apple Products</field> | 61 | <field name="name">Apple Products</field> |
4436 | @@ -210,10 +89,9 @@ | |||
4437 | 210 | <field name="sale_ok" eval="True"/> | 89 | <field name="sale_ok" eval="True"/> |
4438 | 211 | </record> | 90 | </record> |
4439 | 212 | 91 | ||
4441 | 213 | <record id="product_template_1" model="product.template"> | 92 | <record id="product_product_1" model="product.product"> |
4442 | 214 | <field name="name">On Site Monitoring</field> | 93 | <field name="name">On Site Monitoring</field> |
4443 | 215 | <field name="categ_id" ref="product_category_5"/> | 94 | <field name="categ_id" ref="product_category_5"/> |
4444 | 216 | <field name="public_categ_id" ref="services"/> | ||
4445 | 217 | <field name="standard_price">20.5</field> | 95 | <field name="standard_price">20.5</field> |
4446 | 218 | <field name="list_price">30.75</field> | 96 | <field name="list_price">30.75</field> |
4447 | 219 | <field name="type">service</field> | 97 | <field name="type">service</field> |
4448 | @@ -222,15 +100,11 @@ | |||
4449 | 222 | <field name="description">This type of service include basic monitoring of products.</field> | 100 | <field name="description">This type of service include basic monitoring of products.</field> |
4450 | 223 | <field name="description_sale">This type of service include basic monitoring of products.</field> | 101 | <field name="description_sale">This type of service include basic monitoring of products.</field> |
4451 | 224 | </record> | 102 | </record> |
4458 | 225 | <record id="product_product_1" model="product.product"> | 103 | |
4459 | 226 | <field name="product_tmpl_id" ref="product_template_1"/> | 104 | |
4460 | 227 | </record> | 105 | <record id="product_product_2" model="product.product"> |
4455 | 228 | |||
4456 | 229 | |||
4457 | 230 | <record id="product_template_2" model="product.template"> | ||
4461 | 231 | <field name="name">On Site Assistance</field> | 106 | <field name="name">On Site Assistance</field> |
4462 | 232 | <field name="categ_id" ref="product_category_5"/> | 107 | <field name="categ_id" ref="product_category_5"/> |
4463 | 233 | <field name="public_categ_id" ref="services"/> | ||
4464 | 234 | <field name="standard_price">25.5</field> | 108 | <field name="standard_price">25.5</field> |
4465 | 235 | <field name="list_price">38.25</field> | 109 | <field name="list_price">38.25</field> |
4466 | 236 | <field name="type">service</field> | 110 | <field name="type">service</field> |
4467 | @@ -238,15 +112,11 @@ | |||
4468 | 238 | <field name="uom_po_id" ref="product_uom_hour"/> | 112 | <field name="uom_po_id" ref="product_uom_hour"/> |
4469 | 239 | <field name="description">This type of service include assistance for security questions, system configuration requirements, implementation or special needs.</field> | 113 | <field name="description">This type of service include assistance for security questions, system configuration requirements, implementation or special needs.</field> |
4470 | 240 | </record> | 114 | </record> |
4477 | 241 | <record id="product_product_2" model="product.product"> | 115 | |
4478 | 242 | <field name="product_tmpl_id" ref="product_template_2"/> | 116 | |
4479 | 243 | </record> | 117 | <record id="product_product_3" model="product.product"> |
4474 | 244 | |||
4475 | 245 | |||
4476 | 246 | <record id="product_template_3" model="product.template"> | ||
4480 | 247 | <field name="name">PC Assemble SC234</field> | 118 | <field name="name">PC Assemble SC234</field> |
4481 | 248 | <field name="categ_id" ref="product_category_4"/> | 119 | <field name="categ_id" ref="product_category_4"/> |
4482 | 249 | <field name="public_categ_id" ref="Computer_all_in_one"/> | ||
4483 | 250 | <field name="list_price">450.0</field> | 120 | <field name="list_price">450.0</field> |
4484 | 251 | <field name="standard_price">300.0</field> | 121 | <field name="standard_price">300.0</field> |
4485 | 252 | <field name="type">consu</field> | 122 | <field name="type">consu</field> |
4486 | @@ -256,17 +126,13 @@ | |||
4487 | 256 | Processor AMD 8-Core | 126 | Processor AMD 8-Core |
4488 | 257 | 512MB RAM | 127 | 512MB RAM |
4489 | 258 | HDD SH-1</field> | 128 | HDD SH-1</field> |
4490 | 259 | </record> | ||
4491 | 260 | <record id="product_product_3" model="product.product"> | ||
4492 | 261 | <field name="product_tmpl_id" ref="product_template_3"/> | ||
4493 | 262 | <field name="default_code">PCSC234</field> | 129 | <field name="default_code">PCSC234</field> |
4494 | 263 | </record> | 130 | </record> |
4495 | 264 | 131 | ||
4496 | 265 | 132 | ||
4498 | 266 | <record id="product_template_4" model="product.template"> | 133 | <record id="product_product_4" model="product.product"> |
4499 | 267 | <field name="name">iPad Retina Display</field> | 134 | <field name="name">iPad Retina Display</field> |
4500 | 268 | <field name="categ_id" ref="ipad"/> | 135 | <field name="categ_id" ref="ipad"/> |
4501 | 269 | <field name="public_categ_id" ref="Computer_all_in_one"/> | ||
4502 | 270 | <field name="standard_price">500.0</field> | 136 | <field name="standard_price">500.0</field> |
4503 | 271 | <field name="list_price">750.0</field> | 137 | <field name="list_price">750.0</field> |
4504 | 272 | <field name="type">consu</field> | 138 | <field name="type">consu</field> |
4505 | @@ -275,17 +141,13 @@ | |||
4506 | 275 | <field name="description_sale">7.9‑inch (diagonal) LED-backlit, 128Gb | 141 | <field name="description_sale">7.9‑inch (diagonal) LED-backlit, 128Gb |
4507 | 276 | Dual-core A5 with quad-core graphics | 142 | Dual-core A5 with quad-core graphics |
4508 | 277 | FaceTime HD Camera, 1.2 MP Photos</field> | 143 | FaceTime HD Camera, 1.2 MP Photos</field> |
4509 | 278 | </record> | ||
4510 | 279 | <record id="product_product_4" model="product.product"> | ||
4511 | 280 | <field name="product_tmpl_id" ref="product_template_4"/> | ||
4512 | 281 | <field name="default_code">A2323</field> | 144 | <field name="default_code">A2323</field> |
4513 | 282 | </record> | 145 | </record> |
4514 | 283 | 146 | ||
4515 | 284 | 147 | ||
4517 | 285 | <record id="product_template_5" model="product.template"> | 148 | <record id="product_product_5" model="product.product"> |
4518 | 286 | <field name="name">Bose Mini Bluetooth Speaker</field> | 149 | <field name="name">Bose Mini Bluetooth Speaker</field> |
4519 | 287 | <field name="categ_id" ref="accessories"/> | 150 | <field name="categ_id" ref="accessories"/> |
4520 | 288 | <field name="public_categ_id" ref="Speakers"/> | ||
4521 | 289 | <field name="standard_price">600.0</field> | 151 | <field name="standard_price">600.0</field> |
4522 | 290 | <field name="list_price">147.0</field> | 152 | <field name="list_price">147.0</field> |
4523 | 291 | <field name="type">consu</field> | 153 | <field name="type">consu</field> |
4524 | @@ -293,44 +155,33 @@ | |||
4525 | 293 | <field name="uom_po_id" ref="product_uom_unit"/> | 155 | <field name="uom_po_id" ref="product_uom_unit"/> |
4526 | 294 | <field name="description">Custom computer assembled on order based on customer's requirement.</field> | 156 | <field name="description">Custom computer assembled on order based on customer's requirement.</field> |
4527 | 295 | <field name="description_sale">Bose's smallest portable Bluetooth speaker</field> | 157 | <field name="description_sale">Bose's smallest portable Bluetooth speaker</field> |
4528 | 296 | </record> | ||
4529 | 297 | <record id="product_product_5" model="product.product"> | ||
4530 | 298 | <field name="product_tmpl_id" ref="product_template_5"/> | ||
4531 | 299 | <field name="default_code">B3423</field> | 158 | <field name="default_code">B3423</field> |
4532 | 300 | </record> | 159 | </record> |
4533 | 301 | 160 | ||
4534 | 302 | 161 | ||
4536 | 303 | <record id="product_template_6" model="product.template"> | 162 | <record id="product_product_6" model="product.product"> |
4537 | 304 | <field name="name">iPad Mini</field> | 163 | <field name="name">iPad Mini</field> |
4538 | 305 | <field name="categ_id" ref="ipad"/> | 164 | <field name="categ_id" ref="ipad"/> |
4539 | 306 | <field name="public_categ_id" ref="Screen"/> | ||
4540 | 307 | <field name="standard_price">800.0</field> | 165 | <field name="standard_price">800.0</field> |
4541 | 308 | <field name="list_price">320.0</field> | 166 | <field name="list_price">320.0</field> |
4542 | 309 | <field name="type">consu</field> | 167 | <field name="type">consu</field> |
4543 | 310 | <field name="uom_id" ref="product_uom_unit"/> | 168 | <field name="uom_id" ref="product_uom_unit"/> |
4544 | 311 | <field name="uom_po_id" ref="product_uom_unit"/> | 169 | <field name="uom_po_id" ref="product_uom_unit"/> |
4545 | 312 | </record> | ||
4546 | 313 | <record id="product_product_6" model="product.product"> | ||
4547 | 314 | <field name="product_tmpl_id" ref="product_template_6"/> | ||
4548 | 315 | <field name="default_code">A1232</field> | 170 | <field name="default_code">A1232</field> |
4549 | 316 | </record> | 171 | </record> |
4550 | 317 | 172 | ||
4552 | 318 | <record id="product_template_7" model="product.template"> | 173 | <record id="product_product_7" model="product.product"> |
4553 | 319 | <field name="name">Apple In-Ear Headphones</field> | 174 | <field name="name">Apple In-Ear Headphones</field> |
4554 | 320 | <field name="categ_id" ref="accessories"/> | 175 | <field name="categ_id" ref="accessories"/> |
4555 | 321 | <field name="public_categ_id" ref="Screen"/> | ||
4556 | 322 | <field name="standard_price">70.0</field> | 176 | <field name="standard_price">70.0</field> |
4557 | 323 | <field name="list_price">79.0</field> | 177 | <field name="list_price">79.0</field> |
4558 | 324 | <field name="type">consu</field> | 178 | <field name="type">consu</field> |
4559 | 325 | <field name="uom_id" ref="product_uom_unit"/> | 179 | <field name="uom_id" ref="product_uom_unit"/> |
4560 | 326 | <field name="uom_po_id" ref="product_uom_unit"/> | 180 | <field name="uom_po_id" ref="product_uom_unit"/> |
4561 | 327 | </record> | ||
4562 | 328 | <record id="product_product_7" model="product.product"> | ||
4563 | 329 | <field name="product_tmpl_id" ref="product_template_7"/> | ||
4564 | 330 | <field name="default_code">A8767</field> | 181 | <field name="default_code">A8767</field> |
4565 | 331 | </record> | 182 | </record> |
4566 | 332 | 183 | ||
4568 | 333 | <record id="product_template_8" model="product.template"> | 184 | <record id="product_product_8" model="product.product"> |
4569 | 334 | <field name="name">iMac</field> | 185 | <field name="name">iMac</field> |
4570 | 335 | <field name="categ_id" ref="imac"/> | 186 | <field name="categ_id" ref="imac"/> |
4571 | 336 | <field name="standard_price">1299.0</field> | 187 | <field name="standard_price">1299.0</field> |
4572 | @@ -338,272 +189,227 @@ | |||
4573 | 338 | <field name="type">consu</field> | 189 | <field name="type">consu</field> |
4574 | 339 | <field name="uom_id" ref="product_uom_unit"/> | 190 | <field name="uom_id" ref="product_uom_unit"/> |
4575 | 340 | <field name="uom_po_id" ref="product_uom_unit"/> | 191 | <field name="uom_po_id" ref="product_uom_unit"/> |
4576 | 341 | </record> | ||
4577 | 342 | <record id="product_product_8" model="product.product"> | ||
4578 | 343 | <field name="product_tmpl_id" ref="product_template_8"/> | ||
4579 | 344 | <field name="default_code">A1090</field> | 192 | <field name="default_code">A1090</field> |
4580 | 345 | </record> | 193 | </record> |
4581 | 346 | 194 | ||
4583 | 347 | <record id="product_template_9" model="product.template"> | 195 | <record id="product_product_9" model="product.product"> |
4584 | 348 | <field name="name">Apple Wireless Keyboard</field> | 196 | <field name="name">Apple Wireless Keyboard</field> |
4585 | 349 | <field name="categ_id" ref="accessories"/> | 197 | <field name="categ_id" ref="accessories"/> |
4586 | 350 | <field name="public_categ_id" ref="Keyboard_Mouse"/> | ||
4587 | 351 | <field name="standard_price">10.0</field> | 198 | <field name="standard_price">10.0</field> |
4588 | 352 | <field name="list_price">47.0</field> | 199 | <field name="list_price">47.0</field> |
4589 | 353 | <field name="type">consu</field> | 200 | <field name="type">consu</field> |
4590 | 354 | <field name="uom_id" ref="product_uom_unit"/> | 201 | <field name="uom_id" ref="product_uom_unit"/> |
4591 | 355 | <field name="uom_po_id" ref="product_uom_unit"/> | 202 | <field name="uom_po_id" ref="product_uom_unit"/> |
4592 | 356 | </record> | ||
4593 | 357 | <record id="product_product_9" model="product.product"> | ||
4594 | 358 | <field name="product_tmpl_id" ref="product_template_9"/> | ||
4595 | 359 | <field name="default_code">AK789</field> | 203 | <field name="default_code">AK789</field> |
4596 | 360 | </record> | 204 | </record> |
4597 | 361 | 205 | ||
4599 | 362 | <record id="product_template_10" model="product.template"> | 206 | <record id="product_product_10" model="product.product"> |
4600 | 363 | <field name="name">Mouse, Optical</field> | 207 | <field name="name">Mouse, Optical</field> |
4601 | 364 | <field name="categ_id" ref="product_category_8"/> | 208 | <field name="categ_id" ref="product_category_8"/> |
4602 | 365 | <field name="public_categ_id" ref="Keyboard_Mouse"/> | ||
4603 | 366 | <field name="standard_price">12.50</field> | 209 | <field name="standard_price">12.50</field> |
4604 | 367 | <field name="list_price">14</field> | 210 | <field name="list_price">14</field> |
4605 | 368 | <field name="type">consu</field> | 211 | <field name="type">consu</field> |
4606 | 369 | <field name="uom_id" ref="product_uom_unit"/> | 212 | <field name="uom_id" ref="product_uom_unit"/> |
4607 | 370 | <field name="uom_po_id" ref="product_uom_unit"/> | 213 | <field name="uom_po_id" ref="product_uom_unit"/> |
4608 | 371 | </record> | ||
4609 | 372 | <record id="product_product_10" model="product.product"> | ||
4610 | 373 | <field name="product_tmpl_id" ref="product_template_10"/> | ||
4611 | 374 | <field name="default_code">M-Opt</field> | 214 | <field name="default_code">M-Opt</field> |
4612 | 375 | </record> | 215 | </record> |
4613 | 376 | 216 | ||
4624 | 377 | <record id="product_template_11" model="product.template"> | 217 | <!-- --> |
4625 | 378 | <field name="name">iPod</field> | 218 | |
4626 | 379 | <field name="categ_id" ref="ipod"/> | 219 | <record id="product_attribute_1" model="product.attribute"> |
4627 | 380 | <field name="public_categ_id" ref="Keyboard_Mouse"/> | 220 | <field name="name">Memory</field> |
4628 | 381 | <field name="standard_price">14</field> | 221 | </record> |
4629 | 382 | <field name="list_price">16.50</field> | 222 | <record id="product_attribute_value_1" model="product.attribute.value"> |
4630 | 383 | <field name="type">consu</field> | 223 | <field name="name">16 Go</field> |
4631 | 384 | <field name="uom_id" ref="product_uom_unit"/> | 224 | <field name="attribute_id" ref="product_attribute_1"/> |
4632 | 385 | <field name="uom_po_id" ref="product_uom_unit"/> | 225 | </record> |
4633 | 386 | </record> | 226 | <record id="product_attribute_value_2" model="product.attribute.value"> |
4634 | 227 | <field name="name">32 Go</field> | ||
4635 | 228 | <field name="attribute_id" ref="product_attribute_1"/> | ||
4636 | 229 | </record> | ||
4637 | 230 | |||
4638 | 387 | <record id="product_product_11" model="product.product"> | 231 | <record id="product_product_11" model="product.product"> |
4639 | 388 | <field name="name">iPod</field> | 232 | <field name="name">iPod</field> |
4640 | 389 | <field name="variants">16 Gb</field> | ||
4641 | 390 | <field name="default_code">A6678</field> | ||
4642 | 391 | <field name="categ_id" ref="ipod"/> | 233 | <field name="categ_id" ref="ipod"/> |
4643 | 392 | <field name="public_categ_id" ref="Keyboard_Mouse"/> | ||
4644 | 393 | <field name="standard_price">14</field> | 234 | <field name="standard_price">14</field> |
4645 | 394 | <field name="list_price">16.50</field> | 235 | <field name="list_price">16.50</field> |
4646 | 395 | <field name="type">consu</field> | 236 | <field name="type">consu</field> |
4647 | 396 | <field name="uom_id" ref="product_uom_unit"/> | 237 | <field name="uom_id" ref="product_uom_unit"/> |
4648 | 397 | <field name="uom_po_id" ref="product_uom_unit"/> | 238 | <field name="uom_po_id" ref="product_uom_unit"/> |
4649 | 398 | <field name="product_tmpl_id" ref="product_template_11"/> | ||
4650 | 399 | <field name="default_code">A6678</field> | 239 | <field name="default_code">A6678</field> |
4659 | 400 | </record> | 240 | <field name="variant_ids" eval="[(6,0,[ref('product.product_attribute_value_1')])]"/> |
4660 | 401 | <record id="product_product_11_b" model="product.product"> | 241 | </record> |
4661 | 402 | <field name="variants">32 Gb</field> | 242 | <record id="product_product_11b" model="product.product"> |
4662 | 403 | <field name="price_extra">12</field> | 243 | <field name="default_code">A6679</field> |
4663 | 404 | <field name="product_tmpl_id" ref="product_template_11"/> | 244 | <field name="product_tmpl_id" ref="product_product_11_product_template"/> |
4664 | 405 | </record> | 245 | <field name="variant_ids" eval="[(6,0,[ref('product.product_attribute_value_2')])]"/> |
4665 | 406 | 246 | </record> | |
4666 | 407 | <record id="product_template_12" model="product.template"> | 247 | |
4667 | 248 | <record id="product_attribute_line_1" model="product.attribute.line"> | ||
4668 | 249 | <field name="product_tmpl_id" ref="product_product_11_product_template"/> | ||
4669 | 250 | <field name="attribute_id" ref="product_attribute_1"/> | ||
4670 | 251 | <field name="value_ids" eval="[(6,0,[ref('product.product_attribute_value_1'), ref('product.product_attribute_value_2')])]"/> | ||
4671 | 252 | </record> | ||
4672 | 253 | |||
4673 | 254 | <record id="product_product_11_product_template" model="product.template"> | ||
4674 | 255 | <field name="variant_ids" eval="[(6,0,[ref('product.product_attribute_line_1')])]"/> | ||
4675 | 256 | </record> | ||
4676 | 257 | |||
4677 | 258 | <record id="product_attribute_price_1" model="product.attribute.price"> | ||
4678 | 259 | <field name="product_tmpl_id" ref="product_product_11_product_template"/> | ||
4679 | 260 | <field name="value_id" ref="product_attribute_value_2"/> | ||
4680 | 261 | <field name="price_extra">6.40</field> | ||
4681 | 262 | </record> | ||
4682 | 263 | |||
4683 | 264 | <!-- --> | ||
4684 | 265 | |||
4685 | 266 | <record id="product_product_12" model="product.product"> | ||
4686 | 408 | <field name="name">Mouse, Wireless</field> | 267 | <field name="name">Mouse, Wireless</field> |
4687 | 409 | <field name="categ_id" ref="product_category_8"/> | 268 | <field name="categ_id" ref="product_category_8"/> |
4688 | 410 | <field name="public_categ_id" ref="Keyboard_Mouse"/> | ||
4689 | 411 | <field name="standard_price">18</field> | 269 | <field name="standard_price">18</field> |
4690 | 412 | <field name="list_price">12.50</field> | 270 | <field name="list_price">12.50</field> |
4691 | 413 | <field name="type">consu</field> | 271 | <field name="type">consu</field> |
4692 | 414 | <field name="uom_id" ref="product_uom_unit"/> | 272 | <field name="uom_id" ref="product_uom_unit"/> |
4693 | 415 | <field name="uom_po_id" ref="product_uom_unit"/> | 273 | <field name="uom_po_id" ref="product_uom_unit"/> |
4694 | 416 | </record> | ||
4695 | 417 | <record id="product_product_12" model="product.product"> | ||
4696 | 418 | <field name="product_tmpl_id" ref="product_template_12"/> | ||
4697 | 419 | <field name="default_code">M-Wir</field> | 274 | <field name="default_code">M-Wir</field> |
4698 | 420 | </record> | 275 | </record> |
4699 | 421 | 276 | ||
4701 | 422 | <record id="product_template_13" model="product.template"> | 277 | <record id="product_product_13" model="product.product"> |
4702 | 423 | <field name="name">RAM SR5</field> | 278 | <field name="name">RAM SR5</field> |
4703 | 424 | <field name="categ_id" ref="product_category_8"/> | 279 | <field name="categ_id" ref="product_category_8"/> |
4704 | 425 | <field name="public_categ_id" ref="Memory"/> | ||
4705 | 426 | <field name="standard_price">78.0</field> | 280 | <field name="standard_price">78.0</field> |
4706 | 427 | <field name="list_price">85.0</field> | 281 | <field name="list_price">85.0</field> |
4707 | 428 | <field name="type">consu</field> | 282 | <field name="type">consu</field> |
4708 | 429 | <field name="uom_id" ref="product_uom_unit"/> | 283 | <field name="uom_id" ref="product_uom_unit"/> |
4709 | 430 | <field name="uom_po_id" ref="product_uom_unit"/> | 284 | <field name="uom_po_id" ref="product_uom_unit"/> |
4710 | 431 | </record> | ||
4711 | 432 | <record id="product_product_13" model="product.product"> | ||
4712 | 433 | <field name="product_tmpl_id" ref="product_template_13"/> | ||
4713 | 434 | <field name="default_code">RAM-SR5</field> | 285 | <field name="default_code">RAM-SR5</field> |
4714 | 435 | </record> | 286 | </record> |
4715 | 436 | 287 | ||
4717 | 437 | <record id="product_template_14" model="product.template"> | 288 | <record id="product_product_14" model="product.product"> |
4718 | 438 | <field name="name">RAM SR2</field> | 289 | <field name="name">RAM SR2</field> |
4719 | 439 | <field name="categ_id" ref="product_category_8"/> | 290 | <field name="categ_id" ref="product_category_8"/> |
4720 | 440 | <field name="public_categ_id" ref="Memory"/> | ||
4721 | 441 | <field name="standard_price">87.0</field> | 291 | <field name="standard_price">87.0</field> |
4722 | 442 | <field name="list_price">95.0</field> | 292 | <field name="list_price">95.0</field> |
4723 | 443 | <field name="type">consu</field> | 293 | <field name="type">consu</field> |
4724 | 444 | <field name="uom_id" ref="product_uom_unit"/> | 294 | <field name="uom_id" ref="product_uom_unit"/> |
4725 | 445 | <field name="uom_po_id" ref="product_uom_unit"/> | 295 | <field name="uom_po_id" ref="product_uom_unit"/> |
4726 | 446 | </record> | ||
4727 | 447 | <record id="product_product_14" model="product.product"> | ||
4728 | 448 | <field name="product_tmpl_id" ref="product_template_14"/> | ||
4729 | 449 | <field name="default_code">RAM-SR2</field> | 296 | <field name="default_code">RAM-SR2</field> |
4730 | 450 | </record> | 297 | </record> |
4731 | 451 | 298 | ||
4733 | 452 | <record id="product_template_15" model="product.template"> | 299 | <record id="product_product_15" model="product.product"> |
4734 | 453 | <field name="name">RAM SR3</field> | 300 | <field name="name">RAM SR3</field> |
4735 | 454 | <field name="categ_id" ref="product_category_8"/> | 301 | <field name="categ_id" ref="product_category_8"/> |
4736 | 455 | <field name="public_categ_id" ref="Memory"/> | ||
4737 | 456 | <field name="standard_price">80.0</field> | 302 | <field name="standard_price">80.0</field> |
4738 | 457 | <field name="list_price">85.0</field> | 303 | <field name="list_price">85.0</field> |
4739 | 458 | <field name="type">consu</field> | 304 | <field name="type">consu</field> |
4740 | 459 | <field name="uom_id" ref="product_uom_unit"/> | 305 | <field name="uom_id" ref="product_uom_unit"/> |
4741 | 460 | <field name="uom_po_id" ref="product_uom_unit"/> | 306 | <field name="uom_po_id" ref="product_uom_unit"/> |
4742 | 461 | </record> | ||
4743 | 462 | <record id="product_product_15" model="product.product"> | ||
4744 | 463 | <field name="product_tmpl_id" ref="product_template_15"/> | ||
4745 | 464 | <field name="default_code">RAM-SR3</field> | 307 | <field name="default_code">RAM-SR3</field> |
4746 | 465 | </record> | 308 | </record> |
4747 | 466 | 309 | ||
4749 | 467 | <record id="product_template_16" model="product.template"> | 310 | <record id="product_product_16" model="product.product"> |
4750 | 468 | <field name="name">Computer Case</field> | 311 | <field name="name">Computer Case</field> |
4751 | 469 | <field name="categ_id" ref="product_category_8"/> | 312 | <field name="categ_id" ref="product_category_8"/> |
4752 | 470 | <field name="public_categ_id" ref="case"/> | ||
4753 | 471 | <field name="standard_price">20.0</field> | 313 | <field name="standard_price">20.0</field> |
4754 | 472 | <field name="list_price">25.0</field> | 314 | <field name="list_price">25.0</field> |
4755 | 473 | <field name="type">consu</field> | 315 | <field name="type">consu</field> |
4756 | 474 | <field name="uom_id" ref="product_uom_unit"/> | 316 | <field name="uom_id" ref="product_uom_unit"/> |
4757 | 475 | <field name="uom_po_id" ref="product_uom_unit"/> | 317 | <field name="uom_po_id" ref="product_uom_unit"/> |
4758 | 476 | </record> | ||
4759 | 477 | <record id="product_product_16" model="product.product"> | ||
4760 | 478 | <field name="product_tmpl_id" ref="product_template_16"/> | ||
4761 | 479 | <field name="default_code">C-Case</field> | 318 | <field name="default_code">C-Case</field> |
4762 | 480 | </record> | 319 | </record> |
4763 | 481 | 320 | ||
4765 | 482 | <record id="product_template_17" model="product.template"> | 321 | <record id="product_product_17" model="product.product"> |
4766 | 483 | <field name="name">HDD SH-1</field> | 322 | <field name="name">HDD SH-1</field> |
4767 | 484 | <field name="categ_id" ref="product_category_8"/> | 323 | <field name="categ_id" ref="product_category_8"/> |
4768 | 485 | <field name="public_categ_id" ref="HDD"/> | ||
4769 | 486 | <field name="standard_price">860.0</field> | 324 | <field name="standard_price">860.0</field> |
4770 | 487 | <field name="list_price">975.0</field> | 325 | <field name="list_price">975.0</field> |
4771 | 488 | <field name="type">consu</field> | 326 | <field name="type">consu</field> |
4772 | 489 | <field name="uom_id" ref="product_uom_unit"/> | 327 | <field name="uom_id" ref="product_uom_unit"/> |
4773 | 490 | <field name="uom_po_id" ref="product_uom_unit"/> | 328 | <field name="uom_po_id" ref="product_uom_unit"/> |
4774 | 491 | </record> | ||
4775 | 492 | <record id="product_product_17" model="product.product"> | ||
4776 | 493 | <field name="product_tmpl_id" ref="product_template_17"/> | ||
4777 | 494 | <field name="default_code">HDD-SH1</field> | 329 | <field name="default_code">HDD-SH1</field> |
4778 | 495 | </record> | 330 | </record> |
4779 | 496 | 331 | ||
4781 | 497 | <record id="product_template_18" model="product.template"> | 332 | <record id="product_product_18" model="product.product"> |
4782 | 498 | <field name="name">HDD SH-2</field> | 333 | <field name="name">HDD SH-2</field> |
4783 | 499 | <field name="categ_id" ref="product_category_8"/> | 334 | <field name="categ_id" ref="product_category_8"/> |
4784 | 500 | <field name="public_categ_id" ref="HDD"/> | ||
4785 | 501 | <field name="standard_price">1020.0</field> | 335 | <field name="standard_price">1020.0</field> |
4786 | 502 | <field name="list_price">1150.0</field> | 336 | <field name="list_price">1150.0</field> |
4787 | 503 | <field name="type">consu</field> | 337 | <field name="type">consu</field> |
4788 | 504 | <field name="uom_id" ref="product_uom_unit"/> | 338 | <field name="uom_id" ref="product_uom_unit"/> |
4789 | 505 | <field name="uom_po_id" ref="product_uom_unit"/> | 339 | <field name="uom_po_id" ref="product_uom_unit"/> |
4790 | 506 | </record> | ||
4791 | 507 | <record id="product_product_18" model="product.product"> | ||
4792 | 508 | <field name="product_tmpl_id" ref="product_template_18"/> | ||
4793 | 509 | <field name="default_code">HDD-SH2</field> | 340 | <field name="default_code">HDD-SH2</field> |
4794 | 510 | </record> | 341 | </record> |
4795 | 511 | 342 | ||
4797 | 512 | <record id="product_template_19" model="product.template"> | 343 | <record id="product_product_19" model="product.product"> |
4798 | 513 | <field name="name">HDD on Demand</field> | 344 | <field name="name">HDD on Demand</field> |
4799 | 514 | <field name="categ_id" ref="product_category_8"/> | 345 | <field name="categ_id" ref="product_category_8"/> |
4800 | 515 | <field name="public_categ_id" ref="HDD"/> | ||
4801 | 516 | <field name="standard_price">1100.0</field> | 346 | <field name="standard_price">1100.0</field> |
4802 | 517 | <field name="list_price">1250.0</field> | 347 | <field name="list_price">1250.0</field> |
4803 | 518 | <field name="type">consu</field> | 348 | <field name="type">consu</field> |
4804 | 519 | <field name="uom_id" ref="product_uom_unit"/> | 349 | <field name="uom_id" ref="product_uom_unit"/> |
4805 | 520 | <field name="uom_po_id" ref="product_uom_unit"/> | 350 | <field name="uom_po_id" ref="product_uom_unit"/> |
4806 | 521 | <field name="description">On demand hard-disk having capacity based on requirement.</field> | 351 | <field name="description">On demand hard-disk having capacity based on requirement.</field> |
4807 | 522 | </record> | ||
4808 | 523 | <record id="product_product_19" model="product.product"> | ||
4809 | 524 | <field name="product_tmpl_id" ref="product_template_19"/> | ||
4810 | 525 | <field name="default_code">HDD-DEM</field> | 352 | <field name="default_code">HDD-DEM</field> |
4811 | 526 | </record> | 353 | </record> |
4812 | 527 | 354 | ||
4814 | 528 | <record id="product_template_20" model="product.template"> | 355 | <record id="product_product_20" model="product.product"> |
4815 | 529 | <field name="name">Motherboard I9P57</field> | 356 | <field name="name">Motherboard I9P57</field> |
4816 | 530 | <field name="categ_id" ref="product_category_8"/> | 357 | <field name="categ_id" ref="product_category_8"/> |
4817 | 531 | <field name="public_categ_id" ref="motherboard"/> | ||
4818 | 532 | <field name="standard_price">1700.0</field> | 358 | <field name="standard_price">1700.0</field> |
4819 | 533 | <field name="list_price">1950.0</field> | 359 | <field name="list_price">1950.0</field> |
4820 | 534 | <field name="type">consu</field> | 360 | <field name="type">consu</field> |
4821 | 535 | <field name="uom_id" ref="product_uom_unit"/> | 361 | <field name="uom_id" ref="product_uom_unit"/> |
4822 | 536 | <field name="uom_po_id" ref="product_uom_unit"/> | 362 | <field name="uom_po_id" ref="product_uom_unit"/> |
4823 | 537 | </record> | ||
4824 | 538 | <record id="product_product_20" model="product.product"> | ||
4825 | 539 | <field name="product_tmpl_id" ref="product_template_20"/> | ||
4826 | 540 | <field name="default_code">MBi9</field> | 363 | <field name="default_code">MBi9</field> |
4827 | 541 | </record> | 364 | </record> |
4828 | 542 | 365 | ||
4830 | 543 | <record id="product_template_21" model="product.template"> | 366 | <record id="product_product_21" model="product.product"> |
4831 | 544 | <field name="name">Motherboard A20Z7</field> | 367 | <field name="name">Motherboard A20Z7</field> |
4832 | 545 | <field name="categ_id" ref="product_category_8"/> | 368 | <field name="categ_id" ref="product_category_8"/> |
4833 | 546 | <field name="public_categ_id" ref="motherboard"/> | ||
4834 | 547 | <field name="standard_price">1790.0</field> | 369 | <field name="standard_price">1790.0</field> |
4835 | 548 | <field name="list_price">2000.0</field> | 370 | <field name="list_price">2000.0</field> |
4836 | 549 | <field name="type">consu</field> | 371 | <field name="type">consu</field> |
4837 | 550 | <field name="uom_id" ref="product_uom_unit"/> | 372 | <field name="uom_id" ref="product_uom_unit"/> |
4838 | 551 | <field name="uom_po_id" ref="product_uom_unit"/> | 373 | <field name="uom_po_id" ref="product_uom_unit"/> |
4839 | 552 | </record> | ||
4840 | 553 | <record id="product_product_21" model="product.product"> | ||
4841 | 554 | <field name="product_tmpl_id" ref="product_template_21"/> | ||
4842 | 555 | <field name="default_code">MBa20</field> | 374 | <field name="default_code">MBa20</field> |
4843 | 556 | </record> | 375 | </record> |
4844 | 557 | 376 | ||
4846 | 558 | <record id="product_template_22" model="product.template"> | 377 | <record id="product_product_22" model="product.product"> |
4847 | 559 | <field name="name">Processor Core i5 2.70 Ghz</field> | 378 | <field name="name">Processor Core i5 2.70 Ghz</field> |
4848 | 560 | <field name="categ_id" ref="product_category_8"/> | 379 | <field name="categ_id" ref="product_category_8"/> |
4849 | 561 | <field name="public_categ_id" ref="processor"/> | ||
4850 | 562 | <field name="standard_price">2010.0</field> | 380 | <field name="standard_price">2010.0</field> |
4851 | 563 | <field name="list_price">2100.0</field> | 381 | <field name="list_price">2100.0</field> |
4852 | 564 | <field name="type">consu</field> | 382 | <field name="type">consu</field> |
4853 | 565 | <field name="uom_id" ref="product_uom_unit"/> | 383 | <field name="uom_id" ref="product_uom_unit"/> |
4854 | 566 | <field name="uom_po_id" ref="product_uom_unit"/> | 384 | <field name="uom_po_id" ref="product_uom_unit"/> |
4855 | 567 | </record> | ||
4856 | 568 | <record id="product_product_22" model="product.product"> | ||
4857 | 569 | <field name="product_tmpl_id" ref="product_template_22"/> | ||
4858 | 570 | <field name="default_code">CPUi5</field> | 385 | <field name="default_code">CPUi5</field> |
4859 | 571 | </record> | 386 | </record> |
4860 | 572 | 387 | ||
4862 | 573 | <record id="product_template_23" model="product.template"> | 388 | <record id="product_product_23" model="product.product"> |
4863 | 574 | <field name="name">Processor AMD 8-Core</field> | 389 | <field name="name">Processor AMD 8-Core</field> |
4864 | 575 | <field name="categ_id" ref="product_category_8"/> | 390 | <field name="categ_id" ref="product_category_8"/> |
4865 | 576 | <field name="public_categ_id" ref="processor"/> | ||
4866 | 577 | <field name="standard_price">1910.0</field> | 391 | <field name="standard_price">1910.0</field> |
4867 | 578 | <field name="list_price">1980.0</field> | 392 | <field name="list_price">1980.0</field> |
4868 | 579 | <field name="type">consu</field> | 393 | <field name="type">consu</field> |
4869 | 580 | <field name="uom_id" ref="product_uom_unit"/> | 394 | <field name="uom_id" ref="product_uom_unit"/> |
4870 | 581 | <field name="uom_po_id" ref="product_uom_unit"/> | 395 | <field name="uom_po_id" ref="product_uom_unit"/> |
4871 | 582 | </record> | ||
4872 | 583 | <record id="product_product_23" model="product.product"> | ||
4873 | 584 | <field name="product_tmpl_id" ref="product_template_23"/> | ||
4874 | 585 | <field name="default_code">CPUa8</field> | 396 | <field name="default_code">CPUa8</field> |
4875 | 586 | </record> | 397 | </record> |
4876 | 587 | 398 | ||
4878 | 588 | <record id="product_template_24" model="product.template"> | 399 | <record id="product_product_24" model="product.product"> |
4879 | 589 | <field name="name">Graphics Card</field> | 400 | <field name="name">Graphics Card</field> |
4880 | 590 | <field name="categ_id" ref="product_category_8"/> | 401 | <field name="categ_id" ref="product_category_8"/> |
4881 | 591 | <field name="public_categ_id" ref="graphics_card"/> | ||
4882 | 592 | <field name="standard_price">876.0</field> | 402 | <field name="standard_price">876.0</field> |
4883 | 593 | <field name="list_price">885.0</field> | 403 | <field name="list_price">885.0</field> |
4884 | 594 | <field name="type">consu</field> | 404 | <field name="type">consu</field> |
4885 | 595 | <field name="uom_id" ref="product_uom_unit"/> | 405 | <field name="uom_id" ref="product_uom_unit"/> |
4886 | 596 | <field name="uom_po_id" ref="product_uom_unit"/> | 406 | <field name="uom_po_id" ref="product_uom_unit"/> |
4887 | 597 | </record> | ||
4888 | 598 | <record id="product_product_24" model="product.product"> | ||
4889 | 599 | <field name="product_tmpl_id" ref="product_template_24"/> | ||
4890 | 600 | <field name="default_code">CARD</field> | 407 | <field name="default_code">CARD</field> |
4891 | 601 | </record> | 408 | </record> |
4892 | 602 | 409 | ||
4894 | 603 | <record id="product_template_25" model="product.template"> | 410 | <record id="product_product_25" model="product.product"> |
4895 | 604 | <field name="name">Laptop E5023</field> | 411 | <field name="name">Laptop E5023</field> |
4896 | 605 | <field name="categ_id" ref="product_category_4"/> | 412 | <field name="categ_id" ref="product_category_4"/> |
4897 | 606 | <field name="public_categ_id" ref="laptops"/> | ||
4898 | 607 | <field name="standard_price">2870.0</field> | 413 | <field name="standard_price">2870.0</field> |
4899 | 608 | <field name="list_price">2950.0</field> | 414 | <field name="list_price">2950.0</field> |
4900 | 609 | <field name="type">consu</field> | 415 | <field name="type">consu</field> |
4901 | @@ -613,16 +419,12 @@ | |||
4902 | 613 | 4GB RAM | 419 | 4GB RAM |
4903 | 614 | Standard-1294P Processor | 420 | Standard-1294P Processor |
4904 | 615 | QWERTY keyboard</field> | 421 | QWERTY keyboard</field> |
4905 | 616 | </record> | ||
4906 | 617 | <record id="product_product_25" model="product.product"> | ||
4907 | 618 | <field name="product_tmpl_id" ref="product_template_25"/> | ||
4908 | 619 | <field name="default_code">LAP-E5</field> | 422 | <field name="default_code">LAP-E5</field> |
4909 | 620 | </record> | 423 | </record> |
4910 | 621 | 424 | ||
4912 | 622 | <record id="product_template_26" model="product.template"> | 425 | <record id="product_product_26" model="product.product"> |
4913 | 623 | <field name="name">Laptop S3450</field> | 426 | <field name="name">Laptop S3450</field> |
4914 | 624 | <field name="categ_id" ref="product_category_4"/> | 427 | <field name="categ_id" ref="product_category_4"/> |
4915 | 625 | <field name="public_categ_id" ref="laptops"/> | ||
4916 | 626 | <field name="standard_price">3000.0</field> | 428 | <field name="standard_price">3000.0</field> |
4917 | 627 | <field name="list_price">3245.0</field> | 429 | <field name="list_price">3245.0</field> |
4918 | 628 | <field name="type">consu</field> | 430 | <field name="type">consu</field> |
4919 | @@ -632,141 +434,106 @@ | |||
4920 | 632 | 6GB RAM | 434 | 6GB RAM |
4921 | 633 | Hi-Speed 234Q Processor | 435 | Hi-Speed 234Q Processor |
4922 | 634 | QWERTY keyboard</field> | 436 | QWERTY keyboard</field> |
4923 | 635 | </record> | ||
4924 | 636 | <record id="product_product_26" model="product.product"> | ||
4925 | 637 | <field name="product_tmpl_id" ref="product_template_26"/> | ||
4926 | 638 | <field name="default_code">LAP-S3</field> | 437 | <field name="default_code">LAP-S3</field> |
4927 | 639 | </record> | 438 | </record> |
4928 | 640 | 439 | ||
4930 | 641 | <record id="product_template_27" model="product.template"> | 440 | <record id="product_product_27" model="product.product"> |
4931 | 642 | <field name="name">Laptop Customized</field> | 441 | <field name="name">Laptop Customized</field> |
4932 | 643 | <field name="categ_id" ref="product_category_4"/> | 442 | <field name="categ_id" ref="product_category_4"/> |
4933 | 644 | <field name="public_categ_id" ref="laptops"/> | ||
4934 | 645 | <field name="standard_price">3300.0</field> | 443 | <field name="standard_price">3300.0</field> |
4935 | 646 | <field name="list_price">3645.0</field> | 444 | <field name="list_price">3645.0</field> |
4936 | 647 | <field name="type">consu</field> | 445 | <field name="type">consu</field> |
4937 | 648 | <field name="uom_id" ref="product_uom_unit"/> | 446 | <field name="uom_id" ref="product_uom_unit"/> |
4938 | 649 | <field name="uom_po_id" ref="product_uom_unit"/> | 447 | <field name="uom_po_id" ref="product_uom_unit"/> |
4939 | 650 | <field name="description">Custom Laptop based on customer's requirement.</field> | 448 | <field name="description">Custom Laptop based on customer's requirement.</field> |
4940 | 651 | </record> | ||
4941 | 652 | <record id="product_product_27" model="product.product"> | ||
4942 | 653 | <field name="product_tmpl_id" ref="product_template_27"/> | ||
4943 | 654 | <field name="default_code">LAP-CUS</field> | 449 | <field name="default_code">LAP-CUS</field> |
4944 | 655 | </record> | 450 | </record> |
4945 | 656 | 451 | ||
4947 | 657 | <record id="product_template_28" model="product.template"> | 452 | <record id="product_product_28" model="product.product"> |
4948 | 658 | <field name="name">External Hard disk</field> | 453 | <field name="name">External Hard disk</field> |
4949 | 659 | <field name="categ_id" ref="product_category_6"/> | 454 | <field name="categ_id" ref="product_category_6"/> |
4950 | 660 | <field name="public_categ_id" ref="External_Hard_Drive"/> | ||
4951 | 661 | <field name="standard_price">390.0</field> | 455 | <field name="standard_price">390.0</field> |
4952 | 662 | <field name="list_price">405.0</field> | 456 | <field name="list_price">405.0</field> |
4953 | 663 | <field name="type">consu</field> | 457 | <field name="type">consu</field> |
4954 | 664 | <field name="uom_id" ref="product_uom_unit"/> | 458 | <field name="uom_id" ref="product_uom_unit"/> |
4955 | 665 | <field name="uom_po_id" ref="product_uom_unit"/> | 459 | <field name="uom_po_id" ref="product_uom_unit"/> |
4956 | 666 | </record> | ||
4957 | 667 | <record id="product_product_28" model="product.product"> | ||
4958 | 668 | <field name="product_tmpl_id" ref="product_template_28"/> | ||
4959 | 669 | <field name="default_code">EXT-HDD</field> | 460 | <field name="default_code">EXT-HDD</field> |
4960 | 670 | </record> | 461 | </record> |
4961 | 671 | 462 | ||
4962 | 672 | 463 | ||
4964 | 673 | <record id="product_template_29" model="product.template"> | 464 | <record id="product_product_29" model="product.product"> |
4965 | 674 | <field name="name">Pen drive, SP-2</field> | 465 | <field name="name">Pen drive, SP-2</field> |
4966 | 675 | <field name="categ_id" ref="product_category_7"/> | 466 | <field name="categ_id" ref="product_category_7"/> |
4967 | 676 | <field name="public_categ_id" ref="Pen_Drive"/> | ||
4968 | 677 | <field name="standard_price">90.0</field> | 467 | <field name="standard_price">90.0</field> |
4969 | 678 | <field name="list_price">100.0</field> | 468 | <field name="list_price">100.0</field> |
4970 | 679 | <field name="type">consu</field> | 469 | <field name="type">consu</field> |
4971 | 680 | <field name="uom_id" ref="product_uom_unit"/> | 470 | <field name="uom_id" ref="product_uom_unit"/> |
4972 | 681 | <field name="uom_po_id" ref="product_uom_unit"/> | 471 | <field name="uom_po_id" ref="product_uom_unit"/> |
4973 | 682 | </record> | ||
4974 | 683 | <record id="product_product_29" model="product.product"> | ||
4975 | 684 | <field name="product_tmpl_id" ref="product_template_29"/> | ||
4976 | 685 | <field name="default_code">PD-SP2</field> | 472 | <field name="default_code">PD-SP2</field> |
4977 | 686 | </record> | 473 | </record> |
4978 | 687 | 474 | ||
4979 | 688 | 475 | ||
4981 | 689 | <record id="product_template_30" model="product.template"> | 476 | <record id="product_product_30" model="product.product"> |
4982 | 690 | <field name="name">Pen drive, SP-4</field> | 477 | <field name="name">Pen drive, SP-4</field> |
4983 | 691 | <field name="categ_id" ref="product_category_7"/> | 478 | <field name="categ_id" ref="product_category_7"/> |
4984 | 692 | <field name="public_categ_id" ref="Pen_Drive"/> | ||
4985 | 693 | <field name="standard_price">126.0</field> | 479 | <field name="standard_price">126.0</field> |
4986 | 694 | <field name="list_price">145.0</field> | 480 | <field name="list_price">145.0</field> |
4987 | 695 | <field name="type">consu</field> | 481 | <field name="type">consu</field> |
4988 | 696 | <field name="uom_id" ref="product_uom_unit"/> | 482 | <field name="uom_id" ref="product_uom_unit"/> |
4989 | 697 | <field name="uom_po_id" ref="product_uom_unit"/> | 483 | <field name="uom_po_id" ref="product_uom_unit"/> |
4990 | 698 | </record> | ||
4991 | 699 | <record id="product_product_30" model="product.product"> | ||
4992 | 700 | <field name="product_tmpl_id" ref="product_template_30"/> | ||
4993 | 701 | <field name="default_code">PD-SP4</field> | 484 | <field name="default_code">PD-SP4</field> |
4994 | 702 | </record> | 485 | </record> |
4995 | 703 | 486 | ||
4997 | 704 | <record id="product_template_31" model="product.template"> | 487 | <record id="product_product_31" model="product.product"> |
4998 | 705 | <field name="name">Multimedia Speakers</field> | 488 | <field name="name">Multimedia Speakers</field> |
4999 | 706 | <field name="categ_id" ref="product_category_7"/> | 489 | <field name="categ_id" ref="product_category_7"/> |
5000 | 707 | <field name="public_categ_id" ref="Speakers"/> |