diff --git a/README.md b/README.md
index b164599e3ee..37a6b1beafc 100644
--- a/README.md
+++ b/README.md
@@ -23,16 +23,18 @@ addon | version | maintainers | summary
 --- | --- | --- | ---
 [procurement_purchase_no_grouping](procurement_purchase_no_grouping/) | 16.0.1.0.0 |  | Procurement Purchase No Grouping
 [product_supplier_code_purchase](product_supplier_code_purchase/) | 16.0.1.0.0 |  | This module adds to the purchase order line the supplier code defined in the product.
+[product_supplierinfo_purchase_contact](product_supplierinfo_purchase_contact/) | 16.0.1.0.0 |  | Add Purchase Contact in product supplier info
 [product_supplierinfo_qty_multiplier](product_supplierinfo_qty_multiplier/) | 16.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Product supplierinfo qty multiplier
 [purchase_advance_payment](purchase_advance_payment/) | 16.0.1.0.1 |  | Allow to add advance payments on purchase orders
 [purchase_all_shipments](purchase_all_shipments/) | 16.0.1.0.0 |  | Purchase All Shipments
 [purchase_allowed_product](purchase_allowed_product/) | 16.0.2.1.0 |  | This module allows to select only products that can be supplied by the vendor
 [purchase_blanket_order](purchase_blanket_order/) | 16.0.2.1.0 |  | Purchase Blanket Orders
 [purchase_commercial_partner](purchase_commercial_partner/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Add stored related field 'Commercial Supplier' on POs
+[purchase_date_planned_manual](purchase_date_planned_manual/) | 16.0.1.0.0 | [![lreficent](https://github.com/lreficent.png?size=30px)](https://github.com/lreficent) | This module makes the system to always respect the planned (or scheduled) date in PO lines.
 [purchase_default_terms_conditions](purchase_default_terms_conditions/) | 16.0.1.0.3 |  | This module allows purchase default terms & conditions
 [purchase_delivery_split_date](purchase_delivery_split_date/) | 16.0.1.0.2 |  | Allows Purchase Order you confirm to generate one Incoming Shipment for each expected date indicated in the Purchase Order Lines
 [purchase_deposit](purchase_deposit/) | 16.0.1.0.1 |  | Option to create deposit from purchase order
-[purchase_discount](purchase_discount/) | 16.0.1.2.1 |  | Purchase order lines with discounts
+[purchase_discount](purchase_discount/) | 16.0.1.3.0 |  | Purchase order lines with discounts
 [purchase_exception](purchase_exception/) | 16.0.1.0.1 |  | Custom exceptions on purchase order
 [purchase_fop_shipping](purchase_fop_shipping/) | 16.0.1.0.1 |  | Purchase Free-Of-Payment shipping
 [purchase_force_invoiced](purchase_force_invoiced/) | 16.0.1.0.1 |  | Allows to force the billing status of the purchase order to "Invoiced"
@@ -75,18 +77,20 @@ addon | version | maintainers | summary
 [purchase_product_packaging_container_deposit](purchase_product_packaging_container_deposit/) | 16.0.1.0.0 |  | Purchase Product Packaging Container Deposit
 [purchase_reception_status](purchase_reception_status/) | 16.0.1.0.1 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Add reception status on purchase orders
 [purchase_reorder_control](purchase_reorder_control/) | 16.0.1.0.0 |  | Restrict reordering unpurchaseable product
-[purchase_request](purchase_request/) | 16.0.1.2.0 |  | Use this module to have notification of requirements of materials and/or external services and keep track of such requirements.
+[purchase_request](purchase_request/) | 16.0.1.3.0 |  | Use this module to have notification of requirements of materials and/or external services and keep track of such requirements.
 [purchase_request_tier_validation](purchase_request_tier_validation/) | 16.0.1.0.0 |  | Extends the functionality of Purchase Requests to support a tier validation process.
 [purchase_request_type](purchase_request_type/) | 16.0.1.0.0 |  | Purchase Request Type
 [purchase_requisition_tier_validation](purchase_requisition_tier_validation/) | 16.0.1.0.0 |  | Extends the functionality of Purchase Agreements to support a tier validation process.
 [purchase_return](purchase_return/) | 16.0.1.0.0 | [![JordiBForgeFlow](https://github.com/JordiBForgeFlow.png?size=30px)](https://github.com/JordiBForgeFlow) | Manage return orders.
 [purchase_sale_link_by_origin](purchase_sale_link_by_origin/) | 16.0.1.0.0 |  | Link PO/SO by the PO's Origin in addition to the default behavior that only links them by their lines
 [purchase_security](purchase_security/) | 16.0.2.0.0 | [![pilarvargas-tecnativa](https://github.com/pilarvargas-tecnativa.png?size=30px)](https://github.com/pilarvargas-tecnativa) | See only your purchase orders
+[purchase_sign](purchase_sign/) | 16.0.1.0.0 |  | Purchase Sign
 [purchase_stock_packaging](purchase_stock_packaging/) | 16.0.1.0.0 | [![rousseldenis](https://github.com/rousseldenis.png?size=30px)](https://github.com/rousseldenis) | Allows to transmit the product packaging from the procurement values to the generated purchase order line
 [purchase_stock_price_unit_sync](purchase_stock_price_unit_sync/) | 16.0.1.0.0 |  | Update cost price in stock moves already done
 [purchase_tag](purchase_tag/) | 16.0.1.1.0 |  | Allows to add multiple tags to purchase orders
 [purchase_tier_validation](purchase_tier_validation/) | 16.0.1.1.0 |  | Extends the functionality of Purchase Orders to support a tier validation process.
 [purchase_triple_discount](purchase_triple_discount/) | 16.0.1.0.0 |  | Manage triple discount on purchase order lines
+[purchase_vendor_promotion](purchase_vendor_promotion/) | 16.0.1.0.0 |  | Purchase Vendor Promotion
 [purchase_warn_message](purchase_warn_message/) | 16.0.1.0.0 |  | Add a popup warning on purchase to ensure warning is populated
 [purchase_work_acceptance](purchase_work_acceptance/) | 16.0.1.0.0 | [![ps-tubtim](https://github.com/ps-tubtim.png?size=30px)](https://github.com/ps-tubtim) | Purchase Work Acceptance
 [sale_purchase_force_vendor](sale_purchase_force_vendor/) | 16.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Sale Purchase Force Vendor
diff --git a/procurement_purchase_no_grouping/i18n/pt_BR.po b/procurement_purchase_no_grouping/i18n/pt_BR.po
index 4806d2f90b8..78abb418e50 100644
--- a/procurement_purchase_no_grouping/i18n/pt_BR.po
+++ b/procurement_purchase_no_grouping/i18n/pt_BR.po
@@ -9,16 +9,17 @@ msgstr ""
 "Project-Id-Version: Odoo Server 10.0\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-11-24 07:53+0000\n"
-"PO-Revision-Date: 2022-10-03 15:53+0000\n"
-"Last-Translator: Douglas Custódio <douglascstd@yahoo.com>\n"
-"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/"
-"teams/23907/pt_BR/)\n"
+"PO-Revision-Date: 2024-05-29 18:37+0000\n"
+"Last-Translator: Rodrigo Macedo <sottomaiormacedotec@users.noreply."
+"translation.odoo-community.org>\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"
-"X-Generator: Weblate 4.3.2\n"
+"X-Generator: Weblate 4.17\n"
 
 #. module: procurement_purchase_no_grouping
 #: model_terms:ir.ui.view,arch_db:procurement_purchase_no_grouping.res_config_settings_view_form_procurement_purchase_grouping
@@ -29,56 +30,61 @@ msgid ""
 "label=\"Value set here is default. Specific values are set per category.\" "
 "role=\"img\"/>"
 msgstr ""
+"<span class=\"o_form_label\">Agrupamento</span>\n"
+"                            <span class=\"fa fa-lg fa-object-group\" title="
+"\"Valor a ser usado se a categoria individual estiver definida como 'Padrão "
+"do sistema'\" aria-label=\"O valor definido aqui é o padrão. Valores "
+"específicos são definidos por categoria.\" role=\"img\"/>"
 
 #. module: procurement_purchase_no_grouping
 #: model:ir.model,name:procurement_purchase_no_grouping.model_res_company
 msgid "Companies"
-msgstr ""
+msgstr "Empresas"
 
 #. module: procurement_purchase_no_grouping
 #: model_terms:ir.ui.view,arch_db:procurement_purchase_no_grouping.res_config_settings_view_form_procurement_purchase_grouping
 msgid "Grouping"
-msgstr ""
+msgstr "Agrupamento"
 
 #. module: procurement_purchase_no_grouping
 #: model:ir.model.fields.selection,name:procurement_purchase_no_grouping.selection__product_category__procured_purchase_grouping__line
 #: model:ir.model.fields.selection,name:procurement_purchase_no_grouping.selection__res_company__procured_purchase_grouping__line
 msgid "No line grouping"
-msgstr ""
+msgstr "Sem linha de agrupamento"
 
 #. module: procurement_purchase_no_grouping
 #: model:ir.model.fields.selection,name:procurement_purchase_no_grouping.selection__product_category__procured_purchase_grouping__order
 #: model:ir.model.fields.selection,name:procurement_purchase_no_grouping.selection__res_company__procured_purchase_grouping__order
 msgid "No order grouping"
-msgstr ""
+msgstr "Sem agrupamento de pedidos"
 
 #. module: procurement_purchase_no_grouping
 #: model:ir.model.fields,field_description:procurement_purchase_no_grouping.field_product_category__procured_purchase_grouping
 #: model:ir.model.fields,field_description:procurement_purchase_no_grouping.field_res_company__procured_purchase_grouping
 #: model:ir.model.fields,field_description:procurement_purchase_no_grouping.field_res_config_settings__procured_purchase_grouping
 msgid "Procured Purchase Grouping"
-msgstr ""
+msgstr "Agrupamento de compras adquiridas"
 
 #. module: procurement_purchase_no_grouping
 #: model_terms:ir.ui.view,arch_db:procurement_purchase_no_grouping.res_config_settings_view_form_procurement_purchase_grouping
 msgid "Procurement Purchase Grouping"
-msgstr ""
+msgstr "Agrupamento de compras de compras"
 
 #. module: procurement_purchase_no_grouping
 #: model:ir.model,name:procurement_purchase_no_grouping.model_res_config_settings
 msgid "Procurement purchase grouping settings"
-msgstr ""
+msgstr "Configurações de agrupamento de compras de compras"
 
 #. module: procurement_purchase_no_grouping
 #: model:ir.model,name:procurement_purchase_no_grouping.model_product_category
 msgid "Product Category"
-msgstr ""
+msgstr "Categoria de Produto"
 
 #. module: procurement_purchase_no_grouping
 #: model:ir.model.fields.selection,name:procurement_purchase_no_grouping.selection__product_category__procured_purchase_grouping__product_category
 #: model:ir.model.fields.selection,name:procurement_purchase_no_grouping.selection__res_company__procured_purchase_grouping__product_category
 msgid "Product category grouping"
-msgstr ""
+msgstr "Agrupamento de categorias de produtos"
 
 #. module: procurement_purchase_no_grouping
 #: model:ir.model,name:procurement_purchase_no_grouping.model_purchase_order_line
@@ -99,6 +105,18 @@ msgid ""
 "* Product category grouping: This option groups products in the same "
 "purchase order that belongs to the same product category."
 msgstr ""
+"Selecione o comportamento de agrupamento das compras adquiridas para os "
+"produtos desta categoria:\n"
+"* Agrupamento padrão (padrão): O Procurements gerará pedidos de compra como "
+"sempre, agrupando linhas e pedidos quando possível.\n"
+"* Sem agrupamento de linhas: Caso haja algum pedido de compra aberto para o "
+"mesmo fornecedor, ele será reutilizado, mas as linhas não serão mescladas.\n"
+"* Sem agrupamento de pedidos: Esta opção impedirá qualquer tipo de "
+"agrupamento.\n"
+"* <empty>: Se nenhum valor for selecionado, o padrão de todo o sistema será "
+"usado.\n"
+"* Agrupamento de categorias de produtos: Esta opção agrupa produtos do mesmo "
+"pedido de compra que pertencem à mesma categoria de produto."
 
 #. module: procurement_purchase_no_grouping
 #: model:ir.model.fields,help:procurement_purchase_no_grouping.field_res_company__procured_purchase_grouping
@@ -115,19 +133,31 @@ msgid ""
 "* Product category grouping: This option groups products in the same "
 "purchase order that belongs to the same product category."
 msgstr ""
+"Selecione o comportamento de agrupamento das compras adquiridas para os "
+"produtos desta categoria:\n"
+"* Agrupamento padrão: As compras gerarão pedidos de compra como sempre, "
+"agrupando linhas e pedidos quando possível.\n"
+"* Sem agrupamento de linhas: Caso haja algum pedido de compra aberto para o "
+"mesmo fornecedor, ele será reutilizado, mas as linhas não serão mescladas.\n"
+"* Sem agrupamento de pedidos: Esta opção impedirá qualquer tipo de "
+"agrupamento.\n"
+"* <empty>: Se nenhum valor for selecionado, o padrão de todo o sistema será "
+"usado.\n"
+"* Agrupamento de categorias de produtos: Esta opção agrupa produtos do mesmo "
+"pedido de compra que pertencem à mesma categoria de produto."
 
 #. module: procurement_purchase_no_grouping
 #: model_terms:ir.ui.view,arch_db:procurement_purchase_no_grouping.res_config_settings_view_form_procurement_purchase_grouping
 msgid "Set the default procurement purchase grouping type"
-msgstr ""
+msgstr "Definir o tipo de agrupamento de compras padrão"
 
 #. module: procurement_purchase_no_grouping
 #: model:ir.model.fields.selection,name:procurement_purchase_no_grouping.selection__product_category__procured_purchase_grouping__standard
 #: model:ir.model.fields.selection,name:procurement_purchase_no_grouping.selection__res_company__procured_purchase_grouping__standard
 msgid "Standard grouping"
-msgstr ""
+msgstr "Agrupamento padrão"
 
 #. module: procurement_purchase_no_grouping
 #: model:ir.model,name:procurement_purchase_no_grouping.model_stock_rule
 msgid "Stock Rule"
-msgstr ""
+msgstr "Regra de Estoque"
diff --git a/product_supplier_code_purchase/i18n/pt_BR.po b/product_supplier_code_purchase/i18n/pt_BR.po
index d3371e21323..d919d6d8fc5 100644
--- a/product_supplier_code_purchase/i18n/pt_BR.po
+++ b/product_supplier_code_purchase/i18n/pt_BR.po
@@ -9,8 +9,9 @@ msgstr ""
 "Project-Id-Version: Odoo Server 9.0c\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-08-29 03:23+0000\n"
-"PO-Revision-Date: 2020-09-25 23:00+0000\n"
-"Last-Translator: Marcel Savegnago <marcel.savegnago@gmail.com>\n"
+"PO-Revision-Date: 2024-05-22 13:40+0000\n"
+"Last-Translator: Rodrigo Macedo <sottomaiormacedotec@users.noreply."
+"translation.odoo-community.org>\n"
 "Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/"
 "23907/pt_BR/)\n"
 "Language: pt_BR\n"
@@ -18,18 +19,17 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: \n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 3.10\n"
+"X-Generator: Weblate 4.17\n"
 
 #. module: product_supplier_code_purchase
 #: model:ir.model.fields,field_description:product_supplier_code_purchase.field_purchase_order_line__product_supplier_code
 msgid "Product Supplier Code"
-msgstr ""
+msgstr "Código do fornecedor do produto"
 
 #. module: product_supplier_code_purchase
 #: model:ir.model,name:product_supplier_code_purchase.model_purchase_order
-#, fuzzy
 msgid "Purchase Order"
-msgstr "Linha pedido de compra"
+msgstr "Pedido de Compra"
 
 #. module: product_supplier_code_purchase
 #: model:ir.model,name:product_supplier_code_purchase.model_purchase_order_line
diff --git a/product_supplierinfo_purchase_contact/README.rst b/product_supplierinfo_purchase_contact/README.rst
new file mode 100644
index 00000000000..820b509dbcd
--- /dev/null
+++ b/product_supplierinfo_purchase_contact/README.rst
@@ -0,0 +1,87 @@
+=================================
+Product Supplier Purchase Contact
+=================================
+
+.. 
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !! This file is generated by oca-gen-addon-readme !!
+   !! changes will be overwritten.                   !!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !! source digest: sha256:d1598d26a4766084ce5484761197815fadc9fbd2f45764a9dfdc3ef360c3df6b
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |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%2Fpurchase--workflow-lightgray.png?logo=github
+    :target: https://github.com/OCA/purchase-workflow/tree/16.0/product_supplierinfo_purchase_contact
+    :alt: OCA/purchase-workflow
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+    :target: https://translation.odoo-community.org/projects/purchase-workflow-16-0/purchase-workflow-16-0-product_supplierinfo_purchase_contact
+    :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/purchase-workflow&target_branch=16.0
+    :alt: Try me on Runboat
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module adds Purchase contact field on supplier rates (product.supplierinfo)
+and allows you to use this contact when creating the purchase order from supplies (replacement or to order).
+
+**Table of contents**
+
+.. contents::
+   :local:
+
+Usage
+=====
+
+* Go to Purchase > Configuration > Vendor pricelist and create new Vendor pricelist and complete Purchase contact.
+* Go to Inventory > Operations > Replenishment and create a new replenishment for product with Vendor pricelist created before.
+* Press button "Order once" and will create a new purchase order for Purchase contact instead of Vendor from Vendor Pricelist.
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues <https://github.com/OCA/purchase-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/purchase-workflow/issues/new?body=module:%20product_supplierinfo_purchase_contact%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
+~~~~~~~
+
+* Tecnativa
+
+Contributors
+~~~~~~~~~~~~
+
+* `Tecnativa <https://www.tecnativa.com>`_:
+
+    * Carolina Fernandez
+    * Pedro M. Baeza
+
+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/purchase-workflow <https://github.com/OCA/purchase-workflow/tree/16.0/product_supplierinfo_purchase_contact>`_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/product_supplierinfo_purchase_contact/__init__.py b/product_supplierinfo_purchase_contact/__init__.py
new file mode 100644
index 00000000000..0650744f6bc
--- /dev/null
+++ b/product_supplierinfo_purchase_contact/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/product_supplierinfo_purchase_contact/__manifest__.py b/product_supplierinfo_purchase_contact/__manifest__.py
new file mode 100644
index 00000000000..c186b76f3b7
--- /dev/null
+++ b/product_supplierinfo_purchase_contact/__manifest__.py
@@ -0,0 +1,18 @@
+# Copyright 2024 Tecnativa - Carolina Fernandez
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+{
+    "name": "Product Supplier Purchase Contact",
+    "version": "16.0.1.0.0",
+    "category": "Purchase Management",
+    "author": "Tecnativa,Odoo Community Association (OCA)",
+    "website": "https://github.com/OCA/purchase-workflow",
+    "license": "AGPL-3",
+    "summary": "Add Purchase Contact in product supplier info",
+    "depends": [
+        "purchase_stock",
+    ],
+    "data": [
+        "views/product_supplierinfo_view.xml",
+    ],
+    "installable": True,
+}
diff --git a/product_supplierinfo_purchase_contact/i18n/es.po b/product_supplierinfo_purchase_contact/i18n/es.po
new file mode 100644
index 00000000000..bf2e068882c
--- /dev/null
+++ b/product_supplierinfo_purchase_contact/i18n/es.po
@@ -0,0 +1,32 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* product_supplierinfo_purchase_contact
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-05-21 14:32+0000\n"
+"PO-Revision-Date: 2024-05-21 14:32+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: product_supplierinfo_purchase_contact
+#: model:ir.model.fields,field_description:product_supplierinfo_purchase_contact.field_product_supplierinfo__purchase_partner_id
+msgid "Purchase contact"
+msgstr "Contacto de compra"
+
+#. module: product_supplierinfo_purchase_contact
+#: model:ir.model,name:product_supplierinfo_purchase_contact.model_stock_rule
+msgid "Stock Rule"
+msgstr "Regla de Inventario"
+
+#. module: product_supplierinfo_purchase_contact
+#: model:ir.model,name:product_supplierinfo_purchase_contact.model_product_supplierinfo
+msgid "Supplier Pricelist"
+msgstr "Tarifa de proveedor"
diff --git a/product_supplierinfo_purchase_contact/i18n/it.po b/product_supplierinfo_purchase_contact/i18n/it.po
new file mode 100644
index 00000000000..d8b8a01aaba
--- /dev/null
+++ b/product_supplierinfo_purchase_contact/i18n/it.po
@@ -0,0 +1,32 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* product_supplierinfo_purchase_contact
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2024-06-04 15:38+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 4.17\n"
+
+#. module: product_supplierinfo_purchase_contact
+#: model:ir.model.fields,field_description:product_supplierinfo_purchase_contact.field_product_supplierinfo__purchase_partner_id
+msgid "Purchase contact"
+msgstr "Contratto di acquisto"
+
+#. module: product_supplierinfo_purchase_contact
+#: model:ir.model,name:product_supplierinfo_purchase_contact.model_stock_rule
+msgid "Stock Rule"
+msgstr "Regola di giacenza"
+
+#. module: product_supplierinfo_purchase_contact
+#: model:ir.model,name:product_supplierinfo_purchase_contact.model_product_supplierinfo
+msgid "Supplier Pricelist"
+msgstr "Listino prezzi fornitore"
diff --git a/product_supplierinfo_purchase_contact/i18n/product_supplierinfo_purchase_contact.pot b/product_supplierinfo_purchase_contact/i18n/product_supplierinfo_purchase_contact.pot
new file mode 100644
index 00000000000..4fbd6859f76
--- /dev/null
+++ b/product_supplierinfo_purchase_contact/i18n/product_supplierinfo_purchase_contact.pot
@@ -0,0 +1,29 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* product_supplierinfo_purchase_contact
+#
+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: product_supplierinfo_purchase_contact
+#: model:ir.model.fields,field_description:product_supplierinfo_purchase_contact.field_product_supplierinfo__purchase_partner_id
+msgid "Purchase contact"
+msgstr ""
+
+#. module: product_supplierinfo_purchase_contact
+#: model:ir.model,name:product_supplierinfo_purchase_contact.model_stock_rule
+msgid "Stock Rule"
+msgstr ""
+
+#. module: product_supplierinfo_purchase_contact
+#: model:ir.model,name:product_supplierinfo_purchase_contact.model_product_supplierinfo
+msgid "Supplier Pricelist"
+msgstr ""
diff --git a/product_supplierinfo_purchase_contact/models/__init__.py b/product_supplierinfo_purchase_contact/models/__init__.py
new file mode 100644
index 00000000000..0fb42bc1623
--- /dev/null
+++ b/product_supplierinfo_purchase_contact/models/__init__.py
@@ -0,0 +1,2 @@
+from . import product_supplierinfo
+from . import stock_rule
diff --git a/product_supplierinfo_purchase_contact/models/product_supplierinfo.py b/product_supplierinfo_purchase_contact/models/product_supplierinfo.py
new file mode 100644
index 00000000000..aa21cfdc554
--- /dev/null
+++ b/product_supplierinfo_purchase_contact/models/product_supplierinfo.py
@@ -0,0 +1,11 @@
+# Copyright 2024 Tecnativa - Carolina Fernandez
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from odoo import fields, models
+
+
+class ProductSupplierInfo(models.Model):
+    _inherit = "product.supplierinfo"
+
+    purchase_partner_id = fields.Many2one(
+        comodel_name="res.partner", string="Purchase contact"
+    )
diff --git a/product_supplierinfo_purchase_contact/models/stock_rule.py b/product_supplierinfo_purchase_contact/models/stock_rule.py
new file mode 100644
index 00000000000..c940d12615f
--- /dev/null
+++ b/product_supplierinfo_purchase_contact/models/stock_rule.py
@@ -0,0 +1,19 @@
+# Copyright 2024 Tecnativa - Carolina Fernandez
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from odoo import models
+
+
+class StockRule(models.Model):
+    _inherit = "stock.rule"
+
+    def _make_po_get_domain(self, company_id, values, partner):
+        if values.get("supplier") and values["supplier"].purchase_partner_id:
+            partner = values["supplier"].purchase_partner_id
+        return super()._make_po_get_domain(company_id, values, partner)
+
+    def _prepare_purchase_order(self, company_id, origins, values):
+        res = super()._prepare_purchase_order(company_id, origins, values)
+        values = values[0]
+        if "supplier" in values and values["supplier"].purchase_partner_id:
+            res["partner_id"] = values["supplier"].purchase_partner_id.id
+        return res
diff --git a/product_supplierinfo_purchase_contact/readme/CONTRIBUTORS.rst b/product_supplierinfo_purchase_contact/readme/CONTRIBUTORS.rst
new file mode 100644
index 00000000000..7d431b589ad
--- /dev/null
+++ b/product_supplierinfo_purchase_contact/readme/CONTRIBUTORS.rst
@@ -0,0 +1,4 @@
+* `Tecnativa <https://www.tecnativa.com>`_:
+
+    * Carolina Fernandez
+    * Pedro M. Baeza
diff --git a/product_supplierinfo_purchase_contact/readme/DESCRIPTION.rst b/product_supplierinfo_purchase_contact/readme/DESCRIPTION.rst
new file mode 100644
index 00000000000..bf8de8f3d6a
--- /dev/null
+++ b/product_supplierinfo_purchase_contact/readme/DESCRIPTION.rst
@@ -0,0 +1,2 @@
+This module adds Purchase contact field on supplier rates (product.supplierinfo)
+and allows you to use this contact when creating the purchase order from supplies (replacement or to order).
diff --git a/product_supplierinfo_purchase_contact/readme/USAGE.rst b/product_supplierinfo_purchase_contact/readme/USAGE.rst
new file mode 100644
index 00000000000..f150dfe2d45
--- /dev/null
+++ b/product_supplierinfo_purchase_contact/readme/USAGE.rst
@@ -0,0 +1,3 @@
+* Go to Purchase > Configuration > Vendor pricelist and create new Vendor pricelist and complete Purchase contact.
+* Go to Inventory > Operations > Replenishment and create a new replenishment for product with Vendor pricelist created before.
+* Press button "Order once" and will create a new purchase order for Purchase contact instead of Vendor from Vendor Pricelist.
diff --git a/product_supplierinfo_purchase_contact/static/description/icon.png b/product_supplierinfo_purchase_contact/static/description/icon.png
new file mode 100644
index 00000000000..3a0328b516c
Binary files /dev/null and b/product_supplierinfo_purchase_contact/static/description/icon.png differ
diff --git a/product_supplierinfo_purchase_contact/static/description/index.html b/product_supplierinfo_purchase_contact/static/description/index.html
new file mode 100644
index 00000000000..6a281c8a7d3
--- /dev/null
+++ b/product_supplierinfo_purchase_contact/static/description/index.html
@@ -0,0 +1,437 @@
+<!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>Product Supplier Purchase Contact</title>
+<style type="text/css">
+
+/*
+:Author: David Goodger (goodger@python.org)
+:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+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: grey; } /* 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 {
+  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="product-supplier-purchase-contact">
+<h1 class="title">Product Supplier Purchase Contact</h1>
+
+<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! This file is generated by oca-gen-addon-readme !!
+!! changes will be overwritten.                   !!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! source digest: sha256:d1598d26a4766084ce5484761197815fadc9fbd2f45764a9dfdc3ef360c3df6b
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+<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/purchase-workflow/tree/16.0/product_supplierinfo_purchase_contact"><img alt="OCA/purchase-workflow" src="https://img.shields.io/badge/github-OCA%2Fpurchase--workflow-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/purchase-workflow-16-0/purchase-workflow-16-0-product_supplierinfo_purchase_contact"><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/purchase-workflow&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 adds Purchase contact field on supplier rates (product.supplierinfo)
+and allows you to use this contact when creating the purchase order from supplies (replacement or to 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="#usage" id="toc-entry-1">Usage</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="usage">
+<h1><a class="toc-backref" href="#toc-entry-1">Usage</a></h1>
+<ul class="simple">
+<li>Go to Purchase &gt; Configuration &gt; Vendor pricelist and create new Vendor pricelist and complete Purchase contact.</li>
+<li>Go to Inventory &gt; Operations &gt; Replenishment and create a new replenishment for product with Vendor pricelist created before.</li>
+<li>Press button “Order once” and will create a new purchase order for Purchase contact instead of Vendor from Vendor Pricelist.</li>
+</ul>
+</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/purchase-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/purchase-workflow/issues/new?body=module:%20product_supplierinfo_purchase_contact%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>Tecnativa</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.tecnativa.com">Tecnativa</a>:</p>
+<blockquote>
+<ul class="simple">
+<li>Carolina Fernandez</li>
+<li>Pedro M. Baeza</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/purchase-workflow/tree/16.0/product_supplierinfo_purchase_contact">OCA/purchase-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>
+</body>
+</html>
diff --git a/product_supplierinfo_purchase_contact/tests/__init__.py b/product_supplierinfo_purchase_contact/tests/__init__.py
new file mode 100644
index 00000000000..892a4c70ec7
--- /dev/null
+++ b/product_supplierinfo_purchase_contact/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_stock_rule
diff --git a/product_supplierinfo_purchase_contact/tests/test_stock_rule.py b/product_supplierinfo_purchase_contact/tests/test_stock_rule.py
new file mode 100644
index 00000000000..72d8d55a508
--- /dev/null
+++ b/product_supplierinfo_purchase_contact/tests/test_stock_rule.py
@@ -0,0 +1,94 @@
+# Copyright 2024 Tecnativa - Carolina Fernandez
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo.tests import common
+
+
+class TestStockRule(common.TransactionCase):
+    @classmethod
+    def setUpClass(cls):
+        super(TestStockRule, cls).setUpClass()
+        cls.supplierinfo_obj = cls.env["product.supplierinfo"]
+        cls.partner = cls.env["res.partner"].create(
+            {
+                "name": "Mr. Odoo",
+            }
+        )
+        cls.partner2 = cls.env["res.partner"].create(
+            {
+                "name": "Mrs. Odoo 2",
+            }
+        )
+        cls.product1 = cls.env["product.product"].create(
+            {
+                "name": "Test Product 1",
+                "purchase_method": "purchase",
+            }
+        )
+        cls.product2 = cls.env["product.product"].create(
+            {
+                "name": "Test Product 2",
+                "purchase_method": "purchase",
+            }
+        )
+        cls.supplierinfo = cls.supplierinfo_obj.create(
+            {
+                "partner_id": cls.partner2.id,
+                "purchase_partner_id": cls.partner.id,
+                "product_tmpl_id": cls.product1.product_tmpl_id.id,
+                "price": 100,
+            }
+        )
+        cls.supplierinfo2 = cls.supplierinfo_obj.create(
+            {
+                "partner_id": cls.partner2.id,
+                "product_tmpl_id": cls.product2.product_tmpl_id.id,
+                "price": 50,
+            }
+        )
+        cls.warehouse = cls.env["stock.warehouse"].search(
+            [("company_id", "=", cls.env.company.id)], limit=1
+        )
+        cls.stock_location_id = cls.warehouse.lot_stock_id.id
+
+    def test_replenishment_with_vendor_purchase(self):
+        op = self.env["stock.warehouse.orderpoint"].create(
+            {
+                "name": self.product1.name,
+                "location_id": self.stock_location_id,
+                "product_id": self.product1.id,
+                "product_min_qty": 1,
+                "product_max_qty": 8,
+                "trigger": "manual",
+            }
+        )
+        op.action_replenish()
+        purchase = self.env["purchase.order"].search(
+            [("partner_id", "=", self.partner.id)], order="id desc", limit=1
+        )
+        self.assertEqual(purchase.partner_id, self.supplierinfo.purchase_partner_id)
+        self.assertEqual(purchase.order_line.product_id, self.product1)
+        self.assertEqual(purchase.order_line.price_unit, self.supplierinfo.price)
+        self.assertEqual(purchase.order_line.product_qty, 8)
+        self.assertEqual(purchase.currency_id, self.supplierinfo.currency_id)
+
+    def test_replenishment_without_vendor_purchase(self):
+        op = self.env["stock.warehouse.orderpoint"].create(
+            {
+                "name": self.product2.name,
+                "location_id": self.stock_location_id,
+                "product_id": self.product2.id,
+                "product_min_qty": 1,
+                "product_max_qty": 10,
+                "trigger": "manual",
+            }
+        )
+        op.action_replenish()
+        purchase = self.env["purchase.order"].search(
+            [("partner_id", "=", self.partner2.id)], order="id desc", limit=1
+        )
+        self.assertEqual(purchase.partner_id, self.supplierinfo2.partner_id)
+        self.assertEqual(purchase.order_line.product_id, self.product2)
+        self.assertEqual(purchase.order_line.price_unit, self.supplierinfo2.price)
+        self.assertEqual(purchase.order_line.product_qty, 10)
+        self.assertEqual(purchase.currency_id, self.supplierinfo2.currency_id)
diff --git a/product_supplierinfo_purchase_contact/views/product_supplierinfo_view.xml b/product_supplierinfo_purchase_contact/views/product_supplierinfo_view.xml
new file mode 100644
index 00000000000..45e8301570a
--- /dev/null
+++ b/product_supplierinfo_purchase_contact/views/product_supplierinfo_view.xml
@@ -0,0 +1,27 @@
+<odoo>
+    <record model="ir.ui.view" id="product_supplierinfo_form_view">
+         <field name="model">product.supplierinfo</field>
+         <field name="inherit_id" ref="product.product_supplierinfo_form_view" />
+         <field name="arch" type="xml">
+              <field name="partner_id" position="after">
+                  <field
+                    name="purchase_partner_id"
+                    context="{'res_partner_search_mode': 'supplier'}"
+                />
+              </field>
+         </field>
+     </record>
+    <record model="ir.ui.view" id="product_supplierinfo_tree_view">
+         <field name="model">product.supplierinfo</field>
+         <field name="inherit_id" ref="product.product_supplierinfo_tree_view" />
+         <field name="arch" type="xml">
+              <field name="partner_id" position="after">
+                <field
+                    name="purchase_partner_id"
+                    context="{'res_partner_search_mode': 'supplier'}"
+                />
+              </field>
+         </field>
+     </record>
+
+</odoo>
diff --git a/purchase_advance_payment/i18n/pt_BR.po b/purchase_advance_payment/i18n/pt_BR.po
index 58dea9ebb2a..60fe4ead84a 100644
--- a/purchase_advance_payment/i18n/pt_BR.po
+++ b/purchase_advance_payment/i18n/pt_BR.po
@@ -6,8 +6,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Odoo Server 16.0\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2023-11-01 11:38+0000\n"
-"Last-Translator: Adriano Prado <adrianojprado@gmail.com>\n"
+"PO-Revision-Date: 2024-05-22 00:04+0000\n"
+"Last-Translator: Rodrigo Macedo <sottomaiormacedotec@users.noreply."
+"translation.odoo-community.org>\n"
 "Language-Team: none\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
@@ -19,7 +20,7 @@ msgstr ""
 #. module: purchase_advance_payment
 #: model:ir.model,name:purchase_advance_payment.model_account_voucher_wizard_purchase
 msgid "Account Voucher Wizard Purchase"
-msgstr ""
+msgstr "Compra do assistente de voucher de conta"
 
 #. module: purchase_advance_payment
 #: model:ir.actions.act_window,name:purchase_advance_payment.action_view_account_voucher_wizard
@@ -211,7 +212,7 @@ msgstr "Pedido Compra"
 #. module: purchase_advance_payment
 #: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__account_payment_ids
 msgid "Purchase Payment"
-msgstr ""
+msgstr "Pagamento de compra"
 
 #. module: purchase_advance_payment
 #: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__payment_ref
diff --git a/purchase_allowed_product/i18n/pt_BR.po b/purchase_allowed_product/i18n/pt_BR.po
index 513814373c2..f27523018a9 100644
--- a/purchase_allowed_product/i18n/pt_BR.po
+++ b/purchase_allowed_product/i18n/pt_BR.po
@@ -9,10 +9,11 @@ msgstr ""
 "Project-Id-Version: Odoo Server 10.0\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-01 02:48+0000\n"
-"PO-Revision-Date: 2023-06-10 23:08+0000\n"
-"Last-Translator: Adriano Prado <adrianojprado@gmail.com>\n"
-"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/"
-"teams/23907/pt_BR/)\n"
+"PO-Revision-Date: 2024-05-21 00:58+0000\n"
+"Last-Translator: Rodrigo Macedo <sottomaiormacedotec@users.noreply."
+"translation.odoo-community.org>\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"
@@ -91,7 +92,7 @@ msgstr "Use somente produtos permitidos"
 #. module: purchase_allowed_product
 #: model:ir.model.fields,field_description:purchase_allowed_product.field_product_supplierinfo__partner_id
 msgid "Vendor"
-msgstr ""
+msgstr "Fornecedor"
 
 #~ msgid "Name"
 #~ msgstr "Nome"
diff --git a/purchase_allowed_product/i18n/sv.po b/purchase_allowed_product/i18n/sv.po
index 825ab5350b1..bd9ed9ad9a3 100644
--- a/purchase_allowed_product/i18n/sv.po
+++ b/purchase_allowed_product/i18n/sv.po
@@ -9,19 +9,20 @@ msgstr ""
 "Project-Id-Version: Odoo Server 10.0\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-01 02:48+0000\n"
-"PO-Revision-Date: 2017-06-01 02:48+0000\n"
-"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
+"PO-Revision-Date: 2024-06-26 16:47+0000\n"
+"Last-Translator: jakobkrabbe <jakob@syscare.se>\n"
 "Language-Team: Swedish (https://www.transifex.com/oca/teams/23907/sv/)\n"
 "Language: sv\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"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.17\n"
 
 #. module: purchase_allowed_product
 #: model:ir.model,name:purchase_allowed_product.model_res_partner
 msgid "Contact"
-msgstr ""
+msgstr "Kontakt"
 
 #. module: purchase_allowed_product
 #: model:ir.model.fields,help:purchase_allowed_product.field_res_partner__use_only_supplied_product
@@ -31,6 +32,9 @@ msgid ""
 "supplied by this supplier when creating a supplier invoice or purchase for "
 "it. This value can be changed by invoice or purchase."
 msgstr ""
+"Om det är markerat kan du som standard bara välja produkter som kan "
+"levereras av den här leverantören när du skapar en leverantörsfaktura eller "
+"ett inköp för den. Detta värde kan ändras via fakturan eller inköpet."
 
 #. module: purchase_allowed_product
 #: model:ir.model.fields,help:purchase_allowed_product.field_account_bank_statement_line__use_only_supplied_product
@@ -40,37 +44,39 @@ msgstr ""
 #: model:ir.model.fields,help:purchase_allowed_product.field_supplied_product_mixin__use_only_supplied_product
 msgid "If checked, only the products provided by this supplier will be shown."
 msgstr ""
+"Om den är markerad visas endast de produkter som tillhandahålls av denna "
+"leverantör."
 
 #. module: purchase_allowed_product
 #: model:ir.model,name:purchase_allowed_product.model_account_move
 msgid "Journal Entry"
-msgstr ""
+msgstr "Journalanteckning"
 
 #. module: purchase_allowed_product
 #: model:ir.model,name:purchase_allowed_product.model_supplied_product_mixin
 msgid "Mixin for documents that want to restrict products"
-msgstr ""
+msgstr "Mixin för dokument som vill begränsa produkter"
 
 #. module: purchase_allowed_product
 #: model:ir.model.fields,field_description:purchase_allowed_product.field_res_partner__use_only_supplied_product
 #: model:ir.model.fields,field_description:purchase_allowed_product.field_res_users__use_only_supplied_product
 msgid "Order and invoice only supplied products"
-msgstr ""
+msgstr "Beställ och fakturera endast levererade produkter"
 
 #. module: purchase_allowed_product
 #: model:ir.model,name:purchase_allowed_product.model_product_product
 msgid "Product Variant"
-msgstr ""
+msgstr "Produktvariant"
 
 #. module: purchase_allowed_product
 #: model:ir.model,name:purchase_allowed_product.model_purchase_order
 msgid "Purchase Order"
-msgstr ""
+msgstr "Inköpsorder"
 
 #. module: purchase_allowed_product
 #: model:ir.model,name:purchase_allowed_product.model_product_supplierinfo
 msgid "Supplier Pricelist"
-msgstr ""
+msgstr "Prislista för leverantörer"
 
 #. module: purchase_allowed_product
 #: model:ir.model.fields,field_description:purchase_allowed_product.field_account_bank_statement_line__use_only_supplied_product
@@ -79,12 +85,12 @@ msgstr ""
 #: model:ir.model.fields,field_description:purchase_allowed_product.field_purchase_order__use_only_supplied_product
 #: model:ir.model.fields,field_description:purchase_allowed_product.field_supplied_product_mixin__use_only_supplied_product
 msgid "Use only allowed products"
-msgstr ""
+msgstr "Använd endast tillåtna produkter"
 
 #. module: purchase_allowed_product
 #: model:ir.model.fields,field_description:purchase_allowed_product.field_product_supplierinfo__partner_id
 msgid "Vendor"
-msgstr ""
+msgstr "Leverantör"
 
 #~ msgid "ID"
 #~ msgstr "ID"
diff --git a/purchase_commercial_partner/i18n/sv.po b/purchase_commercial_partner/i18n/sv.po
new file mode 100644
index 00000000000..5c09c328a57
--- /dev/null
+++ b/purchase_commercial_partner/i18n/sv.po
@@ -0,0 +1,28 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* purchase_commercial_partner
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: sv\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: purchase_commercial_partner
+#: model:ir.model.fields,field_description:purchase_commercial_partner.field_purchase_order__commercial_partner_id
+#: model_terms:ir.ui.view,arch_db:purchase_commercial_partner.purchase_order_view_search
+#: model_terms:ir.ui.view,arch_db:purchase_commercial_partner.purchase_report_search
+#: model_terms:ir.ui.view,arch_db:purchase_commercial_partner.view_purchase_order_filter
+msgid "Commercial Vendor"
+msgstr ""
+
+#. module: purchase_commercial_partner
+#: model:ir.model,name:purchase_commercial_partner.model_purchase_order
+msgid "Purchase Order"
+msgstr ""
diff --git a/purchase_date_planned_manual/README.rst b/purchase_date_planned_manual/README.rst
new file mode 100644
index 00000000000..7b13962a047
--- /dev/null
+++ b/purchase_date_planned_manual/README.rst
@@ -0,0 +1,114 @@
+============================
+Purchase Date Planned Manual
+============================
+
+.. 
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !! This file is generated by oca-gen-addon-readme !!
+   !! changes will be overwritten.                   !!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !! source digest: sha256:217b6e0e3b8319e0da9a606561c1d63c21d3c04d7d5b7ffda4e1d8c101f3f593
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png
+    :target: https://odoo-community.org/page/development-status
+    :alt: Mature
+.. |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%2Fpurchase--workflow-lightgray.png?logo=github
+    :target: https://github.com/OCA/purchase-workflow/tree/16.0/purchase_date_planned_manual
+    :alt: OCA/purchase-workflow
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+    :target: https://translation.odoo-community.org/projects/purchase-workflow-16-0/purchase-workflow-16-0-purchase_date_planned_manual
+    :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/purchase-workflow&target_branch=16.0
+    :alt: Try me on Runboat
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module makes the system to always respect the planned (or scheduled)
+date set by the user when creating a Purchase Order.
+
+Additionally, this module modifies the PO views and sets in red the lines
+that are predicted to arrive late compared to the scheduled date and vendor
+lead time.
+
+**Table of contents**
+
+.. contents::
+   :local:
+
+Usage
+=====
+
+To use this module you could follow any of the two options below:
+
+#. Go to 'Purchase' and create a purchase order.
+#. Manually set the scheduled date in the PO lines.
+#. This date will never be modified by the system and the lines that are
+   expected to be late are highlighted in red.
+
+Or:
+
+#. Create a procurement order for a product that can be bought and have the
+   route 'buy' activated.
+#. Run the procurement.
+#. Now the scheduled date in the procurement is respected even if the line is
+   added to a previously existing PO.
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues <https://github.com/OCA/purchase-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/purchase-workflow/issues/new?body=module:%20purchase_date_planned_manual%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
+~~~~~~~
+
+* Eficent
+
+Contributors
+~~~~~~~~~~~~
+
+* Lois Rilo <lois.rilo@eficent.com>
+* Chau Le <chaulb@trobz.com>
+
+
+Other credits
+~~~~~~~~~~~~~
+
+The migration of this module from 12.0 to 16.0 was 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-lreficent| image:: https://github.com/lreficent.png?size=40px
+    :target: https://github.com/lreficent
+    :alt: lreficent
+
+Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
+
+|maintainer-lreficent| 
+
+This module is part of the `OCA/purchase-workflow <https://github.com/OCA/purchase-workflow/tree/16.0/purchase_date_planned_manual>`_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/purchase_date_planned_manual/__init__.py b/purchase_date_planned_manual/__init__.py
new file mode 100644
index 00000000000..0650744f6bc
--- /dev/null
+++ b/purchase_date_planned_manual/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/purchase_date_planned_manual/__manifest__.py b/purchase_date_planned_manual/__manifest__.py
new file mode 100644
index 00000000000..8c204a04da0
--- /dev/null
+++ b/purchase_date_planned_manual/__manifest__.py
@@ -0,0 +1,22 @@
+# Copyright 2017 Eficent Business and IT Consulting Services S.L.
+#   (http://www.eficent.com)
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+
+{
+    "name": "Purchase Date Planned Manual",
+    "summary": "This module makes the system to always respect the planned "
+    "(or scheduled) date in PO lines.",
+    "version": "16.0.1.0.0",
+    "development_status": "Mature",
+    "author": "Eficent, " "Odoo Community Association (OCA)",
+    "maintainers": ["lreficent"],
+    "website": "https://github.com/OCA/purchase-workflow",
+    "category": "Purchase Management",
+    "depends": ["purchase_stock"],
+    "data": [
+        "views/purchase_order_view.xml",
+    ],
+    "license": "AGPL-3",
+    "installable": True,
+    "application": False,
+}
diff --git a/purchase_date_planned_manual/i18n/de.po b/purchase_date_planned_manual/i18n/de.po
new file mode 100644
index 00000000000..e9f7069a54a
--- /dev/null
+++ b/purchase_date_planned_manual/i18n/de.po
@@ -0,0 +1,60 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_date_planned_manual
+#
+# 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-06-23 00:46+0000\n"
+"PO-Revision-Date: 2017-06-23 00:46+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\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"
+
+#. module: purchase_date_planned_manual
+#: model_terms:ir.ui.view,arch_db:purchase_date_planned_manual.view_purchase_order_form
+msgid "Arriving late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,field_description:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid "Planned to be late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr "Bestellposition"
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_stock_rule
+msgid "Stock Rule"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: code:addons/purchase_date_planned_manual/models/purchase_order.py:50
+#, python-format
+msgid ""
+"This line is scheduled for: %s. \n"
+" However it is now planned to arrive late."
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,help:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid ""
+"True if the arrival at scheduled date is planned to be late. Takes into "
+"account the vendor lead time and the company margin for lead times."
+msgstr ""
+
+#~ msgid "Procurement"
+#~ msgstr "Beschaffung"
+
+#~ msgid "Purchase Order"
+#~ msgstr "Bestellauftrag"
diff --git a/purchase_date_planned_manual/i18n/es.po b/purchase_date_planned_manual/i18n/es.po
new file mode 100644
index 00000000000..c0e19d71a23
--- /dev/null
+++ b/purchase_date_planned_manual/i18n/es.po
@@ -0,0 +1,60 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_date_planned_manual
+#
+# 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-06-23 00:46+0000\n"
+"PO-Revision-Date: 2017-06-23 00:46+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\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"
+
+#. module: purchase_date_planned_manual
+#: model_terms:ir.ui.view,arch_db:purchase_date_planned_manual.view_purchase_order_form
+msgid "Arriving late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,field_description:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid "Planned to be late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr "Línea orden de compra"
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_stock_rule
+msgid "Stock Rule"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: code:addons/purchase_date_planned_manual/models/purchase_order.py:50
+#, python-format
+msgid ""
+"This line is scheduled for: %s. \n"
+" However it is now planned to arrive late."
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,help:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid ""
+"True if the arrival at scheduled date is planned to be late. Takes into "
+"account the vendor lead time and the company margin for lead times."
+msgstr ""
+
+#~ msgid "Procurement"
+#~ msgstr "Abastecimiento"
+
+#~ msgid "Purchase Order"
+#~ msgstr "Pedido de compra"
diff --git a/purchase_date_planned_manual/i18n/es_MX.po b/purchase_date_planned_manual/i18n/es_MX.po
new file mode 100644
index 00000000000..692d6e97782
--- /dev/null
+++ b/purchase_date_planned_manual/i18n/es_MX.po
@@ -0,0 +1,59 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_date_planned_manual
+#
+# Translators:
+# OCA Transbot <transbot@odoo-community.org>, 2017
+# Juan González <bifomania@protonmail.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 9.0c\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-06-23 00:46+0000\n"
+"PO-Revision-Date: 2017-06-23 00:46+0000\n"
+"Last-Translator: Juan González <bifomania@protonmail.com>, 2017\n"
+"Language-Team: Spanish (Mexico) (https://www.transifex.com/oca/teams/23907/"
+"es_MX/)\n"
+"Language: es_MX\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: purchase_date_planned_manual
+#: model_terms:ir.ui.view,arch_db:purchase_date_planned_manual.view_purchase_order_form
+msgid "Arriving late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,field_description:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid "Planned to be late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr "Línea de orden de compra"
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_stock_rule
+msgid "Stock Rule"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: code:addons/purchase_date_planned_manual/models/purchase_order.py:50
+#, python-format
+msgid ""
+"This line is scheduled for: %s. \n"
+" However it is now planned to arrive late."
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,help:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid ""
+"True if the arrival at scheduled date is planned to be late. Takes into "
+"account the vendor lead time and the company margin for lead times."
+msgstr ""
+
+#~ msgid "Procurement"
+#~ msgstr "Contratación"
diff --git a/purchase_date_planned_manual/i18n/fi.po b/purchase_date_planned_manual/i18n/fi.po
new file mode 100644
index 00000000000..007bf03a9f5
--- /dev/null
+++ b/purchase_date_planned_manual/i18n/fi.po
@@ -0,0 +1,58 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_date_planned_manual
+#
+# Translators:
+# Timo Talvitie <timo.talvitie@vizucom.com>, 2017
+# 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-06-23 00:46+0000\n"
+"PO-Revision-Date: 2017-06-23 00:46+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: purchase_date_planned_manual
+#: model_terms:ir.ui.view,arch_db:purchase_date_planned_manual.view_purchase_order_form
+msgid "Arriving late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,field_description:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid "Planned to be late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr "Ostotilausrivi"
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_stock_rule
+msgid "Stock Rule"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: code:addons/purchase_date_planned_manual/models/purchase_order.py:50
+#, python-format
+msgid ""
+"This line is scheduled for: %s. \n"
+" However it is now planned to arrive late."
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,help:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid ""
+"True if the arrival at scheduled date is planned to be late. Takes into "
+"account the vendor lead time and the company margin for lead times."
+msgstr ""
+
+#~ msgid "Purchase Order"
+#~ msgstr "Ostotilaus"
diff --git a/purchase_date_planned_manual/i18n/fr.po b/purchase_date_planned_manual/i18n/fr.po
new file mode 100644
index 00000000000..cc1f83906f3
--- /dev/null
+++ b/purchase_date_planned_manual/i18n/fr.po
@@ -0,0 +1,60 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_date_planned_manual
+#
+# 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-06-23 00:46+0000\n"
+"PO-Revision-Date: 2017-06-23 00:46+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: purchase_date_planned_manual
+#: model_terms:ir.ui.view,arch_db:purchase_date_planned_manual.view_purchase_order_form
+msgid "Arriving late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,field_description:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid "Planned to be late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr "Ligne de commande d'achat"
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_stock_rule
+msgid "Stock Rule"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: code:addons/purchase_date_planned_manual/models/purchase_order.py:50
+#, python-format
+msgid ""
+"This line is scheduled for: %s. \n"
+" However it is now planned to arrive late."
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,help:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid ""
+"True if the arrival at scheduled date is planned to be late. Takes into "
+"account the vendor lead time and the company margin for lead times."
+msgstr ""
+
+#~ msgid "Procurement"
+#~ msgstr "Procurement"
+
+#~ msgid "Purchase Order"
+#~ msgstr "Commande d'achat"
diff --git a/purchase_date_planned_manual/i18n/fr_FR.po b/purchase_date_planned_manual/i18n/fr_FR.po
new file mode 100644
index 00000000000..b5e4914deb9
--- /dev/null
+++ b/purchase_date_planned_manual/i18n/fr_FR.po
@@ -0,0 +1,58 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_date_planned_manual
+#
+# 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-06-23 00:46+0000\n"
+"PO-Revision-Date: 2017-06-23 00:46+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
+"Language-Team: French (France) (https://www.transifex.com/oca/teams/23907/"
+"fr_FR/)\n"
+"Language: fr_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: purchase_date_planned_manual
+#: model_terms:ir.ui.view,arch_db:purchase_date_planned_manual.view_purchase_order_form
+msgid "Arriving late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,field_description:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid "Planned to be late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_stock_rule
+msgid "Stock Rule"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: code:addons/purchase_date_planned_manual/models/purchase_order.py:50
+#, python-format
+msgid ""
+"This line is scheduled for: %s. \n"
+" However it is now planned to arrive late."
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,help:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid ""
+"True if the arrival at scheduled date is planned to be late. Takes into "
+"account the vendor lead time and the company margin for lead times."
+msgstr ""
+
+#~ msgid "Purchase Order"
+#~ msgstr "Bon de commande"
diff --git a/purchase_date_planned_manual/i18n/gl.po b/purchase_date_planned_manual/i18n/gl.po
new file mode 100644
index 00000000000..f7a05f73d91
--- /dev/null
+++ b/purchase_date_planned_manual/i18n/gl.po
@@ -0,0 +1,57 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_date_planned_manual
+#
+# Translators:
+# Alejandro Santana <alejandrosantana@anubia.es>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 9.0c\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-06-23 00:46+0000\n"
+"PO-Revision-Date: 2017-06-23 00:46+0000\n"
+"Last-Translator: Alejandro Santana <alejandrosantana@anubia.es>, 2017\n"
+"Language-Team: Galician (https://www.transifex.com/oca/teams/23907/gl/)\n"
+"Language: gl\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: purchase_date_planned_manual
+#: model_terms:ir.ui.view,arch_db:purchase_date_planned_manual.view_purchase_order_form
+msgid "Arriving late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,field_description:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid "Planned to be late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_stock_rule
+msgid "Stock Rule"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: code:addons/purchase_date_planned_manual/models/purchase_order.py:50
+#, python-format
+msgid ""
+"This line is scheduled for: %s. \n"
+" However it is now planned to arrive late."
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,help:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid ""
+"True if the arrival at scheduled date is planned to be late. Takes into "
+"account the vendor lead time and the company margin for lead times."
+msgstr ""
+
+#~ msgid "Purchase Order"
+#~ msgstr "Orde de compra"
diff --git a/purchase_date_planned_manual/i18n/hr.po b/purchase_date_planned_manual/i18n/hr.po
new file mode 100644
index 00000000000..e054c1fa890
--- /dev/null
+++ b/purchase_date_planned_manual/i18n/hr.po
@@ -0,0 +1,58 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_date_planned_manual
+#
+# 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-06-23 00:46+0000\n"
+"PO-Revision-Date: 2017-06-23 00:46+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 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: purchase_date_planned_manual
+#: model_terms:ir.ui.view,arch_db:purchase_date_planned_manual.view_purchase_order_form
+msgid "Arriving late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,field_description:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid "Planned to be late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_stock_rule
+msgid "Stock Rule"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: code:addons/purchase_date_planned_manual/models/purchase_order.py:50
+#, python-format
+msgid ""
+"This line is scheduled for: %s. \n"
+" However it is now planned to arrive late."
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,help:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid ""
+"True if the arrival at scheduled date is planned to be late. Takes into "
+"account the vendor lead time and the company margin for lead times."
+msgstr ""
+
+#~ msgid "Procurement"
+#~ msgstr "Nabava"
diff --git a/purchase_date_planned_manual/i18n/it.po b/purchase_date_planned_manual/i18n/it.po
new file mode 100644
index 00000000000..67fe406734e
--- /dev/null
+++ b/purchase_date_planned_manual/i18n/it.po
@@ -0,0 +1,66 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_date_planned_manual
+#
+# 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-06-23 00:46+0000\n"
+"PO-Revision-Date: 2024-06-15 19:36+0000\n"
+"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
+"Language-Team: Italian (https://www.transifex.com/oca/teams/23907/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: purchase_date_planned_manual
+#: model_terms:ir.ui.view,arch_db:purchase_date_planned_manual.view_purchase_order_form
+msgid "Arriving late"
+msgstr "Arrivo in ritardo"
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,field_description:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid "Planned to be late"
+msgstr "Pianificato per essere in ritardo"
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr "Riga ordine di acquisto"
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_stock_rule
+msgid "Stock Rule"
+msgstr "Regola di magazzino"
+
+#. module: purchase_date_planned_manual
+#: code:addons/purchase_date_planned_manual/models/purchase_order.py:50
+#, python-format
+msgid ""
+"This line is scheduled for: %s. \n"
+" However it is now planned to arrive late."
+msgstr ""
+"Questa riga è schedulata per : %s.\n"
+"Comunque non è pianificata per arrivare in ritardo."
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,help:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid ""
+"True if the arrival at scheduled date is planned to be late. Takes into "
+"account the vendor lead time and the company margin for lead times."
+msgstr ""
+"Vero se l'arrivo alla data schedulata è pianificato per essere in ritardo. "
+"Tiene in considerazione il tempo di attraversamento del fornitore e il "
+"margine dell'azienda per il tempi di attraversamento."
+
+#~ msgid "Procurement"
+#~ msgstr "Approvvigionamento"
+
+#~ msgid "Purchase Order"
+#~ msgstr "Ordine Acquisto"
diff --git a/purchase_date_planned_manual/i18n/nl.po b/purchase_date_planned_manual/i18n/nl.po
new file mode 100644
index 00000000000..935a7506bca
--- /dev/null
+++ b/purchase_date_planned_manual/i18n/nl.po
@@ -0,0 +1,57 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_date_planned_manual
+#
+# 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-06-23 00:46+0000\n"
+"PO-Revision-Date: 2017-06-23 00:46+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: purchase_date_planned_manual
+#: model_terms:ir.ui.view,arch_db:purchase_date_planned_manual.view_purchase_order_form
+msgid "Arriving late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,field_description:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid "Planned to be late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_stock_rule
+msgid "Stock Rule"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: code:addons/purchase_date_planned_manual/models/purchase_order.py:50
+#, python-format
+msgid ""
+"This line is scheduled for: %s. \n"
+" However it is now planned to arrive late."
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,help:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid ""
+"True if the arrival at scheduled date is planned to be late. Takes into "
+"account the vendor lead time and the company margin for lead times."
+msgstr ""
+
+#~ msgid "Purchase Order"
+#~ msgstr "Inkooporder"
diff --git a/purchase_date_planned_manual/i18n/pt_BR.po b/purchase_date_planned_manual/i18n/pt_BR.po
new file mode 100644
index 00000000000..2e0d71ea77b
--- /dev/null
+++ b/purchase_date_planned_manual/i18n/pt_BR.po
@@ -0,0 +1,67 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_date_planned_manual
+#
+# 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-06-23 00:46+0000\n"
+"PO-Revision-Date: 2022-10-03 18:36+0000\n"
+"Last-Translator: Douglas Custódio <douglascstd@yahoo.com>\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"
+"X-Generator: Weblate 4.3.2\n"
+
+#. module: purchase_date_planned_manual
+#: model_terms:ir.ui.view,arch_db:purchase_date_planned_manual.view_purchase_order_form
+msgid "Arriving late"
+msgstr "Chegando tarde"
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,field_description:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid "Planned to be late"
+msgstr "Planejado para chegar atrasado"
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr "Linha do Pedido de Compra"
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_stock_rule
+msgid "Stock Rule"
+msgstr "Regra do Estoque"
+
+#. module: purchase_date_planned_manual
+#: code:addons/purchase_date_planned_manual/models/purchase_order.py:50
+#, python-format
+msgid ""
+"This line is scheduled for: %s. \n"
+" However it is now planned to arrive late."
+msgstr ""
+"Esta linha está programada para: %s.\n"
+"  No entanto, agora está planejado chegar tarde."
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,help:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid ""
+"True if the arrival at scheduled date is planned to be late. Takes into "
+"account the vendor lead time and the company margin for lead times."
+msgstr ""
+"Verdadeiro se a chegada na data agendada estiver atrasada. Leva em "
+"consideração o lead time do fornecedor e a margem da empresa para os lead "
+"times."
+
+#~ msgid "Procurement"
+#~ msgstr "Aquisição"
+
+#~ msgid "Purchase Order"
+#~ msgstr "Pedido de Compra"
diff --git a/purchase_date_planned_manual/i18n/pt_PT.po b/purchase_date_planned_manual/i18n/pt_PT.po
new file mode 100644
index 00000000000..f1176311ea5
--- /dev/null
+++ b/purchase_date_planned_manual/i18n/pt_PT.po
@@ -0,0 +1,59 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_date_planned_manual
+#
+# Translators:
+# OCA Transbot <transbot@odoo-community.org>, 2017
+# Pedro Castro Silva <pedrocs@sossia.pt>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 9.0c\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-06-23 00:46+0000\n"
+"PO-Revision-Date: 2017-06-23 00:46+0000\n"
+"Last-Translator: Pedro Castro Silva <pedrocs@sossia.pt>, 2017\n"
+"Language-Team: Portuguese (Portugal) (https://www.transifex.com/oca/"
+"teams/23907/pt_PT/)\n"
+"Language: pt_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: purchase_date_planned_manual
+#: model_terms:ir.ui.view,arch_db:purchase_date_planned_manual.view_purchase_order_form
+msgid "Arriving late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,field_description:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid "Planned to be late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr "Linha de Encomenda de Compra"
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_stock_rule
+msgid "Stock Rule"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: code:addons/purchase_date_planned_manual/models/purchase_order.py:50
+#, python-format
+msgid ""
+"This line is scheduled for: %s. \n"
+" However it is now planned to arrive late."
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,help:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid ""
+"True if the arrival at scheduled date is planned to be late. Takes into "
+"account the vendor lead time and the company margin for lead times."
+msgstr ""
+
+#~ msgid "Procurement"
+#~ msgstr "Aquisições"
diff --git a/purchase_date_planned_manual/i18n/purchase_date_planned_manual.pot b/purchase_date_planned_manual/i18n/purchase_date_planned_manual.pot
new file mode 100644
index 00000000000..93239bdb069
--- /dev/null
+++ b/purchase_date_planned_manual/i18n/purchase_date_planned_manual.pot
@@ -0,0 +1,45 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* purchase_date_planned_manual
+#
+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: purchase_date_planned_manual
+#: model_terms:ir.ui.view,arch_db:purchase_date_planned_manual.view_purchase_order_form
+msgid "Arriving late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,field_description:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid "Planned to be late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#. odoo-python
+#: code:addons/purchase_date_planned_manual/models/purchase_order.py:0
+#, python-format
+msgid ""
+"This line is scheduled for: %s. \n"
+" However it is now planned to arrive late."
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,help:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid ""
+"True if the arrival at scheduled date is planned to be late. Takes into "
+"account the vendor lead time and the company margin for lead times."
+msgstr ""
diff --git a/purchase_date_planned_manual/i18n/ro.po b/purchase_date_planned_manual/i18n/ro.po
new file mode 100644
index 00000000000..72b05c14b52
--- /dev/null
+++ b/purchase_date_planned_manual/i18n/ro.po
@@ -0,0 +1,61 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_date_planned_manual
+#
+# 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-06-23 00:46+0000\n"
+"PO-Revision-Date: 2017-06-23 00:46+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: purchase_date_planned_manual
+#: model_terms:ir.ui.view,arch_db:purchase_date_planned_manual.view_purchase_order_form
+msgid "Arriving late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,field_description:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid "Planned to be late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr "Linie comandă achiziție"
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_stock_rule
+msgid "Stock Rule"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: code:addons/purchase_date_planned_manual/models/purchase_order.py:50
+#, python-format
+msgid ""
+"This line is scheduled for: %s. \n"
+" However it is now planned to arrive late."
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,help:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid ""
+"True if the arrival at scheduled date is planned to be late. Takes into "
+"account the vendor lead time and the company margin for lead times."
+msgstr ""
+
+#~ msgid "Procurement"
+#~ msgstr "Aprovizionare"
+
+#~ msgid "Purchase Order"
+#~ msgstr "Comandă achiziție"
diff --git a/purchase_date_planned_manual/i18n/sl.po b/purchase_date_planned_manual/i18n/sl.po
new file mode 100644
index 00000000000..f76a16ffec2
--- /dev/null
+++ b/purchase_date_planned_manual/i18n/sl.po
@@ -0,0 +1,67 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_date_planned_manual
+#
+# 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-06-23 00:46+0000\n"
+"PO-Revision-Date: 2021-02-24 11:45+0000\n"
+"Last-Translator: Matjaz Mozetic <matjaz@luxim.si>\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"
+"X-Generator: Weblate 4.3.2\n"
+
+#. module: purchase_date_planned_manual
+#: model_terms:ir.ui.view,arch_db:purchase_date_planned_manual.view_purchase_order_form
+msgid "Arriving late"
+msgstr "Zamuja"
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,field_description:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid "Planned to be late"
+msgstr "Pričakovana zamuda"
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr "Postavka nabavnega naloga"
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_stock_rule
+msgid "Stock Rule"
+msgstr "Pravilo zaloge"
+
+#. module: purchase_date_planned_manual
+#: code:addons/purchase_date_planned_manual/models/purchase_order.py:50
+#, python-format
+msgid ""
+"This line is scheduled for: %s. \n"
+" However it is now planned to arrive late."
+msgstr ""
+"Ta postavka je načrtovana na: %s. \n"
+" A zdaj je pričakovana je zamuda."
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,help:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid ""
+"True if the arrival at scheduled date is planned to be late. Takes into "
+"account the vendor lead time and the company margin for lead times."
+msgstr ""
+"Pravilno, če se pričakuje zamuda glede na načrtovani datum. Upošteva rok "
+"dobave dobavitelja in nastavitve družbe glede varnostnih razlik v rokih "
+"dobave."
+
+#~ msgid "Procurement"
+#~ msgstr "Oskrba"
+
+#~ msgid "Purchase Order"
+#~ msgstr "Nabavni nalog"
diff --git a/purchase_date_planned_manual/i18n/tr_TR.po b/purchase_date_planned_manual/i18n/tr_TR.po
new file mode 100644
index 00000000000..0b84e892a45
--- /dev/null
+++ b/purchase_date_planned_manual/i18n/tr_TR.po
@@ -0,0 +1,58 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_date_planned_manual
+#
+# 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-06-23 00:46+0000\n"
+"PO-Revision-Date: 2017-06-23 00:46+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: purchase_date_planned_manual
+#: model_terms:ir.ui.view,arch_db:purchase_date_planned_manual.view_purchase_order_form
+msgid "Arriving late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,field_description:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid "Planned to be late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_stock_rule
+msgid "Stock Rule"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: code:addons/purchase_date_planned_manual/models/purchase_order.py:50
+#, python-format
+msgid ""
+"This line is scheduled for: %s. \n"
+" However it is now planned to arrive late."
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,help:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid ""
+"True if the arrival at scheduled date is planned to be late. Takes into "
+"account the vendor lead time and the company margin for lead times."
+msgstr ""
+
+#~ msgid "Procurement"
+#~ msgstr "Satın alma"
diff --git a/purchase_date_planned_manual/i18n/vi_VN.po b/purchase_date_planned_manual/i18n/vi_VN.po
new file mode 100644
index 00000000000..e83fceb033d
--- /dev/null
+++ b/purchase_date_planned_manual/i18n/vi_VN.po
@@ -0,0 +1,61 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_date_planned_manual
+#
+# 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-06-23 00:46+0000\n"
+"PO-Revision-Date: 2017-06-23 00:46+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: purchase_date_planned_manual
+#: model_terms:ir.ui.view,arch_db:purchase_date_planned_manual.view_purchase_order_form
+msgid "Arriving late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,field_description:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid "Planned to be late"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_stock_rule
+msgid "Stock Rule"
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: code:addons/purchase_date_planned_manual/models/purchase_order.py:50
+#, python-format
+msgid ""
+"This line is scheduled for: %s. \n"
+" However it is now planned to arrive late."
+msgstr ""
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,help:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid ""
+"True if the arrival at scheduled date is planned to be late. Takes into "
+"account the vendor lead time and the company margin for lead times."
+msgstr ""
+
+#~ msgid "Procurement"
+#~ msgstr "Mua sắm / Cung ứng"
+
+#~ msgid "Purchase Order"
+#~ msgstr "Đơn hàng Mua"
diff --git a/purchase_date_planned_manual/i18n/zh_CN.po b/purchase_date_planned_manual/i18n/zh_CN.po
new file mode 100644
index 00000000000..1116198284a
--- /dev/null
+++ b/purchase_date_planned_manual/i18n/zh_CN.po
@@ -0,0 +1,62 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_date_planned_manual
+#
+# 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-06-23 00:46+0000\n"
+"PO-Revision-Date: 2019-09-17 19:24+0000\n"
+"Last-Translator: 黎伟杰 <674416404@qq.com>\n"
+"Language-Team: Chinese (China) (https://www.transifex.com/oca/teams/23907/"
+"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"
+"X-Generator: Weblate 3.8\n"
+
+#. module: purchase_date_planned_manual
+#: model_terms:ir.ui.view,arch_db:purchase_date_planned_manual.view_purchase_order_form
+msgid "Arriving late"
+msgstr "迟到了"
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,field_description:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid "Planned to be late"
+msgstr "计划迟到了"
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr "采购订单行"
+
+#. module: purchase_date_planned_manual
+#: model:ir.model,name:purchase_date_planned_manual.model_stock_rule
+msgid "Stock Rule"
+msgstr "库存规则"
+
+#. module: purchase_date_planned_manual
+#: code:addons/purchase_date_planned_manual/models/purchase_order.py:50
+#, python-format
+msgid ""
+"This line is scheduled for: %s. \n"
+" However it is now planned to arrive late."
+msgstr ""
+"此行计划为%s。\n"
+"不过,现在计划迟到了。"
+
+#. module: purchase_date_planned_manual
+#: model:ir.model.fields,help:purchase_date_planned_manual.field_purchase_order_line__predicted_arrival_late
+msgid ""
+"True if the arrival at scheduled date is planned to be late. Takes into "
+"account the vendor lead time and the company margin for lead times."
+msgstr ""
+"如果计划在预定日期到达,则为真。考虑供应商的提前期和公司的交付周期保证金。"
+
+#~ msgid "Procurement"
+#~ msgstr "补货"
diff --git a/purchase_date_planned_manual/models/__init__.py b/purchase_date_planned_manual/models/__init__.py
new file mode 100644
index 00000000000..9f03530643d
--- /dev/null
+++ b/purchase_date_planned_manual/models/__init__.py
@@ -0,0 +1 @@
+from . import purchase_order
diff --git a/purchase_date_planned_manual/models/purchase_order.py b/purchase_date_planned_manual/models/purchase_order.py
new file mode 100644
index 00000000000..f28e471576b
--- /dev/null
+++ b/purchase_date_planned_manual/models/purchase_order.py
@@ -0,0 +1,85 @@
+# Copyright 2017 Eficent Business and IT Consulting Services S.L.
+#   (http://www.eficent.com)
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+
+from dateutil.relativedelta import relativedelta
+
+from odoo import _, api, fields, models
+from odoo.exceptions import UserError
+from odoo.fields import Datetime as Dt
+
+
+class PurchaseOrderLine(models.Model):
+    _inherit = "purchase.order.line"
+
+    predicted_arrival_late = fields.Boolean(
+        string="Planned to be late",
+        compute="_compute_predicted_arrival_late",
+        help="True if the arrival at scheduled date is planned to be late. "
+        "Takes into account the vendor lead time and the company margin "
+        "for lead times.",
+    )
+
+    @api.depends("order_id.state")
+    def _compute_predicted_arrival_late(self):
+        """Colour the lines in red if the products are predicted to arrive
+        late."""
+        for line in self:
+            if line.product_id:
+                seller = line.product_id._select_seller(
+                    partner_id=line.partner_id,
+                    quantity=line.product_qty,
+                    date=line.order_id.date_order.date(),
+                    uom_id=line.product_uom,
+                )
+                order_date = line.order_id.date_order
+                po_lead = line.order_id.company_id.po_lead
+                delta = po_lead + seller.delay if seller else po_lead
+                date_expected = order_date + relativedelta(days=delta)
+                line.predicted_arrival_late = (
+                    date_expected > line.date_planned and line.order_id.state == "draft"
+                )
+            else:
+                line.predicted_arrival_late = False
+
+    @api.model
+    def _get_date_planned(self, seller, po=False):
+        """Do not change the scheduled date if we already have one."""
+        if self.date_planned:
+            return self.date_planned
+        else:
+            return super(PurchaseOrderLine, self)._get_date_planned(seller, po)
+
+    def action_delayed_line(self):
+        raise UserError(
+            _(
+                "This line is scheduled for: %s. \n However it is now planned to "
+                "arrive late."
+            )
+            % Dt.to_string(Dt.context_timestamp(self, self.date_planned))
+        )
+
+    def _find_candidate(
+        self,
+        product_id,
+        product_qty,
+        product_uom,
+        location_id,
+        name,
+        origin,
+        company_id,
+        values,
+    ):
+        date_planned = values.get("date_planned")
+        if date_planned:
+            self = self.filtered(lambda line: line.date_planned == date_planned)
+        return super()._find_candidate(
+            product_id,
+            product_qty,
+            product_uom,
+            location_id,
+            name,
+            origin,
+            company_id,
+            values,
+        )
diff --git a/purchase_date_planned_manual/readme/CONTRIBUTORS.rst b/purchase_date_planned_manual/readme/CONTRIBUTORS.rst
new file mode 100644
index 00000000000..ac8b9997792
--- /dev/null
+++ b/purchase_date_planned_manual/readme/CONTRIBUTORS.rst
@@ -0,0 +1,3 @@
+* Lois Rilo <lois.rilo@eficent.com>
+* Chau Le <chaulb@trobz.com>
+
diff --git a/purchase_date_planned_manual/readme/CREDITS.rst b/purchase_date_planned_manual/readme/CREDITS.rst
new file mode 100644
index 00000000000..e3b7612de16
--- /dev/null
+++ b/purchase_date_planned_manual/readme/CREDITS.rst
@@ -0,0 +1 @@
+The migration of this module from 12.0 to 16.0 was financially supported by Camptocamp
diff --git a/purchase_date_planned_manual/readme/DESCRIPTION.rst b/purchase_date_planned_manual/readme/DESCRIPTION.rst
new file mode 100644
index 00000000000..012bf6b5bb7
--- /dev/null
+++ b/purchase_date_planned_manual/readme/DESCRIPTION.rst
@@ -0,0 +1,6 @@
+This module makes the system to always respect the planned (or scheduled)
+date set by the user when creating a Purchase Order.
+
+Additionally, this module modifies the PO views and sets in red the lines
+that are predicted to arrive late compared to the scheduled date and vendor
+lead time.
diff --git a/purchase_date_planned_manual/readme/USAGE.rst b/purchase_date_planned_manual/readme/USAGE.rst
new file mode 100644
index 00000000000..ee8afa00333
--- /dev/null
+++ b/purchase_date_planned_manual/readme/USAGE.rst
@@ -0,0 +1,14 @@
+To use this module you could follow any of the two options below:
+
+#. Go to 'Purchase' and create a purchase order.
+#. Manually set the scheduled date in the PO lines.
+#. This date will never be modified by the system and the lines that are
+   expected to be late are highlighted in red.
+
+Or:
+
+#. Create a procurement order for a product that can be bought and have the
+   route 'buy' activated.
+#. Run the procurement.
+#. Now the scheduled date in the procurement is respected even if the line is
+   added to a previously existing PO.
diff --git a/purchase_date_planned_manual/setup.py b/purchase_date_planned_manual/setup.py
new file mode 100644
index 00000000000..00a90304a19
--- /dev/null
+++ b/purchase_date_planned_manual/setup.py
@@ -0,0 +1,6 @@
+import setuptools
+
+setuptools.setup(
+    setup_requires=["setuptools-odoo"],
+    odoo_addon=True,
+)
diff --git a/purchase_date_planned_manual/static/description/icon.png b/purchase_date_planned_manual/static/description/icon.png
new file mode 100644
index 00000000000..3a0328b516c
Binary files /dev/null and b/purchase_date_planned_manual/static/description/icon.png differ
diff --git a/purchase_date_planned_manual/static/description/index.html b/purchase_date_planned_manual/static/description/index.html
new file mode 100644
index 00000000000..a7474abd373
--- /dev/null
+++ b/purchase_date_planned_manual/static/description/index.html
@@ -0,0 +1,451 @@
+<!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>Purchase Date Planned Manual</title>
+<style type="text/css">
+
+/*
+:Author: David Goodger (goodger@python.org)
+:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+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: grey; } /* 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 {
+  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="purchase-date-planned-manual">
+<h1 class="title">Purchase Date Planned Manual</h1>
+
+<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! This file is generated by oca-gen-addon-readme !!
+!! changes will be overwritten.                   !!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! source digest: sha256:217b6e0e3b8319e0da9a606561c1d63c21d3c04d7d5b7ffda4e1d8c101f3f593
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Mature" src="https://img.shields.io/badge/maturity-Mature-brightgreen.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/purchase-workflow/tree/16.0/purchase_date_planned_manual"><img alt="OCA/purchase-workflow" src="https://img.shields.io/badge/github-OCA%2Fpurchase--workflow-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/purchase-workflow-16-0/purchase-workflow-16-0-purchase_date_planned_manual"><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/purchase-workflow&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 makes the system to always respect the planned (or scheduled)
+date set by the user when creating a Purchase Order.</p>
+<p>Additionally, this module modifies the PO views and sets in red the lines
+that are predicted to arrive late compared to the scheduled date and vendor
+lead time.</p>
+<p><strong>Table of contents</strong></p>
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#usage" id="toc-entry-1">Usage</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="#other-credits" id="toc-entry-6">Other credits</a></li>
+<li><a class="reference internal" href="#maintainers" id="toc-entry-7">Maintainers</a></li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="section" id="usage">
+<h1><a class="toc-backref" href="#toc-entry-1">Usage</a></h1>
+<p>To use this module you could follow any of the two options below:</p>
+<ol class="arabic simple">
+<li>Go to ‘Purchase’ and create a purchase order.</li>
+<li>Manually set the scheduled date in the PO lines.</li>
+<li>This date will never be modified by the system and the lines that are
+expected to be late are highlighted in red.</li>
+</ol>
+<p>Or:</p>
+<ol class="arabic simple">
+<li>Create a procurement order for a product that can be bought and have the
+route ‘buy’ activated.</li>
+<li>Run the procurement.</li>
+<li>Now the scheduled date in the procurement is respected even if the line is
+added to a previously existing PO.</li>
+</ol>
+</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/purchase-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/purchase-workflow/issues/new?body=module:%20purchase_date_planned_manual%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>Eficent</li>
+</ul>
+</div>
+<div class="section" id="contributors">
+<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
+<ul class="simple">
+<li>Lois Rilo &lt;<a class="reference external" href="mailto:lois.rilo&#64;eficent.com">lois.rilo&#64;eficent.com</a>&gt;</li>
+<li>Chau Le &lt;<a class="reference external" href="mailto:chaulb&#64;trobz.com">chaulb&#64;trobz.com</a>&gt;</li>
+</ul>
+</div>
+<div class="section" id="other-credits">
+<h2><a class="toc-backref" href="#toc-entry-6">Other credits</a></h2>
+<p>The migration of this module from 12.0 to 16.0 was financially supported by Camptocamp</p>
+</div>
+<div class="section" id="maintainers">
+<h2><a class="toc-backref" href="#toc-entry-7">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>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
+<p><a class="reference external image-reference" href="https://github.com/lreficent"><img alt="lreficent" src="https://github.com/lreficent.png?size=40px" /></a></p>
+<p>This module is part of the <a class="reference external" href="https://github.com/OCA/purchase-workflow/tree/16.0/purchase_date_planned_manual">OCA/purchase-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>
+</body>
+</html>
diff --git a/purchase_date_planned_manual/tests/__init__.py b/purchase_date_planned_manual/tests/__init__.py
new file mode 100644
index 00000000000..e76a6a413fc
--- /dev/null
+++ b/purchase_date_planned_manual/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_date_planned_manual
diff --git a/purchase_date_planned_manual/tests/test_date_planned_manual.py b/purchase_date_planned_manual/tests/test_date_planned_manual.py
new file mode 100644
index 00000000000..4a4fb67d975
--- /dev/null
+++ b/purchase_date_planned_manual/tests/test_date_planned_manual.py
@@ -0,0 +1,203 @@
+# Copyright 2017 Eficent Business and IT Consulting Services S.L.
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from datetime import datetime, timedelta
+
+from odoo.exceptions import UserError
+from odoo.fields import first
+from odoo.tests import tagged
+from odoo.tests.common import TransactionCase
+
+
+@tagged("post_install", "-at_install")
+class TestDatePlannedManual(TransactionCase):
+    def setUp(self):
+        super().setUp()
+        self.category = self.env["product.category"].create({"name": "Test category"})
+        self.po_model = self.env["purchase.order"]
+        self.pol_model = self.env["purchase.order.line"]
+        self.pp_model = self.env["product.product"]
+        # Create some partner, products and supplier info:
+        self.route_buy_id = self.env.ref("purchase_stock.route_warehouse0_buy")
+        self.rule = first(self.route_buy_id.rule_ids)
+        self.partner = self.env["res.partner"].create(
+            {
+                "name": "Test supplier",
+                "supplier_rank": 1,
+            }
+        )
+
+        self.warehouse = self.env["stock.warehouse"].search(
+            [("company_id", "=", self.env.user.id)], limit=1
+        )
+        self.warehouse.delivery_steps = "pick_ship"
+        self.final_location = self.partner.property_stock_customer
+
+        self.product_1 = self._create_product(
+            "Test product 1", self.category, self.partner
+        )
+        self.product_2 = self._create_product(
+            "Test product 2", self.category, self.partner
+        )
+        self.env["stock.quant"]._update_available_quantity(
+            self.product_1, self.warehouse.lot_stock_id, 10.0
+        )
+
+        # Create purchase order and dates
+        self.purchase_order = self.po_model.create(
+            {
+                "partner_id": self.partner.id,
+                "picking_type_id": self.rule.picking_type_id.id,
+            }
+        )
+        self.next_week_time = datetime.now() + timedelta(days=7)
+
+    def _create_product(self, name, category, partner):
+        product = self.env["product.product"].create(
+            {
+                "name": name,
+                "type": "product",
+                "categ_id": category.id,
+                "seller_ids": [(0, 0, {"partner_id": partner.id, "min_qty": 1.0})],
+            }
+        )
+        return product
+
+    def test_manually_set_pol_date(self):
+        """Tests the manual modification of scheduled date in purchase order
+        lines."""
+        last_week_time = datetime.now() - timedelta(days=7)
+
+        po_line_1 = self.pol_model.create(
+            {
+                "order_id": self.purchase_order.id,
+                "product_id": self.product_1.id,
+                "date_planned": last_week_time,
+                "name": "Test",
+                "product_qty": 1.0,
+                "product_uom": self.product_1.uom_id.id,
+                "price_unit": 10.0,
+            }
+        )
+        po_line_2 = self.pol_model.create(
+            {
+                "order_id": self.purchase_order.id,
+                "product_id": self.product_2.id,
+                "date_planned": self.next_week_time,
+                "name": "Test",
+                "product_qty": 10.0,
+                "product_uom": self.product_2.uom_id.id,
+                "price_unit": 20.0,
+            }
+        )
+        self.assertTrue(
+            po_line_1.date_planned < datetime.now(),
+            "First test PO line should be predicted late.",
+        )
+        self.assertFalse(
+            po_line_2.date_planned < datetime.now(),
+            "Second test PO line should not be predicted late.",
+        )
+        self.purchase_order.button_confirm()
+        self.assertEqual(
+            po_line_1.date_planned,
+            last_week_time,
+            "Scheduled date should have benn respected.",
+        )
+        self.assertNotEqual(
+            po_line_1.order_id.state, "draft", "state should not be draft'."
+        )
+        self.assertFalse(
+            po_line_1.predicted_arrival_late,
+            "predicted_arrival_late should be false when not in " "state 'draft'.",
+        )
+        with self.assertRaises(UserError):
+            po_line_1.action_delayed_line()
+
+    def _run_procurement(self, product, origin, values):
+        procurement_group_obj = self.env["procurement.group"]
+        procurement = procurement_group_obj.Procurement(
+            product,
+            1,
+            product.uom_id,
+            self.final_location,
+            False,
+            origin,
+            self.warehouse.company_id,
+            values,
+        )
+        rule = procurement_group_obj._get_rule(
+            procurement.product_id, procurement.location_id, procurement.values
+        )
+        self.rule._run_buy([(procurement, rule)])
+
+    def test_merging_of_po_lines_if_same_date_planned(self):
+        """When only merge PO lines if they have same date_planned"""
+        origin = "test_merging_of_po_lines_if_same_date_planned"
+        values = {
+            "warehouse_id": self.warehouse,
+            "date_planned": self.next_week_time,
+        }
+        self._run_procurement(self.product_1, origin, values)
+        orders = self.env["purchase.order"].search([("origin", "=", origin)])
+        self.assertEqual(
+            len(orders.order_line),
+            1,
+            "The PO should still have only one PO line.",
+        )
+        self.assertEqual(orders.order_line.product_qty, 1.0)
+        # New procurement but 1 PO, 1 line, double qty.
+        self._run_procurement(self.product_1, origin, values)
+        orders = self.env["purchase.order"].search([("origin", "=", origin)])
+        self.assertEqual(
+            len(orders.order_line),
+            1,
+            "The PO should still have only one PO line.",
+        )
+        self.assertEqual(
+            orders.order_line.product_qty,
+            2.0,
+            "The qty of the PO line should have increased by 1.",
+        )
+        self.assertEqual(
+            orders.order_line.date_planned,
+            self.next_week_time,
+            "The date_planned of the PO line should be the same.",
+        )
+
+    def test_no_merging_of_po_lines_if_diff_date_planned(self):
+        """No merge PO lines if they not have same date_planned"""
+        origin = "test_no_merging_of_po_lines_if_diff_date_planned"
+        values = {
+            "warehouse_id": self.warehouse,
+            "date_planned": self.next_week_time,
+        }
+        self._run_procurement(self.product_1, origin, values)
+        orders = self.env["purchase.order"].search([("origin", "=", origin)])
+        self.assertEqual(
+            len(orders.order_line),
+            1,
+            "The PO should still have only one PO line.",
+        )
+        self.assertEqual(orders.order_line.product_qty, 1.0)
+        self.assertEqual(orders.date_planned, self.next_week_time)
+        # New procurement but 1 PO, 2 lines.
+        values["date_planned"] += timedelta(days=1)
+        self._run_procurement(self.product_1, origin, values)
+        orders = self.env["purchase.order"].search([("origin", "=", origin)])
+        self.assertEqual(len(orders), 1)
+        self.assertEqual(
+            len(orders.order_line),
+            2,
+            "A new PO line should have been create for the move.",
+        )
+        self.assertEqual(
+            orders.order_line[0].date_planned,
+            orders.date_planned,
+            "The date_planned of the PO line should be the same.",
+        )
+        self.assertEqual(
+            orders.order_line[1].date_planned,
+            orders.date_planned + timedelta(days=1),
+            "The date_planned of the PO line should be the same.",
+        )
diff --git a/purchase_date_planned_manual/views/purchase_order_view.xml b/purchase_date_planned_manual/views/purchase_order_view.xml
new file mode 100644
index 00000000000..097596fc197
--- /dev/null
+++ b/purchase_date_planned_manual/views/purchase_order_view.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!-- Copyright 2017 Eficent Business and IT Consulting Services S.L.
+     License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
+<odoo>
+    <record id="view_purchase_order_form" model="ir.ui.view">
+        <field name="name">purchase.order.form - purchase_date_planned_manual</field>
+        <field name="model">purchase.order</field>
+        <field name="inherit_id" ref="purchase.purchase_order_form" />
+        <field name="arch" type="xml">
+            <xpath expr="//field[@name='order_line']/tree" position="inside">
+                <field name="predicted_arrival_late" invisible="1" />
+                <button
+                    title="Arriving late"
+                    attrs="{'invisible': [('predicted_arrival_late', '=', False)]}"
+                    name="action_delayed_line"
+                    type="object"
+                    icon="fa-exclamation-triangle"
+                />
+            </xpath>
+            <xpath expr="//field[@name='order_line']/tree" position="attributes">
+                <attribute
+                    name="decoration-danger"
+                >predicted_arrival_late == True</attribute>
+            </xpath>
+        </field>
+    </record>
+
+</odoo>
diff --git a/purchase_default_terms_conditions/i18n/pt_BR.po b/purchase_default_terms_conditions/i18n/pt_BR.po
index d8b551b7654..eda17091f9c 100644
--- a/purchase_default_terms_conditions/i18n/pt_BR.po
+++ b/purchase_default_terms_conditions/i18n/pt_BR.po
@@ -7,15 +7,16 @@ msgstr ""
 "Project-Id-Version: Odoo Server 12.0\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-10-06 20:25+0000\n"
-"PO-Revision-Date: 2022-10-03 15:53+0000\n"
-"Last-Translator: Douglas Custódio <douglascstd@yahoo.com>\n"
+"PO-Revision-Date: 2024-05-22 00:02+0000\n"
+"Last-Translator: Rodrigo Macedo <sottomaiormacedotec@users.noreply."
+"translation.odoo-community.org>\n"
 "Language-Team: \n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.3.2\n"
+"X-Generator: Weblate 4.17\n"
 
 #. module: purchase_default_terms_conditions
 #: model_terms:ir.ui.view,arch_db:purchase_default_terms_conditions.res_config_settings_view_form_purchase
@@ -36,7 +37,7 @@ msgstr "Empresas"
 #. module: purchase_default_terms_conditions
 #: model:ir.model,name:purchase_default_terms_conditions.model_res_partner
 msgid "Contact"
-msgstr ""
+msgstr "Contato"
 
 #. module: purchase_default_terms_conditions
 #: model_terms:ir.ui.view,arch_db:purchase_default_terms_conditions.res_config_settings_view_form_purchase
@@ -46,7 +47,7 @@ msgstr "Insira seus termos e condições aqui..."
 #. module: purchase_default_terms_conditions
 #: model:ir.model,name:purchase_default_terms_conditions.model_res_config_settings
 msgid "Procurement purchase grouping settings"
-msgstr ""
+msgstr "Configurações de agrupamento de compras de compras"
 
 #. module: purchase_default_terms_conditions
 #: model:ir.model.fields,field_description:purchase_default_terms_conditions.field_res_company__purchase_note
diff --git a/purchase_discount/README.rst b/purchase_discount/README.rst
index bfbd9302686..207ad953e86 100644
--- a/purchase_discount/README.rst
+++ b/purchase_discount/README.rst
@@ -7,7 +7,7 @@ Purchase order lines with discounts
    !! This file is generated by oca-gen-addon-readme !!
    !! changes will be overwritten.                   !!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   !! source digest: sha256:a482b22beb2421553280eb1c2b4d7251146b80e1bc766a5481597b3009fcb51b
+   !! source digest: sha256:3eb83f0f6f9c7c23e53771a41e62eb12a4b666ab7ac38cf12dcf48563a2f9166
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
diff --git a/purchase_discount/__manifest__.py b/purchase_discount/__manifest__.py
index 3ee69441d3a..9912cd2fadd 100644
--- a/purchase_discount/__manifest__.py
+++ b/purchase_discount/__manifest__.py
@@ -10,7 +10,7 @@
     "ACSONE SA/NV,"
     "GRAP,"
     "Odoo Community Association (OCA)",
-    "version": "16.0.1.2.1",
+    "version": "16.0.1.3.0",
     "category": "Purchase Management",
     "website": "https://github.com/OCA/purchase-workflow",
     "depends": ["purchase_stock"],
diff --git a/purchase_discount/i18n/pt_BR.po b/purchase_discount/i18n/pt_BR.po
index 8817fe2790b..9cef411767f 100644
--- a/purchase_discount/i18n/pt_BR.po
+++ b/purchase_discount/i18n/pt_BR.po
@@ -9,32 +9,33 @@ msgstr ""
 "Project-Id-Version: Odoo Server 11.0\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2018-02-23 17:50+0000\n"
-"PO-Revision-Date: 2022-10-03 15:53+0000\n"
-"Last-Translator: Douglas Custódio <douglascstd@yahoo.com>\n"
-"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/"
-"teams/23907/pt_BR/)\n"
+"PO-Revision-Date: 2024-05-29 18:36+0000\n"
+"Last-Translator: Rodrigo Macedo <sottomaiormacedotec@users.noreply."
+"translation.odoo-community.org>\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"
-"X-Generator: Weblate 4.3.2\n"
+"X-Generator: Weblate 4.17\n"
 
 #. module: purchase_discount
 #: model_terms:ir.ui.view,arch_db:purchase_discount.report_purchaseorder_document
 msgid "<strong>Disc. (%)</strong>"
-msgstr ""
+msgstr "<strong>Desc. (%)</strong>"
 
 #. module: purchase_discount
 #: model:ir.model,name:purchase_discount.model_res_partner
 msgid "Contact"
-msgstr ""
+msgstr "Contato"
 
 #. module: purchase_discount
 #: model:ir.model.fields,field_description:purchase_discount.field_res_partner__default_supplierinfo_discount
 #: model:ir.model.fields,field_description:purchase_discount.field_res_users__default_supplierinfo_discount
 msgid "Default Supplier Discount (%)"
-msgstr ""
+msgstr "Desconto padrão do fornecedor (%)"
 
 #. module: purchase_discount
 #: model:ir.model.fields,field_description:purchase_discount.field_product_supplierinfo__discount
@@ -46,18 +47,17 @@ msgstr "Desconto (%)"
 #. module: purchase_discount
 #: model:ir.model.constraint,message:purchase_discount.constraint_purchase_order_line_discount_limit
 msgid "Discount must be lower than 100%."
-msgstr ""
+msgstr "O desconto deve ser inferior a 100%."
 
 #. module: purchase_discount
 #: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
 msgid "Discount-related settings are managed on"
-msgstr ""
+msgstr "As configurações relacionadas a descontos são gerenciadas em"
 
 #. module: purchase_discount
 #: model:ir.model,name:purchase_discount.model_purchase_order
-#, fuzzy
 msgid "Purchase Order"
-msgstr "Linha do Pedido de Compra"
+msgstr "Pedido de Compra"
 
 #. module: purchase_discount
 #: model:ir.model,name:purchase_discount.model_purchase_order_line
@@ -66,19 +66,18 @@ msgstr "Linha do Pedido de Compra"
 
 #. module: purchase_discount
 #: model:ir.model,name:purchase_discount.model_purchase_report
-#, fuzzy
 msgid "Purchase Report"
-msgstr "Linha do Pedido de Compra"
+msgstr "Relatório de Compra"
 
 #. module: purchase_discount
 #: model:ir.model,name:purchase_discount.model_stock_move
 msgid "Stock Move"
-msgstr ""
+msgstr "Movimentação de estoque"
 
 #. module: purchase_discount
 #: model:ir.model,name:purchase_discount.model_product_supplierinfo
 msgid "Supplier Pricelist"
-msgstr ""
+msgstr "Lista de preços do fornecedor"
 
 #. module: purchase_discount
 #: model:ir.model.fields,help:purchase_discount.field_res_partner__default_supplierinfo_discount
@@ -87,8 +86,10 @@ msgid ""
 "This value will be used as the default one, for each new supplierinfo line "
 "depending on that supplier."
 msgstr ""
+"Este valor será usado como padrão, para cada nova linha de informações do "
+"fornecedor dependendo desse fornecedor."
 
 #. module: purchase_discount
 #: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
 msgid "the parent company"
-msgstr ""
+msgstr "A empresa matriz"
diff --git a/purchase_discount/models/purchase_order.py b/purchase_discount/models/purchase_order.py
index e502da8d6c0..036fd01a7ce 100644
--- a/purchase_discount/models/purchase_order.py
+++ b/purchase_discount/models/purchase_order.py
@@ -110,8 +110,12 @@ def _apply_value_from_seller(self, seller):
         self.discount = seller.discount
 
     def _prepare_account_move_line(self, move=False):
-        vals = super(PurchaseOrderLine, self)._prepare_account_move_line(move)
-        vals["discount"] = self.discount
+        vals = super()._prepare_account_move_line(move)
+        if self.env["account.move.line"]._fields.get("discount1", False):
+            # OCA/account_invoice_triple_discount is installed
+            vals["discount1"] = self.discount
+        else:
+            vals["discount"] = self.discount
         return vals
 
     @api.model
diff --git a/purchase_discount/static/description/index.html b/purchase_discount/static/description/index.html
index 57b2ce385e3..ce92763cf43 100644
--- a/purchase_discount/static/description/index.html
+++ b/purchase_discount/static/description/index.html
@@ -366,7 +366,7 @@ <h1 class="title">Purchase order lines with discounts</h1>
 !! This file is generated by oca-gen-addon-readme !!
 !! changes will be overwritten.                   !!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! source digest: sha256:a482b22beb2421553280eb1c2b4d7251146b80e1bc766a5481597b3009fcb51b
+!! source digest: sha256:3eb83f0f6f9c7c23e53771a41e62eb12a4b666ab7ac38cf12dcf48563a2f9166
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
 <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/purchase-workflow/tree/16.0/purchase_discount"><img alt="OCA/purchase-workflow" src="https://img.shields.io/badge/github-OCA%2Fpurchase--workflow-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/purchase-workflow-16-0/purchase-workflow-16-0-purchase_discount"><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/purchase-workflow&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 allows to define a discount per line in the purchase orders. This
diff --git a/purchase_discount/views/purchase_discount_view.xml b/purchase_discount/views/purchase_discount_view.xml
index 8820c7bc08c..e0a43166845 100644
--- a/purchase_discount/views/purchase_discount_view.xml
+++ b/purchase_discount/views/purchase_discount_view.xml
@@ -47,4 +47,14 @@
             </xpath>
         </field>
     </record>
+    <record model="ir.ui.view" id="purchase_history_tree">
+        <field name="name">purchase_discount.history.tree</field>
+        <field name="model">purchase.order.line</field>
+        <field name="inherit_id" ref="purchase.purchase_history_tree" />
+        <field name="arch" type="xml">
+            <field name="price_unit" position="after">
+                <field name="discount" />
+            </field>
+        </field>
+    </record>
 </odoo>
diff --git a/purchase_fop_shipping/i18n/pt_BR.po b/purchase_fop_shipping/i18n/pt_BR.po
index 59320b243a3..fee2c5ac57d 100644
--- a/purchase_fop_shipping/i18n/pt_BR.po
+++ b/purchase_fop_shipping/i18n/pt_BR.po
@@ -9,64 +9,65 @@ msgstr ""
 "Project-Id-Version: Odoo Server 10.0\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-11-24 07:53+0000\n"
-"PO-Revision-Date: 2022-10-03 17:36+0000\n"
-"Last-Translator: Douglas Custódio <douglascstd@yahoo.com>\n"
-"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/"
-"teams/23907/pt_BR/)\n"
+"PO-Revision-Date: 2024-05-29 18:37+0000\n"
+"Last-Translator: Rodrigo Macedo <sottomaiormacedotec@users.noreply."
+"translation.odoo-community.org>\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"
-"X-Generator: Weblate 4.3.2\n"
+"X-Generator: Weblate 4.17\n"
 
 #. module: purchase_fop_shipping
 #: model:ir.model.fields,field_description:purchase_fop_shipping.field_purchase_order__force_order_under_fop
 msgid "Confirm under FOP"
-msgstr ""
+msgstr "Confirme sob FOP"
 
 #. module: purchase_fop_shipping
 #: model:ir.model,name:purchase_fop_shipping.model_res_partner
 msgid "Contact"
-msgstr ""
+msgstr "Contato"
 
 #. module: purchase_fop_shipping
 #: model:ir.model.fields,field_description:purchase_fop_shipping.field_purchase_order__fop_reached
 msgid "FOP reached"
-msgstr ""
+msgstr "FOP alcançado"
 
 #. module: purchase_fop_shipping
 #: model:ir.model.fields,field_description:purchase_fop_shipping.field_purchase_order__fop_shipping
 #: model:ir.model.fields,field_description:purchase_fop_shipping.field_res_partner__fop_shipping
 #: model:ir.model.fields,field_description:purchase_fop_shipping.field_res_users__fop_shipping
 msgid "FOP shipping"
-msgstr ""
+msgstr "FOP enviado"
 
 #. module: purchase_fop_shipping
 #: model:res.groups,name:purchase_fop_shipping.group_fop_shipping_purchase_manager
 msgid "FOP shipping Manager"
-msgstr ""
+msgstr "Gerente de remessa FOP"
 
 #. module: purchase_fop_shipping
 #: model:ir.model.fields,help:purchase_fop_shipping.field_purchase_order__force_order_under_fop
 msgid "Force confirm purchase order under Free-Of-Payment shipping"
-msgstr ""
+msgstr "Forçar a confirmação do pedido de compra sob frete grátis"
 
 #. module: purchase_fop_shipping
 #: model:ir.model.fields,help:purchase_fop_shipping.field_purchase_order__fop_reached
 msgid "Free-Of-Payment shipping reached"
-msgstr ""
+msgstr "Envio sem pagamento alcançado"
 
 #. module: purchase_fop_shipping
 #: model:ir.model.fields,help:purchase_fop_shipping.field_res_partner__fop_shipping
 #: model:ir.model.fields,help:purchase_fop_shipping.field_res_users__fop_shipping
 msgid "Min purchase order amount for FOP shipping"
-msgstr ""
+msgstr "Valor mínimo do pedido de compra para remessa FOP"
 
 #. module: purchase_fop_shipping
 #: model:ir.model.fields,help:purchase_fop_shipping.field_purchase_order__fop_shipping
 msgid "Min purchase order amount for Free-Of-Payment shipping"
-msgstr ""
+msgstr "Valor mínimo do pedido de compra para remessa sem pagamento"
 
 #. module: purchase_fop_shipping
 #: model:ir.model,name:purchase_fop_shipping.model_purchase_order
@@ -81,3 +82,5 @@ msgid ""
 "You cannot confirm a purchase order with amount under FOP shipping. To force "
 "confirm you must belongs to \"FOP shipping Manager\"."
 msgstr ""
+"Você não pode confirmar um pedido de compra com valor sob frete FOP. Para "
+"forçar a confirmação você deve pertencer ao \"FOP Shipping Manager\"."
diff --git a/purchase_landed_cost/i18n/pt_BR.po b/purchase_landed_cost/i18n/pt_BR.po
index 3b2662624b8..8a85a023aa4 100644
--- a/purchase_landed_cost/i18n/pt_BR.po
+++ b/purchase_landed_cost/i18n/pt_BR.po
@@ -8,16 +8,17 @@ msgstr ""
 "Project-Id-Version: odoomrp-wip (8.0)\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2015-10-07 10:44+0000\n"
-"PO-Revision-Date: 2020-09-25 23:00+0000\n"
-"Last-Translator: Marcel Savegnago <marcel.savegnago@gmail.com>\n"
-"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/odoomrp-"
-"wip-8-0/language/pt_BR/)\n"
+"PO-Revision-Date: 2024-05-22 00:04+0000\n"
+"Last-Translator: Rodrigo Macedo <sottomaiormacedotec@users.noreply."
+"translation.odoo-community.org>\n"
+"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/"
+"odoomrp-wip-8-0/language/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"
-"X-Generator: Weblate 3.10\n"
+"X-Generator: Weblate 4.17\n"
 
 #. module: purchase_landed_cost
 #: model:ir.model.fields,field_description:purchase_landed_cost.field_purchase_cost_distribution_expense__affected_lines
@@ -32,7 +33,7 @@ msgstr "Linha da Quantidade"
 #. module: purchase_landed_cost
 #: model_terms:ir.ui.view,arch_db:purchase_landed_cost.purchase_cost_distribution_form
 msgid "Are you sure that you want to set done state?"
-msgstr ""
+msgstr "Tem certeza de que deseja definir o estado concluído?"
 
 #. module: purchase_landed_cost
 #: model:ir.model.fields.selection,name:purchase_landed_cost.selection__purchase_expense_type__calculation_method__amount
@@ -390,12 +391,12 @@ msgstr "Linha da Fatura"
 #. module: purchase_landed_cost
 #: model:ir.model,name:purchase_landed_cost.model_account_move
 msgid "Journal Entry"
-msgstr ""
+msgstr "Entrada Diária"
 
 #. module: purchase_landed_cost
 #: model:ir.model,name:purchase_landed_cost.model_account_move_line
 msgid "Journal Item"
-msgstr ""
+msgstr "Item Diário"
 
 #. module: purchase_landed_cost
 #: model:ir.model.fields,field_description:purchase_landed_cost.field_account_bank_statement_line__expense_line_ids
@@ -649,12 +650,12 @@ msgstr "Selecione o assistente da linha de fatura do fornecedor"
 #. module: purchase_landed_cost
 #: model_terms:ir.ui.view,arch_db:purchase_landed_cost.purchase_cost_distribution_form
 msgid "Set done"
-msgstr ""
+msgstr "Configuração concluída"
 
 #. module: purchase_landed_cost
 #: model_terms:ir.ui.view,arch_db:purchase_landed_cost.purchase_cost_distribution_form
 msgid "Set draft"
-msgstr ""
+msgstr "Definir rascunho"
 
 #. module: purchase_landed_cost
 #: model:ir.model.fields,help:purchase_landed_cost.field_purchase_expense_type__default_expense
diff --git a/purchase_location_by_line/i18n/sv.po b/purchase_location_by_line/i18n/sv.po
new file mode 100644
index 00000000000..70cb0594ddc
--- /dev/null
+++ b/purchase_location_by_line/i18n/sv.po
@@ -0,0 +1,30 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* purchase_location_by_line
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: sv\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: purchase_location_by_line
+#: model:ir.model.fields,field_description:purchase_location_by_line.field_purchase_order_line__location_dest_id
+msgid "Destination"
+msgstr ""
+
+#. module: purchase_location_by_line
+#: model:ir.model,name:purchase_location_by_line.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr ""
+
+#. module: purchase_location_by_line
+#: model:ir.model,name:purchase_location_by_line.model_stock_picking
+msgid "Transfer"
+msgstr ""
diff --git a/purchase_merge/i18n/pt_BR.po b/purchase_merge/i18n/pt_BR.po
index 0158223f13f..553a4211052 100644
--- a/purchase_merge/i18n/pt_BR.po
+++ b/purchase_merge/i18n/pt_BR.po
@@ -6,8 +6,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Odoo Server 16.0\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2023-10-30 12:38+0000\n"
-"Last-Translator: Adriano Prado <adrianojprado@gmail.com>\n"
+"PO-Revision-Date: 2024-05-22 00:04+0000\n"
+"Last-Translator: Rodrigo Macedo <sottomaiormacedotec@users.noreply."
+"translation.odoo-community.org>\n"
 "Language-Team: none\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
@@ -153,4 +154,4 @@ msgstr "Você não pode mesclar pedidos de compra de fornecedores diferentes: %s
 #. module: purchase_merge
 #: model:ir.model,name:purchase_merge.model_purchase_merge_automatic_wizard
 msgid "purchase.merge.automatic.wizard"
-msgstr ""
+msgstr "assistente.de.fusão.automática.de.compras"
diff --git a/purchase_no_rfq/i18n/sv.po b/purchase_no_rfq/i18n/sv.po
new file mode 100644
index 00000000000..1ccab0ee08a
--- /dev/null
+++ b/purchase_no_rfq/i18n/sv.po
@@ -0,0 +1,52 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* purchase_no_rfq
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: sv\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: purchase_no_rfq
+#: model_terms:ir.ui.view,arch_db:purchase_no_rfq.purchase_order_form
+msgid ""
+"<span class=\"o_form_label\" attrs=\"{'invisible': [('state','not "
+"in',('draft','sent'))]}\">Purchase Order </span>"
+msgstr ""
+
+#. module: purchase_no_rfq
+#: model:ir.model.fields.selection,name:purchase_no_rfq.selection__purchase_order__state__draft
+msgid "Draft"
+msgstr ""
+
+#. module: purchase_no_rfq
+#: model_terms:ir.ui.view,arch_db:purchase_no_rfq.purchase_order_form
+msgid "Print"
+msgstr ""
+
+#. module: purchase_no_rfq
+#: model:ir.model,name:purchase_no_rfq.model_purchase_order
+msgid "Purchase Order"
+msgstr ""
+
+#. module: purchase_no_rfq
+#: model_terms:ir.ui.view,arch_db:purchase_no_rfq.report_purchaseorder_document
+msgid "Purchase Order #"
+msgstr ""
+
+#. module: purchase_no_rfq
+#: model:ir.model.fields.selection,name:purchase_no_rfq.selection__purchase_order__state__sent
+msgid "Sent"
+msgstr ""
+
+#. module: purchase_no_rfq
+#: model:ir.model.fields,field_description:purchase_no_rfq.field_purchase_order__state
+msgid "Status"
+msgstr ""
diff --git a/purchase_open_qty/i18n/pt_BR.po b/purchase_open_qty/i18n/pt_BR.po
index 1b86519448d..6ec94540e00 100644
--- a/purchase_open_qty/i18n/pt_BR.po
+++ b/purchase_open_qty/i18n/pt_BR.po
@@ -9,29 +9,31 @@ msgstr ""
 "Project-Id-Version: Odoo Server 10.0\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-11-24 07:53+0000\n"
-"PO-Revision-Date: 2017-11-24 07:53+0000\n"
-"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
-"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/"
-"teams/23907/pt_BR/)\n"
+"PO-Revision-Date: 2024-05-22 23:57+0000\n"
+"Last-Translator: Rodrigo Macedo <sottomaiormacedotec@users.noreply."
+"translation.odoo-community.org>\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"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
 
 #. module: purchase_open_qty
 #: model:ir.model.fields,field_description:purchase_open_qty.field_purchase_order__pending_qty_to_invoice
 #: model_terms:ir.ui.view,arch_db:purchase_open_qty.purchase_order_line_search
 #: model_terms:ir.ui.view,arch_db:purchase_open_qty.view_purchase_order_filter
 msgid "Pending Qty to Bill"
-msgstr ""
+msgstr "Quantidade pendente para cobrança"
 
 #. module: purchase_open_qty
 #: model:ir.model.fields,field_description:purchase_open_qty.field_purchase_order__pending_qty_to_receive
 #: model_terms:ir.ui.view,arch_db:purchase_open_qty.purchase_order_line_search
 #: model_terms:ir.ui.view,arch_db:purchase_open_qty.view_purchase_order_filter
 msgid "Pending Qty to Receive"
-msgstr ""
+msgstr "Quantidade pendente para receber"
 
 #. module: purchase_open_qty
 #: model:ir.model,name:purchase_open_qty.model_purchase_order
@@ -46,17 +48,17 @@ msgstr "Linha da Ordem de Compra"
 #. module: purchase_open_qty
 #: model:ir.model.fields,field_description:purchase_open_qty.field_purchase_order__qty_to_invoice
 msgid "Qty to Bill"
-msgstr ""
+msgstr "Quantidade para Cobrar"
 
 #. module: purchase_open_qty
 #: model:ir.model.fields,field_description:purchase_open_qty.field_purchase_order__qty_to_receive
 #: model:ir.model.fields,field_description:purchase_open_qty.field_purchase_order_line__qty_to_receive
 msgid "Qty to Receive"
-msgstr ""
+msgstr "Quantidade para receber"
 
 #. module: purchase_open_qty
 #. odoo-python
 #: code:addons/purchase_open_qty/models/purchase_order.py:0
 #, python-format
 msgid "Unsupported search operator"
-msgstr ""
+msgstr "Operador de pesquisa não compatível"
diff --git a/purchase_order_approved/i18n/pt_BR.po b/purchase_order_approved/i18n/pt_BR.po
index c1d1c7c9581..dffd8bf50dc 100644
--- a/purchase_order_approved/i18n/pt_BR.po
+++ b/purchase_order_approved/i18n/pt_BR.po
@@ -9,10 +9,11 @@ msgstr ""
 "Project-Id-Version: Odoo Server 9.0c\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-10 05:30+0000\n"
-"PO-Revision-Date: 2023-12-28 23:57+0000\n"
-"Last-Translator: Adriano Prado <adrianojprado@gmail.com>\n"
-"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/"
-"teams/23907/pt_BR/)\n"
+"PO-Revision-Date: 2024-05-21 01:00+0000\n"
+"Last-Translator: Rodrigo Macedo <sottomaiormacedotec@users.noreply."
+"translation.odoo-community.org>\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"
@@ -135,7 +136,7 @@ msgstr "Linhas Pedido"
 #. module: purchase_order_approved
 #: model:ir.model,name:purchase_order_approved.model_res_config_settings
 msgid "Procurement purchase grouping settings"
-msgstr ""
+msgstr "Configurações de agrupamento de compras de compras"
 
 #. module: purchase_order_approved
 #: model:ir.model,name:purchase_order_approved.model_purchase_order
diff --git a/purchase_order_downpayment/i18n/sv.po b/purchase_order_downpayment/i18n/sv.po
new file mode 100644
index 00000000000..e4928964d9d
--- /dev/null
+++ b/purchase_order_downpayment/i18n/sv.po
@@ -0,0 +1,165 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* purchase_order_downpayment
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: sv\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: purchase_order_downpayment
+#: model_terms:ir.ui.view,arch_db:purchase_order_downpayment.view_po_downpayment_wizard
+msgid ""
+"<span attrs=\"{'invisible': [('advance_payment_method', '!=', "
+"'percentage')]}\" class=\"oe_inline\">%</span>"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model_terms:ir.ui.view,arch_db:purchase_order_downpayment.view_po_downpayment_wizard
+msgid "Cancel"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model:ir.model.fields,field_description:purchase_order_downpayment.field_purchase_order_down_payment_wizard__advance_payment_method
+#: model_terms:ir.ui.view,arch_db:purchase_order_downpayment.purchase_order_form_inherit_downpayment
+msgid "Create Payment"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model_terms:ir.ui.view,arch_db:purchase_order_downpayment.view_po_downpayment_wizard
+msgid "Create and view payment"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model_terms:ir.ui.view,arch_db:purchase_order_downpayment.view_po_downpayment_wizard
+msgid "Create payment"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model:ir.model.fields,field_description:purchase_order_downpayment.field_purchase_order_down_payment_wizard__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model:ir.model.fields,field_description:purchase_order_downpayment.field_purchase_order_down_payment_wizard__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model:ir.model.fields,field_description:purchase_order_downpayment.field_purchase_order_down_payment_wizard__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model:ir.model.fields,field_description:purchase_order_downpayment.field_purchase_order_down_payment_wizard__amount
+msgid "Down Payment Amount"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model:ir.model.fields,field_description:purchase_order_downpayment.field_purchase_order_down_payment_wizard__fixed_amount
+msgid "Down Payment Amount (Fixed)"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model:ir.model.fields.selection,name:purchase_order_downpayment.selection__purchase_order_down_payment_wizard__advance_payment_method__fixed
+msgid "Down payment (fixed amount)"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model:ir.model.fields.selection,name:purchase_order_downpayment.selection__purchase_order_down_payment_wizard__advance_payment_method__percentage
+msgid "Down payment (percentage)"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model:ir.model.fields,field_description:purchase_order_downpayment.field_purchase_order_down_payment_wizard__id
+msgid "ID"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model:ir.model.fields,field_description:purchase_order_downpayment.field_purchase_order_down_payment_wizard____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model:ir.model.fields,field_description:purchase_order_downpayment.field_purchase_order_down_payment_wizard__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model:ir.model.fields,field_description:purchase_order_downpayment.field_purchase_order_down_payment_wizard__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model:ir.model.fields,field_description:purchase_order_downpayment.field_purchase_order_down_payment_wizard__order_id
+msgid "Order"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model:ir.actions.act_window,name:purchase_order_downpayment.action_view_po_downpayment_wizard
+#: model_terms:ir.ui.view,arch_db:purchase_order_downpayment.purchase_order_form_inherit_downpayment
+msgid "Payment"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model:ir.model.fields,field_description:purchase_order_downpayment.field_purchase_order__payment_count
+msgid "Payment Count"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model_terms:ir.ui.view,arch_db:purchase_order_downpayment.view_po_downpayment_wizard
+msgid ""
+"Payment will be created in draft so that you can review\n"
+"                    them before validation."
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model:ir.model,name:purchase_order_downpayment.model_account_payment
+msgid "Payments"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model:ir.model.fields,field_description:purchase_order_downpayment.field_account_payment__purchase_id
+msgid "Purchase"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model:ir.model,name:purchase_order_downpayment.model_purchase_order
+msgid "Purchase Order"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model:ir.model,name:purchase_order_downpayment.model_purchase_order_down_payment_wizard
+msgid "Purchase Order DownPayment Wizard"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model:ir.model.fields,field_description:purchase_order_downpayment.field_purchase_order__account_payment_ids
+msgid "Purchase Payment"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#: model:ir.model.fields.selection,name:purchase_order_downpayment.selection__purchase_order_down_payment_wizard__advance_payment_method__delivered
+msgid "Regular Payment"
+msgstr ""
+
+#. module: purchase_order_downpayment
+#. odoo-python
+#: code:addons/purchase_order_downpayment/wizard/purchase_order_downpayment_wizard.py:0
+#, python-format
+msgid "The value of the down payment amount must be positive."
+msgstr ""
+
+#. module: purchase_order_downpayment
+#. odoo-python
+#: code:addons/purchase_order_downpayment/wizard/purchase_order_downpayment_wizard.py:0
+#, python-format
+msgid "The value of the down payment percentage cannot be greater than 100%."
+msgstr ""
diff --git a/purchase_order_product_recommendation/i18n/sv.po b/purchase_order_product_recommendation/i18n/sv.po
new file mode 100644
index 00000000000..4d2810edb76
--- /dev/null
+++ b/purchase_order_product_recommendation/i18n/sv.po
@@ -0,0 +1,306 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* purchase_order_product_recommendation
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: sv\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: purchase_order_product_recommendation
+#: model_terms:ir.ui.view,arch_db:purchase_order_product_recommendation.purchase_order_recommendation_view_form
+msgid "Accept"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model_terms:ir.ui.view,arch_db:purchase_order_product_recommendation.purchase_order_recommendation_view_form
+msgid "Cancel"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,help:purchase_order_product_recommendation.field_purchase_order_recommendation__warehouse_ids
+msgid "Constrain search to an specific warehouse"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__create_uid
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__create_date
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__currency_id
+msgid "Currency"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__date_begin
+msgid "Date Begin"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__date_end
+msgid "Date End"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__display_name
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,help:purchase_order_product_recommendation.field_purchase_order_recommendation__product_category_ids
+msgid "Filter by product internal category"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,help:purchase_order_product_recommendation.field_purchase_order_recommendation__date_end
+msgid "Final date to compute recommendations."
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model_terms:ir.ui.view,arch_db:purchase_order_product_recommendation.purchase_order_recommendation_view_form
+msgid "Forecasted Qty"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__id
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__id
+msgid "ID"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,help:purchase_order_product_recommendation.field_purchase_order_recommendation__date_begin
+msgid "Initial date to compute recommendations."
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__is_modified
+msgid "Is Modified"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation____last_update
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__write_uid
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__write_date
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__line_amount
+msgid "Number of recommendations"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model_terms:ir.ui.view,arch_db:purchase_order_product_recommendation.purchase_order_recommendation_view_form
+msgid "Price"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__price_unit
+msgid "Price Unit"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__product_id
+msgid "Product"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__product_category_ids
+msgid "Product Categories"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__product_name
+msgid "Product Name"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__product_code
+msgid "Product reference"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__line_ids
+msgid "Products"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__purchase_line_id
+msgid "Purchase Line"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__order_id
+msgid "Purchase Order"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model_terms:ir.ui.view,arch_db:purchase_order_product_recommendation.purchase_order_recommendation_view_form
+msgid "Qty"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model_terms:ir.ui.view,arch_db:purchase_order_product_recommendation.purchase_order_recommendation_view_form
+msgid "Qty Dlvd./day"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model_terms:ir.ui.view,arch_db:purchase_order_product_recommendation.purchase_order_recommendation_view_form
+msgid "Qty On Hand"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model_terms:ir.ui.view,arch_db:purchase_order_product_recommendation.purchase_order_recommendation_view_form
+msgid "Qty Received"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model_terms:ir.ui.view,arch_db:purchase_order_product_recommendation.purchase_order_recommendation_view_form
+msgid "Qty delivered"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model_terms:ir.ui.view,arch_db:purchase_order_product_recommendation.purchase_order_form
+msgid "Recommended Products"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.actions.act_window,name:purchase_order_product_recommendation.purchase_order_recommendation_action
+msgid "Recommended Products for this Vendor"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model,name:purchase_order_product_recommendation.model_purchase_order_recommendation_line
+msgid "Recommended product for current purchase order"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model,name:purchase_order_product_recommendation.model_purchase_order_recommendation
+msgid "Recommended products for current purchase order"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,help:purchase_order_product_recommendation.field_purchase_order_recommendation__show_all_partner_products
+msgid "Show all products with supplier infos for this supplier"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__show_all_products
+msgid "Show all purchasable products"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__show_all_partner_products
+msgid "Show all supplier products"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,help:purchase_order_product_recommendation.field_purchase_order_recommendation__line_amount
+msgid ""
+"Stablish a limit on how many recommendations you want to get.Leave it as 0 "
+"to set no limit"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#. odoo-python
+#: code:addons/purchase_order_product_recommendation/wizards/purchase_order_recommendation.py:0
+#, python-format
+msgid "This wizard is only valid for purchases"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__times_delivered
+msgid "Times Delivered"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__times_received
+msgid "Times Received"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__units_available
+msgid "Units Available"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__units_avg_delivered
+msgid "Units Avg Delivered"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__units_delivered
+msgid "Units Delivered"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__units_included
+msgid "Units Included"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__units_received
+msgid "Units Received"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__units_virtual_available
+msgid "Units Virtual Available"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,help:purchase_order_product_recommendation.field_purchase_order_recommendation__show_all_products
+msgid "Useful if a product hasn't been selled by the partner yet"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__partner_id
+msgid "Vendor"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__warehouse_ids
+msgid "Warehouse"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__warehouse_count
+msgid "Warehouse Count"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__wizard_id
+msgid "Wizard"
+msgstr ""
+
+#. module: purchase_order_product_recommendation
+#: model:ir.model.fields,help:purchase_order_product_recommendation.field_purchase_order_recommendation_line__partner_id
+msgid "You can find a vendor by its Name, TIN, Email or Internal Reference."
+msgstr ""
diff --git a/purchase_order_supplier_return/i18n/it.po b/purchase_order_supplier_return/i18n/it.po
index 520bca8e850..563548d4434 100644
--- a/purchase_order_supplier_return/i18n/it.po
+++ b/purchase_order_supplier_return/i18n/it.po
@@ -6,15 +6,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Odoo Server 16.0\n"
 "Report-Msgid-Bugs-To: \n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2024-05-15 09:34+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 4.17\n"
 
 #. module: purchase_order_supplier_return
 #: model:ir.model,name:purchase_order_supplier_return.model_stock_move
 msgid "Stock Move"
-msgstr ""
+msgstr "Movimento di magazzino"
diff --git a/purchase_order_supplier_return/i18n/sv.po b/purchase_order_supplier_return/i18n/sv.po
new file mode 100644
index 00000000000..98c97854723
--- /dev/null
+++ b/purchase_order_supplier_return/i18n/sv.po
@@ -0,0 +1,20 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* purchase_order_supplier_return
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: sv\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: purchase_order_supplier_return
+#: model:ir.model,name:purchase_order_supplier_return.model_stock_move
+msgid "Stock Move"
+msgstr ""
diff --git a/purchase_order_type/i18n/pt_BR.po b/purchase_order_type/i18n/pt_BR.po
index 54dfc6379a6..3f7c62039ed 100644
--- a/purchase_order_type/i18n/pt_BR.po
+++ b/purchase_order_type/i18n/pt_BR.po
@@ -10,10 +10,11 @@ msgstr ""
 "Project-Id-Version: purchase-workflow (8.0)\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2016-11-16 12:06+0000\n"
-"PO-Revision-Date: 2023-06-12 17:09+0000\n"
-"Last-Translator: Adriano Prado <adrianojprado@gmail.com>\n"
-"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-"
-"purchase-workflow-8-0/language/pt_BR/)\n"
+"PO-Revision-Date: 2024-05-21 01:00+0000\n"
+"Last-Translator: Rodrigo Macedo <sottomaiormacedotec@users.noreply."
+"translation.odoo-community.org>\n"
+"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/"
+"OCA-purchase-workflow-8-0/language/pt_BR/)\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -72,7 +73,7 @@ msgstr "Mostrar Nome"
 #: code:addons/purchase_order_type/models/purchase_order.py:0
 #, python-format
 msgid "Document's company and type's company mismatch"
-msgstr "Incompatibilidade de empresa do documento e tipo de empresa."
+msgstr "Incompatibilidade de empresa do documento e tipo de empresa"
 
 #. module: purchase_order_type
 #: model:ir.model.fields,field_description:purchase_order_type.field_purchase_order_type__sequence_id
@@ -94,7 +95,7 @@ msgstr "Identificação"
 #: model:ir.model.fields,field_description:purchase_order_type.field_purchase_order_type__incoterm_id
 #: model_terms:ir.ui.view,arch_db:purchase_order_type.view_purchase_order_type_search
 msgid "Incoterm"
-msgstr ""
+msgstr "Incotérmino"
 
 #. module: purchase_order_type
 #: model:ir.model.fields,field_description:purchase_order_type.field_purchase_order_type____last_update
diff --git a/purchase_order_type/i18n/sv.po b/purchase_order_type/i18n/sv.po
index fe06bc8b1a6..7c7b08efad3 100644
--- a/purchase_order_type/i18n/sv.po
+++ b/purchase_order_type/i18n/sv.po
@@ -8,15 +8,16 @@ msgstr ""
 "Project-Id-Version: purchase-workflow (8.0)\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-08-19 07:43+0000\n"
-"PO-Revision-Date: 2016-03-08 10:17+0000\n"
-"Last-Translator: <>\n"
-"Language-Team: Swedish (http://www.transifex.com/oca/OCA-purchase-"
-"workflow-8-0/language/sv/)\n"
+"PO-Revision-Date: 2024-06-26 16:47+0000\n"
+"Last-Translator: jakobkrabbe <jakob@syscare.se>\n"
+"Language-Team: Swedish (http://www.transifex.com/oca/"
+"OCA-purchase-workflow-8-0/language/sv/)\n"
 "Language: sv\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"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.17\n"
 
 #. module: purchase_order_type
 #: model:ir.model.fields,field_description:purchase_order_type.field_purchase_order_type__active
@@ -26,23 +27,23 @@ msgstr "Aktiv"
 #. module: purchase_order_type
 #: model_terms:ir.ui.view,arch_db:purchase_order_type.view_purchase_order_type_form
 msgid "Archived"
-msgstr ""
+msgstr "Arkiverad"
 
 #. module: purchase_order_type
 #: model_terms:ir.actions.act_window,help:purchase_order_type.action_purchase_order_type_view
 msgid "Click to set a new type for purchase order."
-msgstr ""
+msgstr "Klicka här för att ange en ny typ av inköpsorder."
 
 #. module: purchase_order_type
 #: model:ir.model.fields,field_description:purchase_order_type.field_purchase_order_type__company_id
 #: model_terms:ir.ui.view,arch_db:purchase_order_type.view_purchase_order_type_search
 msgid "Company"
-msgstr ""
+msgstr "Företag"
 
 #. module: purchase_order_type
 #: model:ir.model,name:purchase_order_type.model_res_partner
 msgid "Contact"
-msgstr ""
+msgstr "Kontakt"
 
 #. module: purchase_order_type
 #: model:ir.model.fields,field_description:purchase_order_type.field_purchase_order_type__create_uid
@@ -57,30 +58,30 @@ msgstr "Skapad den"
 #. module: purchase_order_type
 #: model:ir.model.fields,field_description:purchase_order_type.field_purchase_order_type__description
 msgid "Description"
-msgstr ""
+msgstr "Beskrivning"
 
 #. module: purchase_order_type
 #: model:ir.model.fields,field_description:purchase_order_type.field_purchase_order_type__display_name
 msgid "Display Name"
-msgstr "Visa namn"
+msgstr "Visningsnamn"
 
 #. module: purchase_order_type
 #. odoo-python
 #: code:addons/purchase_order_type/models/purchase_order.py:0
 #, python-format
 msgid "Document's company and type's company mismatch"
-msgstr ""
+msgstr "Dokumentets företag och typens företag stämmer inte överens"
 
 #. module: purchase_order_type
 #: model:ir.model.fields,field_description:purchase_order_type.field_purchase_order_type__sequence_id
 #: model_terms:ir.ui.view,arch_db:purchase_order_type.view_purchase_order_type_search
 msgid "Entry Sequence"
-msgstr ""
+msgstr "Inmatningssekvens"
 
 #. module: purchase_order_type
 #: model_terms:ir.ui.view,arch_db:purchase_order_type.view_purchase_order_type_search
 msgid "Group By"
-msgstr ""
+msgstr "Grupp av"
 
 #. module: purchase_order_type
 #: model:ir.model.fields,field_description:purchase_order_type.field_purchase_order_type__id
@@ -91,7 +92,7 @@ msgstr "ID"
 #: model:ir.model.fields,field_description:purchase_order_type.field_purchase_order_type__incoterm_id
 #: model_terms:ir.ui.view,arch_db:purchase_order_type.view_purchase_order_type_search
 msgid "Incoterm"
-msgstr ""
+msgstr "Incoterm"
 
 #. module: purchase_order_type
 #: model:ir.model.fields,field_description:purchase_order_type.field_purchase_order_type____last_update
@@ -116,36 +117,36 @@ msgstr "Namn"
 #. module: purchase_order_type
 #: model_terms:ir.ui.view,arch_db:purchase_order_type.view_purchase_order_type_search
 msgid "Payment Term"
-msgstr ""
+msgstr "Betalningstid"
 
 #. module: purchase_order_type
 #: model:ir.model.fields,field_description:purchase_order_type.field_purchase_order_type__payment_term_id
 msgid "Payment Terms"
-msgstr ""
+msgstr "Betalningsvillkor"
 
 #. module: purchase_order_type
 #: model:ir.model,name:purchase_order_type.model_purchase_order
 msgid "Purchase Order"
-msgstr ""
+msgstr "Inköpsorder"
 
 #. module: purchase_order_type
 #: model:ir.model.fields,field_description:purchase_order_type.field_res_partner__purchase_type
 #: model:ir.model.fields,field_description:purchase_order_type.field_res_users__purchase_type
 #: model_terms:ir.ui.view,arch_db:purchase_order_type.res_partner_purchase_type_form_view
 msgid "Purchase Order Type"
-msgstr ""
+msgstr "Typ av inköpsorder"
 
 #. module: purchase_order_type
 #: model:ir.actions.act_window,name:purchase_order_type.action_purchase_order_type_view
 #: model:ir.ui.menu,name:purchase_order_type.menu_purchase_order_type
 #: model_terms:ir.ui.view,arch_db:purchase_order_type.view_purchase_order_type_search
 msgid "Purchase Order Types"
-msgstr ""
+msgstr "Typer av inköpsorder"
 
 #. module: purchase_order_type
 #: model:ir.model.fields,field_description:purchase_order_type.field_purchase_order_type__sequence
 msgid "Sequence"
-msgstr ""
+msgstr "Sekvens"
 
 #. module: purchase_order_type
 #: model:ir.model.fields,field_description:purchase_order_type.field_purchase_order__order_type
@@ -157,7 +158,7 @@ msgstr "Typ"
 #. module: purchase_order_type
 #: model:ir.model,name:purchase_order_type.model_purchase_order_type
 msgid "Type of purchase order"
-msgstr ""
+msgstr "Typ av inköpsorder"
 
 #~ msgid "Partner"
 #~ msgstr "Företag"
diff --git a/purchase_packaging_default/i18n/it.po b/purchase_packaging_default/i18n/it.po
index 0b73fb26b35..9a6433d3de2 100644
--- a/purchase_packaging_default/i18n/it.po
+++ b/purchase_packaging_default/i18n/it.po
@@ -6,24 +6,28 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Odoo Server 16.0\n"
 "Report-Msgid-Bugs-To: \n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2024-05-15 09:34+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 4.17\n"
 
 #. module: purchase_packaging_default
 #: model_terms:ir.ui.view,arch_db:purchase_packaging_default.res_config_settings_view_form_purchase
 msgid ""
 "Assign the first packaging found in product configuration to purchase order"
 msgstr ""
+"Assegna il primo imballo trovato nella configurazione prodotto all'ordine di "
+"acquisto"
 
 #. module: purchase_packaging_default
 #: model:ir.model,name:purchase_packaging_default.model_res_company
 msgid "Companies"
-msgstr ""
+msgstr "Aziende"
 
 #. module: purchase_packaging_default
 #: model:ir.model.fields,help:purchase_packaging_default.field_res_company__purchase_packaging_default_enabled
@@ -31,24 +35,26 @@ msgstr ""
 msgid ""
 "In purchase order line get 1st packaging found in product configuration"
 msgstr ""
+"Nella riga ordine di acquisto prendere il primo imballaggio trovato nella "
+"configurazione prodotto"
 
 #. module: purchase_packaging_default
 #: model:ir.model,name:purchase_packaging_default.model_res_config_settings
 msgid "Procurement purchase grouping settings"
-msgstr ""
+msgstr "Impostazioni raggruppamento approvvigionamento acquisti"
 
 #. module: purchase_packaging_default
 #: model:ir.model,name:purchase_packaging_default.model_product_packaging
 msgid "Product Packaging"
-msgstr ""
+msgstr "Imballaggio prodotto"
 
 #. module: purchase_packaging_default
 #: model:ir.model,name:purchase_packaging_default.model_purchase_order_line
 msgid "Purchase Order Line"
-msgstr ""
+msgstr "Riga ordine di acquisto"
 
 #. module: purchase_packaging_default
 #: model:ir.model.fields,field_description:purchase_packaging_default.field_res_company__purchase_packaging_default_enabled
 #: model:ir.model.fields,field_description:purchase_packaging_default.field_res_config_settings__purchase_packaging_default_enabled
 msgid "Purchase Packaging Default Enabled"
-msgstr ""
+msgstr "Imballaggio di acquisto predefinito abilitato"
diff --git a/purchase_request/README.rst b/purchase_request/README.rst
index c83d9a897e4..597d05042cd 100644
--- a/purchase_request/README.rst
+++ b/purchase_request/README.rst
@@ -7,7 +7,7 @@ Purchase Request
    !! This file is generated by oca-gen-addon-readme !!
    !! changes will be overwritten.                   !!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   !! source digest: sha256:e596dd6bddce0bc91338b6f26441b730a1ae7ec46451a9d7614fc43fc555b1e6
+   !! source digest: sha256:5c855e4e053d521656e7fb13a2534ed8d3bb93bf3c620e33dee2cddd489c978f
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
diff --git a/purchase_request/__manifest__.py b/purchase_request/__manifest__.py
index 0af0952321f..ebb02a47417 100644
--- a/purchase_request/__manifest__.py
+++ b/purchase_request/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Purchase Request",
     "author": "ForgeFlow, Odoo Community Association (OCA)",
-    "version": "16.0.1.2.0",
+    "version": "16.0.1.3.0",
     "summary": "Use this module to have notification of requirements of "
     "materials and/or external services and keep track of such "
     "requirements.",
diff --git a/purchase_request/i18n/pt_BR.po b/purchase_request/i18n/pt_BR.po
index 7152fddabee..d16a5374793 100644
--- a/purchase_request/i18n/pt_BR.po
+++ b/purchase_request/i18n/pt_BR.po
@@ -16,10 +16,11 @@ msgstr ""
 "Project-Id-Version: purchase-workflow (10.0)\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-11-24 07:53+0000\n"
-"PO-Revision-Date: 2023-06-11 04:10+0000\n"
-"Last-Translator: Adriano Prado <adrianojprado@gmail.com>\n"
-"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-"
-"purchase-workflow-10-0/language/pt_BR/)\n"
+"PO-Revision-Date: 2024-05-29 18:36+0000\n"
+"Last-Translator: Rodrigo Macedo <sottomaiormacedotec@users.noreply."
+"translation.odoo-community.org>\n"
+"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/"
+"OCA-purchase-workflow-10-0/language/pt_BR/)\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -1261,7 +1262,7 @@ msgstr ""
 #: model:ir.model,name:purchase_request.model_stock_move
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_allocation__stock_move_id
 msgid "Stock Move"
-msgstr ""
+msgstr "Movimentação de estoque"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__move_count
@@ -1276,7 +1277,7 @@ msgstr ""
 #. module: purchase_request
 #: model:ir.model,name:purchase_request.model_stock_rule
 msgid "Stock Rule"
-msgstr ""
+msgstr "Regra de Estoque"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line_make_purchase_order__supplier_id
diff --git a/purchase_request/i18n/sv.po b/purchase_request/i18n/sv.po
index 02307869fe3..a3d86c04cf4 100644
--- a/purchase_request/i18n/sv.po
+++ b/purchase_request/i18n/sv.po
@@ -9,15 +9,16 @@ msgstr ""
 "Project-Id-Version: purchase-workflow (10.0)\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2016-11-17 03:38+0000\n"
-"PO-Revision-Date: 2016-10-22 22:24+0000\n"
-"Last-Translator: OCA Transbot <transbot@odoo-community.org>\n"
-"Language-Team: Swedish (http://www.transifex.com/oca/OCA-purchase-"
-"workflow-10-0/language/sv/)\n"
+"PO-Revision-Date: 2024-06-27 09:35+0000\n"
+"Last-Translator: jakobkrabbe <jakob@syscare.se>\n"
+"Language-Team: Swedish (http://www.transifex.com/oca/"
+"OCA-purchase-workflow-10-0/language/sv/)\n"
 "Language: sv\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"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.17\n"
 
 #. module: purchase_request
 #. odoo-python
@@ -27,6 +28,8 @@ msgid ""
 "<li><b>%(prl_name)s</b>: Ordered quantity %(prl_qty)s %(prl_uom)s, Planned "
 "date %(prl_date_planned)s</li>"
 msgstr ""
+"<li><b>%(prl_name)s</b>: Beställd kvantitet %(prl_qty)s %(prl_uom)s, "
+"Planerat datum %(prl_date_planned)s</li>"
 
 #. module: purchase_request
 #. odoo-python
@@ -37,6 +40,8 @@ msgid ""
 "<li><b>%(product_name)s</b>: Received quantity %(product_qty)s "
 "%(product_uom)s</li>"
 msgstr ""
+"<li><b>%(product_name)s</b>: Mottagen kvantitet %(product_qty)s "
+"%(product_uom)s</li>"
 
 #. module: purchase_request
 #. odoo-python
@@ -46,11 +51,13 @@ msgid ""
 "<li><b>%(product_name)s</b>: Transferred quantity %(product_qty)s "
 "%(product_uom)s</li>"
 msgstr ""
+"<li><b>%(product_name)s</b>: Överförd mängd %(product_qty)s "
+"%(product_uom)s</li>"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.report_purchase_request
 msgid "<strong>Analytic Distribution</strong>"
-msgstr ""
+msgstr "<strong>Objekt distribution</strong>"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.report_purchase_request
@@ -58,6 +65,8 @@ msgid ""
 "<strong>Assigned to:</strong>\n"
 "                                <br/>"
 msgstr ""
+"<strong>Tilldelad till:</strong>\n"
+"                                <br/>"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.report_purchase_request
@@ -65,6 +74,8 @@ msgid ""
 "<strong>Creation Date:</strong>\n"
 "                                <br/>"
 msgstr ""
+"<strong>Tillverkningsdatum:</strong>\n"
+"                                <br/>"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.report_purchase_request
@@ -72,16 +83,18 @@ msgid ""
 "<strong>Description:</strong>\n"
 "                                <br/>"
 msgstr ""
+"<strong>Beskrivning:</strong>\n"
+"                                <br />"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.report_purchase_request
 msgid "<strong>Description</strong>"
-msgstr ""
+msgstr "<strong>Beskrivning</strong>"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.report_purchase_request
 msgid "<strong>Estimated Cost</strong>"
-msgstr ""
+msgstr "<strong> Uppskattad kostnad</strong>"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.report_purchase_request
@@ -89,16 +102,18 @@ msgid ""
 "<strong>Picking Type:</strong>\n"
 "                                <br/>"
 msgstr ""
+"<strong>Plockningstyp:</strong>\n"
+"                                <br/>"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.report_purchase_request
 msgid "<strong>Product UoM</strong>"
-msgstr ""
+msgstr "<strong>Produkt UoM</strong>"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.report_purchase_request
 msgid "<strong>Qty</strong>"
-msgstr ""
+msgstr "<strong>Antal</strong>"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.report_purchase_request
@@ -106,11 +121,13 @@ msgid ""
 "<strong>Request Reference:</strong>\n"
 "                                <br/>"
 msgstr ""
+"<strong>Förfrågans referens:</strong>\n"
+"                                <br/>"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.report_purchase_request
 msgid "<strong>Requested Date</strong>"
-msgstr ""
+msgstr "<strong>Förfrågat datum</strong>"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.report_purchase_request
@@ -118,6 +135,8 @@ msgid ""
 "<strong>Requested by:</strong>\n"
 "                                <br/>"
 msgstr ""
+"<strong>Begärd av:</strong>\n"
+"                                <br/>"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.report_purchase_request
@@ -125,11 +144,13 @@ msgid ""
 "<strong>Source:</strong>\n"
 "                                <br/>"
 msgstr ""
+"<strong>Källa:</strong>\n"
+"                                <br/>"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.report_purchase_request
 msgid "<strong>Specifications</strong>"
-msgstr ""
+msgstr "<strong>Specifikationer</strong>"
 
 #. module: purchase_request
 #: model_terms:ir.actions.act_window,help:purchase_request.purchase_request_form_action
@@ -138,6 +159,9 @@ msgid ""
 "            a certain quantity of materials services, so that they are\n"
 "            available at a certain point in time."
 msgstr ""
+"En inköpsbegäran är en instruktion till inköpsavdelningen om att anskaffa\n"
+"            en viss mängd material tjänster, så att de finns tillgängliga\n"
+"            vid en viss tidpunkt."
 
 #. module: purchase_request
 #. odoo-python
@@ -147,142 +171,144 @@ msgid ""
 "A sale/manufacturing order that generated this purchase request has been "
 "cancelled/deleted. Check if an action is needed."
 msgstr ""
+"En försäljnings-/tillverkningsorder som genererade denna inköpsbegäran har "
+"annullerats/raderats. Kontrollera om en åtgärd behövs."
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__message_needaction
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__message_needaction
 msgid "Action Needed"
-msgstr ""
+msgstr "Åtgärder krävs"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__activity_ids
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__activity_ids
 msgid "Activities"
-msgstr ""
+msgstr "Aktiviteter"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__activity_exception_decoration
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__activity_exception_decoration
 msgid "Activity Exception Decoration"
-msgstr ""
+msgstr "Aktivitet Undantag Dekoration"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__activity_state
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__activity_state
 msgid "Activity State"
-msgstr ""
+msgstr "Aktivitet Stat"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__activity_type_icon
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__activity_type_icon
 msgid "Activity Type Icon"
-msgstr ""
+msgstr "Aktivitetstyp Ikon"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 msgid "All Bought"
-msgstr ""
+msgstr "Alla köpta"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_allocation__allocated_product_qty
 msgid "Allocated Quantity"
-msgstr ""
+msgstr "Tilldelad kvantitet"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_form
 msgid "Allocations"
-msgstr ""
+msgstr "Tilldelningar"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__analytic_distribution
 msgid "Analytic"
-msgstr ""
+msgstr "Objekt"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 msgid "Analytic Distribution"
-msgstr ""
+msgstr "Objekt distribution"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__analytic_distribution_search
 msgid "Analytic Distribution Search"
-msgstr ""
+msgstr "Objekt distributionssökning"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__analytic_precision
 msgid "Analytic Precision"
-msgstr ""
+msgstr "Objekt precision"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_form
 msgid "Approve"
-msgstr ""
+msgstr "Godkänna"
 
 #. module: purchase_request
 #: model:ir.model.fields.selection,name:purchase_request.selection__purchase_request__state__approved
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_search
 msgid "Approved"
-msgstr ""
+msgstr "Godkänd"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__assigned_to
 msgid "Approver"
-msgstr ""
+msgstr "Godkännande"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__assigned_to
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_search
 msgid "Assigned to"
-msgstr ""
+msgstr "Tilldelad till"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_search
 msgid "Assigned to me"
-msgstr ""
+msgstr "Tilldelad till mig"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 msgid "At least a Draft PO has been created"
-msgstr ""
+msgstr "Åtminstone ett utkast till PO har skapats"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 msgid "At least a PO has been completed"
-msgstr ""
+msgstr "Minst ett PO har genomförts"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 msgid "At least a PO has been confirmed"
-msgstr ""
+msgstr "Åtminstone en PO har bekräftats"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__message_attachment_count
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__message_attachment_count
 msgid "Attachment Count"
-msgstr ""
+msgstr "Antal bifogade filer"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_line_make_purchase_order
 msgid "Cancel"
-msgstr ""
+msgstr "Avbryt"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__cancelled
 msgid "Cancelled"
-msgstr ""
+msgstr "Avbruten"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 msgid "Cancelled Quantity"
-msgstr ""
+msgstr "Annullerad kvantitet"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__product_uom_category_id
 msgid "Category"
-msgstr ""
+msgstr "Kategori"
 
 #. module: purchase_request
 #: model:ir.model.fields,help:purchase_request.field_product_product__purchase_request
@@ -291,11 +317,13 @@ msgid ""
 "Check this box to generate Purchase Request instead of generating Requests "
 "For Quotation from procurement."
 msgstr ""
+"Markera den här rutan om du vill skapa en inköpsförfrågan istället för att "
+"skapa offertförfrågningar från inköpsavdelningen."
 
 #. module: purchase_request
 #: model_terms:ir.actions.act_window,help:purchase_request.purchase_request_form_action
 msgid "Click to start a new purchase request process."
-msgstr ""
+msgstr "Klicka för att starta en ny process för inköpsbegäran."
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__company_id
@@ -310,24 +338,25 @@ msgid ""
 "Conversion between Units of Measure can only occur if they belong to the "
 "same category. The conversion will be made based on the ratios."
 msgstr ""
+"Omvandling mellan måttenheter kan endast ske om de tillhör samma kategori. "
+"Omvandlingen görs baserat på förhållandena."
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line_make_purchase_order_item__keep_description
 msgid "Copy descriptions to new PO"
-msgstr ""
+msgstr "Kopiera beskrivningar till nytt PO"
 
 #. module: purchase_request
 #: model:ir.actions.act_window,name:purchase_request.action_purchase_request_line_make_purchase_order
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_form
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_line_make_purchase_order
-#, fuzzy
 msgid "Create RFQ"
-msgstr "Skapad av"
+msgstr "Skapa offertförfrågan"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_stock_move__created_purchase_request_line_id
 msgid "Created Purchase Request Line"
-msgstr ""
+msgstr "Skapad inköpsorderrad"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__create_uid
@@ -351,19 +380,19 @@ msgstr "Skapad den"
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__date_start
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__date_start
 msgid "Creation date"
-msgstr ""
+msgstr "Datum för skapande"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__currency_id
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__currency_id
 msgid "Currency"
-msgstr ""
+msgstr "Valuta"
 
 #. module: purchase_request
 #: model:ir.model.fields,help:purchase_request.field_purchase_request__date_start
 #: model:ir.model.fields,help:purchase_request.field_purchase_request_line__date_start
 msgid "Date when the user initiated the request."
-msgstr ""
+msgstr "Datum då användaren initierade begäran."
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__description
@@ -377,7 +406,7 @@ msgstr "Beskrivnig"
 #: code:addons/purchase_request/models/purchase_request_line.py:0
 #, python-format
 msgid "Detailed Line"
-msgstr ""
+msgstr "Detaljerad rad"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__display_name
@@ -386,19 +415,19 @@ msgstr ""
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line_make_purchase_order__display_name
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line_make_purchase_order_item__display_name
 msgid "Display Name"
-msgstr ""
+msgstr "Visa namn"
 
 #. module: purchase_request
 #: model:ir.model.fields.selection,name:purchase_request.selection__purchase_request__state__done
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_form
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_search
 msgid "Done"
-msgstr ""
+msgstr "Klar"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__move_dest_ids
 msgid "Downstream Moves"
-msgstr ""
+msgstr "Rörelser nedströms"
 
 #. module: purchase_request
 #: model:ir.model.fields.selection,name:purchase_request.selection__purchase_request__state__draft
@@ -412,47 +441,47 @@ msgstr "Preliminär"
 #: code:addons/purchase_request/wizard/purchase_request_line_make_purchase_order.py:0
 #, python-format
 msgid "Enter a positive quantity."
-msgstr ""
+msgstr "Ange en positiv kvantitet."
 
 #. module: purchase_request
 #. odoo-python
 #: code:addons/purchase_request/wizard/purchase_request_line_make_purchase_order.py:0
 #, python-format
 msgid "Enter a supplier."
-msgstr ""
+msgstr "Ange en leverantör."
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__estimated_cost
 msgid "Estimated Cost"
-msgstr ""
+msgstr "Beräknad kostnad"
 
 #. module: purchase_request
 #: model:ir.model.fields,help:purchase_request.field_purchase_request_line__estimated_cost
 msgid "Estimated cost of Purchase Request Line, not propagated to PO."
-msgstr ""
+msgstr "Uppskattad kostnad för inköpsorderrad, ej överförd till PO."
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_line_make_purchase_order
 msgid "Existing RFQ to update:"
-msgstr ""
+msgstr "Befintlig RFQ att uppdatera:"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__message_follower_ids
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__message_follower_ids
 msgid "Followers"
-msgstr ""
+msgstr "Följare"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__message_partner_ids
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__message_partner_ids
 msgid "Followers (Partners)"
-msgstr ""
+msgstr "Följare (Partners)"
 
 #. module: purchase_request
 #: model:ir.model.fields,help:purchase_request.field_purchase_request__activity_type_icon
 #: model:ir.model.fields,help:purchase_request.field_purchase_request_line__activity_type_icon
 msgid "Font awesome icon e.g. fa-tasks"
-msgstr ""
+msgstr "Font awesome-ikon, t.ex. fa-tasks"
 
 #. module: purchase_request
 #. odoo-python
@@ -461,12 +490,12 @@ msgstr ""
 msgid ""
 "From last reception this quantity has been allocated to this purchase request"
 msgstr ""
+"Från förra mottagningen har denna kvantitet tilldelats denna inköpsbegäran"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_order_line_search_sub
-#, fuzzy
 msgid "Group By"
-msgstr "Gruppera efter..."
+msgstr "Gruppera efter"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
@@ -478,12 +507,12 @@ msgstr "Gruppera efter..."
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__has_message
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__has_message
 msgid "Has Message"
-msgstr ""
+msgstr "Har meddelande"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_order_line_search_sub
 msgid "Hide cancelled lines"
-msgstr ""
+msgstr "Dölj avbrutna rader"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__id
@@ -498,47 +527,47 @@ msgstr "ID"
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__activity_exception_icon
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__activity_exception_icon
 msgid "Icon"
-msgstr ""
+msgstr "Ikon"
 
 #. module: purchase_request
 #: model:ir.model.fields,help:purchase_request.field_purchase_request__activity_exception_icon
 #: model:ir.model.fields,help:purchase_request.field_purchase_request_line__activity_exception_icon
 msgid "Icon to indicate an exception activity."
-msgstr ""
+msgstr "Ikon för att indikera en undantagsaktivitet."
 
 #. module: purchase_request
 #: model:ir.model.fields,help:purchase_request.field_purchase_request__message_needaction
 #: model:ir.model.fields,help:purchase_request.field_purchase_request_line__message_needaction
 msgid "If checked, new messages require your attention."
-msgstr ""
+msgstr "Om den är markerad kräver nya meddelanden din uppmärksamhet."
 
 #. module: purchase_request
 #: model:ir.model.fields,help:purchase_request.field_purchase_request__message_has_error
 #: model:ir.model.fields,help:purchase_request.field_purchase_request_line__message_has_error
 msgid "If checked, some messages have a delivery error."
-msgstr ""
+msgstr "Om kryssrutan är markerad får vissa meddelanden ett leveransfel."
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__is_editable
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__is_editable
 msgid "Is Editable"
-msgstr ""
+msgstr "Är redigerbar"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__message_is_follower
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__message_is_follower
 msgid "Is Follower"
-msgstr ""
+msgstr "Är följare"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__is_name_editable
 msgid "Is Name Editable"
-msgstr ""
+msgstr "Är namnet redigerbart"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line_make_purchase_order__item_ids
 msgid "Items"
-msgstr ""
+msgstr "Föremål"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request____last_update
@@ -547,7 +576,7 @@ msgstr ""
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line_make_purchase_order____last_update
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line_make_purchase_order_item____last_update
 msgid "Last Modified on"
-msgstr ""
+msgstr "Senast ändrad den"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__write_uid
@@ -570,178 +599,177 @@ msgstr "Senast uppdaterad"
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_form
 msgid "Lines"
-msgstr ""
+msgstr "Rader"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__message_main_attachment_id
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__message_main_attachment_id
 msgid "Main Attachment"
-msgstr ""
+msgstr "Huvudfäste"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_order_line_form2_sub
 msgid "Manual Invoices"
-msgstr ""
+msgstr "Manuella fakturor"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line_make_purchase_order__sync_data_planned
 msgid "Match existing PO lines by Scheduled Date"
-msgstr ""
+msgstr "Matcha befintliga inköpsorderrader efter planerat datum"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__message_has_error
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__message_has_error
 msgid "Message Delivery error"
-msgstr ""
+msgstr "Fel vid leverans av meddelande"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__message_ids
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__message_ids
 msgid "Messages"
-msgstr ""
+msgstr "Meddelanden"
 
 #. module: purchase_request
 #: model:ir.model,name:purchase_request.model_stock_warehouse_orderpoint
 msgid "Minimum Inventory Rule"
-msgstr ""
+msgstr "Regel för minimilager"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__my_activity_date_deadline
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__my_activity_date_deadline
 msgid "My Activity Deadline"
-msgstr ""
+msgstr "Min aktivitet Deadline"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_search
 msgid "My requests"
-msgstr ""
+msgstr "Mina önskemål"
 
 #. module: purchase_request
 #. odoo-python
 #: code:addons/purchase_request/models/purchase_request.py:0
 #, python-format
 msgid "New"
-msgstr ""
+msgstr "Nya"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_line_make_purchase_order
 msgid "New PO details:"
-msgstr ""
+msgstr "Nya PO-uppgifter:"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__activity_date_deadline
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__activity_date_deadline
 msgid "Next Activity Deadline"
-msgstr ""
+msgstr "Deadline för nästa aktivitet"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__activity_summary
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__activity_summary
 msgid "Next Activity Summary"
-msgstr ""
+msgstr "Nästa Aktivitet Sammanfattning"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__activity_type_id
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__activity_type_id
 msgid "Next Activity Type"
-msgstr ""
+msgstr "Nästa aktivitetstyp"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 msgid "No RFQ or Purchase has been created"
-msgstr ""
+msgstr "Ingen offertförfrågan eller något inköp har skapats"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__message_needaction_counter
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__message_needaction_counter
 msgid "Number of Actions"
-msgstr ""
+msgstr "Antal åtgärder"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__message_has_error_counter
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__message_has_error_counter
 msgid "Number of errors"
-msgstr ""
+msgstr "Antal fel"
 
 #. module: purchase_request
 #: model:ir.model.fields,help:purchase_request.field_purchase_request__message_needaction_counter
 #: model:ir.model.fields,help:purchase_request.field_purchase_request_line__message_needaction_counter
 msgid "Number of messages requiring action"
-msgstr ""
+msgstr "Antal meddelanden som kräver åtgärder"
 
 #. module: purchase_request
 #: model:ir.model.fields,help:purchase_request.field_purchase_request__message_has_error_counter
 #: model:ir.model.fields,help:purchase_request.field_purchase_request_line__message_has_error_counter
 msgid "Number of messages with delivery error"
-msgstr ""
+msgstr "Antal meddelanden med leveransfel"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_allocation__open_product_qty
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 msgid "Open Quantity"
-msgstr ""
+msgstr "Öppen kvantitet"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_order_line_search_sub
 msgid "Order Reference"
-msgstr ""
+msgstr "Beställningsreferens"
 
 #. module: purchase_request
 #. odoo-python
 #: code:addons/purchase_request/models/purchase_order.py:0
 #, python-format
 msgid "Order confirmation %(po_name)s for your Request %(pr_name)s"
-msgstr ""
+msgstr "Orderbekräftelse %(po_name)s för din förfrågan %(pr_name)s"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__orderpoint_id
 msgid "Orderpoint"
-msgstr ""
+msgstr "Orderpunkt"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__description
-#, fuzzy
 msgid "PR Description"
-msgstr "Beskrivnig"
+msgstr "PR Beskrivnig"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__pending_qty_to_receive
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 msgid "Pending Qty to Receive"
-msgstr ""
+msgstr "Avvaktande offertförfrågan att ta emot"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_form
 msgid "Picking"
-msgstr ""
+msgstr "Plockning"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__picking_type_id
 msgid "Picking Type"
-msgstr ""
+msgstr "Typ av plockning"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_form
 msgid "Pickings"
-msgstr ""
+msgstr "Plockning"
 
 #. module: purchase_request
 #. odoo-python
 #: code:addons/purchase_request/wizard/purchase_request_line_make_purchase_order.py:0
 #, python-format
 msgid "Please select a product for all lines"
-msgstr ""
+msgstr "Vänligen välj en produkt för alla rader"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__supplier_id
 msgid "Preferred supplier"
-msgstr ""
+msgstr "Rekommenderad leverantör"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__group_id
 msgid "Procurement Group"
-msgstr ""
+msgstr "Upphandlingsgruppen"
 
 #. module: purchase_request
 #: model:ir.model,name:purchase_request.model_product_template
@@ -751,50 +779,50 @@ msgstr ""
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line_make_purchase_order_item__product_id
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 msgid "Product"
-msgstr ""
+msgstr "Produkt"
 
 #. module: purchase_request
 #: model:ir.model,name:purchase_request.model_stock_move_line
 msgid "Product Moves (Stock Move Line)"
-msgstr ""
+msgstr "Produktflyttar (Transaktioner)"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.report_purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_form
 msgid "Products"
-msgstr ""
+msgstr "Produkter"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__line_ids
 msgid "Products to Purchase"
-msgstr ""
+msgstr "Produkter att köpa"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 msgid "Purchase Confirmed"
-msgstr ""
+msgstr "Köpet bekräftat"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 msgid "Purchase Done"
-msgstr ""
+msgstr "Inköp utfört"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_allocation__purchase_line_id
 msgid "Purchase Line"
-msgstr ""
+msgstr "Inköpsrad"
 
 #. module: purchase_request
 #: model:ir.model,name:purchase_request.model_purchase_order
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line_make_purchase_order__purchase_order_id
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_form
 msgid "Purchase Order"
-msgstr ""
+msgstr "Inköpsorder"
 
 #. module: purchase_request
 #: model:ir.model,name:purchase_request.model_purchase_order_line
 msgid "Purchase Order Line"
-msgstr ""
+msgstr "Inköpsorderrad"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__purchase_lines
@@ -802,12 +830,12 @@ msgstr ""
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_form
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_line_details
 msgid "Purchase Order Lines"
-msgstr ""
+msgstr "Inköpsorderrader"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_form
 msgid "Purchase Orders"
-msgstr ""
+msgstr "Inköpsorder"
 
 #. module: purchase_request
 #: model:ir.actions.report,name:purchase_request.action_report_purchase_requests
@@ -821,21 +849,21 @@ msgstr ""
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_form
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_search
 msgid "Purchase Request"
-msgstr ""
+msgstr "Begäran om köp"
 
 #. module: purchase_request
 #. odoo-python
 #: code:addons/purchase_request/models/purchase_order.py:0
 #, python-format
 msgid "Purchase Request %s has already been completed"
-msgstr ""
+msgstr "Inköpsbegäran %s har redan slutförts"
 
 #. module: purchase_request
 #. odoo-python
 #: code:addons/purchase_request/wizard/purchase_request_line_make_purchase_order.py:0
 #, python-format
 msgid "Purchase Request %s is not approved"
-msgstr ""
+msgstr "Inköpsbegäran %s är inte godkänd"
 
 #. module: purchase_request
 #: model:ir.model,name:purchase_request.model_purchase_request_allocation
@@ -843,13 +871,13 @@ msgstr ""
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__purchase_request_allocation_ids
 #: model:ir.model.fields,field_description:purchase_request.field_stock_move__purchase_request_allocation_ids
 msgid "Purchase Request Allocation"
-msgstr ""
+msgstr "Tilldelning av inköpsbegäran"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_move_form
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_picking_form
 msgid "Purchase Request Allocations"
-msgstr ""
+msgstr "Tilldelningar för inköpsbegäran"
 
 #. module: purchase_request
 #: model:ir.model,name:purchase_request.model_purchase_request_line
@@ -857,22 +885,22 @@ msgstr ""
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line_make_purchase_order_item__line_id
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_form
 msgid "Purchase Request Line"
-msgstr ""
+msgstr "Inköpsförfrågningsrad"
 
 #. module: purchase_request
 #: model:ir.model,name:purchase_request.model_purchase_request_line_make_purchase_order
 msgid "Purchase Request Line Make Purchase Order"
-msgstr ""
+msgstr "Inköpsförfrågningsrad gör inköpsorder"
 
 #. module: purchase_request
 #: model:ir.model,name:purchase_request.model_purchase_request_line_make_purchase_order_item
 msgid "Purchase Request Line Make Purchase Order Item"
-msgstr ""
+msgstr "Inköpsförfrågningsrad gör inköpsorder Artikel"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__line_count
 msgid "Purchase Request Line count"
-msgstr ""
+msgstr "Antal inköpsorderrader"
 
 #. module: purchase_request
 #. odoo-python
@@ -885,45 +913,45 @@ msgstr ""
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_order_line_form2_sub
 #, python-format
 msgid "Purchase Request Lines"
-msgstr ""
+msgstr "Rader för inköpsbegäran"
 
 #. module: purchase_request
 #: model:res.groups,name:purchase_request.group_purchase_request_manager
 msgid "Purchase Request Manager"
-msgstr ""
+msgstr "Manager för inköpsförfrågningar"
 
 #. module: purchase_request
 #: model:res.groups,name:purchase_request.group_purchase_request_user
 msgid "Purchase Request User"
-msgstr ""
+msgstr "Användare för inköpsbegäran"
 
 #. module: purchase_request
 #: model:mail.message.subtype,description:purchase_request.mt_request_approved
 #: model:mail.message.subtype,name:purchase_request.mt_request_approved
 msgid "Purchase Request approved"
-msgstr ""
+msgstr "Inköpsbegäran godkänd"
 
 #. module: purchase_request
 #: model:mail.message.subtype,name:purchase_request.mt_request_done
 msgid "Purchase Request done"
-msgstr ""
+msgstr "Inköpsbegäran gjord"
 
 #. module: purchase_request
 #: model:mail.message.subtype,description:purchase_request.mt_request_done
 msgid "Purchase Request is done"
-msgstr ""
+msgstr "Inköpsbegäran är gjord"
 
 #. module: purchase_request
 #: model:mail.message.subtype,description:purchase_request.mt_request_rejected
 #: model:mail.message.subtype,name:purchase_request.mt_request_rejected
 msgid "Purchase Request rejected"
-msgstr ""
+msgstr "Inköpsbegäran avvisad"
 
 #. module: purchase_request
 #: model:mail.message.subtype,description:purchase_request.mt_request_to_approve
 #: model:mail.message.subtype,name:purchase_request.mt_request_to_approve
 msgid "Purchase Request to be approved"
-msgstr ""
+msgstr "Inköpsbegäran ska godkännas"
 
 #. module: purchase_request
 #: model:ir.actions.act_window,name:purchase_request.action_purchase_request_line_product_tree
@@ -934,58 +962,58 @@ msgstr ""
 #: model:ir.ui.menu,name:purchase_request.menu_purchase_request_pro_mgt
 #: model:ir.ui.menu,name:purchase_request.parent_menu_purchase_request
 msgid "Purchase Requests"
-msgstr ""
+msgstr "Förfrågningar om inköp"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__purchase_state
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 msgid "Purchase Status"
-msgstr ""
+msgstr "Status för köp"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__purchase_count
 msgid "Purchases count"
-msgstr ""
+msgstr "Antal inköp"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 msgid "Purchasing not started"
-msgstr ""
+msgstr "Inköp ej påbörjat"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__qty_cancelled
 msgid "Qty Cancelled"
-msgstr ""
+msgstr "Antal avbokat"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__qty_done
 msgid "Qty Done"
-msgstr ""
+msgstr "Antal Klar"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__qty_in_progress
 msgid "Qty In Progress"
-msgstr ""
+msgstr "Antal pågående"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__product_qty
 msgid "Quantity"
-msgstr ""
+msgstr "Kvantitet"
 
 #. module: purchase_request
 #: model:ir.model.fields,help:purchase_request.field_purchase_request_line__qty_cancelled
 msgid "Quantity cancelled"
-msgstr ""
+msgstr "Kvantitet annullerad"
 
 #. module: purchase_request
 #: model:ir.model.fields,help:purchase_request.field_purchase_request_line__qty_done
 msgid "Quantity completed"
-msgstr ""
+msgstr "Genomförd kvantitet"
 
 #. module: purchase_request
 #: model:ir.model.fields,help:purchase_request.field_purchase_request_line__qty_in_progress
 msgid "Quantity in progress."
-msgstr ""
+msgstr "Pågående kvantitet."
 
 #. module: purchase_request
 #: model:ir.model.fields,help:purchase_request.field_purchase_request_allocation__allocated_product_qty
@@ -993,6 +1021,8 @@ msgid ""
 "Quantity of the purchase request line allocated to the stockmove, in the "
 "default UoM of the product"
 msgstr ""
+"Kvantitet av raden för inköpsbegäran som allokerats till lagerflytten, i "
+"produktens standard-UoM"
 
 #. module: purchase_request
 #: model:ir.model.fields,help:purchase_request.field_purchase_request_allocation__requested_product_uom_qty
@@ -1000,23 +1030,25 @@ msgid ""
 "Quantity of the purchase request line allocated to thestock move, in the UoM "
 "of the Purchase Request Line"
 msgstr ""
+"Kvantitet av inköpsorderraden som tilldelats lagerflytten, i måttenheten av "
+"inköpsorderraden"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line_make_purchase_order_item__product_qty
 msgid "Quantity to purchase"
-msgstr ""
+msgstr "Antal att köpa"
 
 #. module: purchase_request
 #. odoo-python
 #: code:addons/purchase_request/wizard/purchase_request_line_make_purchase_order.py:0
 #, python-format
 msgid "RFQ"
-msgstr ""
+msgstr "Offertförfrågan"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__purchased_qty
 msgid "RFQ/PO Qty"
-msgstr ""
+msgstr "Offertförfrågan/antal inköpsorder"
 
 #. module: purchase_request
 #. odoo-python
@@ -1024,140 +1056,141 @@ msgstr ""
 #, python-format
 msgid "Receipt confirmation %(picking_name)s for your Request %(request_name)s"
 msgstr ""
+"Mottagningsbekräftelse %(picking_name)s för din förfrågan %(request_name)s"
 
 #. module: purchase_request
 #. odoo-python
 #: code:addons/purchase_request/models/stock_move_line.py:0
 #, python-format
 msgid "Receipt confirmation for Request %s"
-msgstr ""
+msgstr "Kvittobekräftelse för begäran %s"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_form
 msgid "Reject"
-msgstr ""
+msgstr "Avvisa"
 
 #. module: purchase_request
 #: model:ir.model.fields.selection,name:purchase_request.selection__purchase_request__state__rejected
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_search
 msgid "Rejected"
-msgstr ""
+msgstr "Avvisad"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 msgid "Request"
-msgstr ""
+msgstr "Begäran"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__date_required
 msgid "Request Date"
-msgstr ""
+msgstr "Datum för begäran"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_order_form
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_order_line_tree
 msgid "Request Lines"
-msgstr ""
+msgstr "Begär rader"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__name
 msgid "Request Reference"
-msgstr ""
+msgstr "Begär referens"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_form
 msgid "Request approval"
-msgstr ""
+msgstr "Begär godkännande"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_search
 msgid "Request is approved"
-msgstr ""
+msgstr "Begäran godkänns"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_search
 msgid "Request is done"
-msgstr ""
+msgstr "Begäran är gjord"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_search
 msgid "Request is rejected"
-msgstr ""
+msgstr "Begäran avvisas"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_search
 msgid "Request is to be approved"
-msgstr ""
+msgstr "Begäran ska godkännas"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__request_state
 msgid "Request state"
-msgstr ""
+msgstr "Begär tillstånd"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 msgid "Request status"
-msgstr ""
+msgstr "Status för begäran"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__requested_by
 msgid "Requested By"
-msgstr ""
+msgstr "Begärt av"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_allocation__requested_product_uom_qty
 msgid "Requested Quantity"
-msgstr ""
+msgstr "Begärd kvantitet"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__requested_by
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_search
 msgid "Requested by"
-msgstr ""
+msgstr "Begärd av"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 msgid "Requested for Quotation"
-msgstr ""
+msgstr "Offertförfrågan"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_form
 msgid "Reset"
-msgstr ""
+msgstr "Återställning"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__activity_user_id
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__activity_user_id
 msgid "Responsible User"
-msgstr ""
+msgstr "Ansvarig användare"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_order_line_search_sub
 msgid "Search Purchase Order Line"
-msgstr ""
+msgstr "Sök inköpsorderrad"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_search
 msgid "Search Purchase Request"
-msgstr ""
+msgstr "Sök inköpsförfrågan"
 
 #. module: purchase_request
 #: model:ir.model.fields,help:purchase_request.field_purchase_request_allocation__purchase_line_id
 msgid "Service Purchase Order Line"
-msgstr ""
+msgstr "Inköpsorderrad service"
 
 #. module: purchase_request
 #. odoo-python
 #: code:addons/purchase_request/models/purchase_order.py:0
 #, python-format
 msgid "Service confirmation for Request %s"
-msgstr ""
+msgstr "Servicebekräftelse för begäran %s"
 
 #. module: purchase_request
 #: model:ir.model.fields,help:purchase_request.field_purchase_request_line_make_purchase_order_item__keep_description
@@ -1165,40 +1198,42 @@ msgid ""
 "Set true if you want to keep the descriptions provided in the wizard in the "
 "new PO."
 msgstr ""
+"Ange Sant om du vill behålla de beskrivningar som anges i guiden i den nya "
+"beställningen."
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_form
 msgid "Show Details"
-msgstr ""
+msgstr "Visa detaljer"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_search
 msgid "Source"
-msgstr ""
+msgstr "Källa"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__origin
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__origin
 msgid "Source Document"
-msgstr ""
+msgstr "Källdokument"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__specifications
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_form
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_line_details
 msgid "Specifications"
-msgstr ""
+msgstr "Specifikationer"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_search
 msgid "Start Date"
-msgstr ""
+msgstr "Startdatum"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__state
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_allocation__purchase_state
 msgid "Status"
-msgstr ""
+msgstr "Status"
 
 #. module: purchase_request
 #: model:ir.model.fields,help:purchase_request.field_purchase_request__activity_state
@@ -1209,32 +1244,36 @@ msgid ""
 "Today: Activity date is today\n"
 "Planned: Future activities."
 msgstr ""
+"Status baserad på aktiviteter\n"
+"Försenad: Förfallodatumet har redan passerats\n"
+"Idag: Aktivitetsdatumet är idag\n"
+"Planerad: Framtida aktiviteter."
 
 #. module: purchase_request
 #: model:ir.model,name:purchase_request.model_stock_move
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_allocation__stock_move_id
 msgid "Stock Move"
-msgstr ""
+msgstr "Lagerflytt"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__move_count
 msgid "Stock Move count"
-msgstr ""
+msgstr "Antal lagerflyttar"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_order_line_form2_sub
 msgid "Stock Moves"
-msgstr ""
+msgstr "Lagerflyttar"
 
 #. module: purchase_request
 #: model:ir.model,name:purchase_request.model_stock_rule
 msgid "Stock Rule"
-msgstr ""
+msgstr "Lagerhantering"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line_make_purchase_order__supplier_id
 msgid "Supplier"
-msgstr ""
+msgstr "Leverantör"
 
 #. module: purchase_request
 #. odoo-python
@@ -1242,7 +1281,7 @@ msgstr ""
 #, python-format
 msgid ""
 "The company of the purchase request must match with that of the location."
-msgstr ""
+msgstr "Företaget i inköpsbegäran måste överensstämma med företaget på platsen."
 
 #. module: purchase_request
 #. odoo-python
@@ -1252,6 +1291,8 @@ msgid ""
 "The following requested items from Purchase Request %(pr_name)s have now "
 "been confirmed in Purchase Order %(po_name)s:"
 msgstr ""
+"Följande begärda artiklar från inköpsförfrågan %(pr_name)s har nu bekräftats "
+"i inköpsorder %(po_name)s:"
 
 #. module: purchase_request
 #. odoo-python
@@ -1261,6 +1302,8 @@ msgid ""
 "The following requested items from Purchase Request %(request_name)s have "
 "now been received in %(location_name)s using Picking %(picking_name)s:"
 msgstr ""
+"Följande begärda artiklar från inköpsbegäran %(request_name)s har nu "
+"mottagits i %(location_name)s med hjälp av plockning %(picking_name)s:"
 
 #. module: purchase_request
 #. odoo-python
@@ -1270,6 +1313,8 @@ msgid ""
 "The following requested items from Purchase Request %(request_name)s "
 "requested by %(requestor)s have now been received in %(location_name)s:"
 msgstr ""
+"Följande begärda artiklar från inköpsbegäran %(request_name)s begärd av "
+"%(requestor)s har nu mottagits i %(location_name)s:"
 
 #. module: purchase_request
 #. odoo-python
@@ -1279,96 +1324,98 @@ msgid ""
 "The following requested services from Purchase Request %(request_name)s "
 "requested by %(requestor)s have now been received:"
 msgstr ""
+"Följande begärda tjänster från inköpsorder %(request_name)s begärd av "
+"%(requestor)s har nu mottagits:"
 
 #. module: purchase_request
 #. odoo-python
 #: code:addons/purchase_request/wizard/purchase_request_line_make_purchase_order.py:0
 #, python-format
 msgid "The purchase has already been completed."
-msgstr ""
+msgstr "Köpet har redan genomförts."
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__qty_to_buy
 msgid "There is some pending qty to buy"
-msgstr ""
+msgstr "Det finns en viss väntande kvantitet att köpa"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_search
 msgid "To Approve"
-msgstr ""
+msgstr "Att godkänna"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__to_approve_allowed
 msgid "To Approve Allowed"
-msgstr ""
+msgstr "Att godkänna Tillåtet"
 
 #. module: purchase_request
 #: model:ir.model.fields.selection,name:purchase_request.selection__purchase_request__state__to_approve
 msgid "To be approved"
-msgstr ""
+msgstr "Ska godkännas"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__estimated_cost
 msgid "Total Estimated Cost"
-msgstr ""
+msgstr "Total beräknad kostnad"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_form
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_line_details
 msgid "Tracking"
-msgstr ""
+msgstr "Spårning"
 
 #. module: purchase_request
 #: model:ir.model.fields,help:purchase_request.field_purchase_request__activity_exception_decoration
 #: model:ir.model.fields,help:purchase_request.field_purchase_request_line__activity_exception_decoration
 msgid "Type of the exception activity on record."
-msgstr ""
+msgstr "Typ av undantagsaktivitet som registreras."
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_search
 msgid "Unassigned"
-msgstr ""
+msgstr "Ej tilldelad"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_search
 msgid "Unassigned Request"
-msgstr ""
+msgstr "Ej tilldelad begäran"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_request_line_search
 msgid "Uncancelled"
-msgstr ""
+msgstr "Ej avbruten"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_search
 msgid "Unread Messages"
-msgstr ""
+msgstr "Olästa meddelanden"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_allocation__product_uom_id
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__product_uom_id
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line_make_purchase_order_item__product_uom_id
 msgid "UoM"
-msgstr ""
+msgstr "Måttenhet"
 
 #. module: purchase_request
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_order_line_search_sub
 #: model_terms:ir.ui.view,arch_db:purchase_request.purchase_order_line_tree_sub
 msgid "Vendor"
-msgstr ""
+msgstr "Leverantör"
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request__website_message_ids
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__website_message_ids
 msgid "Website Messages"
-msgstr ""
+msgstr "Webbplatsmeddelanden"
 
 #. module: purchase_request
 #: model:ir.model.fields,help:purchase_request.field_purchase_request__website_message_ids
 #: model:ir.model.fields,help:purchase_request.field_purchase_request_line__website_message_ids
 msgid "Website communication history"
-msgstr ""
+msgstr "Webbplatsens kommunikationshistorik"
 
 #. module: purchase_request
 #: model:ir.model.fields,help:purchase_request.field_purchase_request_line_make_purchase_order__sync_data_planned
@@ -1376,11 +1423,13 @@ msgid ""
 "When checked, PO lines on the selected purchase order are only reused if the "
 "scheduled date matches as well."
 msgstr ""
+"När detta är markerat återanvänds inköpsorderrader på den valda inköpsordern "
+"endast om det schemalagda datumet också stämmer."
 
 #. module: purchase_request
 #: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line_make_purchase_order_item__wiz_id
 msgid "Wizard"
-msgstr ""
+msgstr "Trollkarl"
 
 #. module: purchase_request
 #. odoo-python
@@ -1390,6 +1439,7 @@ msgid ""
 "You can only delete a purchase request line if the purchase request is in "
 "draft state."
 msgstr ""
+"Du kan bara ta bort en inköpsorderrad om inköpsordern är i utkaststatus."
 
 #. module: purchase_request
 #. odoo-python
@@ -1397,7 +1447,7 @@ msgstr ""
 #, python-format
 msgid ""
 "You can't request an approval for a purchase request which is empty. (%s)"
-msgstr ""
+msgstr "Du kan inte begära ett godkännande för en inköpsorder som är tom (%s)"
 
 #. module: purchase_request
 #. odoo-python
@@ -1407,38 +1457,40 @@ msgid ""
 "You cannot create a single purchase order from purchase requests that have "
 "different procurement group."
 msgstr ""
+"Du kan inte skapa en enda inköpsorder från inköpsorder som har olika "
+"inköpsgrupper."
 
 #. module: purchase_request
 #. odoo-python
 #: code:addons/purchase_request/models/purchase_request.py:0
 #, python-format
 msgid "You cannot delete a purchase request which is not draft."
-msgstr ""
+msgstr "Du kan inte ta bort en inköpsorder som inte är utkast."
 
 #. module: purchase_request
 #. odoo-python
 #: code:addons/purchase_request/models/purchase_request_line.py:0
 #, python-format
 msgid "You cannot delete a record that refers to purchase lines!"
-msgstr ""
+msgstr "Du kan inte radera en post som hänvisar till inköpsrader!"
 
 #. module: purchase_request
 #. odoo-python
 #: code:addons/purchase_request/wizard/purchase_request_line_make_purchase_order.py:0
 #, python-format
 msgid "You have to enter a Picking Type."
-msgstr ""
+msgstr "Du måste ange en plockningstyp."
 
 #. module: purchase_request
 #. odoo-python
 #: code:addons/purchase_request/wizard/purchase_request_line_make_purchase_order.py:0
 #, python-format
 msgid "You have to select lines from the same Picking Type."
-msgstr ""
+msgstr "Du måste välja rader från samma Plocktyp."
 
 #. module: purchase_request
 #. odoo-python
 #: code:addons/purchase_request/wizard/purchase_request_line_make_purchase_order.py:0
 #, python-format
 msgid "You have to select lines from the same company."
-msgstr ""
+msgstr "Du måste välja rader från samma bolag."
diff --git a/purchase_request/reports/report_purchase_request.xml b/purchase_request/reports/report_purchase_request.xml
index 7a7591572c4..253260a2e0d 100644
--- a/purchase_request/reports/report_purchase_request.xml
+++ b/purchase_request/reports/report_purchase_request.xml
@@ -13,42 +13,44 @@
                             <span t-field="o.name" />
                         </h2>
                         <div class="row mt32 mb32">
-                            <div class="col-auto">
+                            <div class="col-2">
                                 <strong>Request Reference:</strong>
                                 <br />
                                 <span t-field="o.name" />
                             </div>
-                            <div class="col-auto">
+                            <div class="col-2">
                                 <strong>Creation Date:</strong>
                                 <br />
                                 <span t-field="o.date_start" />
                             </div>
-                            <div class="col-auto">
+                            <div class="col-2">
                                 <strong>Source:</strong>
                                 <br />
                                 <span t-field="o.origin" />
                             </div>
-                            <div class="col-auto">
-                                <strong>Description:</strong>
-                                <br />
-                                <span t-field="o.description" />
-                            </div>
-                            <div class="col-auto">
+                            <div class="col-2">
                                 <strong>Requested by:</strong>
                                 <br />
                                 <span t-field="o.requested_by" />
                             </div>
-                            <div class="col-auto">
+                            <div class="col-2">
                                 <strong>Assigned to:</strong>
                                 <br />
                                 <span t-field="o.assigned_to" />
                             </div>
-                            <div class="col-auto">
+                            <div class="col-2">
                                 <strong>Picking Type:</strong>
                                 <br />
                                 <span t-field="o.picking_type_id" />
                             </div>
                         </div>
+                        <div class="row mt32 mb32">
+                            <div class="col-12">
+                                <strong>Description:</strong>
+                                <br />
+                                <span t-field="o.description" />
+                            </div>
+                        </div>
                         <t t-if="o.line_ids">
                             <h3>Products</h3>
                             <table class="table table-condensed">
diff --git a/purchase_request/static/description/index.html b/purchase_request/static/description/index.html
index d5de1480026..0fa2267734d 100644
--- a/purchase_request/static/description/index.html
+++ b/purchase_request/static/description/index.html
@@ -366,7 +366,7 @@ <h1 class="title">Purchase Request</h1>
 !! This file is generated by oca-gen-addon-readme !!
 !! changes will be overwritten.                   !!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! source digest: sha256:e596dd6bddce0bc91338b6f26441b730a1ae7ec46451a9d7614fc43fc555b1e6
+!! source digest: sha256:5c855e4e053d521656e7fb13a2534ed8d3bb93bf3c620e33dee2cddd489c978f
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
 <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/lgpl-3.0-standalone.html"><img alt="License: LGPL-3" src="https://img.shields.io/badge/licence-LGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/purchase-workflow/tree/16.0/purchase_request"><img alt="OCA/purchase-workflow" src="https://img.shields.io/badge/github-OCA%2Fpurchase--workflow-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/purchase-workflow-16-0/purchase-workflow-16-0-purchase_request"><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/purchase-workflow&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>You use this module if you wish to give notification of requirements of
diff --git a/purchase_sign/README.rst b/purchase_sign/README.rst
new file mode 100644
index 00000000000..3880f221757
--- /dev/null
+++ b/purchase_sign/README.rst
@@ -0,0 +1,76 @@
+=============
+Purchase Sign
+=============
+
+.. 
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !! This file is generated by oca-gen-addon-readme !!
+   !! changes will be overwritten.                   !!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !! source digest: sha256:56a9aecd4b0b47eda77efd60cc19b8963193fee67e2fe6ad675449af14a3c6c6
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |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%2Fpurchase--workflow-lightgray.png?logo=github
+    :target: https://github.com/OCA/purchase-workflow/tree/16.0/purchase_sign
+    :alt: OCA/purchase-workflow
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+    :target: https://translation.odoo-community.org/projects/purchase-workflow-16-0/purchase-workflow-16-0-purchase_sign
+    :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/purchase-workflow&target_branch=16.0
+    :alt: Try me on Runboat
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module allows to take online signatures from vendors to confirm purchase orders.It adds a global configuration (Online signature) which can be accessed through Purchase->Configuration->Settings and it can further be handled also on each of the purchase orders.When it is enabled, it shows a button 'Accept & Sign' on the portal to the vendors for RFQ which are sent by email to them.Once the vendor accepts and adds their signature, the RFQ gets confirmed into a purchase order
+
+**Table of contents**
+
+.. contents::
+   :local:
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues <https://github.com/OCA/purchase-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/purchase-workflow/issues/new?body=module:%20purchase_sign%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
+~~~~~~~
+
+* Onestein
+
+Contributors
+~~~~~~~~~~~~
+
+* `Onestein <https://www.onestein.nl>`__
+
+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/purchase-workflow <https://github.com/OCA/purchase-workflow/tree/16.0/purchase_sign>`_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/purchase_sign/__init__.py b/purchase_sign/__init__.py
new file mode 100644
index 00000000000..83b6211e516
--- /dev/null
+++ b/purchase_sign/__init__.py
@@ -0,0 +1,4 @@
+# Copyright 2024 Onestein
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+from . import controllers
+from . import models
diff --git a/purchase_sign/__manifest__.py b/purchase_sign/__manifest__.py
new file mode 100644
index 00000000000..5d3cecc931b
--- /dev/null
+++ b/purchase_sign/__manifest__.py
@@ -0,0 +1,23 @@
+# Copyright 2024 Onestein (<http://www.onestein.eu>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+{
+    "name": "Purchase Sign",
+    "version": "16.0.1.0.0",
+    "license": "AGPL-3",
+    "category": "Purchase",
+    "author": "Onestein, Odoo Community Association (OCA)",
+    "website": "https://github.com/OCA/purchase-workflow",
+    "depends": ["purchase"],
+    "data": [
+        "report/purchase_order_template.xml",
+        "templates/purchase_portal_templates.xml",
+        "views/purchase_view.xml",
+        "views/res_config_settings_view.xml",
+    ],
+    "assets": {
+        "web.assets_tests": [
+            "purchase_sign/static/tests/tours/purchase_signature.esm.js"
+        ],
+    },
+}
diff --git a/purchase_sign/controllers/__init__.py b/purchase_sign/controllers/__init__.py
new file mode 100644
index 00000000000..c1401fbe0ee
--- /dev/null
+++ b/purchase_sign/controllers/__init__.py
@@ -0,0 +1,2 @@
+# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
+from . import main
diff --git a/purchase_sign/controllers/main.py b/purchase_sign/controllers/main.py
new file mode 100644
index 00000000000..66329125e4a
--- /dev/null
+++ b/purchase_sign/controllers/main.py
@@ -0,0 +1,75 @@
+# Copyright 2024 Onestein
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+import binascii
+
+from odoo import _, fields, http
+from odoo.exceptions import AccessError, MissingError
+from odoo.http import request
+
+from odoo.addons.portal.controllers.mail import _message_post_helper
+from odoo.addons.portal.controllers.portal import CustomerPortal
+
+
+class PortalPurchase(CustomerPortal):
+    def _purchase_order_get_page_view_values(self, order, access_token, **kwargs):
+        response = super(PortalPurchase, self)._purchase_order_get_page_view_values(
+            order=order, access_token=access_token, **kwargs
+        )
+        if kwargs.get("message"):
+            response.update({"message": kwargs.get("message")})
+        return response
+
+    @http.route(
+        ["/my/purchase/<int:order_id>/accept"], type="json", auth="public", website=True
+    )
+    def portal_purchase_accept(
+        self, order_id, access_token=None, name=None, signature=None
+    ):
+        # get from query string if not on json param
+        access_token = access_token or request.httprequest.args.get("access_token")
+        try:
+            order_sudo = self._document_check_access(
+                "purchase.order", order_id, access_token=access_token
+            )
+        except (AccessError, MissingError):
+            return {"error": _("Invalid order.")}
+
+        if not order_sudo._has_to_be_signed():
+            return {
+                "error": _("The order is not in a state requiring vendor signature.")
+            }
+        if not signature:
+            return {"error": _("Signature is missing.")}
+
+        try:
+            order_sudo.write(
+                {
+                    "signed_by": name,
+                    "signed_on": fields.Datetime.now(),
+                    "signature": signature,
+                }
+            )
+        except (TypeError, binascii.Error):
+            return {"error": _("Invalid signature data.")}
+        order_sudo.button_confirm()
+        pdf = (
+            request.env["ir.actions.report"]
+            .sudo()
+            ._render_qweb_pdf("purchase.action_report_purchase_order", [order_sudo.id])[
+                0
+            ]
+        )
+
+        _message_post_helper(
+            "purchase.order",
+            order_sudo.id,
+            _("Order signed by %s", name),
+            attachments=[("%s.pdf" % order_sudo.name, pdf)],
+            token=access_token,
+        )
+
+        query_string = "&message=sign_ok"
+        return {
+            "force_refresh": True,
+            "redirect_url": order_sudo.get_portal_url(query_string=query_string),
+        }
diff --git a/purchase_sign/i18n/it.po b/purchase_sign/i18n/it.po
new file mode 100644
index 00000000000..863e7c064d0
--- /dev/null
+++ b/purchase_sign/i18n/it.po
@@ -0,0 +1,189 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* purchase_sign
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\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"
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.portal_my_purchase_order
+msgid ""
+"<i class=\"fa fa-check\"/>\n"
+"                        Accept &amp; Sign"
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.portal_my_purchase_order
+msgid ""
+"<i class=\"fa fa-check\"/>\n"
+"                Accept &amp; Sign"
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.portal_my_purchase_order
+msgid ""
+"<i class=\"fa fa-comment\"/>\n"
+"                        Feedback"
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.portal_my_purchase_order
+msgid "<span>Accepted on the behalf of:</span>"
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.portal_my_purchase_order
+msgid "<span>By signing this proposal, I agree to the following terms:</span>"
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.portal_my_purchase_order
+msgid "<span>For an amount of:</span>"
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.portal_my_purchase_order
+msgid "<span>With payment terms:</span>"
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.report_purchaseorder_document
+msgid "<strong>Signature</strong>"
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.portal_my_purchase_order
+msgid ""
+"<strong>Thank You!</strong><br/>\n"
+"                        Order has been confirmed."
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.portal_my_purchase_order
+msgid "Close"
+msgstr ""
+
+#. module: purchase_sign
+#: model:ir.model,name:purchase_sign.model_res_company
+msgid "Companies"
+msgstr ""
+
+#. module: purchase_sign
+#. odoo-python
+#: code:addons/purchase_sign/controllers/main.py:0
+#: code:addons/purchase_sign/tests/test_purchase_sign.py:0
+#, python-format
+msgid "Invalid order."
+msgstr ""
+
+#. module: purchase_sign
+#. odoo-python
+#: code:addons/purchase_sign/tests/test_purchase_sign.py:0
+#, python-format
+msgid "Invalid signature data"
+msgstr ""
+
+#. module: purchase_sign
+#. odoo-python
+#: code:addons/purchase_sign/controllers/main.py:0
+#, python-format
+msgid "Invalid signature data."
+msgstr ""
+
+#. module: purchase_sign
+#: model:ir.model.fields,field_description:purchase_sign.field_purchase_order__require_signature
+#: model_terms:ir.ui.view,arch_db:purchase_sign.res_config_settings_view_form_purchase
+msgid "Online Signature"
+msgstr ""
+
+#. module: purchase_sign
+#. odoo-python
+#: code:addons/purchase_sign/controllers/main.py:0
+#, python-format
+msgid "Order signed by %s"
+msgstr ""
+
+#. module: purchase_sign
+#: model:ir.model,name:purchase_sign.model_res_config_settings
+msgid "Procurement purchase grouping settings"
+msgstr ""
+
+#. module: purchase_sign
+#: model:ir.model.fields,field_description:purchase_sign.field_res_company__purchase_portal_confirmation_sign
+#: model:ir.model.fields,field_description:purchase_sign.field_res_config_settings__purchase_portal_confirmation_sign
+msgid "Purchase Online Signature"
+msgstr ""
+
+#. module: purchase_sign
+#: model:ir.model,name:purchase_sign.model_purchase_order
+msgid "Purchase Order"
+msgstr ""
+
+#. module: purchase_sign
+#: model:ir.model.fields,help:purchase_sign.field_purchase_order__require_signature
+msgid ""
+"Request a online signature and/or payment to the customer in order to "
+"confirm orders automatically."
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.res_config_settings_view_form_purchase
+msgid "Request an online signature to confirm orders"
+msgstr ""
+
+#. module: purchase_sign
+#: model:ir.model.fields,field_description:purchase_sign.field_purchase_order__signature
+#: model_terms:ir.ui.view,arch_db:purchase_sign.purchase_order_portal_content
+msgid "Signature"
+msgstr ""
+
+#. module: purchase_sign
+#. odoo-python
+#: code:addons/purchase_sign/tests/test_purchase_sign.py:0
+#, python-format
+msgid "Signature is missing"
+msgstr ""
+
+#. module: purchase_sign
+#. odoo-python
+#: code:addons/purchase_sign/controllers/main.py:0
+#, python-format
+msgid "Signature is missing."
+msgstr ""
+
+#. module: purchase_sign
+#: model:ir.model.fields,field_description:purchase_sign.field_purchase_order__signed_by
+msgid "Signed By"
+msgstr ""
+
+#. module: purchase_sign
+#: model:ir.model.fields,field_description:purchase_sign.field_purchase_order__signed_on
+msgid "Signed On"
+msgstr ""
+
+#. module: purchase_sign
+#. odoo-python
+#: code:addons/purchase_sign/controllers/main.py:0
+#: code:addons/purchase_sign/tests/test_purchase_sign.py:0
+#, python-format
+msgid "The order is not in a state requiring vendor signature."
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.portal_my_purchase_order
+msgid "Validate Order"
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.purchase_order_view_form_inherit
+msgid "Vendor Signature"
+msgstr ""
diff --git a/purchase_sign/i18n/purchase_sign.pot b/purchase_sign/i18n/purchase_sign.pot
new file mode 100644
index 00000000000..6645990b857
--- /dev/null
+++ b/purchase_sign/i18n/purchase_sign.pot
@@ -0,0 +1,188 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* purchase_sign
+#
+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: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.portal_my_purchase_order
+msgid ""
+"<i class=\"fa fa-check\"/>\n"
+"                        Accept &amp; Sign"
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.portal_my_purchase_order
+msgid ""
+"<i class=\"fa fa-check\"/>\n"
+"                Accept &amp; Sign"
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.portal_my_purchase_order
+msgid ""
+"<i class=\"fa fa-comment\"/>\n"
+"                        Feedback"
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.portal_my_purchase_order
+msgid "<span>Accepted on the behalf of:</span>"
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.portal_my_purchase_order
+msgid "<span>By signing this proposal, I agree to the following terms:</span>"
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.portal_my_purchase_order
+msgid "<span>For an amount of:</span>"
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.portal_my_purchase_order
+msgid "<span>With payment terms:</span>"
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.report_purchaseorder_document
+msgid "<strong>Signature</strong>"
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.portal_my_purchase_order
+msgid ""
+"<strong>Thank You!</strong><br/>\n"
+"                        Order has been confirmed."
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.portal_my_purchase_order
+msgid "Close"
+msgstr ""
+
+#. module: purchase_sign
+#: model:ir.model,name:purchase_sign.model_res_company
+msgid "Companies"
+msgstr ""
+
+#. module: purchase_sign
+#. odoo-python
+#: code:addons/purchase_sign/controllers/main.py:0
+#: code:addons/purchase_sign/tests/test_purchase_sign.py:0
+#, python-format
+msgid "Invalid order."
+msgstr ""
+
+#. module: purchase_sign
+#. odoo-python
+#: code:addons/purchase_sign/tests/test_purchase_sign.py:0
+#, python-format
+msgid "Invalid signature data"
+msgstr ""
+
+#. module: purchase_sign
+#. odoo-python
+#: code:addons/purchase_sign/controllers/main.py:0
+#, python-format
+msgid "Invalid signature data."
+msgstr ""
+
+#. module: purchase_sign
+#: model:ir.model.fields,field_description:purchase_sign.field_purchase_order__require_signature
+#: model_terms:ir.ui.view,arch_db:purchase_sign.res_config_settings_view_form_purchase
+msgid "Online Signature"
+msgstr ""
+
+#. module: purchase_sign
+#. odoo-python
+#: code:addons/purchase_sign/controllers/main.py:0
+#, python-format
+msgid "Order signed by %s"
+msgstr ""
+
+#. module: purchase_sign
+#: model:ir.model,name:purchase_sign.model_res_config_settings
+msgid "Procurement purchase grouping settings"
+msgstr ""
+
+#. module: purchase_sign
+#: model:ir.model.fields,field_description:purchase_sign.field_res_company__purchase_portal_confirmation_sign
+#: model:ir.model.fields,field_description:purchase_sign.field_res_config_settings__purchase_portal_confirmation_sign
+msgid "Purchase Online Signature"
+msgstr ""
+
+#. module: purchase_sign
+#: model:ir.model,name:purchase_sign.model_purchase_order
+msgid "Purchase Order"
+msgstr ""
+
+#. module: purchase_sign
+#: model:ir.model.fields,help:purchase_sign.field_purchase_order__require_signature
+msgid ""
+"Request a online signature and/or payment to the customer in order to "
+"confirm orders automatically."
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.res_config_settings_view_form_purchase
+msgid "Request an online signature to confirm orders"
+msgstr ""
+
+#. module: purchase_sign
+#: model:ir.model.fields,field_description:purchase_sign.field_purchase_order__signature
+#: model_terms:ir.ui.view,arch_db:purchase_sign.purchase_order_portal_content
+msgid "Signature"
+msgstr ""
+
+#. module: purchase_sign
+#. odoo-python
+#: code:addons/purchase_sign/tests/test_purchase_sign.py:0
+#, python-format
+msgid "Signature is missing"
+msgstr ""
+
+#. module: purchase_sign
+#. odoo-python
+#: code:addons/purchase_sign/controllers/main.py:0
+#, python-format
+msgid "Signature is missing."
+msgstr ""
+
+#. module: purchase_sign
+#: model:ir.model.fields,field_description:purchase_sign.field_purchase_order__signed_by
+msgid "Signed By"
+msgstr ""
+
+#. module: purchase_sign
+#: model:ir.model.fields,field_description:purchase_sign.field_purchase_order__signed_on
+msgid "Signed On"
+msgstr ""
+
+#. module: purchase_sign
+#. odoo-python
+#: code:addons/purchase_sign/controllers/main.py:0
+#: code:addons/purchase_sign/tests/test_purchase_sign.py:0
+#, python-format
+msgid "The order is not in a state requiring vendor signature."
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.portal_my_purchase_order
+msgid "Validate Order"
+msgstr ""
+
+#. module: purchase_sign
+#: model_terms:ir.ui.view,arch_db:purchase_sign.purchase_order_view_form_inherit
+msgid "Vendor Signature"
+msgstr ""
diff --git a/purchase_sign/models/__init__.py b/purchase_sign/models/__init__.py
new file mode 100644
index 00000000000..575530f0397
--- /dev/null
+++ b/purchase_sign/models/__init__.py
@@ -0,0 +1,4 @@
+# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
+from . import purchase_order
+from . import res_company
+from . import res_config_settings
diff --git a/purchase_sign/models/purchase_order.py b/purchase_sign/models/purchase_order.py
new file mode 100644
index 00000000000..46f3a5f4e2a
--- /dev/null
+++ b/purchase_sign/models/purchase_order.py
@@ -0,0 +1,33 @@
+# Copyright 2024 Onestein
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+from odoo import api, fields, models
+
+from odoo.addons.purchase.models.purchase import PurchaseOrder as Purchase
+
+
+class PurchaseOrder(models.Model):
+    _inherit = "purchase.order"
+
+    require_signature = fields.Boolean(
+        string="Online Signature",
+        compute="_compute_require_signature",
+        store=True,
+        readonly=False,
+        precompute=True,
+        states=Purchase.READONLY_STATES,
+        help="Request a online signature and/or payment to the customer in "
+        "order to confirm orders automatically.",
+    )
+    signature = fields.Image(
+        copy=False, attachment=True, max_width=1024, max_height=1024
+    )
+    signed_by = fields.Char(copy=False)
+    signed_on = fields.Datetime(copy=False)
+
+    @api.depends("company_id")
+    def _compute_require_signature(self):
+        for order in self:
+            order.require_signature = order.company_id.purchase_portal_confirmation_sign
+
+    def _has_to_be_signed(self):
+        return self.state == "sent" and self.require_signature and not self.signature
diff --git a/purchase_sign/models/res_company.py b/purchase_sign/models/res_company.py
new file mode 100644
index 00000000000..b1bb1d78b0e
--- /dev/null
+++ b/purchase_sign/models/res_company.py
@@ -0,0 +1,11 @@
+# Copyright 2024 Onestein
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+from odoo import fields, models
+
+
+class ResCompany(models.Model):
+    _inherit = "res.company"
+
+    purchase_portal_confirmation_sign = fields.Boolean(
+        string="Purchase Online Signature", default=False
+    )
diff --git a/purchase_sign/models/res_config_settings.py b/purchase_sign/models/res_config_settings.py
new file mode 100644
index 00000000000..7559d5bc969
--- /dev/null
+++ b/purchase_sign/models/res_config_settings.py
@@ -0,0 +1,12 @@
+# Copyright 2024 Onestein
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+from odoo import fields, models
+
+
+class ResConfigSettings(models.TransientModel):
+    _inherit = "res.config.settings"
+
+    purchase_portal_confirmation_sign = fields.Boolean(
+        related="company_id.purchase_portal_confirmation_sign",
+        readonly=False,
+    )
diff --git a/purchase_sign/readme/CONTRIBUTORS.rst b/purchase_sign/readme/CONTRIBUTORS.rst
new file mode 100644
index 00000000000..dabe2d2b564
--- /dev/null
+++ b/purchase_sign/readme/CONTRIBUTORS.rst
@@ -0,0 +1 @@
+* `Onestein <https://www.onestein.nl>`__
diff --git a/purchase_sign/readme/DESCRIPTION.rst b/purchase_sign/readme/DESCRIPTION.rst
new file mode 100644
index 00000000000..f8a59f3f896
--- /dev/null
+++ b/purchase_sign/readme/DESCRIPTION.rst
@@ -0,0 +1 @@
+This module allows to take online signatures from vendors to confirm purchase orders.It adds a global configuration (Online signature) which can be accessed through Purchase->Configuration->Settings and it can further be handled also on each of the purchase orders.When it is enabled, it shows a button 'Accept & Sign' on the portal to the vendors for RFQ which are sent by email to them.Once the vendor accepts and adds their signature, the RFQ gets confirmed into a purchase order
diff --git a/purchase_sign/report/purchase_order_template.xml b/purchase_sign/report/purchase_order_template.xml
new file mode 100644
index 00000000000..5fe0eb05397
--- /dev/null
+++ b/purchase_sign/report/purchase_order_template.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+    <template
+        id="report_purchaseorder_document"
+        inherit_id="purchase.report_purchaseorder_document"
+    >
+        <xpath expr="//p[@t-field='o.notes']" position="before">
+            <div t-if="o.signature" class="mt-4 ml64 mr4" name="signature">
+                <div class="offset-8">
+                    <strong>Signature</strong>
+                </div>
+                <div class="offset-8">
+                    <img
+                        t-att-src="image_data_uri(o.signature)"
+                        style="max-height: 4cm; max-width: 8cm;"
+                    />
+                </div>
+                <div class="offset-8 text-center">
+                    <p t-field="o.signed_by" />
+                </div>
+            </div>
+        </xpath>
+    </template>
+
+</odoo>
diff --git a/purchase_sign/static/description/icon.png b/purchase_sign/static/description/icon.png
new file mode 100644
index 00000000000..3a0328b516c
Binary files /dev/null and b/purchase_sign/static/description/icon.png differ
diff --git a/purchase_sign/static/description/index.html b/purchase_sign/static/description/index.html
new file mode 100644
index 00000000000..0ef321f3efb
--- /dev/null
+++ b/purchase_sign/static/description/index.html
@@ -0,0 +1,420 @@
+<!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>Purchase Sign</title>
+<style type="text/css">
+
+/*
+:Author: David Goodger (goodger@python.org)
+:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+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: grey; } /* 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 {
+  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="purchase-sign">
+<h1 class="title">Purchase Sign</h1>
+
+<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! This file is generated by oca-gen-addon-readme !!
+!! changes will be overwritten.                   !!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! source digest: sha256:56a9aecd4b0b47eda77efd60cc19b8963193fee67e2fe6ad675449af14a3c6c6
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+<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/purchase-workflow/tree/16.0/purchase_sign"><img alt="OCA/purchase-workflow" src="https://img.shields.io/badge/github-OCA%2Fpurchase--workflow-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/purchase-workflow-16-0/purchase-workflow-16-0-purchase_sign"><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/purchase-workflow&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 allows to take online signatures from vendors to confirm purchase orders.It adds a global configuration (Online signature) which can be accessed through Purchase-&gt;Configuration-&gt;Settings and it can further be handled also on each of the purchase orders.When it is enabled, it shows a button ‘Accept &amp; Sign’ on the portal to the vendors for RFQ which are sent by email to them.Once the vendor accepts and adds their signature, the RFQ gets confirmed into a purchase 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="#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">
+<h1><a class="toc-backref" href="#toc-entry-1">Bug Tracker</a></h1>
+<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/purchase-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/purchase-workflow/issues/new?body=module:%20purchase_sign%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-2">Credits</a></h1>
+<div class="section" id="authors">
+<h2><a class="toc-backref" href="#toc-entry-3">Authors</a></h2>
+<ul class="simple">
+<li>Onestein</li>
+</ul>
+</div>
+<div class="section" id="contributors">
+<h2><a class="toc-backref" href="#toc-entry-4">Contributors</a></h2>
+<ul class="simple">
+<li><a class="reference external" href="https://www.onestein.nl">Onestein</a></li>
+</ul>
+</div>
+<div class="section" id="maintainers">
+<h2><a class="toc-backref" href="#toc-entry-5">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/purchase-workflow/tree/16.0/purchase_sign">OCA/purchase-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>
+</body>
+</html>
diff --git a/purchase_sign/static/tests/tours/purchase_signature.esm.js b/purchase_sign/static/tests/tours/purchase_signature.esm.js
new file mode 100644
index 00000000000..3a58572f48b
--- /dev/null
+++ b/purchase_sign/static/tests/tours/purchase_signature.esm.js
@@ -0,0 +1,57 @@
+/** @odoo-module **/
+
+import tour from "web_tour.tour";
+
+// This tour relies on data created on the Python test.
+tour.register(
+    "purchase_signature",
+    {
+        test: true,
+        url: "/my/rfq",
+    },
+    [
+        {
+            content: "open the test PO",
+            trigger: "a:containsExact('test PO')",
+        },
+        {
+            content: "click sign",
+            trigger: "a:contains('Sign')",
+        },
+        {
+            content: "check submit is enabled",
+            trigger: ".o_portal_sign_submit:enabled",
+            run: function () {
+                /**/
+            },
+        },
+        {
+            content: "click select style",
+            trigger: ".o_web_sign_auto_select_style a",
+        },
+        {
+            content: "click style 4",
+            trigger: ".o_web_sign_auto_font_selection a:eq(3)",
+        },
+        {
+            content: "click submit",
+            trigger: ".o_portal_sign_submit:enabled",
+        },
+        {
+            content: "check it's confirmed",
+            trigger: "#quote_content:contains('Thank You')",
+        },
+        {
+            trigger: "#quote_content",
+            run: function () {
+                window.location.href = window.location.origin + "/web";
+            },
+        },
+        {
+            trigger: "nav",
+            run: function () {
+                /**/
+            },
+        },
+    ]
+);
diff --git a/purchase_sign/templates/purchase_portal_templates.xml b/purchase_sign/templates/purchase_portal_templates.xml
new file mode 100644
index 00000000000..cc98f979fee
--- /dev/null
+++ b/purchase_sign/templates/purchase_portal_templates.xml
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+
+    <template
+        id="portal_my_purchase_order"
+        name="Purchase Order Portal Template"
+        inherit_id="purchase.portal_my_purchase_order"
+    >
+        <xpath expr="//div[hasclass('o_download_pdf')]" position="before">
+            <a
+                t-if="order._has_to_be_signed()"
+                role="button"
+                class="btn btn-primary mb8"
+                data-bs-toggle="modal"
+                data-bs-target="#modalaccept"
+                href="#"
+                style="width:100%"
+            >
+                <i class="fa fa-check" />
+                Accept &amp; Sign
+            </a>
+        </xpath>
+
+        <xpath expr="//div[@id='portal_purchase_content']" position="before">
+            <!-- modal relative to the action sign-->
+                    <div role="dialog" class="modal fade" id="modalaccept">
+                        <div class="modal-dialog" t-if="order._has_to_be_signed()">
+                            <form
+                        id="accept"
+                        method="POST"
+                        t-att-data-order-id="order.id"
+                        t-att-data-token="order.access_token"
+                        class="js_accept_json modal-content js_website_submit_form"
+                    >
+                                <input
+                            type="hidden"
+                            name="csrf_token"
+                            t-att-value="request.csrf_token()"
+                        />
+                                <header class="modal-header">
+                                    <h4 class="modal-title">Validate Order</h4>
+                                    <button
+                                type="button"
+                                class="btn-close"
+                                data-bs-dismiss="modal"
+                                aria-label="Close"
+                            />
+                                </header>
+                                <main class="modal-body" id="sign-dialog">
+                                    <p>
+                                        <span
+                                >By signing this proposal, I agree to the following terms:</span>
+                                        <ul>
+                                            <li>
+                                                <span
+                                        >Accepted on the behalf of:</span> <b
+                                            t-field="order.partner_id.commercial_partner_id"
+                                        />
+                                            </li>
+                                            <li>
+                                                <span>For an amount of:</span> <b
+                                            data-id="amount_total"
+                                            t-field="order.amount_total"
+                                        />
+                                            </li>
+                                            <li t-if="order.payment_term_id">
+                                                <span>With payment terms:</span> <b
+                                            t-field="order.payment_term_id.note"
+                                        />
+                                            </li>
+                                        </ul>
+                                    </p>
+                                    <t t-call="portal.signature_form">
+                                        <t
+                                    t-set="call_url"
+                                    t-value="order.get_portal_url(suffix='/accept')"
+                                />
+                                        <t
+                                    t-set="default_name"
+                                    t-value="order.partner_id.name"
+                                />
+                                    </t>
+                                </main>
+                            </form>
+                        </div>
+                    </div>
+
+                    <!-- status messages -->
+                    <div
+                t-if="message == 'sign_ok'"
+                class="alert alert-success alert-dismissible d-print-none"
+                role="status"
+            >
+                        <button
+                    type="button"
+                    class="btn-close"
+                    data-bs-dismiss="alert"
+                    aria-label="Close"
+                />
+                        <strong>Thank You!</strong><br />
+                        Order has been confirmed.
+                    </div>
+        </xpath>
+
+        <xpath expr="//div[@id='portal_purchase_content']" position="after">
+            <div
+                t-if="order._has_to_be_signed()"
+                class="row justify-content-center text-center d-print-none pt-1 pb-4"
+            >
+                <div class="col-sm-auto mt8">
+                    <a
+                        role="button"
+                        class="btn btn-primary"
+                        data-bs-toggle="modal"
+                        data-bs-target="#modalaccept"
+                        href="#"
+                    >
+                        <i class="fa fa-check" />
+                        Accept &amp; Sign
+                    </a>
+                </div>
+                <div class="col-sm-auto mt8">
+                    <a role="button" class="btn btn-secondary" href="#discussion">
+                        <i class="fa fa-comment" />
+                        Feedback
+                    </a>
+                </div>
+            </div>
+        </xpath>
+    </template>
+
+    <template
+        id="purchase_order_portal_content"
+        inherit_id="purchase.purchase_order_portal_content"
+    >
+        <xpath expr="//section[@id='terms']" position="before">
+            <section t-if="order.signature" id="signature" name="Signature">
+                <div class="row mt-4" name="signature">
+                    <div
+                        t-attf-class="#{'col-3' if report_type != 'html' else 'col-sm-7 col-md-4'} ms-auto text-center"
+                    >
+                        <h5>Signature</h5>
+                        <img
+                            t-att-src="image_data_uri(order.signature)"
+                            style="max-height: 6rem; max-width: 100%;"
+                        />
+                        <p t-field="order.signed_by" />
+                    </div>
+                </div>
+            </section>
+        </xpath>
+    </template>
+
+</odoo>
diff --git a/purchase_sign/tests/__init__.py b/purchase_sign/tests/__init__.py
new file mode 100644
index 00000000000..814899e4fac
--- /dev/null
+++ b/purchase_sign/tests/__init__.py
@@ -0,0 +1,2 @@
+# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
+from . import test_purchase_sign
diff --git a/purchase_sign/tests/test_purchase_sign.py b/purchase_sign/tests/test_purchase_sign.py
new file mode 100644
index 00000000000..9d7a215b64e
--- /dev/null
+++ b/purchase_sign/tests/test_purchase_sign.py
@@ -0,0 +1,115 @@
+# Copyright 2024 Onestein
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+import binascii
+import json
+from unittest.mock import patch
+
+from odoo import _
+from odoo.tests import tagged
+
+from odoo.addons.base.tests.common import HttpCaseWithUserPortal
+from odoo.addons.purchase.models.purchase import PurchaseOrder
+
+
+@tagged("post_install", "-at_install")
+class TestPurchaseSign(HttpCaseWithUserPortal):
+    def test_01_portal_purchase_signature_tour(self):
+        """The goal of this test is to make sure the portal user can sign PO."""
+        self.user_portal.company_id.purchase_portal_confirmation_sign = True
+        portal_user_partner = self.partner_portal
+        # create a PO to be signed
+        purchase_order = self.env["purchase.order"].create(
+            {
+                "name": "test PO",
+                "partner_id": portal_user_partner.id,
+                "state": "sent",
+            }
+        )
+        self.env["purchase.order.line"].create(
+            {
+                "order_id": purchase_order.id,
+                "product_id": self.env["product.product"]
+                .create({"name": "A product"})
+                .id,
+                "price_unit": 10.0,
+            }
+        )
+
+        # must be sent to the user so he can see it
+        email_act = purchase_order.action_rfq_send()
+        email_ctx = email_act.get("context", {})
+        purchase_order.with_context(**email_ctx).message_post_with_template(
+            email_ctx.get("default_template_id")
+        )
+
+        self.start_tour("/", "purchase_signature", login="portal")
+
+    def test_02_portal_purchase_check_errors(self):
+        """The goal of this test is to check error handling."""
+        self.user_portal.company_id.purchase_portal_confirmation_sign = True
+        portal_user_partner = self.partner_portal
+        purchase_order = self.env["purchase.order"].create(
+            {
+                "name": "test PO2",
+                "partner_id": portal_user_partner.id,
+                "access_token": "test_po",
+            }
+        )
+        self.env["purchase.order.line"].create(
+            {
+                "order_id": purchase_order.id,
+                "product_id": self.env["product.product"]
+                .create({"name": "A product"})
+                .id,
+                "price_unit": 10.0,
+            }
+        )
+        data = json.dumps({}).encode()
+        resp = self.url_open(
+            "/my/purchase/{}/accept".format(
+                purchase_order.id,
+            ),
+            data=data,
+            allow_redirects=False,
+            headers={"Content-Type": "application/json"},
+        )
+        self.assertIn(_("Invalid order."), resp.text)
+        resp = self.url_open(
+            "/my/purchase/{}/accept?access_token={}".format(
+                purchase_order.id, "test_po"
+            ),
+            data=data,
+            allow_redirects=False,
+            headers={"Content-Type": "application/json"},
+        )
+        self.assertIn(
+            _("The order is not in a state requiring vendor signature."), resp.text
+        )
+        purchase_order.state = "sent"
+        resp = self.url_open(
+            "/my/purchase/{}/accept?access_token={}".format(
+                purchase_order.id, "test_po"
+            ),
+            data=data,
+            allow_redirects=False,
+            headers={"Content-Type": "application/json"},
+        )
+        self.assertIn(_("Signature is missing"), resp.text)
+
+        def write(self, vals):
+            raise binascii.Error
+
+        with patch.object(
+            PurchaseOrder,
+            "write",
+            write,
+        ):
+            resp = self.url_open(
+                "/my/purchase/{}/accept?access_token={}".format(
+                    purchase_order.id, "test_po"
+                ),
+                data=json.dumps({"params": {"signature": "Joel Willis"}}).encode(),
+                allow_redirects=False,
+                headers={"Content-Type": "application/json"},
+            )
+            self.assertIn(_("Invalid signature data"), resp.text)
diff --git a/purchase_sign/views/purchase_view.xml b/purchase_sign/views/purchase_view.xml
new file mode 100644
index 00000000000..03071849666
--- /dev/null
+++ b/purchase_sign/views/purchase_view.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+
+    <record id="purchase_order_view_form_inherit" model="ir.ui.view">
+        <field name="name">purchase.order.form.inherit</field>
+        <field name="model">purchase.order</field>
+        <field name="inherit_id" ref="purchase.purchase_order_form" />
+        <field name="arch" type="xml">
+            <xpath expr="//field[@name='origin']" position="after">
+                <field name="require_signature" />
+            </xpath>
+            <notebook position="inside">
+                <page
+                    groups="base.group_no_one"
+                    string="Vendor Signature"
+                    name="vendor_signature"
+                    attrs="{'invisible': [('require_signature', '=', False), ('signed_by', '=', False), ('signature', '=', False), ('signed_on', '=', False)]}"
+                >
+                    <group>
+                        <field name="signed_by" />
+                        <field name="signed_on" />
+                        <field name="signature" widget="image" />
+                    </group>
+                </page>
+            </notebook>
+        </field>
+    </record>
+
+</odoo>
diff --git a/purchase_sign/views/res_config_settings_view.xml b/purchase_sign/views/res_config_settings_view.xml
new file mode 100644
index 00000000000..f16af81fe0e
--- /dev/null
+++ b/purchase_sign/views/res_config_settings_view.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+
+    <record id="res_config_settings_view_form_purchase" model="ir.ui.view">
+        <field name="name">res.config.settings.view.form.inherit.purchase</field>
+        <field name="model">res.config.settings</field>
+        <field
+            name="inherit_id"
+            ref="purchase.res_config_settings_view_form_purchase"
+        />
+        <field name="arch" type="xml">
+            <xpath expr="//div[@id='auto_receipt_reminder']" position="after">
+                <div class="col-12 col-lg-6 o_setting_box">
+                    <div class="o_setting_left_pane">
+                        <field name="purchase_portal_confirmation_sign" />
+                    </div>
+                    <div class="o_setting_right_pane">
+                        <label
+                            for="purchase_portal_confirmation_sign"
+                            string="Online Signature"
+                        />
+                        <div class="text-muted">
+                            Request an online signature to confirm orders
+                        </div>
+                    </div>
+                </div>
+            </xpath>
+        </field>
+    </record>
+
+</odoo>
diff --git a/purchase_tag/i18n/pt_BR.po b/purchase_tag/i18n/pt_BR.po
index 0e136c08f62..1811407295b 100644
--- a/purchase_tag/i18n/pt_BR.po
+++ b/purchase_tag/i18n/pt_BR.po
@@ -6,8 +6,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Odoo Server 16.0\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2023-10-29 08:31+0000\n"
-"Last-Translator: Adriano Prado <adrianojprado@gmail.com>\n"
+"PO-Revision-Date: 2024-05-22 03:11+0000\n"
+"Last-Translator: Rodrigo Macedo <sottomaiormacedotec@users.noreply."
+"translation.odoo-community.org>\n"
 "Language-Team: none\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
@@ -19,7 +20,7 @@ msgstr ""
 #. module: purchase_tag
 #: model:ir.model.fields,field_description:purchase_tag.field_purchase_tag__child_ids
 msgid "Child"
-msgstr ""
+msgstr "Criança"
 
 #. module: purchase_tag
 #: model:ir.model.fields,field_description:purchase_tag.field_purchase_tag__color
@@ -69,12 +70,12 @@ msgstr "Última Atualização em"
 #. module: purchase_tag
 #: model:ir.model.fields,field_description:purchase_tag.field_purchase_tag__parent_id
 msgid "Parent"
-msgstr ""
+msgstr "Principal"
 
 #. module: purchase_tag
 #: model:ir.model.fields,field_description:purchase_tag.field_purchase_tag__parent_path
 msgid "Parent Path"
-msgstr ""
+msgstr "Rota Principal"
 
 #. module: purchase_tag
 #: model:ir.model,name:purchase_tag.model_purchase_order
@@ -109,4 +110,4 @@ msgstr "Marcadores"
 #: code:addons/purchase_tag/models/purchase_tag.py:0
 #, python-format
 msgid "Tags cannot be recursive."
-msgstr ""
+msgstr "Tags não podem ser recursivas."
diff --git a/purchase_triple_discount/i18n/pt_BR.po b/purchase_triple_discount/i18n/pt_BR.po
index bdb8be1bff8..63241098488 100644
--- a/purchase_triple_discount/i18n/pt_BR.po
+++ b/purchase_triple_discount/i18n/pt_BR.po
@@ -9,75 +9,76 @@ msgstr ""
 "Project-Id-Version: Odoo Server 10.0\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-11-24 07:53+0000\n"
-"PO-Revision-Date: 2020-09-25 23:00+0000\n"
-"Last-Translator: Marcel Savegnago <marcel.savegnago@gmail.com>\n"
-"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/"
-"teams/23907/pt_BR/)\n"
+"PO-Revision-Date: 2024-05-29 18:36+0000\n"
+"Last-Translator: Rodrigo Macedo <sottomaiormacedotec@users.noreply."
+"translation.odoo-community.org>\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"
-"X-Generator: Weblate 3.10\n"
+"X-Generator: Weblate 4.17\n"
 
 #. module: purchase_triple_discount
 #: model_terms:ir.ui.view,arch_db:purchase_triple_discount.report_purchaseorder_document_triple_discount
 msgid "<strong>Disc. 2 (%)</strong>"
-msgstr ""
+msgstr "<strong>Desc. 2 (%)</strong>"
 
 #. module: purchase_triple_discount
 #: model_terms:ir.ui.view,arch_db:purchase_triple_discount.report_purchaseorder_document_triple_discount
 msgid "<strong>Disc. 3 (%)</strong>"
-msgstr ""
+msgstr "<strong>Desc. 3 (%)</strong>"
 
 #. module: purchase_triple_discount
 #: model:ir.model,name:purchase_triple_discount.model_res_partner
 msgid "Contact"
-msgstr ""
+msgstr "Contato"
 
 #. module: purchase_triple_discount
 #: model:ir.model.fields,field_description:purchase_triple_discount.field_res_partner__default_supplierinfo_discount2
 #: model:ir.model.fields,field_description:purchase_triple_discount.field_res_users__default_supplierinfo_discount2
 msgid "Default Supplier Discount 2 (%)"
-msgstr ""
+msgstr "Desconto padrão do fornecedor 2 (%)"
 
 #. module: purchase_triple_discount
 #: model:ir.model.fields,field_description:purchase_triple_discount.field_res_partner__default_supplierinfo_discount3
 #: model:ir.model.fields,field_description:purchase_triple_discount.field_res_users__default_supplierinfo_discount3
 msgid "Default Supplier Discount 3 (%)"
-msgstr ""
+msgstr "Desconto padrão do fornecedor 3 (%)"
 
 #. module: purchase_triple_discount
 #: model:ir.model.fields,field_description:purchase_triple_discount.field_purchase_order_line__discount2
 msgid "Disc. 2 (%)"
-msgstr ""
+msgstr "Desc. 2 (%)"
 
 #. module: purchase_triple_discount
 #: model:ir.model.fields,field_description:purchase_triple_discount.field_purchase_order_line__discount3
 msgid "Disc. 3 (%)"
-msgstr ""
+msgstr "Desc. 3 (%)"
 
 #. module: purchase_triple_discount
 #: model:ir.model.fields,field_description:purchase_triple_discount.field_product_supplierinfo__discount2
 #: model:ir.model.fields,field_description:purchase_triple_discount.field_purchase_report__discount2
 msgid "Discount 2 (%)"
-msgstr ""
+msgstr "Desconto 2 (%)"
 
 #. module: purchase_triple_discount
 #: model:ir.model.constraint,message:purchase_triple_discount.constraint_purchase_order_line_discount2_limit
 msgid "Discount 2 must be lower than 100%."
-msgstr ""
+msgstr "O desconto 2 deve ser inferior a 100%."
 
 #. module: purchase_triple_discount
 #: model:ir.model.fields,field_description:purchase_triple_discount.field_product_supplierinfo__discount3
 #: model:ir.model.fields,field_description:purchase_triple_discount.field_purchase_report__discount3
 msgid "Discount 3 (%)"
-msgstr ""
+msgstr "Desconto 3 (%)"
 
 #. module: purchase_triple_discount
 #: model:ir.model.constraint,message:purchase_triple_discount.constraint_purchase_order_line_discount3_limit
 msgid "Discount 3 must be lower than 100%."
-msgstr ""
+msgstr "O desconto 3 deve ser inferior a 100%."
 
 #. module: purchase_triple_discount
 #: model:ir.model,name:purchase_triple_discount.model_purchase_order_line
@@ -92,7 +93,7 @@ msgstr "Relatório de Compra"
 #. module: purchase_triple_discount
 #: model:ir.model,name:purchase_triple_discount.model_product_supplierinfo
 msgid "Supplier Pricelist"
-msgstr ""
+msgstr "Lista de preços do fornecedor"
 
 #. module: purchase_triple_discount
 #: model:ir.model.fields,help:purchase_triple_discount.field_res_partner__default_supplierinfo_discount2
@@ -103,6 +104,8 @@ msgid ""
 "This value will be used as the default one, for each new supplierinfo line "
 "depending on that supplier."
 msgstr ""
+"Este valor será usado como padrão, para cada nova linha de informações do "
+"fornecedor dependendo desse fornecedor."
 
 #~ msgid "Invoice"
 #~ msgstr "Fatura"
diff --git a/purchase_vendor_promotion/README.rst b/purchase_vendor_promotion/README.rst
index 8daec701322..cae5922b035 100644
--- a/purchase_vendor_promotion/README.rst
+++ b/purchase_vendor_promotion/README.rst
@@ -2,10 +2,13 @@
 Purchase Vendor Promotion
 =========================
 
-.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+.. 
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    !! This file is generated by oca-gen-addon-readme !!
    !! changes will be overwritten.                   !!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !! source digest: sha256:d9b1b88cbcd184f9d7419231e529d3ca7b29ad1e59a9a0cdb3842a60ddc46126
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
     :target: https://odoo-community.org/page/development-status
@@ -20,13 +23,14 @@ Purchase Vendor Promotion
     :target: https://translation.odoo-community.org/projects/purchase-workflow-16-0/purchase-workflow-16-0-purchase_vendor_promotion
     :alt: Translate me on Weblate
 .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
-    :target: https://runboat.odoo-community.org/webui/builds.html?repo=OCA/purchase-workflow&target_branch=16.0
+    :target: https://runboat.odoo-community.org/builds?repo=OCA/purchase-workflow&target_branch=16.0
     :alt: Try me on Runboat
 
-|badge1| |badge2| |badge3| |badge4| |badge5| 
+|badge1| |badge2| |badge3| |badge4| |badge5|
 
-This module allows you to visualise the start and end date of a vendor promotion during replenishment.
+This module allows you to visualise the start and end date of a vendor promotion during replenishment, in `Inventory > Operations > Replenishment` or `Inventory > Configuration > Products > Reordering Rules`.
 A vendor price is considered as a promotion if product supplier info is flagged as a `promotion`.
+If "Buy" is chosen as the Preferred Route, the vendor having the best active or upcoming promotion for the product will be automatically chosen. If no promotion is available, then first vendor will be chosen.
 
 **Table of contents**
 
@@ -38,7 +42,7 @@ Bug Tracker
 
 Bugs are tracked on `GitHub Issues <https://github.com/OCA/purchase-workflow/issues>`_.
 In case of trouble, please check there if your issue has already been reported.
-If you spotted it first, help us smashing it by providing a detailed and welcomed
+If you spotted it first, help us to smash it by providing a detailed and welcomed
 `feedback <https://github.com/OCA/purchase-workflow/issues/new?body=module:%20purchase_vendor_promotion%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.
@@ -55,6 +59,8 @@ Contributors
 ~~~~~~~~~~~~
 
 * Telmo Santos <telmo.santos@camptocamp.com>
+* Tris Doan <tridm@trobz.com>
+
 
 Maintainers
 ~~~~~~~~~~~
diff --git a/purchase_vendor_promotion/__manifest__.py b/purchase_vendor_promotion/__manifest__.py
index b4023a5bcb8..b613d74109a 100644
--- a/purchase_vendor_promotion/__manifest__.py
+++ b/purchase_vendor_promotion/__manifest__.py
@@ -12,9 +12,11 @@
     "license": "AGPL-3",
     "depends": ["purchase_stock"],
     "data": [
+        "data/stock_route.xml",
         "views/product_views.xml",
         "views/stock_orderpoint_views.xml",
         "views/purchase_order_views.xml",
+        "views/stock_route.xml",
     ],
     "installable": True,
     "auto_install": False,
diff --git a/purchase_vendor_promotion/data/stock_route.xml b/purchase_vendor_promotion/data/stock_route.xml
new file mode 100644
index 00000000000..645aa84f4ba
--- /dev/null
+++ b/purchase_vendor_promotion/data/stock_route.xml
@@ -0,0 +1,5 @@
+<odoo>
+    <record id="purchase_stock.route_warehouse0_buy" model="stock.route">
+        <field name="force_vendor_with_best_promotion">True</field>
+    </record>
+</odoo>
diff --git a/purchase_vendor_promotion/i18n/it.po b/purchase_vendor_promotion/i18n/it.po
new file mode 100644
index 00000000000..c9fba84e3b3
--- /dev/null
+++ b/purchase_vendor_promotion/i18n/it.po
@@ -0,0 +1,68 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* purchase_vendor_promotion
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2024-06-24 14:37+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 4.17\n"
+
+#. module: purchase_vendor_promotion
+#: model:ir.model,name:purchase_vendor_promotion.model_stock_warehouse_orderpoint
+msgid "Minimum Inventory Rule"
+msgstr "Regola giacenza minima"
+
+#. module: purchase_vendor_promotion
+#: model:ir.model.fields,help:purchase_vendor_promotion.field_purchase_order_line__is_promotion
+msgid "Price was calculated based on a vendor promotion."
+msgstr "Il prezzo è stato calcolato in base ad una promozione del fornitore."
+
+#. module: purchase_vendor_promotion
+#: model:ir.model.fields,field_description:purchase_vendor_promotion.field_product_supplierinfo__is_promotion
+#: model:ir.model.fields,field_description:purchase_vendor_promotion.field_purchase_order_line__is_promotion
+#: model:ir.model.fields,field_description:purchase_vendor_promotion.field_stock_warehouse_orderpoint__promotion_period
+msgid "Promotion"
+msgstr "Promozione"
+
+#. module: purchase_vendor_promotion
+#: model:ir.model.fields,field_description:purchase_vendor_promotion.field_stock_warehouse_orderpoint__promotion_date_end
+msgid "Promotion Date End"
+msgstr "Data fine promozione"
+
+#. module: purchase_vendor_promotion
+#: model:ir.model.fields,field_description:purchase_vendor_promotion.field_stock_warehouse_orderpoint__promotion_date_start
+msgid "Promotion Date Start"
+msgstr "Data inizio promozione"
+
+#. module: purchase_vendor_promotion
+#. odoo-python
+#: code:addons/purchase_vendor_promotion/models/product_supplierinfo.py:0
+#, python-format
+msgid "Promotion start date must be before end date."
+msgstr "La data di inizio promozione deve essere antecedente alla data di fine."
+
+#. module: purchase_vendor_promotion
+#: model:ir.model,name:purchase_vendor_promotion.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr "Riga ordine di acquisto"
+
+#. module: purchase_vendor_promotion
+#: model:ir.model,name:purchase_vendor_promotion.model_product_supplierinfo
+msgid "Supplier Pricelist"
+msgstr "Listino prezzi fornitore"
+
+#. module: purchase_vendor_promotion
+#. odoo-python
+#: code:addons/purchase_vendor_promotion/models/product_supplierinfo.py:0
+#, python-format
+msgid "Vendor promotion requires start and end dates."
+msgstr "La promozione fornitore richiede data di inizio e fine."
diff --git a/purchase_vendor_promotion/i18n/purchase_vendor_promotion.pot b/purchase_vendor_promotion/i18n/purchase_vendor_promotion.pot
index 83bb682156e..3f71ee33190 100644
--- a/purchase_vendor_promotion/i18n/purchase_vendor_promotion.pot
+++ b/purchase_vendor_promotion/i18n/purchase_vendor_promotion.pot
@@ -4,10 +4,8 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Odoo Server 16.0+e\n"
+"Project-Id-Version: Odoo Server 16.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-05-14 14:07+0000\n"
-"PO-Revision-Date: 2024-05-14 14:07+0000\n"
 "Last-Translator: \n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
diff --git a/purchase_vendor_promotion/models/__init__.py b/purchase_vendor_promotion/models/__init__.py
index 7d3cc1b5201..098323eec63 100644
--- a/purchase_vendor_promotion/models/__init__.py
+++ b/purchase_vendor_promotion/models/__init__.py
@@ -1,3 +1,4 @@
+from . import stock_route
 from . import purchase_order_line
 from . import product_supplierinfo
 from . import stock_warehouse_orderpoint
diff --git a/purchase_vendor_promotion/models/product_supplierinfo.py b/purchase_vendor_promotion/models/product_supplierinfo.py
index b3b4b9ccea0..922df0721a1 100644
--- a/purchase_vendor_promotion/models/product_supplierinfo.py
+++ b/purchase_vendor_promotion/models/product_supplierinfo.py
@@ -22,3 +22,14 @@ def _check_promotion_dates(self):
                     raise ValidationError(
                         _("Promotion start date must be before end date.")
                     )
+
+    def _is_promotion_active_or_upcoming(self, date=None):
+        """
+        Consider Promotion is active if it's within start and end date or it's in the future
+        """
+        self.ensure_one()
+        if not self.is_promotion:
+            return False
+        if not date:
+            date = fields.Date.today()
+        return date <= self.date_start or (self.date_start <= date <= self.date_end)
diff --git a/purchase_vendor_promotion/models/stock_route.py b/purchase_vendor_promotion/models/stock_route.py
new file mode 100644
index 00000000000..466b2636f4c
--- /dev/null
+++ b/purchase_vendor_promotion/models/stock_route.py
@@ -0,0 +1,10 @@
+# Copyright 2024 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo import fields, models
+
+
+class StockRoute(models.Model):
+    _inherit = "stock.route"
+
+    force_vendor_with_best_promotion = fields.Boolean(default=False)
diff --git a/purchase_vendor_promotion/models/stock_warehouse_orderpoint.py b/purchase_vendor_promotion/models/stock_warehouse_orderpoint.py
index 2fd217adeba..0dd24b19d72 100644
--- a/purchase_vendor_promotion/models/stock_warehouse_orderpoint.py
+++ b/purchase_vendor_promotion/models/stock_warehouse_orderpoint.py
@@ -12,6 +12,22 @@ class StockWarehouseOrderpoint(models.Model):
     )
     promotion_date_start = fields.Date(compute="_compute_promotion", store=True)
     promotion_date_end = fields.Date(compute="_compute_promotion", store=True)
+    supplier_id = fields.Many2one(
+        compute="_compute_supplier_id", readonly=False, store=True
+    )
+
+    @api.depends("route_id", "route_id.force_vendor_with_best_promotion")
+    def _compute_supplier_id(self):
+        for rec in self:
+            if rec.route_id and rec.route_id.force_vendor_with_best_promotion:
+                suppliers = rec.product_id._prepare_sellers(False)
+                promotion_suppliers = suppliers.filtered(
+                    lambda x: x._is_promotion_active_or_upcoming()
+                )
+                if promotion_suppliers:
+                    rec.supplier_id = promotion_suppliers[0].id
+                elif suppliers:
+                    rec.supplier_id = suppliers[0].id
 
     @api.depends("supplier_id")
     def _compute_promotion(self):
diff --git a/purchase_vendor_promotion/readme/CONTRIBUTORS.rst b/purchase_vendor_promotion/readme/CONTRIBUTORS.rst
index 8ed3aebaca0..bff50efc42b 100644
--- a/purchase_vendor_promotion/readme/CONTRIBUTORS.rst
+++ b/purchase_vendor_promotion/readme/CONTRIBUTORS.rst
@@ -1 +1,3 @@
 * Telmo Santos <telmo.santos@camptocamp.com>
+* Tris Doan <tridm@trobz.com>
+
diff --git a/purchase_vendor_promotion/readme/DESCRIPTION.rst b/purchase_vendor_promotion/readme/DESCRIPTION.rst
index 251d9c9c07d..aac1b9c22be 100644
--- a/purchase_vendor_promotion/readme/DESCRIPTION.rst
+++ b/purchase_vendor_promotion/readme/DESCRIPTION.rst
@@ -1,2 +1,3 @@
-This module allows you to visualise the start and end date of a vendor promotion during replenishment.
-A vendor price is considered as a promotion if product supplier info is flagged as a `promotion`.
\ No newline at end of file
+This module allows you to visualise the start and end date of a vendor promotion during replenishment, in `Inventory > Operations > Replenishment` or `Inventory > Configuration > Products > Reordering Rules`.
+A vendor price is considered as a promotion if product supplier info is flagged as a `promotion`.
+If "Buy" is chosen as the Preferred Route, the vendor having the best active or upcoming promotion for the product will be automatically chosen. If no promotion is available, then first vendor will be chosen.
diff --git a/purchase_vendor_promotion/static/description/icon.png b/purchase_vendor_promotion/static/description/icon.png
new file mode 100644
index 00000000000..3a0328b516c
Binary files /dev/null and b/purchase_vendor_promotion/static/description/icon.png differ
diff --git a/purchase_vendor_promotion/static/description/index.html b/purchase_vendor_promotion/static/description/index.html
index 8707a3e9d17..6c50fe75213 100644
--- a/purchase_vendor_promotion/static/description/index.html
+++ b/purchase_vendor_promotion/static/description/index.html
@@ -1,20 +1,20 @@
-<?xml version="1.0" encoding="utf-8" ?>
 <!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: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
 <title>Purchase Vendor Promotion</title>
 <style type="text/css">
 
 /*
 :Author: David Goodger (goodger@python.org)
-:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
+: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 http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
 customize this style sheet.
 */
 
@@ -275,7 +275,7 @@
   margin-left: 2em ;
   margin-right: 2em }
 
-pre.code .ln { color: grey; } /* line numbers */
+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 }
@@ -301,7 +301,7 @@
 span.pre {
   white-space: pre }
 
-span.problematic {
+span.problematic, pre.problematic {
   color: red }
 
 span.section-subtitle {
@@ -366,48 +366,54 @@ <h1 class="title">Purchase Vendor Promotion</h1>
 <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 !! This file is generated by oca-gen-addon-readme !!
 !! changes will be overwritten.                   !!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! source digest: sha256:d9b1b88cbcd184f9d7419231e529d3ca7b29ad1e59a9a0cdb3842a60ddc46126
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-<p><a class="reference external" 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" 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" href="https://github.com/OCA/purchase-workflow/tree/16.0/purchase_vendor_promotion"><img alt="OCA/purchase-workflow" src="https://img.shields.io/badge/github-OCA%2Fpurchase--workflow-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/purchase-workflow-16-0/purchase-workflow-16-0-purchase_vendor_promotion"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runboat.odoo-community.org/webui/builds.html?repo=OCA/purchase-workflow&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 allows you to visualise the start and end date of a vendor promotion during replenishment.
-A vendor price is considered as a promotion if product supplier info is flagged as a <cite>promotion</cite>.</p>
+<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/purchase-workflow/tree/16.0/purchase_vendor_promotion"><img alt="OCA/purchase-workflow" src="https://img.shields.io/badge/github-OCA%2Fpurchase--workflow-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/purchase-workflow-16-0/purchase-workflow-16-0-purchase_vendor_promotion"><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/purchase-workflow&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 allows you to visualise the start and end date of a vendor promotion during replenishment, in <cite>Inventory &gt; Operations &gt; Replenishment</cite> or <cite>Inventory &gt; Configuration &gt; Products &gt; Reordering Rules</cite>.
+A vendor price is considered as a promotion if product supplier info is flagged as a <cite>promotion</cite>.
+If “Buy” is chosen as the Preferred Route, the vendor having the best active or upcoming promotion for the product will be automatically chosen. If no promotion is available, then first vendor will be chosen.</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="id1">Bug Tracker</a></li>
-<li><a class="reference internal" href="#credits" id="id2">Credits</a><ul>
-<li><a class="reference internal" href="#authors" id="id3">Authors</a></li>
-<li><a class="reference internal" href="#contributors" id="id4">Contributors</a></li>
-<li><a class="reference internal" href="#maintainers" id="id5">Maintainers</a></li>
+<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">
-<h1><a class="toc-backref" href="#id1">Bug Tracker</a></h1>
+<h1><a class="toc-backref" href="#toc-entry-1">Bug Tracker</a></h1>
 <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/purchase-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 smashing it by providing a detailed and welcomed
+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/purchase-workflow/issues/new?body=module:%20purchase_vendor_promotion%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="#id2">Credits</a></h1>
+<h1><a class="toc-backref" href="#toc-entry-2">Credits</a></h1>
 <div class="section" id="authors">
-<h2><a class="toc-backref" href="#id3">Authors</a></h2>
+<h2><a class="toc-backref" href="#toc-entry-3">Authors</a></h2>
 <ul class="simple">
 <li>Camptocamp</li>
 </ul>
 </div>
 <div class="section" id="contributors">
-<h2><a class="toc-backref" href="#id4">Contributors</a></h2>
+<h2><a class="toc-backref" href="#toc-entry-4">Contributors</a></h2>
 <ul class="simple">
 <li>Telmo Santos &lt;<a class="reference external" href="mailto:telmo.santos&#64;camptocamp.com">telmo.santos&#64;camptocamp.com</a>&gt;</li>
+<li>Tris Doan &lt;<a class="reference external" href="mailto:tridm&#64;trobz.com">tridm&#64;trobz.com</a>&gt;</li>
 </ul>
 </div>
 <div class="section" id="maintainers">
-<h2><a class="toc-backref" href="#id5">Maintainers</a></h2>
+<h2><a class="toc-backref" href="#toc-entry-5">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>
+<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>
diff --git a/purchase_vendor_promotion/tests/test_vendor_promotion.py b/purchase_vendor_promotion/tests/test_vendor_promotion.py
index 5a8adfa679c..0f13a59081f 100644
--- a/purchase_vendor_promotion/tests/test_vendor_promotion.py
+++ b/purchase_vendor_promotion/tests/test_vendor_promotion.py
@@ -1,10 +1,13 @@
 # Copyright 2024 Camptocamp (<https://www.camptocamp.com>).
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+from freezegun import freeze_time
+
 from odoo import Command
 from odoo.exceptions import ValidationError
 from odoo.tests import TransactionCase, tagged
 
 
+@freeze_time("2024-01-02 03:21:34")
 @tagged("post_install", "-at_install")
 class TestVendorPromotion(TransactionCase):
     @classmethod
@@ -55,6 +58,20 @@ def setUpClass(cls):
                 },
             ]
         )
+        cls.buy_route = cls.env.ref(
+            "purchase_stock.route_warehouse0_buy", raise_if_not_found=False
+        )
+        cls.test_orderpoint = (
+            cls.env["stock.warehouse.orderpoint"]
+            .with_company(cls.company_a)
+            .create(
+                {
+                    "product_id": cls.product.id,
+                    "product_min_qty": 1,
+                    "route_id": cls.buy_route.id,
+                }
+            )
+        )
 
     def test_promotion_dates_validation(self):
         with self.assertRaises(ValidationError):
@@ -89,17 +106,26 @@ def test_purchase_vendor_promotion(self):
         self.assertTrue(purchase_order.order_line.is_promotion)
 
     def test_orderpoint_promotion(self):
-        orderpoint = (
-            self.env["stock.warehouse.orderpoint"]
-            .with_company(self.company_a)
-            .create(
-                {
-                    "product_id": self.product.id,
-                    "product_min_qty": 1,
-                    "warehouse_id": self.warehouse_a.id,
-                    "location_id": self.stock_location_a.id,
-                    "supplier_id": self.product.seller_ids[1].id,
-                }
-            )
+        self.assertEqual(
+            self.test_orderpoint.promotion_period, "2024-01-01 - 2024-12-31"
+        )
+
+    def test_default_supplier_01(self):
+        """Assign promotion supplier, even if his price is not the best"""
+        default_vendor = self.product.seller_ids.filtered(
+            lambda x: x.partner_id == self.vendor2
+        )
+        self.assertEqual(self.test_orderpoint.supplier_id, default_vendor)
+
+        # If promotion is in the future, consider it as active too
+        default_vendor.date_end = "2025-12-31"
+        default_vendor.date_start = "2025-01-01"
+        self.assertEqual(self.test_orderpoint.supplier_id, default_vendor)
+
+    def test_default_supplier_02(self):
+        """If no promotion supplier in the product, assign first vendor as default supplier"""
+        promotion_vendor = self.product.seller_ids.filtered(
+            lambda x: x.partner_id == self.vendor2
         )
-        self.assertEqual(orderpoint.promotion_period, "2024-01-01 - 2024-12-31")
+        promotion_vendor.write({"is_promotion": False})
+        self.assertTrue(self.test_orderpoint.supplier_id)
diff --git a/purchase_vendor_promotion/views/stock_route.xml b/purchase_vendor_promotion/views/stock_route.xml
new file mode 100644
index 00000000000..cc5a99e9029
--- /dev/null
+++ b/purchase_vendor_promotion/views/stock_route.xml
@@ -0,0 +1,11 @@
+<odoo>
+    <record model="ir.ui.view" id="stock_route_form_view">
+        <field name="model">stock.route</field>
+        <field name="inherit_id" ref="stock.stock_location_route_form_view" />
+        <field name="arch" type="xml">
+            <field name="active" position="after">
+                <field name="force_vendor_with_best_promotion" />
+            </field>
+        </field>
+    </record>
+</odoo>
diff --git a/setup/_metapackage/VERSION.txt b/setup/_metapackage/VERSION.txt
index 75db654efc5..a90a4b5afaa 100644
--- a/setup/_metapackage/VERSION.txt
+++ b/setup/_metapackage/VERSION.txt
@@ -1 +1 @@
-16.0.20240511.0
\ No newline at end of file
+16.0.20240617.0
\ No newline at end of file
diff --git a/setup/_metapackage/setup.py b/setup/_metapackage/setup.py
index ee0d724aa36..da4bf02a3cb 100644
--- a/setup/_metapackage/setup.py
+++ b/setup/_metapackage/setup.py
@@ -10,12 +10,14 @@
     install_requires=[
         'odoo-addon-procurement_purchase_no_grouping>=16.0dev,<16.1dev',
         'odoo-addon-product_supplier_code_purchase>=16.0dev,<16.1dev',
+        'odoo-addon-product_supplierinfo_purchase_contact>=16.0dev,<16.1dev',
         'odoo-addon-product_supplierinfo_qty_multiplier>=16.0dev,<16.1dev',
         'odoo-addon-purchase_advance_payment>=16.0dev,<16.1dev',
         'odoo-addon-purchase_all_shipments>=16.0dev,<16.1dev',
         'odoo-addon-purchase_allowed_product>=16.0dev,<16.1dev',
         'odoo-addon-purchase_blanket_order>=16.0dev,<16.1dev',
         'odoo-addon-purchase_commercial_partner>=16.0dev,<16.1dev',
+        'odoo-addon-purchase_date_planned_manual>=16.0dev,<16.1dev',
         'odoo-addon-purchase_default_terms_conditions>=16.0dev,<16.1dev',
         'odoo-addon-purchase_delivery_split_date>=16.0dev,<16.1dev',
         'odoo-addon-purchase_deposit>=16.0dev,<16.1dev',
@@ -69,11 +71,13 @@
         'odoo-addon-purchase_return>=16.0dev,<16.1dev',
         'odoo-addon-purchase_sale_link_by_origin>=16.0dev,<16.1dev',
         'odoo-addon-purchase_security>=16.0dev,<16.1dev',
+        'odoo-addon-purchase_sign>=16.0dev,<16.1dev',
         'odoo-addon-purchase_stock_packaging>=16.0dev,<16.1dev',
         'odoo-addon-purchase_stock_price_unit_sync>=16.0dev,<16.1dev',
         'odoo-addon-purchase_tag>=16.0dev,<16.1dev',
         'odoo-addon-purchase_tier_validation>=16.0dev,<16.1dev',
         'odoo-addon-purchase_triple_discount>=16.0dev,<16.1dev',
+        'odoo-addon-purchase_vendor_promotion>=16.0dev,<16.1dev',
         'odoo-addon-purchase_warn_message>=16.0dev,<16.1dev',
         'odoo-addon-purchase_work_acceptance>=16.0dev,<16.1dev',
         'odoo-addon-sale_purchase_force_vendor>=16.0dev,<16.1dev',
diff --git a/setup/product_supplierinfo_purchase_contact/odoo/addons/product_supplierinfo_purchase_contact b/setup/product_supplierinfo_purchase_contact/odoo/addons/product_supplierinfo_purchase_contact
new file mode 120000
index 00000000000..f0c8651e0df
--- /dev/null
+++ b/setup/product_supplierinfo_purchase_contact/odoo/addons/product_supplierinfo_purchase_contact
@@ -0,0 +1 @@
+../../../../product_supplierinfo_purchase_contact
\ No newline at end of file
diff --git a/setup/product_supplierinfo_purchase_contact/setup.py b/setup/product_supplierinfo_purchase_contact/setup.py
new file mode 100644
index 00000000000..28c57bb6403
--- /dev/null
+++ b/setup/product_supplierinfo_purchase_contact/setup.py
@@ -0,0 +1,6 @@
+import setuptools
+
+setuptools.setup(
+    setup_requires=['setuptools-odoo'],
+    odoo_addon=True,
+)
diff --git a/setup/purchase_date_planned_manual/odoo/addons/purchase_date_planned_manual b/setup/purchase_date_planned_manual/odoo/addons/purchase_date_planned_manual
new file mode 120000
index 00000000000..f9b88ab3fec
--- /dev/null
+++ b/setup/purchase_date_planned_manual/odoo/addons/purchase_date_planned_manual
@@ -0,0 +1 @@
+../../../../purchase_date_planned_manual
\ No newline at end of file
diff --git a/setup/purchase_date_planned_manual/setup.py b/setup/purchase_date_planned_manual/setup.py
new file mode 100644
index 00000000000..28c57bb6403
--- /dev/null
+++ b/setup/purchase_date_planned_manual/setup.py
@@ -0,0 +1,6 @@
+import setuptools
+
+setuptools.setup(
+    setup_requires=['setuptools-odoo'],
+    odoo_addon=True,
+)
diff --git a/setup/purchase_sign/odoo/addons/purchase_sign b/setup/purchase_sign/odoo/addons/purchase_sign
new file mode 120000
index 00000000000..508ad52fb32
--- /dev/null
+++ b/setup/purchase_sign/odoo/addons/purchase_sign
@@ -0,0 +1 @@
+../../../../purchase_sign
\ No newline at end of file
diff --git a/setup/purchase_sign/setup.py b/setup/purchase_sign/setup.py
new file mode 100644
index 00000000000..28c57bb6403
--- /dev/null
+++ b/setup/purchase_sign/setup.py
@@ -0,0 +1,6 @@
+import setuptools
+
+setuptools.setup(
+    setup_requires=['setuptools-odoo'],
+    odoo_addon=True,
+)