Initial commit: OCA Mrp packages (117 packages)

This commit is contained in:
Ernad Husremovic 2025-08-29 15:43:05 +02:00
commit 277e84fd7a
4403 changed files with 395154 additions and 0 deletions

View file

@ -0,0 +1,45 @@
# MRP Stock Owner Restriction
Odoo addon: mrp_stock_owner_restriction
## Installation
```bash
pip install odoo-bringout-oca-manufacture-mrp_stock_owner_restriction
```
## Dependencies
This addon depends on:
- mrp
- stock_owner_restriction
## Manifest Information
- **Name**: MRP Stock Owner Restriction
- **Version**: 16.0.1.0.0
- **Category**: Manufacturing
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/manufacture](https://github.com/OCA/manufacture) branch 16.0, addon `mrp_stock_owner_restriction`.
## License
This package maintains the original AGPL-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 Mrp_stock_owner_restriction Module - mrp_stock_owner_restriction
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_stock_owner_restriction. 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,6 @@
# Dependencies
This addon depends on:
- [mrp](../../odoo-bringout-oca-ocb-mrp)
- [stock_owner_restriction](../../odoo-bringout-oca-stock-logistics-workflow-stock_owner_restriction)

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

View file

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

View file

@ -0,0 +1,15 @@
# Models
Detected core models and extensions in mrp_stock_owner_restriction.
```mermaid
classDiagram
class mrp_production
class mrp_unbuild
class stock_move
class stock_move_line
```
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_stock_owner_restriction. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon mrp_stock_owner_restriction
- License: LGPL-3

View file

@ -0,0 +1,3 @@
# Reports
This module does not define custom reports.

View file

@ -0,0 +1,8 @@
# Security
This module does not define custom security rules or access controls beyond Odoo defaults.
Default Odoo security applies:
- Base user access through standard groups
- Model access inherited from dependencies
- No custom row-level security rules

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_stock_owner_restriction
```

View file

@ -0,0 +1,3 @@
# Wizards
This module does not include UI wizards.

View file

@ -0,0 +1,84 @@
===========================
MRP Stock Owner Restriction
===========================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:5427316ef28b278ce23c8c70519a1bc1c7ad162aedd862f1b1d8cb8a6b0ca96e
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmanufacture-lightgray.png?logo=github
:target: https://github.com/OCA/manufacture/tree/16.0/mrp_stock_owner_restriction
:alt: OCA/manufacture
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/manufacture-16-0/manufacture-16-0-mrp_stock_owner_restriction
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/manufacture&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module adapts the functionality of stock_owner_restriction in the manufacturing
order.
**Table of contents**
.. contents::
:local:
Known issues / Roadmap
======================
An unbuild order not linked to a manufacturing order will not utilize the functionality of the stock_owner_restriction module.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/manufacture/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/manufacture/issues/new?body=module:%20mrp_stock_owner_restriction%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* Quartile
Contributors
~~~~~~~~~~~~
* `Quartile <https://www.quartile.co>`_:
* Yoshi Tashiro
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
This module is part of the `OCA/manufacture <https://github.com/OCA/manufacture/tree/16.0/mrp_stock_owner_restriction>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -0,0 +1,14 @@
# Copyright 2023 Quartile
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "MRP Stock Owner Restriction",
"version": "16.0.1.0.0",
"category": "Manufacturing",
"website": "https://github.com/OCA/manufacture",
"author": "Quartile, Odoo Community Association (OCA)",
"license": "AGPL-3",
"depends": ["mrp", "stock_owner_restriction"],
"data": ["views/mrp_production_views.xml"],
"installable": True,
"auto_install": True,
}

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mrp_stock_owner_restriction
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: mrp_stock_owner_restriction
#: model:ir.model.fields,field_description:mrp_stock_owner_restriction.field_mrp_production__owner_id
msgid "Assign Owner"
msgstr "Dodijeli vlasnika"
#. module: mrp_stock_owner_restriction
#: model:ir.model.fields,field_description:mrp_stock_owner_restriction.field_mrp_production__owner_restriction
msgid "Owner Restriction"
msgstr "[PREVOD: Owner Restriction]"
#. module: mrp_stock_owner_restriction
#: model:ir.model.fields,help:mrp_stock_owner_restriction.field_mrp_production__owner_id
msgid "Produced products will be assigned to this owner."
msgstr "[PREVOD POTREBAN: Produced products will be assigned to this owner....]"
#. module: mrp_stock_owner_restriction
#: model:ir.model,name:mrp_stock_owner_restriction.model_stock_move_line
msgid "Product Moves (Stock Move Line)"
msgstr "Skladišna kretanja proizvoda(stavke)"
#. module: mrp_stock_owner_restriction
#: model:ir.model,name:mrp_stock_owner_restriction.model_mrp_production
msgid "Production Order"
msgstr "Proizvodni nalog"
#. module: mrp_stock_owner_restriction
#: model:ir.model,name:mrp_stock_owner_restriction.model_stock_move
msgid "Stock Move"
msgstr "Skladišno kretanje"
#. module: mrp_stock_owner_restriction
#: model:ir.model,name:mrp_stock_owner_restriction.model_mrp_unbuild
msgid "Unbuild Order"
msgstr "Nalog rastavljanja"

View file

@ -0,0 +1,52 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mrp_stock_owner_restriction
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-01-25 16:06+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\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"
"X-Generator: Weblate 5.6.2\n"
#. module: mrp_stock_owner_restriction
#: model:ir.model.fields,field_description:mrp_stock_owner_restriction.field_mrp_production__owner_id
msgid "Assign Owner"
msgstr "Assegna proprietario"
#. module: mrp_stock_owner_restriction
#: model:ir.model.fields,field_description:mrp_stock_owner_restriction.field_mrp_production__owner_restriction
msgid "Owner Restriction"
msgstr "Restrizione proprietario"
#. module: mrp_stock_owner_restriction
#: model:ir.model.fields,help:mrp_stock_owner_restriction.field_mrp_production__owner_id
msgid "Produced products will be assigned to this owner."
msgstr "Gli articoli prodotti verranno assegnati a questo proprietario."
#. module: mrp_stock_owner_restriction
#: model:ir.model,name:mrp_stock_owner_restriction.model_stock_move_line
msgid "Product Moves (Stock Move Line)"
msgstr "Movimenti prodotto (riga movimento di magazzino)"
#. module: mrp_stock_owner_restriction
#: model:ir.model,name:mrp_stock_owner_restriction.model_mrp_production
msgid "Production Order"
msgstr "Ordine di produzione"
#. module: mrp_stock_owner_restriction
#: model:ir.model,name:mrp_stock_owner_restriction.model_stock_move
msgid "Stock Move"
msgstr "Movimento di magazzino"
#. module: mrp_stock_owner_restriction
#: model:ir.model,name:mrp_stock_owner_restriction.model_mrp_unbuild
msgid "Unbuild Order"
msgstr "Ordine di smontaggio"

View file

@ -0,0 +1,52 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mrp_stock_owner_restriction
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-04-12 07:13+0000\n"
"PO-Revision-Date: 2023-04-12 07:13+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: mrp_stock_owner_restriction
#: model:ir.model.fields,field_description:mrp_stock_owner_restriction.field_mrp_production__owner_id
msgid "Assign Owner"
msgstr "オーナー割当"
#. module: mrp_stock_owner_restriction
#: model:ir.model.fields,field_description:mrp_stock_owner_restriction.field_mrp_production__owner_restriction
msgid "Owner Restriction"
msgstr "オーナー制限"
#. module: mrp_stock_owner_restriction
#: model:ir.model.fields,help:mrp_stock_owner_restriction.field_mrp_production__owner_id
msgid "Produced products will be assigned to this owner."
msgstr "生産された製品は、このオーナーに割り当てられます。"
#. module: mrp_stock_owner_restriction
#: model:ir.model,name:mrp_stock_owner_restriction.model_stock_move_line
msgid "Product Moves (Stock Move Line)"
msgstr "製品の移動(在庫移動ライン)"
#. module: mrp_stock_owner_restriction
#: model:ir.model,name:mrp_stock_owner_restriction.model_mrp_production
msgid "Production Order"
msgstr "製造オーダ"
#. module: mrp_stock_owner_restriction
#: model:ir.model,name:mrp_stock_owner_restriction.model_stock_move
msgid "Stock Move"
msgstr "在庫移動"
#. module: mrp_stock_owner_restriction
#: model:ir.model,name:mrp_stock_owner_restriction.model_mrp_unbuild
msgid "Unbuild Order"
msgstr ""

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mrp_stock_owner_restriction
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: mrp_stock_owner_restriction
#: model:ir.model.fields,field_description:mrp_stock_owner_restriction.field_mrp_production__owner_id
msgid "Assign Owner"
msgstr ""
#. module: mrp_stock_owner_restriction
#: model:ir.model.fields,field_description:mrp_stock_owner_restriction.field_mrp_production__owner_restriction
msgid "Owner Restriction"
msgstr ""
#. module: mrp_stock_owner_restriction
#: model:ir.model.fields,help:mrp_stock_owner_restriction.field_mrp_production__owner_id
msgid "Produced products will be assigned to this owner."
msgstr ""
#. module: mrp_stock_owner_restriction
#: model:ir.model,name:mrp_stock_owner_restriction.model_stock_move_line
msgid "Product Moves (Stock Move Line)"
msgstr ""
#. module: mrp_stock_owner_restriction
#: model:ir.model,name:mrp_stock_owner_restriction.model_mrp_production
msgid "Production Order"
msgstr ""
#. module: mrp_stock_owner_restriction
#: model:ir.model,name:mrp_stock_owner_restriction.model_stock_move
msgid "Stock Move"
msgstr ""
#. module: mrp_stock_owner_restriction
#: model:ir.model,name:mrp_stock_owner_restriction.model_mrp_unbuild
msgid "Unbuild Order"
msgstr ""

View file

@ -0,0 +1,52 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mrp_stock_owner_restriction
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-04-12 12:24+0000\n"
"Last-Translator: Bosd <c5e2fd43-d292-4c90-9d1f-74ff3436329a@anonaddy.me>\n"
"Language-Team: none\n"
"Language: nl\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"
"X-Generator: Weblate 5.10.4\n"
#. module: mrp_stock_owner_restriction
#: model:ir.model.fields,field_description:mrp_stock_owner_restriction.field_mrp_production__owner_id
msgid "Assign Owner"
msgstr "Wijs Eigenaar Toe"
#. module: mrp_stock_owner_restriction
#: model:ir.model.fields,field_description:mrp_stock_owner_restriction.field_mrp_production__owner_restriction
msgid "Owner Restriction"
msgstr "Eigenaarbeperking"
#. module: mrp_stock_owner_restriction
#: model:ir.model.fields,help:mrp_stock_owner_restriction.field_mrp_production__owner_id
msgid "Produced products will be assigned to this owner."
msgstr "Geproduceerde producten worden toegewezen aan deze eigenaar."
#. module: mrp_stock_owner_restriction
#: model:ir.model,name:mrp_stock_owner_restriction.model_stock_move_line
msgid "Product Moves (Stock Move Line)"
msgstr "Productbewegingen (Voorraadmutatieregel)"
#. module: mrp_stock_owner_restriction
#: model:ir.model,name:mrp_stock_owner_restriction.model_mrp_production
msgid "Production Order"
msgstr "Productieorder"
#. module: mrp_stock_owner_restriction
#: model:ir.model,name:mrp_stock_owner_restriction.model_stock_move
msgid "Stock Move"
msgstr "Voorraadmutatie"
#. module: mrp_stock_owner_restriction
#: model:ir.model,name:mrp_stock_owner_restriction.model_mrp_unbuild
msgid "Unbuild Order"
msgstr "Demontageorder"

View file

@ -0,0 +1,4 @@
from . import mrp_production
from . import mrp_unbuild
from . import stock_move_line
from . import stock_move

View file

@ -0,0 +1,28 @@
# Copyright 2023 Quartile
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import fields, models
class MrpProduction(models.Model):
_inherit = "mrp.production"
owner_id = fields.Many2one(
"res.partner",
"Assign Owner",
readonly=True,
states={"draft": [("readonly", False)], "confirmed": [("readonly", False)]},
check_company=True,
help="Produced products will be assigned to this owner.",
)
owner_restriction = fields.Selection(related="picking_type_id.owner_restriction")
def write(self, vals):
if "owner_id" in vals:
for production in self:
if production.owner_restriction in (
"unassigned_owner",
"picking_partner",
):
production.move_line_raw_ids.unlink()
return super().write(vals)

View file

@ -0,0 +1,15 @@
# Copyright 2023 Quartile
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import models
class MrpUnbuild(models.Model):
_inherit = "mrp.unbuild"
def action_validate(self):
owner_restriction = self.mo_id.owner_restriction
owner = self.mo_id.owner_id
if owner and owner_restriction in ("unassigned_owner", "picking_partner"):
self = self.with_context(force_restricted_owner_id=owner)
return super().action_validate()

View file

@ -0,0 +1,42 @@
# Copyright 2023 Quartile
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import api, models
class StockMove(models.Model):
_inherit = "stock.move"
# Just to add a trigger
@api.depends("production_id.owner_id")
def _compute_restrict_partner_id(self):
return super()._compute_restrict_partner_id()
def _get_mo_to_unbuild(self):
self.ensure_one()
return self.consume_unbuild_id.mo_id or self.unbuild_id.mo_id
def _get_owner_for_assign(self):
self.ensure_one()
if self.raw_material_production_id:
return self.raw_material_production_id.owner_id
# Manufactured product should not consider the owner for assignment, or the
# result might be messed up (e.g. tries to move stock from the internal location
# instead of the production location).
if self.production_id:
return False
# For chained origin moves for production component moves.
production = self.move_dest_ids.raw_material_production_id
if production:
return production.owner_id
mo_to_unbuild = self._get_mo_to_unbuild()
if mo_to_unbuild:
return mo_to_unbuild.owner_id
return super()._get_owner_for_assign()
def _get_owner_restriction(self):
self.ensure_one()
mo_to_unbuild = self._get_mo_to_unbuild()
if mo_to_unbuild:
return mo_to_unbuild.owner_restriction
return super()._get_owner_restriction()

View file

@ -0,0 +1,18 @@
# Copyright 2023 Quartile
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import models
class StockMoveLine(models.Model):
_inherit = "stock.move.line"
def _action_done(self):
for line in self:
owner = line.move_id.production_id.owner_id or self.env.context.get(
"force_restricted_owner_id", None
)
if owner:
line.move_id.write({"restrict_partner_id": owner.id})
line.write({"owner_id": owner.id})
return super()._action_done()

View file

@ -0,0 +1,3 @@
* `Quartile <https://www.quartile.co>`_:
* Yoshi Tashiro

View file

@ -0,0 +1,2 @@
This module adapts the functionality of stock_owner_restriction in the manufacturing
order.

View file

@ -0,0 +1 @@
An unbuild order not linked to a manufacturing order will not utilize the functionality of the stock_owner_restriction module.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View file

@ -0,0 +1,435 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>MRP Stock Owner Restriction</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="mrp-stock-owner-restriction">
<h1 class="title">MRP Stock Owner Restriction</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:5427316ef28b278ce23c8c70519a1bc1c7ad162aedd862f1b1d8cb8a6b0ca96e
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/manufacture/tree/16.0/mrp_stock_owner_restriction"><img alt="OCA/manufacture" src="https://img.shields.io/badge/github-OCA%2Fmanufacture-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/manufacture-16-0/manufacture-16-0-mrp_stock_owner_restriction"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/manufacture&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module adapts the functionality of stock_owner_restriction in the manufacturing
order.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#known-issues-roadmap" id="toc-entry-1">Known issues / Roadmap</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-6">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="known-issues-roadmap">
<h1><a class="toc-backref" href="#toc-entry-1">Known issues / Roadmap</a></h1>
<p>An unbuild order not linked to a manufacturing order will not utilize the functionality of the stock_owner_restriction module.</p>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/manufacture/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/manufacture/issues/new?body=module:%20mrp_stock_owner_restriction%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-3">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-4">Authors</a></h2>
<ul class="simple">
<li>Quartile</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
<ul>
<li><p class="first"><a class="reference external" href="https://www.quartile.co">Quartile</a>:</p>
<blockquote>
<ul class="simple">
<li>Yoshi Tashiro</li>
</ul>
</blockquote>
</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
</a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/manufacture/tree/16.0/mrp_stock_owner_restriction">OCA/manufacture</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1 @@
from . import test_mrp_stock_owner_restriction

View file

@ -0,0 +1,95 @@
# Copyright 2023 Quartile Limited
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.tests import Form, tagged
from odoo.tests.common import TransactionCase
@tagged("post_install", "-at_install")
class TestMrpStockOwnerRestriction(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.company = cls.env.ref("base.main_company")
cls.manufacture_route = cls.env.ref("mrp.route_warehouse0_manufacture")
cls.finished_product = cls.env["product.product"].create(
{"name": "test product", "type": "product"}
)
cls.component = cls.env["product.product"].create(
{"name": "test component", "type": "product"}
)
cls.bom = cls.env["mrp.bom"].create(
{
"product_id": cls.finished_product.id,
"product_tmpl_id": cls.finished_product.product_tmpl_id.id,
"product_uom_id": cls.finished_product.uom_id.id,
"product_qty": 1.0,
"type": "normal",
}
)
cls.env["mrp.bom.line"].create(
{"bom_id": cls.bom.id, "product_id": cls.component.id, "product_qty": 1}
)
cls.owner = cls.env["res.partner"].create({"name": "Owner test"})
cls.finished_product.route_ids = [(6, 0, cls.manufacture_route.ids)]
cls.picking_type = cls.env["stock.picking.type"].search(
[
("code", "=", "mrp_operation"),
("warehouse_id.company_id", "=", cls.company.id),
],
limit=1,
)
cls.picking_type.write({"owner_restriction": "picking_partner"})
quant_vals = {
"product_id": cls.component.id,
"location_id": cls.picking_type.default_location_src_id.id,
"quantity": 250.00,
}
# Create quants without owner
cls.env["stock.quant"].create(quant_vals)
# Create quants with owner
cls.env["stock.quant"].create(dict(quant_vals, owner_id=cls.owner.id))
def test_mrp_quant_assign_owner(self):
self.assertEqual(self.component.qty_available, 250)
self.component.invalidate_model(["qty_available"])
self.assertEqual(
self.component.with_context(skip_restricted_owner=True).qty_available, 500
)
mo = self.env["mrp.production"].create(
{
"product_id": self.finished_product.id,
"bom_id": self.bom.id,
"product_qty": 250,
"picking_type_id": self.picking_type.id,
"owner_id": self.owner.id,
}
)
mo.action_confirm()
action = mo.button_mark_done()
self.assertEqual(action.get("res_model"), "mrp.immediate.production")
wizard = Form(
self.env[action["res_model"]].with_context(**action["context"])
).save()
action = wizard.process()
# Check produced product owner and qty_available
self.assertEqual(self.finished_product.qty_available, 0.00)
self.finished_product.invalidate_model(["qty_available"])
self.assertEqual(
self.finished_product.with_context(
skip_restricted_owner=True
).qty_available,
250.00,
)
quant = self.env["stock.quant"].search(
[("product_id", "=", self.finished_product.id)]
)
self.assertEqual(quant.owner_id, self.owner)
# Confirm that component inventory with owner has been consumed
self.assertEqual(self.component.qty_available, 250)
self.component.invalidate_model(["qty_available"])
self.assertEqual(
self.component.with_context(skip_restricted_owner=True).qty_available, 250
)

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="mrp_production_form_view" model="ir.ui.view">
<field name="name">mrp.production.form</field>
<field name="model">mrp.production</field>
<field name="inherit_id" ref="mrp.mrp_production_form_view" />
<field name="arch" type="xml">
<xpath expr="//field[@name='move_finished_ids']" position="after">
<field name="owner_id" />
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,43 @@
[project]
name = "odoo-bringout-oca-manufacture-mrp_stock_owner_restriction"
version = "16.0.0"
description = "MRP Stock Owner Restriction - Odoo addon"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-ocb-mrp>=16.0.0",
"odoo-bringout-oca-manufacture-stock_owner_restriction>=16.0.0",
"requests>=2.25.1"
]
readme = "README.md"
requires-python = ">= 3.11"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Office/Business",
]
[project.urls]
homepage = "https://github.com/bringout/0"
repository = "https://github.com/bringout/0"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.metadata]
allow-direct-references = true
[tool.hatch.build.targets.wheel]
packages = ["mrp_stock_owner_restriction"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]