Initial commit: Odoo 18.0-20251222 extra-addons
Some checks failed
pre-commit / pre-commit (push) Has been cancelled
tests / Detect unreleased dependencies (push) Has been cancelled
tests / test with OCB (push) Has been cancelled
tests / test with Odoo (push) Has been cancelled

This commit is contained in:
tocmo0nlord
2026-03-13 20:43:25 +00:00
parent 36e847a7df
commit adbe430761
9472 changed files with 1265727 additions and 0 deletions

View File

@@ -0,0 +1,90 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association
==============================
Sale Procurement Group by Line
==============================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:3422322fe14e454647825eae76770bf4bea1d86e11d8398210ce21917badbde1
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
:target: https://odoo-community.org/page/development-status
:alt: Production/Stable
.. |badge2| image:: https://img.shields.io/badge/license-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%2Fsale--workflow-lightgray.png?logo=github
:target: https://github.com/OCA/sale-workflow/tree/18.0/sale_procurement_group_by_line
:alt: OCA/sale-workflow
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/sale-workflow-18-0/sale-workflow-18-0-sale_procurement_group_by_line
: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/sale-workflow&target_branch=18.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module was written to extend the functionality of procurement
groups created from a sale order.
On itself, this module does nothing it is a requirement for modules
which needs to create procurement group per sale order line basis.
**Table of contents**
.. contents::
:local:
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/sale-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/sale-workflow/issues/new?body=module:%20sale_procurement_group_by_line%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
* ForgeFlow
* Serpent Consulting Services Pvt. Ltd.
Contributors
------------
- Guewen Baconnier <guewen.baconnier@camptocamp.com>
- Yannick Vaucher <yannick.vaucher@camptocamp.com>
- Jordi Ballester <jordi.ballester@forgeflow.com>
- Serpent Consulting Services Pvt. Ltd. <support@serpentcs.com>
- Carmen Rondon Regalado <crondon@archeti.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/sale-workflow <https://github.com/OCA/sale-workflow/tree/18.0/sale_procurement_group_by_line>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@@ -0,0 +1,3 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import model

View File

@@ -0,0 +1,20 @@
# Copyright 2013-2014 Camptocamp SA - Guewen Baconnier
# © 2016-20 ForgeFlow S.L. (https://www.forgeflow.com)
# © 2016 Serpent Consulting Services Pvt. Ltd.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Sale Procurement Group by Line",
"summary": "Base module for multiple procurement group by Sale order",
"version": "18.0.1.0.1",
"author": "Camptocamp,"
"ForgeFlow,"
"Serpent Consulting Services Pvt. Ltd.,"
"Odoo Community Association (OCA)",
"category": "Warehouse",
"license": "AGPL-3",
"development_status": "Production/Stable",
"website": "https://github.com/OCA/sale-workflow",
"depends": ["sale_stock"],
"installable": True,
}

View File

@@ -0,0 +1,47 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: sale-workflow (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-14 06:38+0000\n"
"PO-Revision-Date: 2022-03-21 14:17+0000\n"
"Last-Translator: Noel estudillo <noelestudilloviera@gmail.com>\n"
"Language-Team: Catalan (http://www.transifex.com/oca/OCA-sale-workflow-8-0/"
"language/ca/)\n"
"Language: ca\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 4.3.2\n"
#. module: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr "Grup de contractació"
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr "Línia de comanda de vendes"
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr ""
#~ msgid "Sales Order"
#~ msgstr "Comandes de venda"
#~ msgid "Display Name"
#~ msgstr "Nom de visualització"
#~ msgid "ID"
#~ msgstr "ID"
#~ msgid "Last Modified on"
#~ msgstr "Última modificació el"

View File

@@ -0,0 +1,42 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-23 01:51+0000\n"
"PO-Revision-Date: 2023-10-11 11:38+0000\n"
"Last-Translator: David Brühlmeier <david@bruehlmeier.com>\n"
"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n"
"Language: de\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 4.17\n"
#. module: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr "Einkaufsgruppe"
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr "Auftragsposition"
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr "Lagerbuchung"
#, fuzzy
#~ msgid "Sales Order"
#~ msgstr "Verkaufsauftrag"
#~ msgid "Quotation"
#~ msgstr "Angebot"

View File

@@ -0,0 +1,39 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
# Kostas Goutoudis <goutoudis@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-02-28 03:43+0000\n"
"PO-Revision-Date: 2017-02-28 03:43+0000\n"
"Last-Translator: Kostas Goutoudis <goutoudis@gmail.com>, 2017\n"
"Language-Team: Greek (Greece) (https://www.transifex.com/oca/teams/23907/"
"el_GR/)\n"
"Language: el_GR\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: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr ""
#, fuzzy
#~ msgid "Sales Order"
#~ msgstr "Εντολή Πώλησης"

View File

@@ -0,0 +1,38 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-23 01:51+0000\n"
"PO-Revision-Date: 2023-07-25 12:10+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n"
"Language: es\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 4.17\n"
#. module: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr "Grupo de adquisiciones"
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr "Línea de pedido de venta"
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr "movimiento de existencias"
#~ msgid "Sales Order"
#~ msgstr "Órdenes de venta"

View File

@@ -0,0 +1,38 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: sale-workflow (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-04 13:41+0000\n"
"PO-Revision-Date: 2015-09-03 07:09+0000\n"
"Last-Translator: <>\n"
"Language-Team: Spanish (Spain) (http://www.transifex.com/oca/OCA-sale-"
"workflow-8-0/language/es_ES/)\n"
"Language: es_ES\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: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr ""
#, fuzzy
#~ msgid "Sales Order"
#~ msgstr "Pedido de venta"

View File

@@ -0,0 +1,39 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-02-28 03:43+0000\n"
"PO-Revision-Date: 2017-02-28 03:43+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: Spanish (Venezuela) (https://www.transifex.com/oca/"
"teams/23907/es_VE/)\n"
"Language: es_VE\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: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr "Línea de pedido de venta"
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr ""
#, fuzzy
#~ msgid "Sales Order"
#~ msgstr "Pedidos de venta"

View File

@@ -0,0 +1,38 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-23 01:51+0000\n"
"PO-Revision-Date: 2017-11-23 01:51+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: Finnish (https://www.transifex.com/oca/teams/23907/fi/)\n"
"Language: fi\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: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr ""
#, fuzzy
#~ msgid "Sales Order"
#~ msgstr "Myyntitilaus"

View File

@@ -0,0 +1,38 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-23 01:51+0000\n"
"PO-Revision-Date: 2017-11-23 01:51+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n"
"Language: fr\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: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr "Sales Order Line"
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr ""
#, fuzzy
#~ msgid "Sales Order"
#~ msgstr "Bon de commande"

View File

@@ -0,0 +1,40 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
# Bole <bole@dajmi5.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-23 01:51+0000\n"
"PO-Revision-Date: 2017-11-23 01:51+0000\n"
"Last-Translator: Bole <bole@dajmi5.com>, 2017\n"
"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#. module: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr "Stavka ponude"
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr ""
#, fuzzy
#~ msgid "Sales Order"
#~ msgstr "Prodajni nalog"

View File

@@ -0,0 +1,40 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
# Bole <bole@dajmi5.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-02-28 03:43+0000\n"
"PO-Revision-Date: 2017-02-28 03:43+0000\n"
"Last-Translator: Bole <bole@dajmi5.com>, 2017\n"
"Language-Team: Croatian (Croatia) (https://www.transifex.com/oca/teams/23907/"
"hr_HR/)\n"
"Language: hr_HR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#. module: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr ""
#, fuzzy
#~ msgid "Sales Order"
#~ msgstr "Prodjani nalog"

View File

@@ -0,0 +1,38 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: sale-workflow (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-12-10 05:55+0000\n"
"PO-Revision-Date: 2015-09-03 07:09+0000\n"
"Last-Translator: <>\n"
"Language-Team: Hungarian (http://www.transifex.com/oca/OCA-sale-workflow-8-0/"
"language/hu/)\n"
"Language: hu\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: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr ""
#, fuzzy
#~ msgid "Sales Order"
#~ msgstr "Vevői megrendelés"

View File

@@ -0,0 +1,39 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: sale-workflow (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-10-02 17:59+0000\n"
"PO-Revision-Date: 2023-10-09 07:41+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: Italian (http://www.transifex.com/oca/OCA-sale-workflow-8-0/"
"language/it/)\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 4.17\n"
#. module: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr "Gruppo di approvvigionamento"
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr "Riga ordine di vendita"
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr "Movimento di magazzino"
#, fuzzy
#~ msgid "Sales Order"
#~ msgstr "Ordini vendita"

View File

@@ -0,0 +1,38 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-23 01:51+0000\n"
"PO-Revision-Date: 2017-11-23 01:51+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: Dutch (https://www.transifex.com/oca/teams/23907/nl/)\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"
#. module: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr ""
#, fuzzy
#~ msgid "Sales Order"
#~ msgstr "Verkooporder"

View File

@@ -0,0 +1,39 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
# Peter Hageman <hageman.p@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-23 01:51+0000\n"
"PO-Revision-Date: 2017-11-23 01:51+0000\n"
"Last-Translator: Peter Hageman <hageman.p@gmail.com>, 2017\n"
"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/"
"teams/23907/nl_NL/)\n"
"Language: nl_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"
#. module: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr "Verkooporderregel"
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr ""
#, fuzzy
#~ msgid "Sales Order"
#~ msgstr "Verkooporder"

View File

@@ -0,0 +1,38 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
# Daniel Reis <dreis.pt@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-02-28 03:43+0000\n"
"PO-Revision-Date: 2017-02-28 03:43+0000\n"
"Last-Translator: Daniel Reis <dreis.pt@gmail.com>, 2017\n"
"Language-Team: Portuguese (https://www.transifex.com/oca/teams/23907/pt/)\n"
"Language: pt\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: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr ""
#, fuzzy
#~ msgid "Sales Order"
#~ msgstr "Ordem de Venda"

View File

@@ -0,0 +1,40 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
# Paulo Ricardo <ti@shoppingescritorio.com.br>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-02-28 03:43+0000\n"
"PO-Revision-Date: 2017-02-28 03:43+0000\n"
"Last-Translator: Paulo Ricardo <ti@shoppingescritorio.com.br>, 2017\n"
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/"
"teams/23907/pt_BR/)\n"
"Language: pt_BR\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: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr "Linha Pedido de Venda"
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr ""
#, fuzzy
#~ msgid "Sales Order"
#~ msgstr "Pedido de Venda"

View File

@@ -0,0 +1,39 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
# Dorin Hongu <dhongu@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-02-28 03:43+0000\n"
"PO-Revision-Date: 2017-02-28 03:43+0000\n"
"Last-Translator: Dorin Hongu <dhongu@gmail.com>, 2017\n"
"Language-Team: Romanian (https://www.transifex.com/oca/teams/23907/ro/)\n"
"Language: ro\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?"
"2:1));\n"
#. module: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr "Linie comandă vânzare"
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr ""
#, fuzzy
#~ msgid "Sales Order"
#~ msgstr "Comandă vânzare"

View File

@@ -0,0 +1,29 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.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: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr ""

View File

@@ -0,0 +1,38 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-01-27 03:53+0000\n"
"PO-Revision-Date: 2018-01-27 03:53+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2018\n"
"Language-Team: Slovak (https://www.transifex.com/oca/teams/23907/sk/)\n"
"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#. module: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr ""
#, fuzzy
#~ msgid "Sales Order"
#~ msgstr "Objednávka predaja"

View File

@@ -0,0 +1,39 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-23 01:51+0000\n"
"PO-Revision-Date: 2017-11-23 01:51+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || "
"n%100==4 ? 2 : 3);\n"
#. module: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr "Postavka prodajnega naloga"
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr ""
#, fuzzy
#~ msgid "Sales Order"
#~ msgstr "Prodajni nalog"

View File

@@ -0,0 +1,38 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-23 01:51+0000\n"
"PO-Revision-Date: 2017-11-23 01:51+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: Turkish (https://www.transifex.com/oca/teams/23907/tr/)\n"
"Language: tr\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: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr "Satış Siparişi Hattı"
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr ""
#, fuzzy
#~ msgid "Sales Order"
#~ msgstr "Sipariş Emri"

View File

@@ -0,0 +1,39 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-23 01:51+0000\n"
"PO-Revision-Date: 2017-11-23 01:51+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: Turkish (Turkey) (https://www.transifex.com/oca/teams/23907/"
"tr_TR/)\n"
"Language: tr_TR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. module: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr "Sipariş emri satırı "
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr ""
#, fuzzy
#~ msgid "Sales Order"
#~ msgstr "Satış emri"

View File

@@ -0,0 +1,39 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-02-28 03:43+0000\n"
"PO-Revision-Date: 2017-02-28 03:43+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: Vietnamese (Viet Nam) (https://www.transifex.com/oca/"
"teams/23907/vi_VN/)\n"
"Language: vi_VN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. module: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr ""
#, fuzzy
#~ msgid "Sales Order"
#~ msgstr "Đơn hàng Bán"

View File

@@ -0,0 +1,38 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_procurement_group_by_line
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: sale-workflow (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-09 12:27+0000\n"
"PO-Revision-Date: 2015-09-03 07:09+0000\n"
"Last-Translator: <>\n"
"Language-Team: Chinese (China) (http://www.transifex.com/oca/OCA-sale-"
"workflow-8-0/language/zh_CN/)\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. module: sale_procurement_group_by_line
#: model:ir.model.fields,field_description:sale_procurement_group_by_line.field_sale_order_line__procurement_group_id
msgid "Procurement group"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_sale_order_line
msgid "Sales Order Line"
msgstr ""
#. module: sale_procurement_group_by_line
#: model:ir.model,name:sale_procurement_group_by_line.model_stock_move
msgid "Stock Move"
msgstr ""
#, fuzzy
#~ msgid "Sales Order"
#~ msgstr "销售订单"

View File

@@ -0,0 +1,4 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import sale
from . import stock_move

View File

@@ -0,0 +1,118 @@
# Copyright 2013-2014 Camptocamp SA - Guewen Baconnier
# © 2016-20 ForgeFlow S.L. (https://www.forgeflow.com)
# © 2016 Serpent Consulting Services Pvt. Ltd.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
from odoo.tools.float_utils import float_compare
class SaleOrderLine(models.Model):
_inherit = "sale.order.line"
procurement_group_id = fields.Many2one(
"procurement.group", "Procurement group", copy=False
)
def _get_procurement_group(self):
super()._get_procurement_group()
return self.procurement_group_id or False
def _get_procurement_group_key(self):
"""Return a key with priority to be used to regroup lines in multiple
procurement groups
"""
return 8, self.order_id.id
def _action_launch_stock_rule(self, previous_product_uom_qty=False):
"""
Launch procurement group run method.
"""
if self._context.get("skip_procurement"):
return True
precision = self.env["decimal.precision"].precision_get(
"Product Unit of Measure"
)
procurements = []
groups = {}
if not previous_product_uom_qty:
previous_product_uom_qty = {}
for line in self:
line = line.with_company(line.company_id)
if (
line.state != "sale"
or line.order_id.locked
or line.product_id.type != "consu"
):
continue
qty = line._get_qty_procurement(previous_product_uom_qty) or 0.0
if (
float_compare(qty, line.product_uom_qty, precision_digits=precision)
== 0
):
continue
group_id = line._get_procurement_group()
# Group the sales order lines with same procurement group
# according to the group key
for order_line in line.order_id.order_line:
g_id = order_line.procurement_group_id or False
if g_id:
groups[order_line._get_procurement_group_key()] = g_id
if not group_id:
group_id = groups.get(line._get_procurement_group_key())
if not group_id:
vals = line._prepare_procurement_group_vals()
group_id = self.env["procurement.group"].create(vals)
else:
# In case the procurement group is already created and the
# order was cancelled, we need to update certain values
# of the group.
updated_vals = {}
if group_id.partner_id != line.order_id.partner_shipping_id:
updated_vals.update(
{"partner_id": line.order_id.partner_shipping_id.id}
)
if group_id.move_type != line.order_id.picking_policy:
updated_vals.update({"move_type": line.order_id.picking_policy})
if updated_vals:
group_id.write(updated_vals)
line.procurement_group_id = group_id
values = line._prepare_procurement_values(group_id=group_id)
product_qty = line.product_uom_qty - qty
line_uom = line.product_uom
quant_uom = line.product_id.uom_id
origin = (
f"{line.order_id.name} - {line.order_id.client_order_ref}"
if line.order_id.client_order_ref
else line.order_id.name
)
product_qty, procurement_uom = line_uom._adjust_uom_quantities(
product_qty, quant_uom
)
procurements += line._create_procurements(
product_qty, procurement_uom, origin, values
)
# We store the procured quantity in the UoM of the line to avoid
# duplicated procurements, specially for dropshipping and kits.
previous_product_uom_qty[line.id] = line.product_uom_qty
if procurements:
self.env["procurement.group"].run(procurements)
# This next block is currently needed only because the scheduler trigger is done
# by picking confirmation rather than stock.move confirmation
orders = self.mapped("order_id")
for order in orders:
pickings_to_confirm = order.picking_ids.filtered(
lambda p: p.state not in ["cancel", "done"]
)
if pickings_to_confirm:
# Trigger the Scheduler for Pickings
pickings_to_confirm.action_confirm()
return super(
SaleOrderLine, self.with_context(sale_group_by_line=True)
)._action_launch_stock_rule(previous_product_uom_qty=previous_product_uom_qty)

View File

@@ -0,0 +1,19 @@
# Copyright 2022 ForgeFlow S.L. (https://www.forgeflow.com)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import models
class StockMove(models.Model):
_inherit = "stock.move"
def _update_candidate_moves_list(self, candidate_moves_set):
"""
We want to merge stock moves within the procurement group only
"""
res = super()._update_candidate_moves_list(candidate_moves_set)
if self.env.context.get("sale_group_by_line"):
candidate_moves_set.add(
self.sale_line_id.procurement_group_id.stock_move_ids
)
return res

View File

@@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"

View File

@@ -0,0 +1,5 @@
- Guewen Baconnier \<<guewen.baconnier@camptocamp.com>\>
- Yannick Vaucher \<<yannick.vaucher@camptocamp.com>\>
- Jordi Ballester \<<jordi.ballester@forgeflow.com>\>
- Serpent Consulting Services Pvt. Ltd. \<<support@serpentcs.com>\>
- Carmen Rondon Regalado \<<crondon@archeti.com>\>

View File

@@ -0,0 +1,5 @@
This module was written to extend the functionality of procurement
groups created from a sale order.
On itself, this module does nothing it is a requirement for modules
which needs to create procurement group per sale order line basis.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@@ -0,0 +1,438 @@
<!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>README.rst</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">
<a class="reference external image-reference" href="https://odoo-community.org/get-involved?utm_source=readme">
<img alt="Odoo Community Association" src="https://odoo-community.org/readme-banner-image" />
</a>
<div class="section" id="sale-procurement-group-by-line">
<h1>Sale Procurement Group by Line</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:3422322fe14e454647825eae76770bf4bea1d86e11d8398210ce21917badbde1
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.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/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/sale-workflow/tree/18.0/sale_procurement_group_by_line"><img alt="OCA/sale-workflow" src="https://img.shields.io/badge/github-OCA%2Fsale--workflow-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/sale-workflow-18-0/sale-workflow-18-0-sale_procurement_group_by_line"><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/sale-workflow&amp;target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module was written to extend the functionality of procurement
groups created from a sale order.</p>
<p>On itself, this module does nothing it is a requirement for modules
which needs to create procurement group per sale order line basis.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-1">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-2">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-3">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-4">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-5">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="bug-tracker">
<h2><a class="toc-backref" href="#toc-entry-1">Bug Tracker</a></h2>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/sale-workflow/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/sale-workflow/issues/new?body=module:%20sale_procurement_group_by_line%0Aversion:%2018.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">
<h2><a class="toc-backref" href="#toc-entry-2">Credits</a></h2>
<div class="section" id="authors">
<h3><a class="toc-backref" href="#toc-entry-3">Authors</a></h3>
<ul class="simple">
<li>Camptocamp</li>
<li>ForgeFlow</li>
<li>Serpent Consulting Services Pvt. Ltd.</li>
</ul>
</div>
<div class="section" id="contributors">
<h3><a class="toc-backref" href="#toc-entry-4">Contributors</a></h3>
<ul class="simple">
<li>Guewen Baconnier &lt;<a class="reference external" href="mailto:guewen.baconnier&#64;camptocamp.com">guewen.baconnier&#64;camptocamp.com</a>&gt;</li>
<li>Yannick Vaucher &lt;<a class="reference external" href="mailto:yannick.vaucher&#64;camptocamp.com">yannick.vaucher&#64;camptocamp.com</a>&gt;</li>
<li>Jordi Ballester &lt;<a class="reference external" href="mailto:jordi.ballester&#64;forgeflow.com">jordi.ballester&#64;forgeflow.com</a>&gt;</li>
<li>Serpent Consulting Services Pvt. Ltd. &lt;<a class="reference external" href="mailto:support&#64;serpentcs.com">support&#64;serpentcs.com</a>&gt;</li>
<li>Carmen Rondon Regalado &lt;<a class="reference external" href="mailto:crondon&#64;archeti.com">crondon&#64;archeti.com</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h3><a class="toc-backref" href="#toc-entry-5">Maintainers</a></h3>
<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/sale-workflow/tree/18.0/sale_procurement_group_by_line">OCA/sale-workflow</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>
</div>
</body>
</html>

View File

@@ -0,0 +1,3 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import test_sale_procurement_group_by_line

View File

@@ -0,0 +1,144 @@
# Copyright 2013-2014 Camptocamp SA - Guewen Baconnier
# © 2016-20 ForgeFlow S.L. (https://www.forgeflow.com)
# © 2016 Serpent Consulting Services Pvt. Ltd.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.tests import Form
from odoo.tests.common import TransactionCase
class TestSaleProcurementGroupByLine(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
# Required Models
cls.product_model = cls.env["product.product"]
cls.product_ctg_model = cls.env["product.category"]
cls.proc_group_model = cls.env["procurement.group"]
cls.sale_model = cls.env["sale.order"]
cls.order_line_model = cls.env["sale.order.line"]
# Customer
cls.customer = cls.env.ref("base.res_partner_2")
# Warehouse
cls.warehouse_id = cls.env.ref("stock.warehouse0")
# Create product category
cls.product_ctg = cls._create_product_category()
# Create Products
cls.new_product1 = cls._create_product("test_product1")
cls.new_product2 = cls._create_product("test_product2")
cls.sale = cls._create_sale_order()
@classmethod
def _create_product_category(cls):
product_ctg = cls.product_ctg_model.create({"name": "test_product_ctg"})
return product_ctg
@classmethod
def _create_product(cls, name):
product = cls.product_model.create(
{"name": name, "categ_id": cls.product_ctg.id, "is_storable": True}
)
return product
@classmethod
def _create_sale_order(cls):
"""Create a Sale Order."""
cls.sale = cls.sale_model.create(
{
"partner_id": cls.customer.id,
"warehouse_id": cls.warehouse_id.id,
"picking_policy": "direct",
}
)
cls.line1 = cls.order_line_model.create(
{
"order_id": cls.sale.id,
"product_id": cls.new_product1.id,
"product_uom_qty": 10.0,
"name": "Sale Order Line Demo1",
}
)
cls.line2 = cls.order_line_model.create(
{
"order_id": cls.sale.id,
"product_id": cls.new_product2.id,
"product_uom_qty": 5.0,
"name": "Sale Order Line Demo2",
}
)
return cls.sale
def test_01_procurement_group_by_line(self):
self.sale.action_confirm()
self.assertEqual(
self.line2.procurement_group_id,
self.line1.procurement_group_id,
"""Both Sale Order line should belong
to Procurement Group""",
)
self.picking_ids = self.env["stock.picking"].search(
[("group_id", "in", self.line2.procurement_group_id.ids)]
)
self.picking_ids.move_ids.write({"quantity": 5})
wiz_act = self.picking_ids.button_validate()
wiz = Form(
self.env[wiz_act["res_model"]].with_context(**wiz_act["context"])
).save()
wiz.process()
self.assertTrue(self.picking_ids, "Procurement Group should have picking")
def test_02_action_launch_procurement_rule_1(self):
group_id = self.proc_group_model.create(
{"move_type": "one", "sale_id": self.sale.id, "name": self.sale.name}
)
self.line1.procurement_group_id = group_id
self.line2.procurement_group_id = group_id
self.sale.action_confirm()
self.assertEqual(self.sale.state, "sale")
self.assertEqual(len(self.line1.move_ids), 1)
self.assertEqual(self.line1.move_ids.name, self.line1.product_id.display_name)
self.assertEqual(len(self.line2.move_ids), 1)
self.assertEqual(self.line2.move_ids.name, self.line2.product_id.display_name)
def test_03_action_launch_procurement_rule_2(self):
group_id = self.proc_group_model.create(
{"move_type": "one", "sale_id": self.sale.id, "name": self.sale.name}
)
self.line1.procurement_group_id = group_id
self.line2.procurement_group_id = False
self.sale.action_confirm()
self.assertEqual(self.line2.procurement_group_id, group_id)
def test_04_action_launch_procurement_rule_3(self):
group_id = self.proc_group_model.create(
{"move_type": "one", "sale_id": self.sale.id, "name": self.sale.name}
)
self.line1.procurement_group_id = False
self.line2.procurement_group_id = False
self.sale.action_confirm()
self.assertNotEqual(self.line1.procurement_group_id, group_id)
self.assertEqual(
self.line1.procurement_group_id, self.line2.procurement_group_id
)
def test_05_merged_stock_moves_from_same_procurement(self):
"""
Reduce the qty in the sale order and check no extra picking is created
"""
self.sale.action_confirm()
self.sale.order_line[1].product_uom_qty = 0.0
self.assertEqual(
len(self.sale.picking_ids), 1, "Negative stock move should me merged"
)
def test_06_update_sale_order_line_respect_procurement_group(self):
"""
When launching the stock rule again,
use maintain same procurement group in lines
"""
self.sale.action_confirm()
proc_group = self.sale.order_line[1].procurement_group_id
self.assertEqual(len(self.line1.move_ids), 1)
self.sale.order_line[1].product_uom_qty += 1
self.assertEqual(self.sale.order_line[1].procurement_group_id, proc_group)
self.assertEqual(len(self.line1.move_ids), 1)