Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[18.0][MIG] stock_product_variant_mto: Migration to 18.0 #1819

Open
wants to merge 5 commits into
base: 18.0
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 100 additions & 0 deletions stock_product_variant_mto/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
=========================
Stock Product Variant MTO
=========================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:19127c85672968523ba9dac247eafabed27aaff202e5e8cc20d87b1f6ee204c6
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png
:target: https://odoo-community.org/page/development-status
:alt: Alpha
.. |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%2Fstock--logistics--workflow-lightgray.png?logo=github
:target: https://github.com/OCA/stock-logistics-workflow/tree/18.0/stock_product_variant_mto
:alt: OCA/stock-logistics-workflow
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/stock-logistics-workflow-18-0/stock-logistics-workflow-18-0-stock_product_variant_mto
: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/stock-logistics-workflow&target_branch=18.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

This module allows to define if a product variant can use the Make To
Order route without any dependency on its template routes settings.

.. IMPORTANT::
This is an alpha version, the data model and design can change at any time without warning.
Only for development or testing purpose, do not use in production.
`More details on development status <https://odoo-community.org/page/development-status>`_

**Table of contents**

.. contents::
:local:

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/stock-logistics-workflow/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/stock-logistics-workflow/issues/new?body=module:%20stock_product_variant_mto%0Aversion:%2018.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
-------

* Camptocamp SA

Contributors
------------

- Matthieu Méquignon <[email protected]>
- Akim Juillerat <[email protected]>
- Chau Le <[email protected]>

Other credits
-------------

The development and migration of this module has been financially
supported by:

- Camptocamp

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.

.. |maintainer-mmequignon| image:: https://github.com/mmequignon.png?size=40px
:target: https://github.com/mmequignon
:alt: mmequignon

Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:

|maintainer-mmequignon|

This module is part of the `OCA/stock-logistics-workflow <https://github.com/OCA/stock-logistics-workflow/tree/18.0/stock_product_variant_mto>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
1 change: 1 addition & 0 deletions stock_product_variant_mto/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
18 changes: 18 additions & 0 deletions stock_product_variant_mto/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Copyright 2023 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)

{
"name": "Stock Product Variant MTO",
"summary": "Allow to individually set variants as MTO",
"version": "18.0.1.0.0",
"development_status": "Alpha",
"category": "Inventory",
"website": "https://github.com/OCA/stock-logistics-workflow",
"author": "Camptocamp SA, Odoo Community Association (OCA)",
"maintainers": ["mmequignon"],
"license": "AGPL-3",
"installable": True,
"auto_install": False,
"depends": ["stock"],
"data": ["views/product_product.xml"],
}
2 changes: 2 additions & 0 deletions stock_product_variant_mto/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import product_product
from . import product_template
53 changes: 53 additions & 0 deletions stock_product_variant_mto/models/product_product.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Copyright 2023 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)

from odoo import api, fields, models

IS_MTO_HELP = """
Check or Uncheck this field to enable the Make To Order on the variant,
independantly from its template configuration.\n
Please note that activating or deactivating Make To Order on the template,
will reset this setting on its variants.
"""


class ProductProduct(models.Model):
_inherit = "product.product"

is_mto = fields.Boolean(
string="Variant is MTO",
compute="_compute_is_mto",
store=True,
readonly=False,
help=IS_MTO_HELP,
)

route_ids = fields.Many2many(
"stock.route",
compute="_compute_route_ids",
domain="[('product_selectable', '=', True)]",
store=True,
)

def _compute_is_mto(self):
mto_route = self.env.ref("stock.route_warehouse0_mto", raise_if_not_found=False)
if not mto_route:
self.update({"is_mto": False})
return

Check warning on line 36 in stock_product_variant_mto/models/product_product.py

View check run for this annotation

Codecov / codecov/patch

stock_product_variant_mto/models/product_product.py#L35-L36

Added lines #L35 - L36 were not covered by tests

for product in self:
product.is_mto = mto_route in product.product_tmpl_id.route_ids

@api.depends("is_mto", "product_tmpl_id.route_ids")
def _compute_route_ids(self):
mto_route = self.env.ref("stock.route_warehouse0_mto", raise_if_not_found=False)
for product in self:
new_route_ids = product.product_tmpl_id.route_ids

if mto_route:
if product.is_mto and mto_route not in new_route_ids:
new_route_ids += mto_route
elif not product.is_mto and mto_route in new_route_ids:
new_route_ids -= mto_route

product.route_ids = new_route_ids
72 changes: 72 additions & 0 deletions stock_product_variant_mto/models/product_template.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Copyright 2023 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)

from odoo import api, models


class ProductTemplate(models.Model):
_inherit = "product.template"

def write(self, values):
mto_route = self.env.ref("stock.route_warehouse0_mto", raise_if_not_found=False)

if "route_ids" not in values or not mto_route:
return super().write(values)

# As _compute_is_mto cannot use api.depends (or it would reset MTO
# route on variants as soon as there is a change on the template routes),
# we need to check which template in self had MTO route activated
# or deactivated to force the recomputation of is_mto on variants

templates_not_mto_before = self.filtered(lambda t: mto_route not in t.route_ids)

res = super().write(values)

templates_mto_after = self.filtered(lambda t: mto_route in t.route_ids)
templates_mto_added = templates_not_mto_before & templates_mto_after
templates_mto_removed = self - templates_mto_after - templates_not_mto_before

affected_product_variants = (
templates_mto_added | templates_mto_removed
).product_variant_ids
if affected_product_variants:
affected_product_variants._compute_is_mto()

return res

@api.onchange("route_ids")
def onchange_route_ids(self):
mto_route = self.env.ref("stock.route_warehouse0_mto", raise_if_not_found=False)
if not mto_route:
return

Check warning on line 41 in stock_product_variant_mto/models/product_template.py

View check run for this annotation

Codecov / codecov/patch

stock_product_variant_mto/models/product_template.py#L41

Added line #L41 was not covered by tests

origin_routes = (
self._origin.route_ids if self._origin else self.env["stock.route"]
)
current_routes = (
self.route_ids._origin if self.route_ids else self.env["stock.route"]
)

if mto_route not in origin_routes and mto_route in current_routes:
# Return warning activating MTO route
return {
"warning": {
"title": self.env._("Warning"),
"message": self.env._(
"Activating MTO route will reset `Variant is MTO` "
"setting on the variants."
),
}
}

if mto_route in origin_routes and mto_route not in current_routes:
# Return warning deactivating MTO route
return {
"warning": {
"title": self.env._("Warning"),
"message": self.env._(
"Deactivating MTO route will reset `Variant is MTO` "
"setting on the variants."
),
}
}
3 changes: 3 additions & 0 deletions stock_product_variant_mto/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"
2 changes: 2 additions & 0 deletions stock_product_variant_mto/readme/CONFIGURATION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
The checkbox `Variant is MTO` on the product variant allows
to force usage or non-usage of the MTO route for the variant.
3 changes: 3 additions & 0 deletions stock_product_variant_mto/readme/CONTRIBUTORS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
- Matthieu Méquignon \<<[email protected]>\>
- Akim Juillerat \<<[email protected]>\>
- Chau Le \<<[email protected]>\>
3 changes: 3 additions & 0 deletions stock_product_variant_mto/readme/CREDITS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
The development and migration of this module has been financially supported by:

- Camptocamp
2 changes: 2 additions & 0 deletions stock_product_variant_mto/readme/DESCRIPTION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
This module allows to define if a product variant can use the Make To
Order route without any dependency on its template routes settings.
Loading
Loading