diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..dc5e6b6 --- /dev/null +++ b/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import models diff --git a/__manifest__.py b/__manifest__.py new file mode 100644 index 0000000..97d10d9 --- /dev/null +++ b/__manifest__.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +{ + 'name': 'Subcontracting Management with Stock Valuation', + 'version': '0.1', + 'category': 'Hidden', + 'description': """ +This bridge module allows to manage subcontracting with valuation. + """, + 'depends': ['mrp_subcontracting', 'mrp_account'], + 'installable': True, + 'auto_install': True, + 'license': 'LGPL-3', + 'data': [ + 'security/mrp_subcontracting_account_security.xml', + 'security/ir.model.access.csv', + ], +} diff --git a/i18n/ar.po b/i18n/ar.po new file mode 100644 index 0000000..11359da --- /dev/null +++ b/i18n/ar.po @@ -0,0 +1,40 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Arabic (https://app.transifex.com/odoo/teams/41243/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "متغير المنتج " + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "أمر الإنتاج" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "حركة المخزون" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "تحويل " diff --git a/i18n/bg.po b/i18n/bg.po new file mode 100644 index 0000000..ebcd487 --- /dev/null +++ b/i18n/bg.po @@ -0,0 +1,41 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Maria Boyadjieva , 2023 +# Martin Trigaux, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Martin Trigaux, 2023\n" +"Language-Team: Bulgarian (https://app.transifex.com/odoo/teams/41243/bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Продуктов вариант" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Производствена поръчка" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Движение в склада" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Прехвърлете" diff --git a/i18n/ca.po b/i18n/ca.po new file mode 100644 index 0000000..f87c510 --- /dev/null +++ b/i18n/ca.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Óscar Fonseca , 2023 +# Manel Fernandez Ramirez , 2023 +# Quim - eccit , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Quim - eccit , 2023\n" +"Language-Team: Catalan (https://app.transifex.com/odoo/teams/41243/ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Variant de producte" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Ordre de producció" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Moviment d'estoc" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Transferència" diff --git a/i18n/cs.po b/i18n/cs.po new file mode 100644 index 0000000..360e85e --- /dev/null +++ b/i18n/cs.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Jakub Smolka, 2023 +# Ivana Bartonkova, 2023 +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Czech (https://app.transifex.com/odoo/teams/41243/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Produktová varianta" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Výrobní příkaz" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Pohyb zásob" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Převod" diff --git a/i18n/da.po b/i18n/da.po new file mode 100644 index 0000000..b043333 --- /dev/null +++ b/i18n/da.po @@ -0,0 +1,40 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Martin Trigaux, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Martin Trigaux, 2023\n" +"Language-Team: Danish (https://app.transifex.com/odoo/teams/41243/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Varevariant" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Produktionsordre" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Lagerflytning" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Overfør" diff --git a/i18n/de.po b/i18n/de.po new file mode 100644 index 0000000..60cd95b --- /dev/null +++ b/i18n/de.po @@ -0,0 +1,40 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: German (https://app.transifex.com/odoo/teams/41243/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Produktvariante" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Fertigungsauftrag" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Lagerbuchung" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Transfer" diff --git a/i18n/es.po b/i18n/es.po new file mode 100644 index 0000000..df83d53 --- /dev/null +++ b/i18n/es.po @@ -0,0 +1,41 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Wil Odoo, 2023 +# Larissa Manderfeld, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Larissa Manderfeld, 2023\n" +"Language-Team: Spanish (https://app.transifex.com/odoo/teams/41243/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Variante de producto" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Orden de producción" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Movimiento de existencias" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Albarán" diff --git a/i18n/es_419.po b/i18n/es_419.po new file mode 100644 index 0000000..7729c14 --- /dev/null +++ b/i18n/es_419.po @@ -0,0 +1,40 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Spanish (Latin America) (https://app.transifex.com/odoo/teams/41243/es_419/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es_419\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Variante del producto" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Orden de producción" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Movimiento de existencias" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Trasladar" diff --git a/i18n/et.po b/i18n/et.po new file mode 100644 index 0000000..00bff5d --- /dev/null +++ b/i18n/et.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Martin Aavastik , 2023 +# Eneli Õigus , 2023 +# Patrick-Jordan Kiudorv, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Patrick-Jordan Kiudorv, 2023\n" +"Language-Team: Estonian (https://app.transifex.com/odoo/teams/41243/et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Toote variatsioon" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Tootmiskäsk" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Laoliikumine" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Siirded" diff --git a/i18n/fa.po b/i18n/fa.po new file mode 100644 index 0000000..eb76f73 --- /dev/null +++ b/i18n/fa.po @@ -0,0 +1,41 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Hamed Mohammadi , 2023 +# Martin Trigaux, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Martin Trigaux, 2023\n" +"Language-Team: Persian (https://app.transifex.com/odoo/teams/41243/fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fa\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "گونه محصول" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "سفارش تولید" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "انتقال موجودی" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "انتقال" diff --git a/i18n/fi.po b/i18n/fi.po new file mode 100644 index 0000000..457ae23 --- /dev/null +++ b/i18n/fi.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Tuomo Aura , 2023 +# Jussi Lehto , 2023 +# Martin Trigaux, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Martin Trigaux, 2023\n" +"Language-Team: Finnish (https://app.transifex.com/odoo/teams/41243/fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Tuotevariaatio" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Valmistustilaus" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Varastosiirto" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Siirto" diff --git a/i18n/fr.po b/i18n/fr.po new file mode 100644 index 0000000..5e4f2ab --- /dev/null +++ b/i18n/fr.po @@ -0,0 +1,40 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: French (https://app.transifex.com/odoo/teams/41243/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fr\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Variante de produit" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Ordre de production" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Mouvement de stock" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Transfert" diff --git a/i18n/he.po b/i18n/he.po new file mode 100644 index 0000000..0f13faf --- /dev/null +++ b/i18n/he.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# ExcaliberX , 2023 +# דודי מלכה , 2023 +# ZVI BLONDER , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: ZVI BLONDER , 2023\n" +"Language-Team: Hebrew (https://app.transifex.com/odoo/teams/41243/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: he\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "וריאנט מוצר" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "הוראת ייצור" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "תנועת מלאי" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "העברה" diff --git a/i18n/hu.po b/i18n/hu.po new file mode 100644 index 0000000..88e9e7f --- /dev/null +++ b/i18n/hu.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Martin Trigaux, 2023 +# krnkris, 2023 +# Tamás Németh , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Tamás Németh , 2023\n" +"Language-Team: Hungarian (https://app.transifex.com/odoo/teams/41243/hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Termékváltozat" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Termelési rendelés" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Készletmozgás" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Átmozgatás" diff --git a/i18n/id.po b/i18n/id.po new file mode 100644 index 0000000..f33e821 --- /dev/null +++ b/i18n/id.po @@ -0,0 +1,40 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Indonesian (https://app.transifex.com/odoo/teams/41243/id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Varian Produk" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Order Produksi" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Pergerakan Stok" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Transfer" diff --git a/i18n/it.po b/i18n/it.po new file mode 100644 index 0000000..7202f82 --- /dev/null +++ b/i18n/it.po @@ -0,0 +1,40 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Italian (https://app.transifex.com/odoo/teams/41243/it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: it\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Variante prodotto" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Ordine di produzione" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Movimento di magazzino" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Trasferisci" diff --git a/i18n/ja.po b/i18n/ja.po new file mode 100644 index 0000000..68f6eeb --- /dev/null +++ b/i18n/ja.po @@ -0,0 +1,40 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Japanese (https://app.transifex.com/odoo/teams/41243/ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "プロダクトバリアント" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "製造オーダ" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "在庫移動" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "移動" diff --git a/i18n/ko.po b/i18n/ko.po new file mode 100644 index 0000000..5fd66f2 --- /dev/null +++ b/i18n/ko.po @@ -0,0 +1,40 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Korean (https://app.transifex.com/odoo/teams/41243/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "품목 세부선택" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "생산 주문" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "재고 이동" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "전송" diff --git a/i18n/lt.po b/i18n/lt.po new file mode 100644 index 0000000..3821ae4 --- /dev/null +++ b/i18n/lt.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Martin Trigaux, 2023 +# UAB "Draugiški sprendimai" , 2023 +# Linas Versada , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Linas Versada , 2023\n" +"Language-Team: Lithuanian (https://app.transifex.com/odoo/teams/41243/lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Produkto variantas" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Gamybos užsakymas" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Atsargų perkėlimas" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Perkelti" diff --git a/i18n/lv.po b/i18n/lv.po new file mode 100644 index 0000000..8ac657c --- /dev/null +++ b/i18n/lv.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# JanisJanis , 2023 +# Armīns Jeltajevs , 2023 +# Martin Trigaux, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Martin Trigaux, 2023\n" +"Language-Team: Latvian (https://app.transifex.com/odoo/teams/41243/lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Produkta variants" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Ražošanas orderis" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Krājumu kustība" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Transfer" diff --git a/i18n/mrp_subcontracting_account.pot b/i18n/mrp_subcontracting_account.pot new file mode 100644 index 0000000..d45abcc --- /dev/null +++ b/i18n/mrp_subcontracting_account.pot @@ -0,0 +1,36 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 21:55+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "" diff --git a/i18n/nl.po b/i18n/nl.po new file mode 100644 index 0000000..4fb8d7f --- /dev/null +++ b/i18n/nl.po @@ -0,0 +1,40 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Dutch (https://app.transifex.com/odoo/teams/41243/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Productvariant" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Productieorder" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Voorraadverplaatsing" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Verplaatsing" diff --git a/i18n/pl.po b/i18n/pl.po new file mode 100644 index 0000000..7e3cb56 --- /dev/null +++ b/i18n/pl.po @@ -0,0 +1,40 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Polish (https://app.transifex.com/odoo/teams/41243/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Wariant produktu" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Zamówienie produkcji" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Przesunięcie" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Przekaz" diff --git a/i18n/pt.po b/i18n/pt.po new file mode 100644 index 0000000..872df23 --- /dev/null +++ b/i18n/pt.po @@ -0,0 +1,40 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Portuguese (https://app.transifex.com/odoo/teams/41243/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Variante de Artigo" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Ordem de Produção" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Movimento do Stock" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Transferência" diff --git a/i18n/pt_BR.po b/i18n/pt_BR.po new file mode 100644 index 0000000..301d6f1 --- /dev/null +++ b/i18n/pt_BR.po @@ -0,0 +1,41 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Wil Odoo, 2023 +# Maitê Dietze, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Maitê Dietze, 2024\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/odoo/teams/41243/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Variante do produto" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Ordem de produção" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Movimentação de estoque" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Transferência" diff --git a/i18n/ru.po b/i18n/ru.po new file mode 100644 index 0000000..7afd5cb --- /dev/null +++ b/i18n/ru.po @@ -0,0 +1,41 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Martin Trigaux, 2023 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2024\n" +"Language-Team: Russian (https://app.transifex.com/odoo/teams/41243/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Вариант продукта" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Заказ на производство" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Движение запасов" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Перевод" diff --git a/i18n/sk.po b/i18n/sk.po new file mode 100644 index 0000000..ac5b37c --- /dev/null +++ b/i18n/sk.po @@ -0,0 +1,40 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Slovak (https://app.transifex.com/odoo/teams/41243/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Varianta produktu" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Výrobná objednávka" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Pohyb skladu" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Prevod" diff --git a/i18n/sl.po b/i18n/sl.po new file mode 100644 index 0000000..a7a3e75 --- /dev/null +++ b/i18n/sl.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Matjaz Mozetic , 2023 +# Tomaž Jug , 2023 +# Martin Trigaux, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Martin Trigaux, 2023\n" +"Language-Team: Slovenian (https://app.transifex.com/odoo/teams/41243/sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Različica izdelka" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Proizvodni nalog" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Premik zaloge" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Prenos" diff --git a/i18n/sr.po b/i18n/sr.po new file mode 100644 index 0000000..0be9a04 --- /dev/null +++ b/i18n/sr.po @@ -0,0 +1,40 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Dragan Vukosavljevic , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Dragan Vukosavljevic , 2023\n" +"Language-Team: Serbian (https://app.transifex.com/odoo/teams/41243/sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sr\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: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Varijanta proizvoda" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Nalog za proizvodnju" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Premeštanje zaliha" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Prenos" diff --git a/i18n/sv.po b/i18n/sv.po new file mode 100644 index 0000000..2702923 --- /dev/null +++ b/i18n/sv.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Anders Wallenquist , 2023 +# Simon S, 2023 +# Martin Trigaux, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Martin Trigaux, 2023\n" +"Language-Team: Swedish (https://app.transifex.com/odoo/teams/41243/sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Produktvariant" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Tillverkningsorder" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Lagerflytt" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Flytt" diff --git a/i18n/th.po b/i18n/th.po new file mode 100644 index 0000000..e49c9ff --- /dev/null +++ b/i18n/th.po @@ -0,0 +1,40 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Thai (https://app.transifex.com/odoo/teams/41243/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "ตัวเลือกสินค้า" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "คำสั่งผลิต" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "ย้ายสต็อก" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "โอนย้าย" diff --git a/i18n/tr.po b/i18n/tr.po new file mode 100644 index 0000000..3dc9672 --- /dev/null +++ b/i18n/tr.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Ertuğrul Güreş , 2023 +# Murat Kaplan , 2023 +# Martin Trigaux, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Martin Trigaux, 2023\n" +"Language-Team: Turkish (https://app.transifex.com/odoo/teams/41243/tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Ürün Varyantı" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Üretim Emri" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Stok Hareketi" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Aktarım" diff --git a/i18n/uk.po b/i18n/uk.po new file mode 100644 index 0000000..de3bb03 --- /dev/null +++ b/i18n/uk.po @@ -0,0 +1,40 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Ukrainian (https://app.transifex.com/odoo/teams/41243/uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Варіант товару" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Замовлення на виробництво" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Складське переміщення " + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Переміщення" diff --git a/i18n/vi.po b/i18n/vi.po new file mode 100644 index 0000000..a46013e --- /dev/null +++ b/i18n/vi.po @@ -0,0 +1,40 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Vietnamese (https://app.transifex.com/odoo/teams/41243/vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "Biến thể sản phẩm" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "Lệnh sản xuất" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "Dịch chuyển tồn kho" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "Điều chuyển" diff --git a/i18n/zh_CN.po b/i18n/zh_CN.po new file mode 100644 index 0000000..8435570 --- /dev/null +++ b/i18n/zh_CN.po @@ -0,0 +1,41 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Wil Odoo, 2023 +# Jeffery CHEN , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Jeffery CHEN , 2023\n" +"Language-Team: Chinese (China) (https://app.transifex.com/odoo/teams/41243/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "产品变体" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "生产订单" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "库存移动" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "转账" diff --git a/i18n/zh_TW.po b/i18n/zh_TW.po new file mode 100644 index 0000000..f2fcbc4 --- /dev/null +++ b/i18n/zh_TW.po @@ -0,0 +1,40 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting_account +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Chinese (Taiwan) (https://app.transifex.com/odoo/teams/41243/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_product_product +msgid "Product Variant" +msgstr "產品款式" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_mrp_production +msgid "Production Order" +msgstr "製造訂單" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_move +msgid "Stock Move" +msgstr "庫存移動" + +#. module: mrp_subcontracting_account +#: model:ir.model,name:mrp_subcontracting_account.model_stock_picking +msgid "Transfer" +msgstr "轉移" diff --git a/models/__init__.py b/models/__init__.py new file mode 100644 index 0000000..6f59be2 --- /dev/null +++ b/models/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import mrp_production +from . import stock_picking +from . import product_product +from . import stock_move diff --git a/models/mrp_production.py b/models/mrp_production.py new file mode 100644 index 0000000..d76be99 --- /dev/null +++ b/models/mrp_production.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models + + +class MrpProduction(models.Model): + _inherit = 'mrp.production' + + def _cal_price(self, consumed_moves): + finished_move = self.move_finished_ids.filtered(lambda x: x.product_id == self.product_id and x.state not in ('done', 'cancel') and x.quantity > 0) + # Take the price unit of the reception move + last_done_receipt = finished_move.move_dest_ids.filtered(lambda m: m.state == 'done')[-1:] + if last_done_receipt.is_subcontract: + self.extra_cost = last_done_receipt._get_price_unit() + return super()._cal_price(consumed_moves=consumed_moves) diff --git a/models/product_product.py b/models/product_product.py new file mode 100644 index 0000000..f2539f2 --- /dev/null +++ b/models/product_product.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models, fields + +class ProductProduct(models.Model): + _inherit = 'product.product' + + def _compute_bom_price(self, bom, boms_to_recompute=False, byproduct_bom=False): + """ Add the price of the subcontracting supplier if it exists with the bom configuration. + """ + price = super()._compute_bom_price(bom, boms_to_recompute, byproduct_bom) + if bom and bom.type == 'subcontract': + seller = self._select_seller(quantity=bom.product_qty, uom_id=bom.product_uom_id, params={'subcontractor_ids': bom.subcontractor_ids}) + if seller: + seller_price = seller.currency_id._convert(seller.price, self.env.company.currency_id, (bom.company_id or self.env.company), fields.Date.today()) + price += seller.product_uom._compute_price(seller_price, self.uom_id) + return price diff --git a/models/stock_move.py b/models/stock_move.py new file mode 100644 index 0000000..2b92ecc --- /dev/null +++ b/models/stock_move.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models + + +class StockMove(models.Model): + _inherit = 'stock.move' + + def _should_force_price_unit(self): + self.ensure_one() + return self.is_subcontract or super()._should_force_price_unit() + + def _generate_valuation_lines_data(self, partner_id, qty, debit_value, credit_value, debit_account_id, credit_account_id, svl_id, description): + rslt = super()._generate_valuation_lines_data(partner_id, qty, debit_value, credit_value, debit_account_id, credit_account_id, svl_id, description) + + subcontract_production = self.production_id.filtered(lambda p: p.subcontractor_id) + if not subcontract_production: + return rslt + # split the credit line to two, one for component cost, one for subcontracting service cost + currency = self.company_id.currency_id + if self.product_id.cost_method == 'standard': + # In case of standard price, the component cost is the cost of the product + # the subcontracting service cost may not represent the real cost of the subcontracting service + # the difference should be posted in price difference account in the end + component_cost = currency.round(sum(m.price_unit * m.product_uom_qty for m in subcontract_production.move_raw_ids)) + subcontract_service_cost = credit_value - component_cost + else: + subcontract_service_cost = currency.round(subcontract_production.extra_cost * qty) + component_cost = credit_value - subcontract_service_cost + if not currency.is_zero(subcontract_service_cost): + del rslt['credit_line_vals'] + service_cost_account = self.product_id.product_tmpl_id.get_product_accounts()['stock_input'] + rslt['subcontract_credit_line_vals'] = { + 'name': description, + 'product_id': self.product_id.id, + 'quantity': qty, + 'product_uom_id': self.product_id.uom_id.id, + 'ref': description, + 'partner_id': partner_id, + 'balance': -subcontract_service_cost, + 'account_id': service_cost_account.id, + } + rslt['component_credit_line_vals'] = { + 'name': description, + 'product_id': self.product_id.id, + 'quantity': qty, + 'product_uom_id': self.product_id.uom_id.id, + 'ref': description, + 'partner_id': partner_id, + 'balance': -component_cost, + 'account_id': credit_account_id, + } + # if svl passed is not linked to the move in self, the valuation is a correction and should always credit the + # `stock_input` account as it adds directly to the value of the subcontracted product + elif svl_id and self.stock_valuation_layer_ids.ids and svl_id not in self.stock_valuation_layer_ids.ids: + rslt['credit_line_vals']['account_id'] = self.product_id.product_tmpl_id.get_product_accounts()['stock_input'].id + return rslt + + def _get_dest_account(self, account_data): + if self.raw_material_production_id.subcontractor_id: + return account_data['production'].id + return super()._get_dest_account(account_data) + + def _get_src_account(self, account_data): + if self.production_id.subcontractor_id: + return account_data['production'].id + return super()._get_src_account(account_data) diff --git a/models/stock_picking.py b/models/stock_picking.py new file mode 100644 index 0000000..6440926 --- /dev/null +++ b/models/stock_picking.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models +from odoo.osv.expression import OR + + +class StockPicking(models.Model): + _inherit = 'stock.picking' + + def action_view_stock_valuation_layers(self): + action = super(StockPicking, self).action_view_stock_valuation_layers() + subcontracted_productions = self._get_subcontract_production() + if not subcontracted_productions: + return action + domain = action['domain'] + domain_subcontracting = [('id', 'in', (subcontracted_productions.move_raw_ids | subcontracted_productions.move_finished_ids).stock_valuation_layer_ids.ids)] + domain = OR([domain, domain_subcontracting]) + return dict(action, domain=domain) diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv new file mode 100644 index 0000000..e4cec59 --- /dev/null +++ b/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_subcontracting_portal_analytic_account,subcontracting.portal.analytic_account,mrp_account.model_account_analytic_account,base.group_portal,1,0,0,0 +access_subcontracting_portal_analytic_line,subcontracting.portal.analytic_line,mrp_account.model_account_analytic_line,base.group_portal,1,1,0,0 diff --git a/security/mrp_subcontracting_account_security.xml b/security/mrp_subcontracting_account_security.xml new file mode 100644 index 0000000..18b8f23 --- /dev/null +++ b/security/mrp_subcontracting_account_security.xml @@ -0,0 +1,18 @@ + + + + + Analytic Account Subcontractor + + [('bom_ids', 'in', user.partner_id.commercial_partner_id.bom_ids.ids)] + + + + + Analytic Account Line Subcontractor + + [('account_id.bom_ids', 'in', user.partner_id.commercial_partner_id.bom_ids.ids)] + + + + diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..99d0c6d --- /dev/null +++ b/tests/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import test_subcontracting_account diff --git a/tests/test_subcontracting_account.py b/tests/test_subcontracting_account.py new file mode 100644 index 0000000..dcdde4b --- /dev/null +++ b/tests/test_subcontracting_account.py @@ -0,0 +1,571 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import Command, fields +from odoo.tests.common import Form, tagged +from odoo.tools.float_utils import float_round, float_compare + +from odoo.addons.mrp_subcontracting.tests.common import TestMrpSubcontractingCommon +from odoo.addons.mrp_account.tests.test_bom_price import TestBomPriceCommon + + +@tagged('post_install', '-at_install') +class TestAccountSubcontractingFlows(TestMrpSubcontractingCommon): + def test_subcontracting_account_flow_1(self): + # pylint: disable=bad-whitespace + self.stock_location = self.env.ref('stock.stock_location_stock') + self.customer_location = self.env.ref('stock.stock_location_customers') + self.supplier_location = self.env.ref('stock.stock_location_suppliers') + self.uom_unit = self.env.ref('uom.product_uom_unit') + + product_category_all = self.env.ref('product.product_category_all') + product_category_all.property_cost_method = 'fifo' + product_category_all.property_valuation = 'real_time' + in_account = self.env['account.account'].create({ + 'name': 'IN Account', + 'code': '000001', + 'account_type': 'asset_current', + }) + out_account = self.env['account.account'].create({ + 'name': 'OUT Account', + 'code': '000002', + 'account_type': 'asset_current', + }) + valu_account = self.env['account.account'].create({ + 'name': 'VALU Account', + 'code': '000003', + 'account_type': 'asset_current', + }) + production_cost_account = self.env['account.account'].create({ + 'name': 'PROD COST Account', + 'code': '000004', + 'account_type': 'asset_current', + }) + product_category_all.property_stock_account_input_categ_id = in_account + product_category_all.property_stock_account_output_categ_id = out_account + product_category_all.property_stock_account_production_cost_id = production_cost_account + product_category_all.property_stock_valuation_account_id = valu_account + stock_in_acc_id = product_category_all.property_stock_account_input_categ_id.id + stock_out_acc_id = product_category_all.property_stock_account_output_categ_id.id + stock_valu_acc_id = product_category_all.property_stock_valuation_account_id.id + stock_cop_acc_id = product_category_all.property_stock_account_production_cost_id.id + + # IN 10@10 comp1 10@20 comp2 + move1 = self.env['stock.move'].create({ + 'name': 'IN 10 units @ 10.00 per unit', + 'location_id': self.supplier_location.id, + 'location_dest_id': self.env.company.subcontracting_location_id.id, + 'product_id': self.comp1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 10.0, + 'price_unit': 10.0, + }) + move1._action_confirm() + move1._action_assign() + move1.move_line_ids.quantity = 10.0 + move1.picked = True + move1._action_done() + move2 = self.env['stock.move'].create({ + 'name': 'IN 10 units @ 20.00 per unit', + 'location_id': self.supplier_location.id, + 'location_dest_id': self.env.company.subcontracting_location_id.id, + 'product_id': self.comp2.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 10.0, + 'price_unit': 20.0, + }) + move2._action_confirm() + move2._action_assign() + move2.move_line_ids.quantity = 10.0 + move2.picked = True + move2._action_done() + + all_amls_ids = self.env['account.move.line'].search([]).ids + + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.env.ref('stock.picking_type_in') + picking_form.partner_id = self.subcontractor_partner1 + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.finished + move.product_uom_qty = 1 + picking_receipt = picking_form.save() + picking_receipt.move_ids.price_unit = 15.0 + + picking_receipt.action_confirm() + # Suppose the additional cost changes: + picking_receipt.move_ids.price_unit = 30.0 + picking_receipt.move_ids.quantity = 1.0 + picking_receipt.move_ids.picked = True + picking_receipt._action_done() + + mo = picking_receipt._get_subcontract_production() + # Finished is made of 1 comp1 and 1 comp2. + # Cost of comp1 = 10 + # Cost of comp2 = 20 + # --> Cost of finished = 10 + 20 = 30 + # Additionnal cost = 30 (from the purchase order line or directly set on the stock move here) + # Total cost of subcontracting 1 unit of finished = 30 + 30 = 60 + self.assertEqual(mo.move_finished_ids.stock_valuation_layer_ids.value, 60) + self.assertEqual(picking_receipt.move_ids.stock_valuation_layer_ids.value, 0) + self.assertEqual(picking_receipt.move_ids.product_id.value_svl, 60) + + amls = self.env['account.move.line'].search([('id', 'not in', all_amls_ids)]) + all_amls_ids += amls.ids + self.assertRecordValues(amls, [ + # Receipt from subcontractor + {'account_id': stock_valu_acc_id, 'product_id': self.finished.id, 'debit': 60.0, 'credit': 0.0}, + {'account_id': stock_in_acc_id, 'product_id': self.finished.id, 'debit': 0.0, 'credit': 30.0}, + {'account_id': stock_cop_acc_id, 'product_id': self.finished.id, 'debit': 0.0, 'credit': 30.0}, + # Delivery com2 to subcontractor + {'account_id': stock_valu_acc_id, 'product_id': self.comp2.id, 'debit': 0.0, 'credit': 20.0}, + {'account_id': stock_cop_acc_id, 'product_id': self.comp2.id, 'debit': 20.0, 'credit': 0.0}, + # Delivery com2 to subcontractor + {'account_id': stock_valu_acc_id, 'product_id': self.comp1.id, 'debit': 0.0, 'credit': 10.0}, + {'account_id': stock_cop_acc_id, 'product_id': self.comp1.id, 'debit': 10.0, 'credit': 0.0}, + ]) + + # Do the same without any additionnal cost + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.env.ref('stock.picking_type_in') + picking_form.partner_id = self.subcontractor_partner1 + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.finished + move.product_uom_qty = 1 + picking_receipt = picking_form.save() + picking_receipt.move_ids.price_unit = 0 + + picking_receipt.action_confirm() + picking_receipt.move_ids.quantity = 1.0 + picking_receipt.move_ids.picked = True + picking_receipt._action_done() + + mo = picking_receipt._get_subcontract_production() + # In this case, since there isn't any additionnal cost, the total cost of the subcontracting + # is the sum of the components' costs: 10 + 20 = 30 + self.assertEqual(mo.move_finished_ids.stock_valuation_layer_ids.value, 30) + self.assertEqual(picking_receipt.move_ids.product_id.value_svl, 90) + + amls = self.env['account.move.line'].search([('id', 'not in', all_amls_ids)]) + self.assertRecordValues(amls, [ + # Receipt from subcontractor + {'account_id': stock_cop_acc_id, 'product_id': self.finished.id, 'debit': 0.0, 'credit': 30.0}, + {'account_id': stock_valu_acc_id, 'product_id': self.finished.id, 'debit': 30.0, 'credit': 0.0}, + # Delivery com2 to subcontractor + {'account_id': stock_valu_acc_id, 'product_id': self.comp2.id, 'debit': 0.0, 'credit': 20.0}, + {'account_id': stock_cop_acc_id, 'product_id': self.comp2.id, 'debit': 20.0, 'credit': 0.0}, + # Delivery com2 to subcontractor + {'account_id': stock_valu_acc_id, 'product_id': self.comp1.id, 'debit': 0.0, 'credit': 10.0}, + {'account_id': stock_cop_acc_id, 'product_id': self.comp1.id, 'debit': 10.0, 'credit': 0.0}, + ]) + + def test_subcontracting_account_flow_2(self): + """Test when set Cost of Production account on production location, subcontracting + won't use it. + """ + # pylint: disable=bad-whitespace + self.stock_location = self.env.ref('stock.stock_location_stock') + self.customer_location = self.env.ref('stock.stock_location_customers') + self.supplier_location = self.env.ref('stock.stock_location_suppliers') + self.uom_unit = self.env.ref('uom.product_uom_unit') + product_category_all = self.env.ref('product.product_category_all') + product_category_all.property_cost_method = 'fifo' + product_category_all.property_valuation = 'real_time' + in_account = self.env['account.account'].create({ + 'name': 'IN Account', + 'code': '000001', + 'account_type': 'asset_current', + }) + out_account = self.env['account.account'].create({ + 'name': 'OUT Account', + 'code': '000002', + 'account_type': 'asset_current', + }) + valu_account = self.env['account.account'].create({ + 'name': 'VALU Account', + 'code': '000003', + 'account_type': 'asset_current', + }) + production_cost_account = self.env['account.account'].create({ + 'name': 'PROD COST Account', + 'code': '000004', + 'account_type': 'asset_current', + }) + product_category_all.property_stock_account_input_categ_id = in_account + product_category_all.property_stock_account_output_categ_id = out_account + product_category_all.property_stock_account_production_cost_id = production_cost_account + product_category_all.property_stock_valuation_account_id = valu_account + stock_in_acc_id = product_category_all.property_stock_account_input_categ_id.id + stock_valu_acc_id = product_category_all.property_stock_valuation_account_id.id + stock_cop_acc_id = product_category_all.property_stock_account_production_cost_id.id + + # set Cost of Production account on production location + cop_account = self.env['account.account'].create({ + 'name': 'Cost of Production', + 'code': 'CoP', + "account_type": 'expense', + 'reconcile': False, + }) + self.comp1.property_stock_production.write({ + 'valuation_out_account_id': cop_account.id, + 'valuation_in_account_id': cop_account.id, + }) + + # IN 10@10 comp1 10@20 comp2 + move1 = self.env['stock.move'].create({ + 'name': 'IN 10 units @ 10.00 per unit', + 'location_id': self.supplier_location.id, + 'location_dest_id': self.env.company.subcontracting_location_id.id, + 'product_id': self.comp1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 10.0, + 'price_unit': 10.0, + }) + move1._action_confirm() + move1._action_assign() + move1.move_line_ids.quantity = 10.0 + move1.picked = True + move1._action_done() + move2 = self.env['stock.move'].create({ + 'name': 'IN 10 units @ 20.00 per unit', + 'location_id': self.supplier_location.id, + 'location_dest_id': self.env.company.subcontracting_location_id.id, + 'product_id': self.comp2.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 10.0, + 'price_unit': 20.0, + }) + move2._action_confirm() + move2._action_assign() + move2.move_line_ids.quantity = 10.0 + move2.picked = True + move2._action_done() + + all_amls_ids = self.env['account.move.line'].search([]).ids + + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.env.ref('stock.picking_type_in') + picking_form.partner_id = self.subcontractor_partner1 + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.finished + move.product_uom_qty = 1 + picking_receipt = picking_form.save() + picking_receipt.move_ids.price_unit = 30.0 + picking_receipt.action_confirm() + picking_receipt.move_ids.quantity = 1.0 + picking_receipt.move_ids.picked = True + picking_receipt._action_done() + + amls = self.env['account.move.line'].search([('id', 'not in', all_amls_ids)]) + all_amls_ids += amls.ids + self.assertRecordValues(amls, [ + # Receipt from subcontractor + {'account_id': stock_valu_acc_id, 'product_id': self.finished.id, 'debit': 60.0, 'credit': 0.0}, + {'account_id': stock_in_acc_id, 'product_id': self.finished.id, 'debit': 0.0, 'credit': 30.0}, + {'account_id': stock_cop_acc_id, 'product_id': self.finished.id, 'debit': 0.0, 'credit': 30.0}, + # Delivery com2 to subcontractor + {'account_id': stock_valu_acc_id, 'product_id': self.comp2.id, 'debit': 0.0, 'credit': 20.0}, + {'account_id': stock_cop_acc_id, 'product_id': self.comp2.id, 'debit': 20.0, 'credit': 0.0}, + # Delivery com2 to subcontractor + {'account_id': stock_valu_acc_id, 'product_id': self.comp1.id, 'debit': 0.0, 'credit': 10.0}, + {'account_id': stock_cop_acc_id, 'product_id': self.comp1.id, 'debit': 10.0, 'credit': 0.0}, + ]) + + def test_subcontracting_account_backorder(self): + """ This test uses tracked (serial and lot) component and tracked (serial) finished product + The original subcontracting production order will be split into 4 backorders. This test + ensure the extra cost asked from the subcontractor is added correctly on all the finished + product valuation layer. Not only the first one. """ + todo_nb = 4 + self.comp2.tracking = 'lot' + self.comp1.tracking = 'serial' + self.comp2.standard_price = 100 + self.finished.tracking = 'serial' + self.env.ref('product.product_category_all').property_cost_method = 'fifo' + + # Create a receipt picking from the subcontractor + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.env.ref('stock.picking_type_in') + picking_form.partner_id = self.subcontractor_partner1 + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.finished + move.quantity = todo_nb + picking_receipt = picking_form.save() + # Mimic the extra cost on the po line + picking_receipt.move_ids.price_unit = 50 + picking_receipt.action_confirm() + picking_receipt.do_unreserve() + + # We should be able to call the 'record_components' button + self.assertTrue(picking_receipt.display_action_record_components) + + lot_comp2 = self.env['stock.lot'].create({ + 'name': 'lot_comp2', + 'product_id': self.comp2.id, + 'company_id': self.env.company.id, + }) + serials_finished = [] + serials_comp1 = [] + for i in range(todo_nb): + serials_finished.append(self.env['stock.lot'].create({ + 'name': 'serial_fin_%s' % i, + 'product_id': self.finished.id, + 'company_id': self.env.company.id, + })) + serials_comp1.append(self.env['stock.lot'].create({ + 'name': 'serials_comp1_%s' % i, + 'product_id': self.comp1.id, + 'company_id': self.env.company.id, + })) + + for i in range(todo_nb): + action = picking_receipt.action_record_components() + mo = self.env['mrp.production'].browse(action['res_id']) + mo_form = Form(mo.with_context(**action['context']), view=action['view_id']) + mo_form.lot_producing_id = serials_finished[i] + with mo_form.move_line_raw_ids.edit(0) as ml: + self.assertEqual(ml.product_id, self.comp1) + ml.lot_id = serials_comp1[i] + with mo_form.move_line_raw_ids.edit(1) as ml: + self.assertEqual(ml.product_id, self.comp2) + ml.lot_id = lot_comp2 + mo = mo_form.save() + mo.subcontracting_record_component() + + # We should not be able to call the 'record_components' button + picking_receipt.move_ids.picked = True + picking_receipt.button_validate() + + f_layers = self.finished.stock_valuation_layer_ids + self.assertEqual(len(f_layers), 4) + for layer in f_layers: + self.assertEqual(layer.value, 100 + 50) + + def test_tracked_compo_and_backorder(self): + """ + Suppose a subcontracted product P with two tracked components, P is FIFO + Create a receipt for 10 x P, receive 5, then 3 and then 2 + """ + self.env.ref('product.product_category_all').property_cost_method = 'fifo' + self.comp1.tracking = 'lot' + self.comp1.standard_price = 10 + self.comp2.tracking = 'lot' + self.comp2.standard_price = 20 + + lot01, lot02 = self.env['stock.lot'].create([{ + 'name': "Lot of %s" % product.name, + 'product_id': product.id, + 'company_id': self.env.company.id, + } for product in (self.comp1, self.comp2)]) + + receipt_form = Form(self.env['stock.picking']) + receipt_form.picking_type_id = self.env.ref('stock.picking_type_in') + receipt_form.partner_id = self.subcontractor_partner1 + with receipt_form.move_ids_without_package.new() as move: + move.product_id = self.finished + move.product_uom_qty = 10 + receipt = receipt_form.save() + # add an extra cost + receipt.move_ids.price_unit = 50 + receipt.action_confirm() + + for qty_producing in (5, 3, 2): + action = receipt.action_record_components() + mo = self.env['mrp.production'].browse(action['res_id']) + mo_form = Form(mo.with_context(**action['context']), view=action['view_id']) + mo_form.qty_producing = qty_producing + with mo_form.move_line_raw_ids.edit(0) as ml: + ml.lot_id = lot01 + with mo_form.move_line_raw_ids.edit(1) as ml: + ml.lot_id = lot02 + mo = mo_form.save() + mo.subcontracting_record_component() + + action = receipt.button_validate() + if isinstance(action, dict): + wizard = Form(self.env[action['res_model']].with_context(action['context'])).save() + wizard.process() + receipt = receipt.backorder_ids + + self.assertRecordValues(self.finished.stock_valuation_layer_ids, [ + {'quantity': 5, 'value': 5 * (10 + 20 + 50)}, + {'quantity': 3, 'value': 3 * (10 + 20 + 50)}, + {'quantity': 2, 'value': 2 * (10 + 20 + 50)}, + ]) + + def test_subcontract_cost_different_when_standard_price(self): + """Test when subcontracting with standard price when + Final product cost != Components cost + Subcontracting cost + When posting the account entries for receiving final product, the + subcontracting cost will be adjusted based on the difference of the cost. + """ + # pylint: disable=bad-whitespace + self.stock_location = self.env.ref('stock.stock_location_stock') + self.customer_location = self.env.ref('stock.stock_location_customers') + self.supplier_location = self.env.ref('stock.stock_location_suppliers') + self.uom_unit = self.env.ref('uom.product_uom_unit') + product_category_all = self.env.ref('product.product_category_all') + product_category_all.property_cost_method = 'standard' + product_category_all.property_valuation = 'real_time' + + in_account = self.env['account.account'].create({ + 'name': 'IN Account', + 'code': '000001', + 'account_type': 'asset_current', + }) + out_account = self.env['account.account'].create({ + 'name': 'OUT Account', + 'code': '000002', + 'account_type': 'asset_current', + }) + valu_account = self.env['account.account'].create({ + 'name': 'VALU Account', + 'code': '000003', + 'account_type': 'asset_current', + }) + production_cost_account = self.env['account.account'].create({ + 'name': 'PROD COST Account', + 'code': '000004', + 'account_type': 'asset_current', + }) + product_category_all.property_stock_account_input_categ_id = in_account + product_category_all.property_stock_account_output_categ_id = out_account + product_category_all.property_stock_account_production_cost_id = production_cost_account + product_category_all.property_stock_valuation_account_id = valu_account + stock_in_acc_id = product_category_all.property_stock_account_input_categ_id.id + stock_valu_acc_id = product_category_all.property_stock_valuation_account_id.id + stock_cop_acc_id = product_category_all.property_stock_account_production_cost_id.id + self.comp1.standard_price = 10 + self.comp2.standard_price = 20 + self.finished.standard_price = 40 + + all_amls_ids = self.env['account.move.line'].search([]).ids + + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.env.ref('stock.picking_type_in') + picking_form.partner_id = self.subcontractor_partner1 + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.finished + move.product_uom_qty = 1 + picking_receipt = picking_form.save() + # subcontracting cost is 15 + picking_receipt.move_ids.price_unit = 15.0 + picking_receipt.action_confirm() + + picking_receipt.move_ids.quantity = 1.0 + picking_receipt.move_ids.picked = True + picking_receipt._action_done() + + amls = self.env['account.move.line'].search([('id', 'not in', all_amls_ids)]) + self.assertRecordValues(amls, [ + # Receipt from subcontractor + {'account_id': stock_valu_acc_id, 'product_id': self.finished.id, 'debit': 40.0, 'credit': 0.0}, + {'account_id': stock_in_acc_id, 'product_id': self.finished.id, 'debit': 0.0, 'credit': 10.0}, # adjust according to the difference + {'account_id': stock_cop_acc_id, 'product_id': self.finished.id, 'debit': 0.0, 'credit': 30.0}, + # Delivery com2 to subcontractor + {'account_id': stock_valu_acc_id, 'product_id': self.comp2.id, 'debit': 0.0, 'credit': 20.0}, + {'account_id': stock_cop_acc_id, 'product_id': self.comp2.id, 'debit': 20.0, 'credit': 0.0}, + # Delivery com2 to subcontractor + {'account_id': stock_valu_acc_id, 'product_id': self.comp1.id, 'debit': 0.0, 'credit': 10.0}, + {'account_id': stock_cop_acc_id, 'product_id': self.comp1.id, 'debit': 10.0, 'credit': 0.0}, + ]) + + +class TestBomPriceSubcontracting(TestBomPriceCommon): + + def test_01_compute_price_subcontracting_cost(self): + """Test calculation of bom cost with subcontracting.""" + self.table_head.uom_po_id = self.dozen + partner = self.env['res.partner'].create({ + 'name': 'A name can be a Many2one...' + }) + (self.bom_1 | self.bom_2).write({ + 'type': 'subcontract', + 'subcontractor_ids': [Command.link(partner.id)] + }) + suppliers = self.env['product.supplierinfo'].create([ + { + 'partner_id': partner.id, + 'product_tmpl_id': self.dining_table.product_tmpl_id.id, + 'price': 150.0, + }, { + 'partner_id': partner.id, + 'product_tmpl_id': self.table_head.product_tmpl_id.id, + 'price': 120.0, # 10 by Unit because uom_po_id is in dozen + } + ]) + self.assertEqual(suppliers.mapped('is_subcontractor'), [True, True]) + + # ----------------------------------------------------------------- + # Cost of BoM (Dining Table 1 Unit) + # ----------------------------------------------------------------- + # Component Cost = Table Head 1 Unit * 300 = 300 (478.75 from it's components) + # Screw 5 Unit * 10 = 50 + # Leg 4 Unit * 25 = 100 + # Glass 1 Unit * 100 = 100 + # Subcontracting 1 Unit * 150 = 150 + # Total = 700 [878.75 if components of Table Head considered] (for 1 Unit) + # ----------------------------------------------------------------- + self.assertEqual(self.dining_table.standard_price, 1000, "Initial price of the Product should be 1000") + self.dining_table.button_bom_cost() + self.assertEqual(float_round(self.dining_table.standard_price, precision_digits=2), 700.0, "After computing price from BoM price should be 700") + + # Cost of BoM (Table Head 1 Dozen) + # ----------------------------------------------------------------- + # Component Cost = Plywood Sheet 12 Unit * 200 = 2400 + # Bolt 60 Unit * 10 = 600 + # Colour 12 Unit * 100 = 1200 + # Corner Slide 57 Unit * 25 = 1425 + # Subcontracting 1 Dozen * 120 = 120 + # Total = 5745 + # 1 Unit price (5745/12) = 478.75 + # ----------------------------------------------------------------- + + self.assertEqual(self.table_head.standard_price, 300, "Initial price of the Product should be 300") + self.Product.browse([self.dining_table.id, self.table_head.id]).action_bom_cost() + self.assertEqual(float_compare(self.table_head.standard_price, 478.75, precision_digits=2), 0, "After computing price from BoM price should be 878.75") + self.assertEqual(float_compare(self.dining_table.standard_price, 878.75, precision_digits=2), 0, "After computing price from BoM price should be 878.75") + + def test_02_compute_price_subcontracting_cost(self): + """Test calculation of bom cost with subcontracting and supplier in different currency.""" + currency_a = self.env['res.currency'].create({ + 'name': 'ZEN', + 'symbol': 'Z', + 'rounding': 0.01, + 'currency_unit_label': 'Zenny', + 'rate_ids': [(0, 0, { + 'name': fields.Date.today(), + 'company_rate': 0.5, + })], + }) + + partner = self.env['res.partner'].create({ + 'name': 'supplier', + }) + product = self.env['product.product'].create({ + 'name': 'product', + 'type': 'product', + 'standard_price': 100, + 'company_id': self.env.company.id, + }) + supplier = self.env['product.supplierinfo'].create([{ + 'partner_id': partner.id, + 'product_tmpl_id': product.product_tmpl_id.id, + 'price': 120.0, + 'currency_id': currency_a.id, + }]) + self.env['mrp.bom'].create({ + 'product_tmpl_id': product.product_tmpl_id.id, + 'product_qty': 1, + 'type': 'subcontract', + 'subcontractor_ids': [Command.link(partner.id)], + 'bom_line_ids': [ + (0, 0, {'product_id': self.table_head.id, 'product_qty': 1}), + ], + }) + self.table_head.standard_price = 100 + self.assertEqual(supplier.is_subcontractor, True) + self.assertEqual(product.standard_price, 100, "Initial price of the Product should be 100") + product.button_bom_cost() + # 120 Zen = 240 USD (120 * 2) + # price = 240 + 100 (1 unit of component "table_head") = 340 + self.assertEqual(product.standard_price, 340, "After computing price from BoM price should be 340")