Skip to content

Commit

Permalink
[17.0][MIG] stock_reserve_rule: Migration v17 module
Browse files Browse the repository at this point in the history
  • Loading branch information
FernizaM22 committed Nov 29, 2024
1 parent f7d868a commit 045409d
Show file tree
Hide file tree
Showing 36 changed files with 3,047 additions and 16 deletions.
Binary file added pandoc-3.5-1-amd64.deb
Binary file not shown.
4 changes: 3 additions & 1 deletion stock_mts_mto_rule/models/stock_rule.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,9 @@ def get_mto_qty_to_order(self, product, product_qty, product_uom, values):
"Product Unit of Measure"
)
src_location_id = self.mts_rule_id.location_src_id.id
product_location = product.with_context(**self._get_product_location_context(src_location_id, values))
product_location = product.with_context(
**self._get_product_location_context(src_location_id, values)
)
virtual_available = product_location.virtual_available
qty_available = product.uom_id._compute_quantity(virtual_available, product_uom)
if float_compare(qty_available, 0.0, precision_digits=precision) > 0:
Expand Down
8 changes: 4 additions & 4 deletions stock_picking_accounting_date/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -71,13 +71,13 @@ Authors
Contributors
------------

- `Quartile <https://www.quartile.co>`__:
- `Quartile <https://www.quartile.co>`__:

- Aung Ko Ko Lin
- Aung Ko Ko Lin

- `Jarsa <https://www.jarsa.com>`__:
- `Jarsa <https://www.jarsa.com>`__:

- Alan Ramos
- Alan Ramos

Maintainers
-----------
Expand Down
188 changes: 188 additions & 0 deletions stock_reserve_rule/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
=======================
Stock Reservation Rules
=======================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:eb0ce7223cb9dba08b521b0ed5eccfa89eca3d96fd81fdf75c1b0cc6151aa7ed
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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%2Fstock--logistics--warehouse-lightgray.png?logo=github
:target: https://github.com/OCA/stock-logistics-warehouse/tree/17.0/stock_reserve_rule
:alt: OCA/stock-logistics-warehouse
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/stock-logistics-warehouse-17-0/stock-logistics-warehouse-17-0-stock_reserve_rule
: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-warehouse&target_branch=17.0
:alt: Try me on Runboat

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

This module adds rules for advanced reservation / removal strategies.

Rules are applied on a location and its sub-locations.

A rule can exclude quants or locations based on configurable criteria,
and based on the selected quants, apply advanced removal strategies.

The rules have a sequence, which will be respected for the reservation.
So even without filter or advanced removal strategies, we can give a
priority to reserve in a location before another.

The advanced removal strategies are applied on top of the default one
(fifo, fefo, ...).

The included advanced removal strategies are:

- Default Removal Strategy: apply the default configured one (fifo,
fefo, ...)
- Empty Bins: goods are removed from a bin only if the bin will be empty
after the removal (favor largest bins first to minimize the number of
operations, then apply the default removal strategy for equal
quantities).
- Full Packaging: tries to remove full packaging (configured on the
products) first, by largest to smallest package or based on a
pre-selected package (default removal strategy is then applied for
equal quantities).

Examples of scenario:

rules:

- location A: no filter, no advanced removal strategy
- location B: no filter, Empty Bins
- location C: no filter, no advanced removal strategy

result:

- take what is available in location A
- then take in location B if available, only if bin(s) are emptied
- then take what is available in location C

The module is meant to be extensible, with a core mechanism on which new
rules and advanced removal strategies can be added.

**Table of contents**

.. contents::
:local:

Configuration
=============

The configuration of the rules is done in "Inventory > Configuration >
Stock Reservation Rules".

Creation of a rule:

Properties that define where the rule will be applied:

- Location: Define where the rule will look for goods (a parent of the
move's source location).
- Fallback Location: Define where the goods are reserved if none of the
removal rule could reserve the goods. If left empty, the goods are
reserved in the move's source location / sub-locations.
- Rule Domain: The rule is used only if the Stock Move matches the
domain.

Removal rules for the locations:

- Quants Domain: this domain includes/excludes quants based on a domain.
- Advanced Removal Strategy: the strategy that will be used for this
location and sub-location when the rule is used.

The sequences have to be sorted in the view list to define the
reservation priorities.

Usage
=====

If you are using a database with demo data, you can give a try to the
following scenario to understand how it works.

The demo data created by the module contains:

A product: Funky Socks

3 Locations:

- Stock / Zone A / Bin A1: 200 Funky socks
- Stock / Zone B / Bin B1: 100 Funky socks
- Stock / Zone C / Bin C1: 100 Funky socks

3 Reservation Rules, in the following order

- Zone A must have full quantities
- Zone B
- Zone C

2 Delivery Orders:

- Origin: Outgoing shipment (reservation rules demo 1)
- Origin: Outgoing shipment (reservation rules demo 2)

Scenario:

- Activate Storage Locations and Multi-Warehouses
- You can open Inventory > Configuration > Stock Reservation Rules to
see the rules
- Open Transfer: Outgoing shipment (reservation rules demo 1)
- Check availability: it has 150 units, as it will not empty Zone A, it
will not take products there, it should take 100 in B and 50 in C
(following the rules order)
- Unreserve this transfer (to test the second case)
- Open Transfer: Outgoing shipment (reservation rules demo 2)
- Check availability: it has 250 units, it can empty Zone A, it will
take 200 in Bin A1 and 50 in Bin B1.
- If you want to explore further, you can add a custom domain to exclude
rules (for instance, a product category will not use Zone B).

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

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

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

- Guewen Baconnier <guewen.baconnier@camptocamp.com>

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/stock-logistics-warehouse <https://github.com/OCA/stock-logistics-warehouse/tree/17.0/stock_reserve_rule>`_ 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_reserve_rule/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
29 changes: 29 additions & 0 deletions stock_reserve_rule/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

{
"name": "Stock Reservation Rules",
"summary": "Configure reservation rules by location",
"version": "17.0.1.0.0",
"author": "Camptocamp, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/stock-logistics-warehouse",
"category": "Stock Management",
"depends": [
"stock",
"stock_helper",
"product_packaging_level",
],
"demo": [
"data/demo/product_demo.xml",
"data/demo/stock_location_demo.xml",
"data/demo/stock_reserve_rule_demo.xml",
"data/demo/stock_picking_demo.xml",
],
"data": [
"views/stock_reserve_rule_views.xml",
"security/ir.model.access.csv",
"security/stock_reserve_rule_security.xml",
],
"installable": True,
"development_status": "Beta",
"license": "AGPL-3",
}
15 changes: 15 additions & 0 deletions stock_reserve_rule/data/demo/product_demo.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record id="product_funky_socks" model="product.product">
<field name="default_code">RS700</field>
<field name="name">Funky Socks</field>
<field name="type">product</field>
<field name="categ_id" ref="product.product_category_6" />
<field name="lst_price">30.0</field>
<field name="standard_price">20.0</field>
<field name="weight">1.0</field>
<field name="tracking">none</field>
<field name="uom_id" ref="uom.product_uom_unit" />
<field name="uom_po_id" ref="uom.product_uom_unit" />
</record>
</odoo>
27 changes: 27 additions & 0 deletions stock_reserve_rule/data/demo/stock_location_demo.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record id="stock_location_zone_a_demo" model="stock.location">
<field name="name">Zone A</field>
<field name="location_id" ref="stock.stock_location_stock" />
</record>
<record id="stock_location_zone_b_demo" model="stock.location">
<field name="name">Zone B</field>
<field name="location_id" ref="stock.stock_location_stock" />
</record>
<record id="stock_location_zone_c_demo" model="stock.location">
<field name="name">Zone C</field>
<field name="location_id" ref="stock.stock_location_stock" />
</record>
<record id="stock_location_zone_a_bin_1_demo" model="stock.location">
<field name="name">Bin A1</field>
<field name="location_id" ref="stock_location_zone_a_demo" />
</record>
<record id="stock_location_zone_b_bin_1_demo" model="stock.location">
<field name="name">Bin B1</field>
<field name="location_id" ref="stock_location_zone_b_demo" />
</record>
<record id="stock_location_zone_c_bin_1_demo" model="stock.location">
<field name="name">Bin C1</field>
<field name="location_id" ref="stock_location_zone_c_demo" />
</record>
</odoo>
45 changes: 45 additions & 0 deletions stock_reserve_rule/data/demo/stock_picking_demo.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record id="stock_picking_out_1_demo" model="stock.picking">
<field name="picking_type_id" ref="stock.picking_type_out" />
<field name="origin">Outgoing shipment (reservation rules demo 1)</field>
<field name="partner_id" ref="base.res_partner_1" />
<field name="date" eval="DateTime.today()" />
<field name="location_id" ref="stock.stock_location_stock" />
<field name="location_dest_id" ref="stock.stock_location_customers" />
<field
name="move_ids"
model="stock.move"
eval="[(0, 0, {
'name': obj().env.ref('stock_reserve_rule.product_funky_socks').name,
'product_id': ref('stock_reserve_rule.product_funky_socks'),
'product_uom': ref('uom.product_uom_unit'),
'product_uom_qty': 150.0,
'picking_type_id': ref('stock.picking_type_out'),
'location_id': ref('stock.stock_location_stock'),
'location_dest_id': ref('stock.stock_location_customers'),
})]"
/>
</record>
<record id="stock_picking_out_2_demo" model="stock.picking">
<field name="picking_type_id" ref="stock.picking_type_out" />
<field name="origin">Outgoing shipment (reservation rules demo 2)</field>
<field name="partner_id" ref="base.res_partner_1" />
<field name="date" eval="DateTime.today()" />
<field name="location_id" ref="stock.stock_location_stock" />
<field name="location_dest_id" ref="stock.stock_location_customers" />
<field
name="move_ids"
model="stock.move"
eval="[(0, 0, {
'name': obj().env.ref('stock_reserve_rule.product_funky_socks').name,
'product_id': ref('stock_reserve_rule.product_funky_socks'),
'product_uom': ref('uom.product_uom_unit'),
'product_uom_qty': 250.0,
'picking_type_id': ref('stock.picking_type_out'),
'location_id': ref('stock.stock_location_stock'),
'location_dest_id': ref('stock.stock_location_customers'),
})]"
/>
</record>
</odoo>
28 changes: 28 additions & 0 deletions stock_reserve_rule/data/demo/stock_reserve_rule_demo.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record id="stock_reserve_rule_1_demo" model="stock.reserve.rule">
<field name="name">Stock</field>
<field name="sequence">1</field>
<field name="location_id" ref="stock.stock_location_stock" />
<field name="company_id" ref="base.main_company" />
<field name="active" eval="False" />
</record>
<record id="stock_reserve_rule_removal_1_demo" model="stock.reserve.rule.removal">
<field name="rule_id" ref="stock_reserve_rule_1_demo" />
<field name="sequence">1</field>
<field name="location_id" ref="stock_location_zone_a_demo" />
<field name="removal_strategy">empty_bin</field>
</record>
<record id="stock_reserve_rule_2_removal_demo" model="stock.reserve.rule.removal">
<field name="rule_id" ref="stock_reserve_rule_1_demo" />
<field name="sequence">2</field>
<field name="location_id" ref="stock_location_zone_b_demo" />
<field name="removal_strategy">default</field>
</record>
<record id="stock_reserve_rule_3_removal_demo" model="stock.reserve.rule.removal">
<field name="rule_id" ref="stock_reserve_rule_1_demo" />
<field name="sequence">3</field>
<field name="location_id" ref="stock_location_zone_c_demo" />
<field name="removal_strategy">default</field>
</record>
</odoo>
18 changes: 18 additions & 0 deletions stock_reserve_rule/demo/product_demo.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">

<record id="product_funky_socks" model="product.product">
<field name="default_code">RS700</field>
<field name="name">Funky Socks</field>
<field name="type">product</field>
<field name="categ_id" ref="product.product_category_6" />
<field name="lst_price">30.0</field>
<field name="standard_price">20.0</field>
<field name="weight">1.0</field>
<field name="tracking">none</field>
<field name="uom_id" ref="uom.product_uom_unit" />
<field name="uom_po_id" ref="uom.product_uom_unit" />
<field name="property_stock_inventory" ref="stock.location_inventory" />
</record>

</odoo>
Loading

0 comments on commit 045409d

Please sign in to comment.