Initial commit: Mrp packages

This commit is contained in:
Ernad Husremovic 2025-08-29 15:20:50 +02:00
commit 50d736b3bd
739 changed files with 538193 additions and 0 deletions

14
README.md Normal file
View file

@ -0,0 +1,14 @@
# Mrp
This repository contains OCA OCB packages for mrp.
## Packages Included
- odoo-bringout-oca-ocb-mrp
- odoo-bringout-oca-ocb-mrp_landed_costs
- odoo-bringout-oca-ocb-mrp_repair
- odoo-bringout-oca-ocb-mrp_subcontracting
- odoo-bringout-oca-ocb-mrp_subcontracting_dropshipping
- odoo-bringout-oca-ocb-mrp_subcontracting_purchase
- odoo-bringout-oca-ocb-mrp_subcontracting_repair
- odoo-bringout-oca-ocb-mrp_subonctracting_landed_costs

View file

@ -0,0 +1,48 @@
# Manufacturing
Odoo addon: mrp
## Installation
```bash
pip install odoo-bringout-oca-ocb-mrp
```
## Dependencies
This addon depends on:
- product
- stock
- resource
## Manifest Information
- **Name**: Manufacturing
- **Version**: 2.0
- **Category**: Manufacturing/Manufacturing
- **License**: LGPL-3
- **Installable**: False
## Source
Based on [OCA/OCB](https://github.com/OCA/OCB) branch 16.0, addon `mrp`.
## 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
- Reports: doc/REPORTS.md
- Security: doc/SECURITY.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 Mrp Module - mrp
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 mrp. 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:
- [product](../../odoo-bringout-oca-ocb-product)
- [stock](../../odoo-bringout-oca-ocb-stock)
- [resource](../../odoo-bringout-oca-ocb-resource)

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 mrp or install in UI.

View file

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

View file

@ -0,0 +1,41 @@
# Models
Detected core models and extensions in mrp.
```mermaid
classDiagram
class mrp_bom
class mrp_bom_byproduct
class mrp_bom_line
class mrp_document
class mrp_production
class mrp_routing_workcenter
class mrp_unbuild
class mrp_workcenter
class mrp_workcenter_capacity
class mrp_workcenter_productivity
class mrp_workcenter_productivity_loss
class mrp_workcenter_productivity_loss_type
class mrp_workcenter_tag
class mrp_workorder
class procurement_group
class product_product
class product_template
class res_company
class res_config_settings
class stock_lot
class stock_move
class stock_move_line
class stock_picking
class stock_picking_type
class stock_quant
class stock_rule
class stock_scrap
class stock_traceability_report
class stock_warehouse
class stock_warehouse_orderpoint
```
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: mrp. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon mrp
- License: LGPL-3

View file

@ -0,0 +1,48 @@
# Reports
Report definitions and templates in mrp.
```mermaid
classDiagram
class ReportStockRule
AbstractModel <|-- ReportStockRule
class ReplenishmentReport
AbstractModel <|-- ReplenishmentReport
class ReceptionReport
AbstractModel <|-- ReceptionReport
class ReportBomStructure
AbstractModel <|-- ReportBomStructure
```
## Available Reports
### PDF/Document Reports
- **Production Order** (PDF/Print)
- **BoM Overview** (PDF/Print)
- **Finished Product Label (ZPL)** (PDF/Print)
- **Finished Product Label (PDF)** (PDF/Print)
- **Work Order** (PDF/Print)
## Report Files
- **__init__.py** (Python logic)
- **mrp_production_templates.xml** (XML template/definition)
- **mrp_report_bom_structure.py** (Python logic)
- **mrp_report_bom_structure.xml** (XML template/definition)
- **mrp_report_views_main.xml** (XML template/definition)
- **mrp_workorder_templates.xml** (XML template/definition)
- **mrp_zebra_production_templates.xml** (XML template/definition)
- **report_deliveryslip.xml** (XML template/definition)
- **report_stock_forecasted.xml** (XML template/definition)
- **report_stock_reception.py** (Python logic)
- **report_stock_reception.xml** (XML template/definition)
- **report_stock_rule.py** (Python logic)
- **report_stock_rule.xml** (XML template/definition)
- **stock_forecasted.py** (Python logic)
## 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 mrp.
## Access Control Lists (ACLs)
Model access permissions defined in:
- **[ir.model.access.csv](../mrp/security/ir.model.access.csv)**
- 64 model access rules
## Record Rules
Row-level security rules defined in:
## Security Groups & Configuration
Security groups and permissions defined in:
- **[mrp_security.xml](../mrp/security/mrp_security.xml)**
- 7 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](../mrp/security/ir.model.access.csv)**
- Model access permissions (CRUD rights)
- **[mrp_security.xml](../mrp/security/mrp_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/nix_odoo_web_server.py --db-name mydb --addon mrp
```

View file

@ -0,0 +1,19 @@
# Wizards
Transient models exposed as UI wizards in mrp.
```mermaid
classDiagram
class ChangeProductionQty
class MrpConsumptionWarning
class MrpConsumptionWarningLine
class MrpImmediateProduction
class MrpImmediateProductionLine
class MrpProductionBackorder
class MrpProductionBackorderLine
class MrpProductionSplit
class MrpProductionSplitLine
class MrpProductionSplitMulti
class StockAssignSerialNumbers
class StockWarnInsufficientQtyUnbuild
```

View file

@ -0,0 +1,62 @@
Odoo Manufacturing Resource Planning
------------------------------------
Manage Bill of Materials, plan manufacturing orders, track work orders with the
Odoo <a href="https://www.odoo.com/app/manufacturing">Open Source MRP</a> app.
Get all your assembly or manufacturing operations managed by Odoo. Schedule
manufacturing orders and work orders automatically. Review the proposed
planning with the smart kanban and gantt views. Use the advanced analytics
features to detect bottleneck in resources capacities and inventory locations.
Schedule Manufacturing Orders Efficiently
-----------------------------------------
Get manufacturing orders and work orders scheduled automatically based on your
procurement rules, quantities forecasted and dependent demand (demand for this
part based on another part consuming it).
Define Flexible Master Data
---------------------------
Get the flexibility to create multi-level bill of materials, optional routing,
version changes and phantom bill of materials. You can use BoM for kits or for
manufacturing orders.
Get Flexibility In All Operations
---------------------------------
Edit manually all proposed operations at any level of the progress. With Odoo,
you will not be frustrated by a rigid system.
Schedule Work Orders
--------------------
Check resources capacities and fix bottlenecks. Define routings and plan the
working time and capacity of your resources. Quickly identify resource
requirements and bottlenecks to ensure your production meets your delivery
schedule dates.
A Productive User Interface
---------------------------
Organize manufacturing orders and work orders the way you like it. Process next
orders from the list view, control in the calendar view and edit the proposed
schedule in the Gantt view.
Inventory & Manufacturing Analytics
-----------------------------------
Track the evolution of the stock value, according to the level of manufacturing
activities as they progress in the transformation process.
Fully Integrated with Operations
--------------------------------
Get your manufacturing resource planning accurate with it's full integration
with sales and purchases apps. The accounting integration allows real time
accounting valuation and deeper reporting on costs and revenues on your
manufacturing operations.

View file

@ -0,0 +1,46 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
from . import wizard
from . import report
from . import controller
from . import populate
from odoo import api, SUPERUSER_ID
def _pre_init_mrp(cr):
""" Allow installing MRP in databases with large stock.move table (>1M records)
- Creating the computed+stored field stock_move.is_done and
stock_move.unit_factor is terribly slow with the ORM and leads to "Out of
Memory" crashes
"""
cr.execute("""ALTER TABLE "stock_move" ADD COLUMN "is_done" bool;""")
cr.execute("""UPDATE stock_move
SET is_done=COALESCE(state in ('done', 'cancel'), FALSE);""")
cr.execute("""ALTER TABLE "stock_move" ADD COLUMN "unit_factor" double precision;""")
cr.execute("""UPDATE stock_move
SET unit_factor=1;""")
def _create_warehouse_data(cr, registry):
""" This hook is used to add a default manufacture_pull_id, manufacture
picking_type on every warehouse. It is necessary if the mrp module is
installed after some warehouses were already created.
"""
env = api.Environment(cr, SUPERUSER_ID, {})
warehouse_ids = env['stock.warehouse'].search([('manufacture_pull_id', '=', False)])
warehouse_ids.write({'manufacture_to_resupply': True})
def uninstall_hook(cr, registry):
env = api.Environment(cr, SUPERUSER_ID, {})
warehouses = env["stock.warehouse"].search([])
pbm_routes = warehouses.mapped("pbm_route_id")
warehouses.write({"pbm_route_id": False})
# Fail unlink means that the route is used somewhere (e.g. route_id on stock.rule). In this case
# we don't try to do anything.
try:
with env.cr.savepoint():
pbm_routes.unlink()
except:
pass

View file

@ -0,0 +1,71 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
{
'name': 'Manufacturing',
'version': '2.0',
'website': 'https://www.odoo.com/app/manufacturing',
'category': 'Manufacturing/Manufacturing',
'sequence': 55,
'summary': 'Manufacturing Orders & BOMs',
'depends': ['product', 'stock', 'resource'],
'data': [
'security/mrp_security.xml',
'security/ir.model.access.csv',
'data/digest_data.xml',
'data/mail_templates.xml',
'data/mrp_data.xml',
'wizard/change_production_qty_views.xml',
'wizard/mrp_workcenter_block_view.xml',
'wizard/stock_warn_insufficient_qty_views.xml',
'wizard/mrp_production_backorder.xml',
'wizard/mrp_consumption_warning_views.xml',
'wizard/mrp_immediate_production_views.xml',
'wizard/stock_assign_serial_numbers.xml',
'wizard/mrp_production_split.xml',
'views/mrp_views_menus.xml',
'views/stock_move_views.xml',
'views/mrp_workorder_views.xml',
'views/mrp_workcenter_views.xml',
'views/mrp_bom_views.xml',
'views/mrp_production_views.xml',
'views/mrp_routing_views.xml',
'views/product_views.xml',
'views/stock_orderpoint_views.xml',
'views/stock_warehouse_views.xml',
'views/stock_picking_views.xml',
'views/mrp_unbuild_views.xml',
'views/ir_attachment_view.xml',
'views/res_config_settings_views.xml',
'views/stock_scrap_views.xml',
'report/report_deliveryslip.xml',
'report/mrp_report_views_main.xml',
'report/mrp_report_bom_structure.xml',
'report/mrp_production_templates.xml',
'report/report_stock_forecasted.xml',
'report/report_stock_reception.xml',
'report/report_stock_rule.xml',
'report/mrp_zebra_production_templates.xml',
'report/mrp_workorder_templates.xml',
],
'demo': [
'data/mrp_demo.xml',
],
'application': True,
'pre_init_hook': '_pre_init_mrp',
'post_init_hook': '_create_warehouse_data',
'uninstall_hook': 'uninstall_hook',
'assets': {
'web.assets_backend': [
'mrp/static/src/**/*',
],
'web.assets_tests': [
'mrp/static/tests/tours/**/*',
],
'web.qunit_suite_tests': [
'mrp/static/tests/**/*',
],
},
'license': 'LGPL-3',
}

View file

@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import main

View file

@ -0,0 +1,35 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import base64
import json
import logging
from odoo import http
from odoo.http import request
from odoo.tools.translate import _
logger = logging.getLogger(__name__)
class MrpDocumentRoute(http.Controller):
@http.route('/mrp/upload_attachment', type='http', methods=['POST'], auth="user")
def upload_document(self, ufile, **kwargs):
files = request.httprequest.files.getlist('ufile')
result = {'success': _("All files uploaded")}
for ufile in files:
try:
mimetype = ufile.content_type
request.env['mrp.document'].create({
'name': ufile.filename,
'res_model': kwargs.get('res_model'),
'res_id': int(kwargs.get('res_id')),
'mimetype': mimetype,
'datas': base64.encodebytes(ufile.read()),
})
except Exception as e:
logger.exception("Fail to upload document %s" % ufile.filename)
result = {'error': str(e)}
return json.dumps(result)

View file

@ -0,0 +1,17 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<data>
<record id="digest_tip_mrp_0" model="digest.tip">
<field name="name">Tip: Use tablets in the shop to control manufacturing</field>
<field name="sequence">600</field>
<field name="group_id" ref="mrp.group_mrp_user" />
<field name="tip_description" type="html">
<div>
<p class="tip_title">Tip: Use tablets in the shop to control manufacturing</p>
<p class="tip_content">With the Odoo work center control panel, your worker can start work orders in the shop and follow instructions of the worksheet. Quality tests are perfectly integrated into the process. Workers can trigger feedback loops, maintenance alerts, scrap products, etc.</p>
<img src="https://download.odoocdn.com/digests/mrp/static/src/img/mrp-tablet.png" style="margin-top: 20px; max-width: 580px" width="100%" />
</div>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="exception_on_mo">
<div class="alert alert-warning" role="alert">
Exception(s) occurred on the manufacturing order(s):
<a href="#" data-oe-model="mrp.production" t-att-data-oe-id="production_order.id"><t t-esc="production_order.name"/></a>.
Manual actions may be needed.
<div class="mt16">
<p>Exception(s):</p>
<ul t-foreach="order_exceptions.items()" t-as="order_exception">
<li>
<t t-set="move_raw_id" t-value="order_exception[0]"/>
<t t-set="exception" t-value="order_exception[1]"/>
<t t-set="order" t-value="exception[0]"/>
<t t-set="new_qty" t-value="exception[1][0]"/>
<t t-set="old_qty" t-value="exception[1][1]"/>
<a href="#" data-oe-model="mrp.production" t-att-data-oe-id="production_order.id"><t t-esc="production_order.name"/></a>:
<t t-esc="new_qty"/> <t t-esc="move_raw_id.product_uom.name"/> of <t t-esc="move_raw_id.product_id.name"/>
<t t-if="cancel">
cancelled
</t>
<t t-if="not cancel">
ordered instead of <t t-esc="old_qty"/> <t t-esc="move_raw_id.product_uom.name"/>
</t>
</li>
</ul>
</div>
<div class="mt16" t-if="not cancel and impacted_pickings">
<p>Impacted Transfer(s):</p>
<ul t-foreach="impacted_pickings" t-as="picking">
<li><a href="#" data-oe-model="stock.picking" t-att-data-oe-id="picking.id"><t t-esc="picking.name"/></a></li>
</ul>
</div>
</div>
</template>
<template id="production_message">
<t t-if="move.move_id.raw_material_production_id">
<t t-set="message">Consumed</t>
</t>
<t t-if="move.move_id.production_id">
<t t-set="message">Produced</t>
</t>
<strong><t t-esc="message"/> quantity has been updated.</strong>
</template>
<template id="track_production_move_template">
<div>
<t t-call="mrp.production_message"/>
<t t-call="stock.message_body"/>
</div>
</template>
</odoo>

View file

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<function model="res.company" name="create_missing_unbuild_sequences" />
<!--
Stock rules and routes
-->
<record id="route_warehouse0_manufacture" model='stock.route'>
<field name="name">Manufacture</field>
<field name="company_id"></field>
<field name="sequence">10</field>
</record>
<!-- Enable the manufacturing in warehouse0 -->
<record id='stock.warehouse0' model='stock.warehouse'>
<field name='manufacture_to_resupply' eval='True'/>
</record>
<!-- Category for Blocking Reasons Workcenter -->
<record id="category_availability" model="mrp.workcenter.productivity.loss.type">
<field name="loss_type">availability</field>
</record>
<record id="category_performance" model="mrp.workcenter.productivity.loss.type">
<field name="loss_type">performance</field>
</record>
<record id="category_quality" model="mrp.workcenter.productivity.loss.type">
<field name="loss_type">quality</field>
</record>
<record id="category_productive" model="mrp.workcenter.productivity.loss.type">
<field name="loss_type">productive</field>
</record>
<!-- Reasons To Block Workcenter -->
<record id="block_reason0" model="mrp.workcenter.productivity.loss">
<field name="name">Material Availability</field>
<field name="loss_id" ref="mrp.category_availability"></field>
<field name="sequence">1</field>
</record>
<record id="block_reason1" model="mrp.workcenter.productivity.loss">
<field name="name">Equipment Failure</field>
<field name="loss_id" ref="mrp.category_availability"></field>
<field name="sequence">2</field>
</record>
<record id="block_reason2" model="mrp.workcenter.productivity.loss">
<field name="name">Setup and Adjustments</field>
<field name="loss_id" ref="mrp.category_availability"></field>
<field name="sequence">3</field>
</record>
<record id="block_reason4" model="mrp.workcenter.productivity.loss">
<field name="name">Reduced Speed</field>
<field name="loss_id" ref="mrp.category_performance"></field>
<field name="manual" eval="False"/>
<field name="sequence">5</field>
</record>
<record id="block_reason5" model="mrp.workcenter.productivity.loss">
<field name="name">Process Defect</field>
<field name="loss_id" ref="mrp.category_quality"></field>
<field name="sequence">6</field>
</record>
<record id="block_reason6" model="mrp.workcenter.productivity.loss">
<field name="name">Reduced Yield</field>
<field name="loss_id" ref="mrp.category_quality"></field>
<field name="sequence">7</field>
</record>
<record id="block_reason7" model="mrp.workcenter.productivity.loss">
<field name="name">Fully Productive Time</field>
<field name="loss_id" ref="mrp.category_productive"></field>
<field name="manual" eval="False"/>
<field name="sequence">0</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,729 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="base.user_demo" model="res.users">
<field eval="[(4, ref('group_mrp_user'))]" name="groups_id"/>
</record>
<!-- Resource: res.company -->
<record id="stock.res_company_1" model="res.company">
<field eval="1.0" name="manufacturing_lead"/>
</record>
<!-- Resource: mrp.workcenter -->
<record id="mrp_workcenter_3" model="mrp.workcenter">
<field name="name">Assembly Line 1</field>
<field name="resource_calendar_id" ref="resource.resource_calendar_std"/>
</record>
<record id="mrp_workcenter_1" model="mrp.workcenter">
<field name="name">Drill Station 1</field>
<field name="resource_calendar_id" ref="resource.resource_calendar_std"/>
</record>
<record id="mrp_workcenter_2" model="mrp.workcenter">
<field name="name">Assembly Line 2</field>
<field name="resource_calendar_id" ref="resource.resource_calendar_std"/>
</record>
<!-- Resource: mrp.bom -->
<record id="product.product_product_3_product_template" model="product.template">
<field name="route_ids" eval="[(6, 0, [ref('stock.route_warehouse0_mto'), ref('mrp.route_warehouse0_manufacture')])]"/>
</record>
<record id="mrp_bom_manufacture" model="mrp.bom">
<field name="product_tmpl_id" ref="product.product_product_3_product_template"/>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">1</field>
</record>
<record id="mrp_routing_workcenter_0" model="mrp.routing.workcenter">
<field name="bom_id" ref="mrp_bom_manufacture"/>
<field name="active">False</field>
<field name="workcenter_id" ref="mrp_workcenter_3"/>
<field name="name">Manual Assembly</field>
<field name="time_cycle">60</field>
<field name="sequence">5</field>
<field name="worksheet_type">pdf</field>
<field name="worksheet" type="base64" file="mrp/static/img/assebly-worksheet.pdf"/>
</record>
<record id="mrp_bom_manufacture_line_1" model="mrp.bom.line">
<field name="product_id" ref="product.product_product_12"/>
<field name="product_qty">1</field>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">5</field>
<field name="bom_id" ref="mrp_bom_manufacture"/>
</record>
<record id="mrp_bom_manufacture_line_2" model="mrp.bom.line">
<field name="product_id" ref="product.product_product_13"/>
<field name="product_qty">1</field>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">5</field>
<field name="bom_id" ref="mrp_bom_manufacture"/>
</record>
<record id="mrp_bom_manufacture_line_3" model="mrp.bom.line">
<field name="product_id" ref="product.product_product_16"/>
<field name="product_qty">1</field>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">5</field>
<field name="bom_id" ref="mrp_bom_manufacture"/>
</record>
<record id="mrp_production_1" model="mrp.production">
<field name="product_id" ref="product.product_product_3"/>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="product_qty">3</field>
<field name="bom_id" ref="mrp_bom_manufacture"/>
</record>
<!-- Table -->
<record id="product_product_computer_desk" model="product.product">
<field name="name">Table</field>
<field name="categ_id" ref="product.product_category_5"/>
<field name="standard_price">290</field>
<field name="list_price">520</field>
<field name="detailed_type">product</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">Solid wood table.</field>
<field name="default_code">FURN_9666</field>
<field name="tracking">serial</field>
<field name="image_1920" type="base64" file="mrp/static/img/table.png"/>
</record>
<record id="stock_warehouse_orderpoint_table" model="stock.warehouse.orderpoint">
<field name="product_max_qty">0.0</field>
<field name="product_min_qty">0.0</field>
<field name="product_uom" ref="uom.product_uom_unit"/>
<field name="company_id" ref="base.main_company"/>
<field name="warehouse_id" ref="stock.warehouse0"/>
<field name="location_id" model="stock.location" eval="obj().env.ref('stock.warehouse0').lot_stock_id.id"/>
<field name="product_id" ref="product_product_computer_desk"/>
</record>
<record id="product_product_computer_desk_head" model="product.product">
<field name="name">Table Top</field>
<field name="categ_id" ref="product.product_category_5"/>
<field name="standard_price">240</field>
<field name="list_price">380</field>
<field name="detailed_type">product</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">Solid wood is a durable natural material.</field>
<field name="default_code">FURN_8522</field>
<field name="tracking">serial</field>
<field name="image_1920" type="base64" file="mrp/static/img/table_top.png"/>
</record>
<record id="product_product_computer_desk_leg" model="product.product">
<field name="name">Table Leg</field>
<field name="categ_id" ref="product.product_category_5"/>
<field name="standard_price">10</field>
<field name="list_price">50</field>
<field name="detailed_type">product</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">18″ x 2½″ Square Leg</field>
<field name="default_code">FURN_2333</field>
<field name="tracking">lot</field>
<field name="image_1920" type="base64" file="mrp/static/img/table_leg.png"/>
</record>
<record id="product_product_computer_desk_bolt" model="product.product">
<field name="name">Bolt</field>
<field name="categ_id" ref="product.product_category_consumable"/>
<field name="standard_price">0.5</field>
<field name="list_price">0.5</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">Stainless steel screw full (dia - 5mm, Length - 10mm)</field>
<field name="default_code">CONS_89957</field>
<field name="image_1920" type="base64" file="mrp/static/img/product_product_computer_desk_bolt.png"/>
</record>
<record id="product_product_computer_desk_screw" model="product.product">
<field name="name">Screw</field>
<field name="categ_id" ref="product.product_category_consumable"/>
<field name="standard_price">0.1</field>
<field name="list_price">0.2</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">Stainless steel screw</field>
<field name="default_code">CONS_25630</field>
<field name="image_1920" type="base64" file="mrp/static/img/product_product_computer_desk_screw.png"/>
</record>
<record id="product_product_wood_ply" model="product.product">
<field name="name">Ply Layer</field>
<field name="categ_id" ref="product.product_category_5"/>
<field name="standard_price">10</field>
<field name="list_price">10</field>
<field name="detailed_type">product</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">Layers that are stick together to assemble wood panels.</field>
<field name="default_code">FURN_7111</field>
<field name="image_1920" type="base64" file="mrp/static/img/product_product_wood_ply.png"/>
</record>
<record id="product_product_wood_wear" model="product.product">
<field name="name">Wear Layer</field>
<field name="categ_id" ref="product.product_category_5"/>
<field name="standard_price">10</field>
<field name="list_price">10</field>
<field name="detailed_type">product</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">Top layer of a wood panel.</field>
<field name="default_code">FURN_8111</field>
<field name="image_1920" type="base64" file="mrp/static/img/product_product_wood_wear.png"/>
</record>
<record id="product_product_ply_veneer" model="product.product">
<field name="name">Ply Veneer</field>
<field name="categ_id" ref="product.product_category_5"/>
<field name="standard_price">10</field>
<field name="list_price">10</field>
<field name="detailed_type">product</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_9111</field>
<field name="image_1920" type="base64" file="mrp/static/img/product_product_ply_veneer.png"/>
</record>
<record id="product_product_wood_panel" model="product.product">
<field name="name">Wood Panel</field>
<field name="categ_id" ref="product.product_category_5"/>
<field name="standard_price">80</field>
<field name="list_price">100</field>
<field name="detailed_type">product</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_7023</field>
<field name="image_1920" type="base64" file="mrp/static/img/product_product_wood_panel.png"/>
</record>
<record id="product_product_plastic_laminate" model="product.product">
<field name="name">Plastic Laminate</field>
<field name="categ_id" ref="product.product_category_5"/>
<field name="standard_price">3000</field>
<field name="list_price">1000</field>
<field name="detailed_type">product</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_8621</field>
<field name="image_1920" type="base64" file="mrp/static/img/product_product_plastic_laminate.png"/>
</record>
<record id="product_product_computer_desk_product_template" model="product.template">
<field name="route_ids" eval="[(6, 0, [ref('stock.route_warehouse0_mto'), ref('mrp.route_warehouse0_manufacture')])]"/>
</record>
<record id="mrp_bom_desk" model="mrp.bom">
<field name="product_tmpl_id" ref="product_product_computer_desk_product_template"/>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">3</field>
<field name="consumption">flexible</field>
</record>
<record id="mrp_routing_workcenter_5" model="mrp.routing.workcenter">
<field name="bom_id" ref="mrp_bom_desk"/>
<field name="active">False</field>
<field name="workcenter_id" ref="mrp_workcenter_3"/>
<field name="time_cycle">120</field>
<field name="sequence">10</field>
<field name="name">Assembly</field>
<field name="worksheet_type">pdf</field>
<field name="worksheet" type="base64" file="mrp/static/img/cutting-worksheet.pdf"/>
</record>
<record id="mrp_bom_desk_line_1" model="mrp.bom.line">
<field name="product_id" ref="product_product_computer_desk_head"/>
<field name="product_qty">1</field>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">1</field>
<field name="bom_id" ref="mrp_bom_desk"/>
<field name="operation_id" ref="mrp.mrp_routing_workcenter_5"/>
</record>
<record id="mrp_bom_desk_line_2" model="mrp.bom.line">
<field name="product_id" ref="product_product_computer_desk_leg"/>
<field name="product_qty">4</field>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">2</field>
<field name="bom_id" ref="mrp_bom_desk"/>
<field name="operation_id" ref="mrp.mrp_routing_workcenter_5"/>
</record>
<record id="mrp_bom_desk_line_3" model="mrp.bom.line">
<field name="product_id" ref="product_product_computer_desk_bolt"/>
<field name="product_qty">4</field>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">3</field>
<field name="bom_id" ref="mrp_bom_desk"/>
</record>
<record id="mrp_bom_desk_line_4" model="mrp.bom.line">
<field name="product_id" ref="product_product_computer_desk_screw"/>
<field name="product_qty">10</field>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">4</field>
<field name="bom_id" ref="mrp_bom_desk"/>
</record>
<!-- Table MO -->
<record id="mrp_production_3" model="mrp.production">
<field name="product_id" ref="product_product_computer_desk"/>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="product_qty">1</field>
<field name="date_planned_start" eval="(DateTime.today() + relativedelta(days=1)).strftime('%Y-%m-%d %H:%M')"/>
<field name="bom_id" ref="mrp_bom_desk"/>
</record>
<record id="mrp_bom_table_top" model="mrp.bom">
<field name="product_tmpl_id" ref="product_product_computer_desk_head_product_template"/>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">1</field>
</record>
<record id="mrp_routing_workcenter_0" model="mrp.routing.workcenter">
<field name="bom_id" ref="mrp_bom_table_top"/>
<field name="active">False</field>
<field name="workcenter_id" ref="mrp_workcenter_3"/>
<field name="name">Manual Assembly</field>
<field name="time_cycle">60</field>
<field name="sequence">5</field>
<field name="worksheet_type">pdf</field>
<field name="worksheet" type="base64" file="mrp/static/img/assebly-worksheet.pdf"/>
</record>
<record id="mrp_bom_line_wood_panel" model="mrp.bom.line">
<field name="product_id" ref="product_product_wood_panel"/>
<field name="product_qty">2</field>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">1</field>
<field name="bom_id" ref="mrp_bom_table_top"/>
</record>
<record id="mrp_bom_line_plastic_laminate" model="mrp.bom.line">
<field name="product_id" ref="product_product_plastic_laminate"/>
<field name="product_qty">4</field>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">2</field>
<field name="bom_id" ref="mrp_bom_table_top"/>
</record>
<record id="mrp_bom_plastic_laminate" model="mrp.bom">
<field name="product_tmpl_id" ref="product_product_plastic_laminate_product_template"/>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">1</field>
</record>
<record id="mrp_routing_workcenter_1" model="mrp.routing.workcenter">
<field name="bom_id" ref="mrp_bom_plastic_laminate"/>
<field name="active">False</field>
<field name="workcenter_id" ref="mrp_workcenter_3"/>
<field name="name">Long time assembly</field>
<field name="time_cycle">180</field>
<field name="sequence">15</field>
<field name="worksheet_type">pdf</field>
<field name="worksheet" type="base64" file="mrp/static/img/cutting-worksheet.pdf"/>
</record>
<record id="mrp_routing_workcenter_3" model="mrp.routing.workcenter">
<field name="bom_id" ref="mrp_bom_plastic_laminate"/>
<field name="active">False</field>
<field name="workcenter_id" ref="mrp_workcenter_3"/>
<field name="name">Testing</field>
<field name="time_cycle">60</field>
<field name="sequence">10</field>
<field name="worksheet_type">pdf</field>
<field name="worksheet" type="base64" file="mrp/static/img/assebly-worksheet.pdf"/>
</record>
<record id="mrp_routing_workcenter_4" model="mrp.routing.workcenter">
<field name="bom_id" ref="mrp_bom_plastic_laminate"/>
<field name="active">False</field>
<field name="workcenter_id" ref="mrp_workcenter_1"/>
<field name="name">Packing</field>
<field name="time_cycle">30</field>
<field name="sequence">5</field>
<field name="worksheet_type">pdf</field>
<field name="worksheet" type="base64" file="mrp/static/img/cutting-worksheet.pdf"/>
</record>
<record id="mrp_bom_line_plastic_laminate" model="mrp.bom.line">
<field name="product_id" ref="product_product_ply_veneer"/>
<field name="product_qty">1</field>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">1</field>
<field name="bom_id" ref="mrp_bom_plastic_laminate"/>
</record>
<record id="mrp_bom_wood_panel" model="mrp.bom">
<field name="product_tmpl_id" ref="product_product_wood_panel_product_template"/>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">1</field>
</record>
<record id="mrp_bom_line_wood_panel_ply" model="mrp.bom.line">
<field name="product_id" ref="product_product_wood_ply"/>
<field name="product_qty">3</field>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">1</field>
<field name="bom_id" ref="mrp_bom_wood_panel"/>
</record>
<record id="mrp_bom_line_wood_panel_wear" model="mrp.bom.line">
<field name="product_id" ref="product_product_wood_wear"/>
<field name="product_qty">1</field>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">1</field>
<field name="bom_id" ref="mrp_bom_wood_panel"/>
</record>
<!-- Table Top MO -->
<record id="mrp_production_4" model="mrp.production">
<field name="product_id" ref="product_product_computer_desk_head"/>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="product_qty">2</field>
<field name="location_src_id" ref="stock.stock_location_stock"/>
<field name="location_dest_id" ref="stock.stock_location_stock"/>
<field name="bom_id" ref="mrp_bom_table_top"/>
</record>
<!-- Table Kit -->
<record id="product_product_table_kit" model="product.product">
<field name="name">Table Kit</field>
<field name="categ_id" ref="product.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="description">Table kit</field>
<field name="default_code">FURN_78236</field>
<field name="image_1920" type="base64" file="mrp/static/img/product_product_table_kit.png"/>
</record>
<record id="product_product_table_kit_product_template" model="product.template">
<field name="route_ids" eval="[(6, 0, [ref('mrp.route_warehouse0_manufacture')])]"/>
</record>
<record id="mrp_bom_kit" model="mrp.bom">
<field name="product_tmpl_id" ref="product_product_table_kit_product_template"/>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">2</field>
<field name="type">phantom</field>
</record>
<record id="mrp_bom_kit_line_1" model="mrp.bom.line">
<field name="product_id" ref="product_product_wood_panel"/>
<field name="product_qty">1</field>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="bom_id" ref="mrp_bom_kit"/>
</record>
<record id="mrp_bom_kit_line_2" model="mrp.bom.line">
<field name="product_id" ref="product_product_computer_desk_bolt"/>
<field name="product_qty">4</field>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="bom_id" ref="mrp_bom_kit"/>
</record>
<!-- Manufacturing Order Demo With Lots-->
<record id="product_product_drawer_drawer" model="product.product">
<field name="name">Drawer Black</field>
<field name="categ_id" ref="product.product_category_5"/>
<field name="tracking">lot</field>
<field name="standard_price">20.0</field>
<field name="list_price">24.0</field>
<field name="detailed_type">product</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 on casters for great usability.</field>
<field name="default_code">FURN_2100</field>
<field name="barcode">601647855646</field>
<field name="image_1920" type="base64" file="mrp/static/img/product_product_drawer_black.png"/>
</record>
<record id="product_product_drawer_case" model="product.product">
<field name="name">Drawer Case Black</field>
<field name="categ_id" ref="product.product_category_5"/>
<field name="tracking">lot</field>
<field name="standard_price">10</field>
<field name="list_price">20</field>
<field name="detailed_type">product</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_5623</field>
<field name="barcode">601647855647</field>
<field name="image_1920" type="base64" file="mrp/static/img/product_product_drawer_case_black.png"/>
</record>
<record id="product.product_product_27" model="product.product">
<field name="tracking">lot</field>
</record>
<record id="lot_product_27_0" model="stock.lot">
<field name="name">0000000000030</field>
<field name="product_id" ref="product.product_product_27"/>
<field name="company_id" ref="base.main_company"/>
</record>
<record id="lot_product_27_1" model="stock.lot">
<field name="name">0000000000031</field>
<field name="product_id" ref="product.product_product_27"/>
<field name="company_id" ref="base.main_company"/>
</record>
<record id="lot_product_product_drawer_drawer_0" model="stock.lot">
<field name="name">0000000010001</field>
<field name="product_id" ref="product_product_drawer_drawer"/>
<field name="company_id" ref="base.main_company"/>
</record>
<record id="lot_product_product_drawer_case_0" model="stock.lot">
<field name="name">0000000020045</field>
<field name="product_id" ref="product_product_drawer_case"/>
<field name="company_id" ref="base.main_company"/>
</record>
<!-- Initital Inventory -->
<record id="stock_inventory_drawer_lot0" model="stock.quant">
<field name="product_id" ref="product.product_product_27"/>
<field name="inventory_quantity">50.0</field>
<field name="location_id" model="stock.location" eval="obj().env.ref('stock.warehouse0').lot_stock_id.id"/>
<field name="lot_id" ref="lot_product_27_0"/>
</record>
<record id="stock_inventory_drawer_lot1" model="stock.quant">
<field name="product_id" ref="product.product_product_27"/>
<field name="inventory_quantity">40.0</field>
<field name="location_id" model="stock.location" eval="obj().env.ref('stock.warehouse0').lot_stock_id.id"/>
<field name="lot_id" ref="lot_product_27_1"/>
</record>
<record id="stock_inventory_product_drawer_drawer" model="stock.quant">
<field name="product_id" ref="product_product_drawer_drawer"/>
<field name="inventory_quantity">50.0</field>
<field name="location_id" model="stock.location" eval="obj().env.ref('stock.warehouse0').lot_stock_id.id"/>
<field name="lot_id" ref="lot_product_product_drawer_drawer_0"/>
</record>
<record id="stock_inventory_product_drawer_case" model="stock.quant">
<field name="product_id" ref="product_product_drawer_case"/>
<field name="inventory_quantity">50.0</field>
<field name="location_id" model="stock.location" eval="obj().env.ref('stock.warehouse0').lot_stock_id.id"/>
<field name="lot_id" ref="lot_product_product_drawer_case_0"/>
</record>
<record id="stock_inventory_product_wood_panel" model="stock.quant">
<field name="product_id" ref="product_product_wood_panel"/>
<field name="inventory_quantity">50.0</field>
<field name="location_id" model="stock.location" eval="obj().env.ref('stock.warehouse0').lot_stock_id.id"/>
</record>
<record id="stock_inventory_product_ply" model="stock.quant">
<field name="product_id" ref="product_product_wood_ply"/>
<field name="inventory_quantity">20.0</field>
<field name="location_id" model="stock.location" eval="obj().env.ref('stock.warehouse0').lot_stock_id.id"/>
</record>
<record id="stock_inventory_product_wear" model="stock.quant">
<field name="product_id" ref="product_product_wood_wear"/>
<field name="inventory_quantity">30.0</field>
<field name="location_id" model="stock.location" eval="obj().env.ref('stock.warehouse0').lot_stock_id.id"/>
</record>
<function model="stock.quant" name="action_apply_inventory">
<function eval="[[('id', 'in', (ref('stock_inventory_drawer_lot0'),
ref('stock_inventory_drawer_lot1'),
ref('stock_inventory_product_drawer_drawer'),
ref('stock_inventory_product_drawer_case'),
ref('stock_inventory_product_wood_panel'),
ref('stock_inventory_product_ply'),
ref('stock_inventory_product_wear'),
))]]" model="stock.quant" name="search"/>
</function>
<!-- BoM -->
<record id="mrp_bom_drawer" model="mrp.bom">
<field name="product_tmpl_id" ref="product.product_product_27_product_template"/>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">1</field>
<field name="code">PRIM-ASSEM</field>
</record>
<record id="mrp_bom_drawer_line_1" model="mrp.bom.line">
<field name="product_id" ref="product_product_drawer_drawer"/>
<field name="product_qty">1</field>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">1</field>
<field name="bom_id" ref="mrp_bom_drawer"/>
</record>
<record id="mrp_bom_drawer_line_2" model="mrp.bom.line">
<field name="product_id" ref="product_product_drawer_case"/>
<field name="product_qty">1</field>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">2</field>
<field name="bom_id" ref="mrp_bom_drawer"/>
</record>
<record id="mrp_bom_drawer_rout" model="mrp.bom">
<field name="product_tmpl_id" ref="product.product_product_27_product_template"/>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">2</field>
<field name="code">SEC-ASSEM</field>
</record>
<record id="mrp_routing_workcenter_1" model="mrp.routing.workcenter">
<field name="bom_id" ref="mrp_bom_drawer_rout"/>
<field name="active">False</field>
<field name="workcenter_id" ref="mrp_workcenter_3"/>
<field name="name">Long time assembly</field>
<field name="time_cycle">180</field>
<field name="sequence">15</field>
<field name="worksheet_type">pdf</field>
<field name="worksheet" type="base64" file="mrp/static/img/cutting-worksheet.pdf"/>
</record>
<record id="mrp_routing_workcenter_3" model="mrp.routing.workcenter">
<field name="bom_id" ref="mrp_bom_drawer_rout"/>
<field name="active">False</field>
<field name="workcenter_id" ref="mrp_workcenter_3"/>
<field name="name">Testing</field>
<field name="time_cycle">60</field>
<field name="sequence">10</field>
<field name="worksheet_type">pdf</field>
<field name="worksheet" type="base64" file="mrp/static/img/assebly-worksheet.pdf"/>
</record>
<record id="mrp_routing_workcenter_4" model="mrp.routing.workcenter">
<field name="bom_id" ref="mrp_bom_drawer_rout"/>
<field name="active">False</field>
<field name="workcenter_id" ref="mrp_workcenter_1"/>
<field name="name">Packing</field>
<field name="time_cycle">30</field>
<field name="sequence">5</field>
<field name="worksheet_type">pdf</field>
<field name="worksheet" type="base64" file="mrp/static/img/cutting-worksheet.pdf"/>
</record>
<record id="mrp_bom_drawer_rout_line_1" model="mrp.bom.line">
<field name="product_id" ref="product_product_drawer_drawer"/>
<field name="product_qty">1</field>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">1</field>
<field name="bom_id" ref="mrp_bom_drawer_rout"/>
</record>
<record id="mrp_bom_drawer_rout_line_2" model="mrp.bom.line">
<field name="product_id" ref="product_product_drawer_case"/>
<field name="product_qty">1</field>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="sequence">2</field>
<field name="bom_id" ref="mrp_bom_drawer_rout"/>
</record>
<record id="product.product_product_27" model="product.product">
<field name="detailed_type">product</field>
</record>
<record id="mrp_production_drawer" model="mrp.production">
<field name="product_id" ref="product.product_product_27"/>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="product_qty">5</field>
<field name="location_src_id" ref="stock.stock_location_stock"/>
<field name="location_dest_id" ref="stock.stock_location_stock"/>
<field name="bom_id" ref="mrp_bom_drawer"/>
</record>
<!-- Run Scheduler -->
<function model="procurement.group" name="run_scheduler"/>
<!-- OEE -->
<record id="mrp_workcenter_efficiency_0" model="mrp.workcenter.productivity">
<field name="workcenter_id" ref="mrp_workcenter_3"/>
<field name="loss_id" ref="block_reason7"/>
<field name="date_start" eval="(datetime.now() - relativedelta(days=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
<field name="date_end" eval="(datetime.now() - relativedelta(days=2)).strftime('%Y-%m-%d %H:%M:%S')"/>
</record>
<record id="mrp_workcenter_efficiency_1" model="mrp.workcenter.productivity">
<field name="workcenter_id" ref="mrp_workcenter_3"/>
<field name="loss_id" ref="block_reason0"/>
<field name="date_start" eval="(datetime.now() - timedelta(hours=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
<field name="date_end" eval="(datetime.now() - timedelta(hours=3)).strftime('%Y-%m-%d %H:%M:%S')"/>
</record>
<record id="mrp_workcenter_efficiency_2" model="mrp.workcenter.productivity">
<field name="workcenter_id" ref="mrp_workcenter_3"/>
<field name="loss_id" ref="block_reason1"/>
<field name="date_start" eval="(datetime.now() - timedelta(days=5, hours=4)).strftime('%Y-%m-%d %H:%M:%S')"/>
<field name="date_end" eval="(datetime.now() - timedelta(days=5, hours=3)).strftime('%Y-%m-%d %H:%M:%S')"/>
</record>
<record id="mrp_workcenter_efficiency_3" model="mrp.workcenter.productivity">
<field name="workcenter_id" ref="mrp_workcenter_1"/>
<field name="loss_id" ref="block_reason7"/>
<field name="date_start" eval="(datetime.now() - relativedelta(days=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
<field name="date_end" eval="(datetime.now() - relativedelta(days=3)).strftime('%Y-%m-%d %H:%M:%S')"/>
</record>
<record id="mrp_workcenter_efficiency_4" model="mrp.workcenter.productivity">
<field name="workcenter_id" ref="mrp_workcenter_1"/>
<field name="loss_id" ref="block_reason0"/>
<field name="date_start" eval="(datetime.now() - timedelta(days=5,hours=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
<field name="date_end" eval="(datetime.now() - timedelta(days=5,hours=1)).strftime('%Y-%m-%d %H:%M:%S')"/>
</record>
<record id="mrp_workcenter_efficiency_5" model="mrp.workcenter.productivity">
<field name="workcenter_id" ref="mrp_workcenter_1"/>
<field name="loss_id" ref="block_reason1"/>
<field name="date_start" eval="(datetime.now() - timedelta(hours=1)).strftime('%Y-%m-%d %H:%M:%S')"/>
</record>
<function model="mrp.production" name="action_confirm" eval="[[
ref('mrp.mrp_production_3'),
ref('mrp.mrp_production_4'),
ref('mrp.mrp_production_drawer'),
]]"/>
<function model="mrp.production" name="button_plan">
<value eval="[ref('mrp.mrp_production_3')]"/>
</function>
<function model="mrp.production" name="write">
<value eval="[ref('mrp.mrp_production_drawer')]"/>
<value eval="{'qty_producing': 5, 'lot_producing_id': ref('mrp.lot_product_27_0')}"/>
</function>
<function model="mrp.production" name="action_assign">
<value eval="[ref('mrp.mrp_production_drawer')]"/>
</function>
<function model="stock.move" name="write">
<value model="stock.move" eval="obj().env['stock.move'].search([('raw_material_production_id', '=', obj().env.ref('mrp.mrp_production_drawer').id)]).ids"/>
<value eval="{'quantity_done': 5}"/>
</function>
<function model="mrp.production" name="button_mark_done">
<value eval="[ref('mrp.mrp_production_drawer')]"/>
</function>
<!-- set 'create component' as True for the demo manufacturing picking type
while leaving the default value to False for the others -->
<function model="stock.warehouse" name="write">
<value model="stock.warehouse" eval="obj().env['stock.warehouse'].search([]).ids"/>
<value eval="{'manufacture_to_resupply': True}"/>
</function>
<function model="stock.picking.type" name="write">
<value model="stock.picking.type" eval="obj().env['stock.picking.type'].search([('code', '=', 'mrp_operation')]).ids"/>
<value eval="{'use_create_components_lots': True}"/>
</function>
</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

View file

@ -0,0 +1,96 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mrp
#
# Translators:
# Martin Trigaux <mat@odoo.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-16 08:08+0000\n"
"PO-Revision-Date: 2017-11-16 08:08+0000\n"
"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
"Language-Team: Spanish (Bolivia) (https://www.transifex.com/odoo/teams/41243/"
"es_BO/)\n"
"Language: es_BO\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: mrp
#: model_terms:ir.ui.view,arch_db:mrp.mrp_workcenter_kanban
msgid "<span>PLAN ORDERS</span>"
msgstr "<span>PLANITICAR ÓRDENES</span>"
#. module: mrp
#: model:ir.model.fields,field_description:mrp.field_change_production_qty__create_date
#: model:ir.model.fields,field_description:mrp.field_mrp_bom__create_date
#: model:ir.model.fields,field_description:mrp.field_mrp_bom_byproduct__create_date
#: model:ir.model.fields,field_description:mrp.field_mrp_bom_line__create_date
#: model:ir.model.fields,field_description:mrp.field_mrp_document__create_date
#: model:ir.model.fields,field_description:mrp.field_mrp_product_produce__create_date
#: model:ir.model.fields,field_description:mrp.field_mrp_product_produce_line__create_date
#: model:ir.model.fields,field_description:mrp.field_mrp_production__create_date
#: model:ir.model.fields,field_description:mrp.field_mrp_routing__create_date
#: model:ir.model.fields,field_description:mrp.field_mrp_routing_workcenter__create_date
#: model:ir.model.fields,field_description:mrp.field_mrp_unbuild__create_date
#: model:ir.model.fields,field_description:mrp.field_mrp_workcenter__create_date
#: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity__create_date
#: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss__create_date
#: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss_type__create_date
#: model:ir.model.fields,field_description:mrp.field_mrp_workorder__create_date
#: model:ir.model.fields,field_description:mrp.field_mrp_workorder_line__create_date
#: model:ir.model.fields,field_description:mrp.field_stock_warn_insufficient_qty_unbuild__create_date
msgid "Created on"
msgstr "Creado en"
#. module: mrp
#: model:ir.model.fields,field_description:mrp.field_change_production_qty__write_uid
#: model:ir.model.fields,field_description:mrp.field_mrp_bom__write_uid
#: model:ir.model.fields,field_description:mrp.field_mrp_bom_byproduct__write_uid
#: model:ir.model.fields,field_description:mrp.field_mrp_bom_line__write_uid
#: model:ir.model.fields,field_description:mrp.field_mrp_document__write_uid
#: model:ir.model.fields,field_description:mrp.field_mrp_product_produce__write_uid
#: model:ir.model.fields,field_description:mrp.field_mrp_product_produce_line__write_uid
#: model:ir.model.fields,field_description:mrp.field_mrp_production__write_uid
#: model:ir.model.fields,field_description:mrp.field_mrp_routing__write_uid
#: model:ir.model.fields,field_description:mrp.field_mrp_routing_workcenter__write_uid
#: model:ir.model.fields,field_description:mrp.field_mrp_unbuild__write_uid
#: model:ir.model.fields,field_description:mrp.field_mrp_workcenter__write_uid
#: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity__write_uid
#: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss__write_uid
#: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss_type__write_uid
#: model:ir.model.fields,field_description:mrp.field_mrp_workorder__write_uid
#: model:ir.model.fields,field_description:mrp.field_mrp_workorder_line__write_uid
#: model:ir.model.fields,field_description:mrp.field_stock_warn_insufficient_qty_unbuild__write_uid
msgid "Last Updated by"
msgstr "Última actualización de"
#. module: mrp
#: model:ir.model.fields,field_description:mrp.field_change_production_qty__write_date
#: model:ir.model.fields,field_description:mrp.field_mrp_bom__write_date
#: model:ir.model.fields,field_description:mrp.field_mrp_bom_byproduct__write_date
#: model:ir.model.fields,field_description:mrp.field_mrp_bom_line__write_date
#: model:ir.model.fields,field_description:mrp.field_mrp_document__write_date
#: model:ir.model.fields,field_description:mrp.field_mrp_product_produce__write_date
#: model:ir.model.fields,field_description:mrp.field_mrp_product_produce_line__write_date
#: model:ir.model.fields,field_description:mrp.field_mrp_production__write_date
#: model:ir.model.fields,field_description:mrp.field_mrp_routing__write_date
#: model:ir.model.fields,field_description:mrp.field_mrp_routing_workcenter__write_date
#: model:ir.model.fields,field_description:mrp.field_mrp_unbuild__write_date
#: model:ir.model.fields,field_description:mrp.field_mrp_workcenter__write_date
#: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity__write_date
#: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss__write_date
#: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss_type__write_date
#: model:ir.model.fields,field_description:mrp.field_mrp_workorder__write_date
#: model:ir.model.fields,field_description:mrp.field_mrp_workorder_line__write_date
#: model:ir.model.fields,field_description:mrp.field_stock_warn_insufficient_qty_unbuild__write_date
msgid "Last Updated on"
msgstr "Última actualización en"
#. module: mrp
#: model:ir.ui.menu,name:mrp.menu_mrp_reporting
msgid "Reporting"
msgstr "Informe"

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

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