Initial commit: Sale packages

This commit is contained in:
Ernad Husremovic 2025-08-29 15:20:49 +02:00
commit 14e3d26998
6469 changed files with 2479670 additions and 0 deletions

View file

@ -0,0 +1,65 @@
# Products & Pricelists
This is the base module for managing products and pricelists in Odoo.
========================================================================
Products support variants, different pricing methods, vendors information,
make to stock/order, different units of measure, packaging and properties.
Pricelists support:
-------------------
* Multiple-level of discount (by product, category, quantities)
* Compute price based on different criteria:
* Other pricelist
* Cost price
* List price
* Vendor price
Pricelists preferences by product and/or partners.
Print product labels with barcode.
## Installation
```bash
pip install odoo-bringout-oca-ocb-product
```
## Dependencies
This addon depends on:
- base
- mail
- uom
## Manifest Information
- **Name**: Products & Pricelists
- **Version**: 1.2
- **Category**: Sales/Sales
- **License**: LGPL-3
- **Installable**: True
## Source
Based on [OCA/OCB](https://github.com/OCA/OCB) branch 16.0, addon `product`.
## License
This package maintains the original LGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md

View file

@ -0,0 +1,32 @@
# Architecture
```mermaid
flowchart TD
U[Users] -->|HTTP| V[Views and QWeb Templates]
V --> C[Controllers]
V --> W[Wizards Transient Models]
C --> M[Models and ORM]
W --> M
M --> R[Reports]
DX[Data XML] --> M
S[Security ACLs and Groups] -. enforces .-> M
subgraph Product Module - product
direction LR
M:::layer
W:::layer
C:::layer
V:::layer
R:::layer
S:::layer
DX:::layer
end
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
```
Notes
- Views include tree/form/kanban templates and report templates.
- Controllers provide website/portal routes when present.
- Wizards are UI flows implemented with `models.TransientModel`.
- Data XML loads data/demo records; Security defines groups and access.

View file

@ -0,0 +1,3 @@
# Configuration
Refer to Odoo settings for product. Configure related models, access rights, and options as needed.

View file

@ -0,0 +1,3 @@
# Controllers
This module does not define custom HTTP controllers.

View file

@ -0,0 +1,7 @@
# Dependencies
This addon depends on:
- base
- [mail](../../odoo-bringout-oca-ocb-mail)
- [uom](../../odoo-bringout-oca-ocb-uom)

View file

@ -0,0 +1,4 @@
# FAQ
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
- Q: How to enable? A: Start server with --addon product or install in UI.

View file

@ -0,0 +1,7 @@
# Install
```bash
pip install odoo-bringout-oca-ocb-product"
# or
uv pip install odoo-bringout-oca-ocb-product"
```

View file

@ -0,0 +1,32 @@
# Models
Detected core models and extensions in product.
```mermaid
classDiagram
class product_attribute
class product_attribute_custom_value
class product_attribute_value
class product_category
class product_packaging
class product_pricelist
class product_pricelist_item
class product_product
class product_supplierinfo
class product_tag
class product_template
class product_template_attribute_exclusion
class product_template_attribute_line
class product_template_attribute_value
class decimal_precision
class res_company
class res_config_settings
class res_country_group
class res_currency
class res_partner
class uom_uom
```
Notes
- Classes show model technical names; fields omitted for brevity.
- Items listed under _inherit are extensions of existing models.

View file

@ -0,0 +1,6 @@
# Overview
Packaged Odoo addon: product. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon product
- License: LGPL-3

View file

@ -0,0 +1,40 @@
# Reports
Report definitions and templates in product.
```mermaid
classDiagram
class ReportProductTemplateLabel
AbstractModel <|-- ReportProductTemplateLabel
class ReportProductTemplateLabelDymo
AbstractModel <|-- ReportProductTemplateLabelDymo
class ProductPricelistReport
AbstractModel <|-- ProductPricelistReport
```
## Available Reports
### PDF/Document Reports
- **Product Label (PDF)** (PDF/Print)
- **Product Packaging (PDF)** (PDF/Print)
- **Pricelist** (PDF/Print)
- **Dymo Label Sheet** (PDF/Print)
- **Product Label (PDF)** (PDF/Print)
## Report Files
- **__init__.py** (Python logic)
- **product_label_report.py** (Python logic)
- **product_packaging.xml** (XML template/definition)
- **product_pricelist_report.py** (Python logic)
- **product_pricelist_report_templates.xml** (XML template/definition)
- **product_product_templates.xml** (XML template/definition)
- **product_reports.xml** (XML template/definition)
- **product_template_templates.xml** (XML template/definition)
## Notes
- Named reports above are accessible through Odoo's reporting menu
- Python files define report logic and data processing
- XML files contain report templates, definitions, and formatting
- Reports are integrated with Odoo's printing and email systems

View file

@ -0,0 +1,42 @@
# Security
Access control and security definitions in product.
## Access Control Lists (ACLs)
Model access permissions defined in:
- **[ir.model.access.csv](../product/security/ir.model.access.csv)**
- 30 model access rules
## Record Rules
Row-level security rules defined in:
## Security Groups & Configuration
Security groups and permissions defined in:
- **[product_security.xml](../product/security/product_security.xml)**
- 5 security groups defined
```mermaid
graph TB
subgraph "Security Layers"
A[Users] --> B[Groups]
B --> C[Access Control Lists]
C --> D[Models]
B --> E[Record Rules]
E --> F[Individual Records]
end
```
Security files overview:
- **[ir.model.access.csv](../product/security/ir.model.access.csv)**
- Model access permissions (CRUD rights)
- **[product_security.xml](../product/security/product_security.xml)**
- Security groups, categories, and XML-based rules
Notes
- Access Control Lists define which groups can access which models
- Record Rules provide row-level security (filter records by user/group)
- Security groups organize users and define permission sets
- All security is enforced at the ORM level by Odoo

View file

@ -0,0 +1,5 @@
# Troubleshooting
- Ensure Python and Odoo environment matches repo guidance.
- Check database connectivity and logs if startup fails.
- Validate that dependent addons listed in DEPENDENCIES.md are installed.

View file

@ -0,0 +1,7 @@
# Usage
Start Odoo including this addon (from repo root):
```bash
python3 scripts/odoo_web_server.py --db-name mydb --addon product
```

View file

@ -0,0 +1,8 @@
# Wizards
Transient models exposed as UI wizards in product.
```mermaid
classDiagram
class ProductLabelLayout
```

View file

@ -0,0 +1,7 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
from . import report
from . import populate
from . import wizard

View file

@ -0,0 +1,73 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
{
'name': 'Products & Pricelists',
'version': '1.2',
'category': 'Sales/Sales',
'depends': ['base', 'mail', 'uom'],
'description': """
This is the base module for managing products and pricelists in Odoo.
========================================================================
Products support variants, different pricing methods, vendors information,
make to stock/order, different units of measure, packaging and properties.
Pricelists support:
-------------------
* Multiple-level of discount (by product, category, quantities)
* Compute price based on different criteria:
* Other pricelist
* Cost price
* List price
* Vendor price
Pricelists preferences by product and/or partners.
Print product labels with barcode.
""",
'data': [
'data/product_data.xml',
'security/product_security.xml',
'security/ir.model.access.csv',
'wizard/product_label_layout_views.xml',
'views/product_views.xml',
'views/res_config_settings_views.xml',
'views/product_attribute_views.xml',
'views/product_category_views.xml',
'views/product_packaging_views.xml',
'views/product_pricelist_item_views.xml',
'views/product_pricelist_views.xml',
'views/product_supplierinfo_views.xml',
'views/product_template_views.xml',
'views/product_tag_views.xml',
'views/res_country_group_views.xml',
'views/res_partner_views.xml',
'report/product_reports.xml',
'report/product_product_templates.xml',
'report/product_template_templates.xml',
'report/product_packaging.xml',
'report/product_pricelist_report_templates.xml',
],
'demo': [
'data/product_demo.xml',
],
'installable': True,
'assets': {
'web.assets_backend': [
'product/static/src/js/**/*',
'product/static/src/xml/**/*',
],
'web.report_assets_common': [
'product/static/src/scss/report_label_sheet.scss',
],
'web.qunit_suite_tests': [
'product/static/tests/**/*',
],
},
'license': 'LGPL-3',
}

View file

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="product_category_all" model="product.category">
<field name="name">All</field>
</record>
<record id="product_category_1" model="product.category">
<field name="parent_id" ref="product_category_all"/>
<field name="name">Saleable</field>
</record>
<record id="cat_expense" model="product.category">
<field name="parent_id" ref="product_category_all"/>
<field name="name">Expenses</field>
</record>
<!--
Precisions
-->
<record forcecreate="True" id="decimal_price" model="decimal.precision">
<field name="name">Product Price</field>
<field name="digits">2</field>
</record>
<record forcecreate="True" id="decimal_discount" model="decimal.precision">
<field name="name">Discount</field>
<field name="digits">2</field>
</record>
<record forcecreate="True" id="decimal_stock_weight" model="decimal.precision">
<field name="name">Stock Weight</field>
<field name="digits">2</field>
</record>
<record forcecreate="True" id="decimal_volume" model="decimal.precision">
<field name="name">Volume</field>
<field name="digits">2</field>
</record>
<record forcecreate="True" id="decimal_product_uom" model="decimal.precision">
<field name="name">Product Unit of Measure</field>
<field name="digits" eval="2"/>
</record>
<!--
... to here, it should be in product_demo but we cant just move it
there yet otherwise people who have installed the server (even with the without-demo
parameter) will see those record just disappear.
-->
<!-- Price list -->
<record id="list0" model="product.pricelist">
<field name="name">Public Pricelist</field>
<field name="sequence">1</field>
</record>
<!--
Property
-->
</data>
</odoo>

View file

@ -0,0 +1,793 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<!-- We want to activate product variant by default for easier demoing. -->
<record id="base.group_user" model="res.groups">
<field name="implied_ids" eval="[(4, ref('product.group_product_variant'))]"/>
</record>
<record id="product_category_2" model="product.category">
<field name="parent_id" ref="product.product_category_all"/>
<field name="name">Internal</field>
</record>
<record id="product_category_3" model="product.category">
<field name="parent_id" ref="product.product_category_1"/>
<field name="name">Services</field>
</record>
<record id="product_category_6" model="product.category">
<field name="parent_id" ref="product.product_category_3"/>
<field name="name">Saleable</field>
</record>
<record id="product_category_4" model="product.category">
<field name="parent_id" ref="product.product_category_1"/>
<field name="name">Software</field>
</record>
<record id="product_category_5" model="product.category">
<field name="parent_id" ref="product_category_1"/>
<field name="name">Office Furniture</field>
</record>
<record id="product_category_consumable" model="product.category">
<field name="parent_id" ref="product_category_all"/>
<field name="name">Consumable</field>
</record>
<!-- Expensable products -->
<record id="expense_product" model="product.product">
<field name="name">Restaurant Expenses</field>
<field name="list_price">14.0</field>
<field name="standard_price">8.0</field>
<field name="detailed_type">service</field>
<field name="categ_id" ref="product.cat_expense"/>
</record>
<record id="expense_hotel" model="product.product">
<field name="name">Hotel Accommodation</field>
<field name="list_price">400.0</field>
<field name="standard_price">400.0</field>
<field name="detailed_type">service</field>
<field name="uom_id" ref="uom.product_uom_day"/>
<field name="uom_po_id" ref="uom.product_uom_day"/>
<field name="categ_id" ref="cat_expense"/>
</record>
<!-- Service products -->
<record id="product_product_1" model="product.product">
<field name="name">Virtual Interior Design</field>
<field name="categ_id" ref="product_category_3"/>
<field name="standard_price">20.5</field>
<field name="list_price">30.75</field>
<field name="detailed_type">service</field>
<field name="uom_id" ref="uom.product_uom_hour"/>
<field name="uom_po_id" ref="uom.product_uom_hour"/>
</record>
<record id="product_product_2" model="product.product">
<field name="name">Virtual Home Staging</field>
<field name="categ_id" ref="product_category_3"/>
<field name="standard_price">25.5</field>
<field name="list_price">38.25</field>
<field name="detailed_type">service</field>
<field name="uom_id" ref="uom.product_uom_hour"/>
<field name="uom_po_id" ref="uom.product_uom_hour"/>
</record>
<!-- Physical Products -->
<record id="product_delivery_01" model="product.product">
<field name="name">Office Chair</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">55.0</field>
<field name="list_price">70.0</field>
<field name="detailed_type">consu</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="default_code">FURN_7777</field>
<field name="image_1920" type="base64" file="product/static/img/product_chair.jpg"/>
</record>
<record id="product_delivery_02" model="product.product">
<field name="name">Office Lamp</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">35.0</field>
<field name="list_price">40.0</field>
<field name="detailed_type">consu</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="default_code">FURN_8888</field>
<field name="image_1920" type="base64" file="product/static/img/product_lamp.png"/>
</record>
<record id="product_order_01" model="product.product">
<field name="name">Office Design Software</field>
<field name="categ_id" ref="product_category_4"/>
<field name="standard_price">235.0</field>
<field name="list_price">280.0</field>
<field name="detailed_type">consu</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="default_code">FURN_9999</field>
<field name="image_1920" type="base64" file="product/static/img/product_product_43-image.jpg"/>
</record>
<record id="product_product_3" model="product.product">
<field name="name">Desk Combination</field>
<field name="categ_id" ref="product_category_5"/>
<field name="list_price">450.0</field>
<field name="standard_price">300.0</field>
<field name="detailed_type">consu</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="description_sale">Desk combination, black-brown: chair + desk + drawer.</field>
<field name="default_code">FURN_7800</field>
<field name="image_1920" type="base64" file="product/static/img/product_product_3-image.jpg"/>
</record>
<!-- Variants -->
<record id="product_attribute_1" model="product.attribute">
<field name="name">Legs</field>
<field name="sequence">10</field>
</record>
<record id="product_attribute_value_1" model="product.attribute.value">
<field name="name">Steel</field>
<field name="attribute_id" ref="product_attribute_1"/>
<field name="sequence">1</field>
</record>
<record id="product_attribute_value_2" model="product.attribute.value">
<field name="name">Aluminium</field>
<field name="attribute_id" ref="product_attribute_1"/>
<field name="sequence">2</field>
</record>
<record id="product_attribute_2" model="product.attribute">
<field name="name">Color</field>
<field name="sequence">20</field>
</record>
<record id="product_attribute_value_3" model="product.attribute.value">
<field name="name">White</field>
<field name="attribute_id" ref="product_attribute_2"/>
<field name="sequence">1</field>
</record>
<record id="product_attribute_value_4" model="product.attribute.value">
<field name="name">Black</field>
<field name="attribute_id" ref="product_attribute_2"/>
<field name="sequence">2</field>
</record>
<record id="product_attribute_3" model="product.attribute">
<field name="name">Duration</field>
<field name="sequence">30</field>
</record>
<record id="product_attribute_value_5" model="product.attribute.value">
<field name="name">1 year</field>
<field name="attribute_id" ref="product_attribute_3"/>
</record>
<record id="product_attribute_value_6" model="product.attribute.value">
<field name="name">2 year</field>
<field name="attribute_id" ref="product_attribute_3"/>
</record>
<record id="product_product_4_product_template" model="product.template">
<field name="name">Customizable Desk</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">500.0</field>
<field name="list_price">750.0</field>
<field name="detailed_type">consu</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="description_sale">160x80cm, with large legs.</field>
</record>
<!-- the product template attribute lines have to be defined before creating the variants -->
<record id="product_4_attribute_1_product_template_attribute_line" model="product.template.attribute.line">
<field name="product_tmpl_id" ref="product_product_4_product_template"/>
<field name="attribute_id" ref="product_attribute_1"/>
<field name="value_ids" eval="[(6, 0, [ref('product.product_attribute_value_1'), ref('product.product_attribute_value_2')])]"/>
</record>
<record id="product_4_attribute_2_product_template_attribute_line" model="product.template.attribute.line">
<field name="product_tmpl_id" ref="product_product_4_product_template"/>
<field name="attribute_id" ref="product_attribute_2"/>
<field name="value_ids" eval="[(6, 0, [ref('product.product_attribute_value_3'), ref('product.product_attribute_value_4')])]"/>
</record>
<!--
Handle automatically created product.template.attribute.value.
Meaning that the combination between the "customizable desk" and the attribute value "black" will be materialized
into a "product.template.attribute.value" with the ref "product.product_4_attribute_1_value_1".
This will allow setting fields like "price_extra" and "exclude_for"
-->
<function model="ir.model.data" name="_update_xmlids">
<value model="base" eval="[{
'xml_id': 'product.product_4_attribute_1_value_1',
'record': obj().env.ref('product.product_4_attribute_1_product_template_attribute_line').product_template_value_ids[0],
'noupdate': True,
}, {
'xml_id': 'product.product_4_attribute_1_value_2',
'record': obj().env.ref('product.product_4_attribute_1_product_template_attribute_line').product_template_value_ids[1],
'noupdate': True,
}, {
'xml_id': 'product.product_4_attribute_2_value_1',
'record': obj().env.ref('product.product_4_attribute_2_product_template_attribute_line').product_template_value_ids[0],
'noupdate': True,
}, {
'xml_id': 'product.product_4_attribute_2_value_2',
'record': obj().env.ref('product.product_4_attribute_2_product_template_attribute_line').product_template_value_ids[1],
'noupdate': True,
},]"/>
</function>
<function model="ir.model.data" name="_update_xmlids">
<value model="base" eval="[{
'xml_id': 'product.product_product_4',
'record': obj().env.ref('product.product_product_4_product_template')._get_variant_for_combination(obj().env.ref('product.product_4_attribute_1_value_1') + obj().env.ref('product.product_4_attribute_2_value_1')),
'noupdate': True,
}, {
'xml_id': 'product.product_product_4b',
'record': obj().env.ref('product.product_product_4_product_template')._get_variant_for_combination(obj().env.ref('product.product_4_attribute_1_value_1') + obj().env.ref('product.product_4_attribute_2_value_2')),
'noupdate': True,
}, {
'xml_id': 'product.product_product_4c',
'record': obj().env.ref('product.product_product_4_product_template')._get_variant_for_combination(obj().env.ref('product.product_4_attribute_1_value_2') + obj().env.ref('product.product_4_attribute_2_value_1')),
'noupdate': True,
},]"/>
</function>
<record id="product_product_4" model="product.product">
<field name="default_code">FURN_0096</field>
<field name="standard_price">500.0</field>
<field name="weight">0.01</field>
<field name="image_1920" type="base64" file="product/static/img/table02.jpg"/>
</record>
<record id="product_product_4b" model="product.product">
<field name="default_code">FURN_0097</field>
<field name="weight">0.01</field>
<field name="standard_price">500.0</field>
<field name="image_1920" type="base64" file="product/static/img/table04.jpg"/>
</record>
<record id="product_product_4c" model="product.product">
<field name="default_code">FURN_0098</field>
<field name="weight">0.01</field>
<field name="standard_price">500.0</field>
<field name="image_1920" type="base64" file="product/static/img/table03.jpg"/>
</record>
<record id="product_product_5" model="product.product">
<field name="name">Corner Desk Right Sit</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">600.0</field>
<field name="list_price">147.0</field>
<field name="detailed_type">consu</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="default_code">E-COM06</field>
<field name="image_1920" type="base64" file="product/static/img/product_product_5-image.jpg"/>
</record>
<record id="product_product_6" model="product.product">
<field name="name">Large Cabinet</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">800.0</field>
<field name="list_price">320.0</field>
<field name="detailed_type">consu</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="default_code">E-COM07</field>
<field name='weight'>0.330</field>
<field name="image_1920" type="base64" file="product/static/img/product_product_6-image.jpg"/>
</record>
<record id="product_product_7" model="product.product">
<field name="name">Storage Box</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">14.0</field>
<field name="list_price">15.8</field>
<field name="detailed_type">consu</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="default_code">E-COM08</field>
<field name="image_1920" type="base64" file="product/static/img/product_product_7-image.png"/>
</record>
<record id="product_product_8" model="product.product">
<field name="name">Large Desk</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">1299.0</field>
<field name="list_price">1799.0</field>
<field name="detailed_type">consu</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="default_code">E-COM09</field>
<field name='weight'>9.54</field>
<field name="image_1920" type="base64" file="product/static/img/product_product_8-image.png"/>
</record>
<record id="product_product_9" model="product.product">
<field name="name">Pedal Bin</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">10.0</field>
<field name="list_price">47.0</field>
<field name="detailed_type">consu</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="default_code">E-COM10</field>
<field name="image_1920" type="base64" file="product/static/img/product_product_9-image.jpg"/>
</record>
<record id="product_product_10" model="product.product">
<field name="name">Cabinet with Doors</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">120.50</field>
<field name="list_price">140</field>
<field name="detailed_type">consu</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="default_code">E-COM11</field>
<field name="image_1920" type="base64" file="product/static/img/product_product_10-image.jpg"/>
</record>
<record id="product_product_11_product_template" model="product.template">
<field name="name">Conference Chair</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">28</field>
<field name="list_price">33</field>
<field name="detailed_type">consu</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="image_1920" type="base64" file="product/static/img/product_product_11-image.png"/>
</record>
<!-- the product template attribute lines have to be defined before creating the variants -->
<record id="product_11_attribute_1_product_template_attribute_line" model="product.template.attribute.line">
<field name="product_tmpl_id" ref="product_product_11_product_template"/>
<field name="attribute_id" ref="product_attribute_1"/>
<field name="value_ids" eval="[(6,0,[ref('product.product_attribute_value_1'), ref('product.product_attribute_value_2')])]"/>
</record>
<function model="ir.model.data" name="_update_xmlids">
<value model="base" eval="[{
'xml_id': 'product.product_11_attribute_1_value_1',
'record': obj().env.ref('product.product_11_attribute_1_product_template_attribute_line').product_template_value_ids[0],
'noupdate': True,
}, {
'xml_id': 'product.product_11_attribute_1_value_2',
'record': obj().env.ref('product.product_11_attribute_1_product_template_attribute_line').product_template_value_ids[1],
'noupdate': True,
}]"/>
</function>
<function model="ir.model.data" name="_update_xmlids">
<value model="base" eval="[{
'xml_id': 'product.product_product_11',
'record': obj().env.ref('product.product_product_11_product_template')._get_variant_for_combination(obj().env.ref('product.product_11_attribute_1_value_1')),
'noupdate': True,
}, {
'xml_id': 'product.product_product_11b',
'record': obj().env.ref('product.product_product_11_product_template')._get_variant_for_combination(obj().env.ref('product.product_11_attribute_1_value_2')),
'noupdate': True,
},]"/>
</function>
<record id="product_product_11" model="product.product">
<field name="default_code">E-COM12</field>
<field name="weight">0.01</field>
</record>
<record id="product_product_11b" model="product.product">
<field name="default_code">E-COM13</field>
<field name="weight">0.01</field>
</record>
<record id="product.product_4_attribute_1_value_2" model="product.template.attribute.value">
<field name="price_extra">50.40</field>
</record>
<record id="product.product_11_attribute_1_value_2" model="product.template.attribute.value">
<field name="price_extra">6.40</field>
</record>
<!-- MRP Demo Data-->
<record id="product_product_12" model="product.product">
<field name="name">Office Chair Black</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">180</field>
<field name="list_price">120.50</field>
<field name="detailed_type">consu</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="default_code">FURN_0269</field>
<field name="image_1920" type="base64" file="product/static/img/product_product_12-image.png"/>
</record>
<record id="product_product_13" model="product.product">
<field name="name">Corner Desk Left Sit</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">78.0</field>
<field name="list_price">85.0</field>
<field name="detailed_type">consu</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="default_code">FURN_1118</field>
<field name="image_1920" type="base64" file="product/static/img/product_product_13-image.jpg"/>
</record>
<record id="product_product_16" model="product.product">
<field name="name">Drawer Black</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">20.0</field>
<field name="list_price">25.0</field>
<field name="detailed_type">consu</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="default_code">FURN_8900</field>
<field name="image_1920" type="base64" file="product/static/img/product_product_16-image.jpg"/>
</record>
<record id="product_product_20" model="product.product">
<field name="name">Flipover</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">1700.0</field>
<field name="list_price">1950.0</field>
<field name="detailed_type">consu</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="default_code">FURN_9001</field>
<field name="image_1920" type="base64" file="product/static/img/product_product_20-image.png"/>
</record>
<record id="product_product_22" model="product.product">
<field name="name">Desk Stand with Screen</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">2010.0</field>
<field name="list_price">2100.0</field>
<field name="detailed_type">consu</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="default_code">FURN_7888</field>
<field name="image_1920" type="base64" file="product/static/img/product_product_22-image.png"/>
</record>
<record id="product_product_24" model="product.product">
<field name="name">Individual Workplace</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">876.0</field>
<field name="list_price">885.0</field>
<field name="detailed_type">consu</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="default_code">FURN_0789</field>
<field name="image_1920" type="base64" file="product/static/img/product_product_24-image.jpg"/>
</record>
<record id="product_product_25" model="product.product">
<field name="name">Acoustic Bloc Screens</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">287.0</field>
<field name="list_price">295.0</field>
<field name="detailed_type">consu</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="default_code">FURN_6666</field>
<field name="image_1920" type="base64" file="product/static/img/product_product_25-image.png"/>
</record>
<record id="product_product_27" model="product.product">
<field name="name">Drawer</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">100.0</field>
<field name="list_price">110.50</field>
<field name="detailed_type">consu</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="description">Drawer with two routing possiblities.</field>
<field name="default_code">FURN_8855</field>
<field name="image_1920" type="base64" file="product/static/img/product_product_27-image.jpg"/>
</record>
<record id="consu_delivery_03" model="product.product">
<field name="name">Four Person Desk</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">2500.0</field>
<field name="list_price">2350.0</field>
<field name="detailed_type">consu</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="description_sale">Four person modern office workstation</field>
<field name="default_code">FURN_8220</field>
<field name="image_1920" type="base64" file="product/static/img/product_product_d03-image.png"/>
</record>
<record id="consu_delivery_02" model="product.product">
<field name="name">Large Meeting Table</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">4500.0</field>
<field name="list_price">4000.0</field>
<field name="detailed_type">consu</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="description_sale">Conference room table</field>
<field name="default_code">FURN_6741</field>
<field name="image_1920" type="base64" file="product/static/img/product_product_46-image.jpg"/>
</record>
<record id="consu_delivery_01" model="product.product">
<field name="name">Three-Seat Sofa</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">1000</field>
<field name="list_price">1500</field>
<field name="detailed_type">consu</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="description_sale">Three Seater Sofa with Lounger in Steel Grey Colour</field>
<field name="default_code">FURN_8999</field>
<field name="image_1920" type="base64" file="product/static/img/product_product_d01-image.jpg"/>
</record>
<!--
Resource: product.supplierinfo
-->
<record id="product_supplierinfo_1" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_6_product_template"/>
<field name="partner_id" ref="base.res_partner_1"/>
<field name="delay">3</field>
<field name="min_qty">1</field>
<field name="price">750</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_2" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_6_product_template"/>
<field name="partner_id" ref="base.res_partner_4"/>
<field name="delay">3</field>
<field name="min_qty">1</field>
<field name="price">790</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_2bis" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_6_product_template"/>
<field name="partner_id" ref="base.res_partner_4"/>
<field name="delay">3</field>
<field name="min_qty">3</field>
<field name="price">785</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_3" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_7_product_template"/>
<field name="partner_id" ref="base.res_partner_1"/>
<field name="delay">3</field>
<field name="min_qty">1</field>
<field name="price">13.0</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_4" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_7_product_template"/>
<field name="partner_id" ref="base.res_partner_4"/>
<field name="delay">3</field>
<field name="min_qty">1</field>
<field name="price">14.4</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_5" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_8_product_template"/>
<field name="partner_id" ref="base.res_partner_1"/>
<field name="delay">2</field>
<field name="min_qty">5</field>
<field name="price">1299</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_6" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_8_product_template"/>
<field name="partner_id" ref="base.res_partner_12"/>
<field name="delay">4</field>
<field name="min_qty">1</field>
<field name="price">1399</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_7" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_10_product_template"/>
<field name="partner_id" ref="base.res_partner_1"/>
<field name="delay">2</field>
<field name="min_qty">1</field>
<field name="price">120.50</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_8" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_11_product_template"/>
<field name="partner_id" ref="base.res_partner_1"/>
<field name="delay">2</field>
<field name="min_qty">1</field>
<field name="price">28</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_9" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_13_product_template"/>
<field name="partner_id" ref="base.res_partner_4"/>
<field name="delay">5</field>
<field name="min_qty">1</field>
<field name="price">78</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_10" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_16_product_template"/>
<field name="partner_id" ref="base.res_partner_3"/>
<field name="delay">1</field>
<field name="min_qty">1</field>
<field name="price">20</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_12" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_20_product_template"/>
<field name="partner_id" ref="base.res_partner_4"/>
<field name="delay">3</field>
<field name="min_qty">1</field>
<field name="price">1700</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_13" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_20_product_template"/>
<field name="partner_id" ref="base.res_partner_1"/>
<field name="delay">4</field>
<field name="min_qty">5</field>
<field name="price">1720</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_14" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_22_product_template"/>
<field name="partner_id" ref="base.res_partner_2"/>
<field name="delay">3</field>
<field name="min_qty">1</field>
<field name="price">2010</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_15" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_24_product_template"/>
<field name="partner_id" ref="base.res_partner_2"/>
<field name="delay">3</field>
<field name="min_qty">1</field>
<field name="price">876</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_16" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_25_product_template"/>
<field name="partner_id" ref="base.res_partner_1"/>
<field name="delay">8</field>
<field name="min_qty">1</field>
<field name="price">287</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_17" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_delivery_02_product_template"/>
<field name="partner_id" ref="base.res_partner_2"/>
<field name="delay">4</field>
<field name="min_qty">1</field>
<field name="price">390</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_18" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_delivery_01_product_template"/>
<field name="partner_id" ref="base.res_partner_3"/>
<field name="delay">2</field>
<field name="min_qty">12</field>
<field name="price">90</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_19" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_delivery_01_product_template"/>
<field name="partner_id" ref="base.res_partner_1"/>
<field name="delay">4</field>
<field name="min_qty">1</field>
<field name="price">66</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_20" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_delivery_02_product_template"/>
<field name="partner_id" ref="base.res_partner_1"/>
<field name="delay">5</field>
<field name="min_qty">1</field>
<field name="price">35</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_21" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_delivery_01_product_template"/>
<field name="partner_id" ref="base.res_partner_12"/>
<field name="delay">7</field>
<field name="min_qty">1</field>
<field name="price">55</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_22" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_9_product_template"/>
<field name="partner_id" ref="base.res_partner_12"/>
<field name="delay">4</field>
<field name="min_qty">0</field>
<field name="price">10</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_23" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_27_product_template"/>
<field name="partner_id" ref="base.res_partner_1"/>
<field name="delay">10</field>
<field name="min_qty">0</field>
<field name="price">95.50</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_24" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_12_product_template"/>
<field name="partner_id" ref="base.res_partner_1"/>
<field name="delay">3</field>
<field name="min_qty">0</field>
<field name="price">120.50</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_25" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_12_product_template"/>
<field name="partner_id" ref="base.res_partner_4"/>
<field name="delay">2</field>
<field name="min_qty">0</field>
<field name="price">130.50</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record id="product_supplierinfo_26" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_5_product_template"/>
<field name="partner_id" ref="base.res_partner_10"/>
<field name="delay">1</field>
<field name="min_qty">0</field>
<field name="price">145</field>
<field name="currency_id" ref="base.USD"/>
</record>
<record forcecreate="True" id="property_product_pricelist_demo" model="ir.property">
<field name="name">property_product_pricelist</field>
<field name="fields_id" search="[('model','=','res.partner'),('name','=','property_product_pricelist')]"/>
<field name="value" eval="'product.pricelist,'+str(ref('list0'))"/>
<field name="res_id" eval="'res.partner,'+str(ref('base.partner_demo'))"/>
<field name="company_id" ref="base.main_company"/>
</record>
</data>
</odoo>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
# flake8: noqa: F401
# don't try to be a good boy and sort imports alphabetically.
# `product.template` should be initialised before `product.product`
from . import product_template
from . import product_product
from . import decimal_precision
from . import product_attribute
from . import product_category
from . import product_packaging
from . import product_pricelist
from . import product_pricelist_item
from . import product_supplierinfo
from . import product_tag
from . import res_company
from . import res_config_settings
from . import res_country_group
from . import res_currency
from . import res_partner
from . import uom_uom

Some files were not shown because too many files have changed in this diff Show more