first commit
This commit is contained in:
2
modules/stock_product_location_place/__init__.py
Normal file
2
modules/stock_product_location_place/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
51
modules/stock_product_location_place/locale/bg.po
Normal file
51
modules/stock_product_location_place/locale/bg.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr ""
|
||||
51
modules/stock_product_location_place/locale/ca.po
Normal file
51
modules/stock_product_location_place/locale/ca.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr "Llocs per ubicació"
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr "Llocs per ubicació"
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr "Lloc"
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr "Del lloc"
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr "Al lloc"
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr "Ubicació d'emmagatzematge"
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr "Lloc"
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr "Variant"
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr "Producte"
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr "El lloc on s'emmagatzema sempre el producte a la ubicació."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr "Només es pot definir un lloc pel producte per cada ubicació."
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr "Lloc ubicació producte"
|
||||
51
modules/stock_product_location_place/locale/cs.po
Normal file
51
modules/stock_product_location_place/locale/cs.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr ""
|
||||
51
modules/stock_product_location_place/locale/de.po
Normal file
51
modules/stock_product_location_place/locale/de.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr "Lagerplätze je Lagerort"
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr "Lagerplätze je Lagerort"
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr "Lagerplatz"
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr "Von Lagerplatz"
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr "Zu Lagerplatz"
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr "Lagerort"
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr "Lagerplatz"
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr "Variante"
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr "Artikel"
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr "Der Lagerplatz, an dem der Artikel immer gelagert wird."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr "Pro Lagerort kann nur ein Artikellagerplatz definiert werden."
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr "Artikel Lagerplatz"
|
||||
51
modules/stock_product_location_place/locale/es.po
Normal file
51
modules/stock_product_location_place/locale/es.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr "Lugares por ubicación"
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr "Lugares por ubicación"
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr "Lugar"
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr "Del lugar"
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr "Al lugar"
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr "Ubicación almacenamiento"
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr "Lugar"
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr "Variante"
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr "Producto"
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr "El lugar donde se guarda siempre el producto en la ubicación."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr "Solo se puede definir una lugar para cada ubicación."
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr "Lugar ubicación producto"
|
||||
51
modules/stock_product_location_place/locale/es_419.po
Normal file
51
modules/stock_product_location_place/locale/es_419.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr ""
|
||||
51
modules/stock_product_location_place/locale/et.po
Normal file
51
modules/stock_product_location_place/locale/et.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr ""
|
||||
51
modules/stock_product_location_place/locale/fa.po
Normal file
51
modules/stock_product_location_place/locale/fa.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr ""
|
||||
51
modules/stock_product_location_place/locale/fi.po
Normal file
51
modules/stock_product_location_place/locale/fi.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr ""
|
||||
51
modules/stock_product_location_place/locale/fr.po
Normal file
51
modules/stock_product_location_place/locale/fr.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr "Places par emplacement"
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr "Places par emplacement"
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr "Place"
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr "Place d'origine"
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr "Place de destination"
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr "Emplacement de stockage"
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr "Place"
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr "Variante"
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr "Produit"
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr "La place où le produit est toujours stocké dans l'emplacement."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr "Une seul place de produit peut être défini par emplacement."
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr "Place d'emplacement du produit en stock"
|
||||
51
modules/stock_product_location_place/locale/hu.po
Normal file
51
modules/stock_product_location_place/locale/hu.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr ""
|
||||
51
modules/stock_product_location_place/locale/id.po
Normal file
51
modules/stock_product_location_place/locale/id.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr ""
|
||||
51
modules/stock_product_location_place/locale/it.po
Normal file
51
modules/stock_product_location_place/locale/it.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr ""
|
||||
51
modules/stock_product_location_place/locale/lo.po
Normal file
51
modules/stock_product_location_place/locale/lo.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr ""
|
||||
51
modules/stock_product_location_place/locale/lt.po
Normal file
51
modules/stock_product_location_place/locale/lt.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr ""
|
||||
51
modules/stock_product_location_place/locale/nl.po
Normal file
51
modules/stock_product_location_place/locale/nl.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr "Plaatsen per locatie"
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr "Plaatsen per locatie"
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr "Plek"
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr "Van plaats"
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr "Naar plaats"
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr "Opslag Locatie"
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr "Plek"
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr "Variant"
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr "Product"
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr "De plaats waar het product altijd op de locatie wordt opgeslagen."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr "Per locatie kan er maar één product plaats gedefinieerd worden."
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr "Voorraad product locatie plek"
|
||||
51
modules/stock_product_location_place/locale/pl.po
Normal file
51
modules/stock_product_location_place/locale/pl.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr ""
|
||||
51
modules/stock_product_location_place/locale/pt.po
Normal file
51
modules/stock_product_location_place/locale/pt.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr ""
|
||||
51
modules/stock_product_location_place/locale/ro.po
Normal file
51
modules/stock_product_location_place/locale/ro.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr ""
|
||||
51
modules/stock_product_location_place/locale/ru.po
Normal file
51
modules/stock_product_location_place/locale/ru.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr ""
|
||||
51
modules/stock_product_location_place/locale/sl.po
Normal file
51
modules/stock_product_location_place/locale/sl.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr ""
|
||||
51
modules/stock_product_location_place/locale/tr.po
Normal file
51
modules/stock_product_location_place/locale/tr.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr ""
|
||||
51
modules/stock_product_location_place/locale/uk.po
Normal file
51
modules/stock_product_location_place/locale/uk.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr ""
|
||||
51
modules/stock_product_location_place/locale/zh_CN.po
Normal file
51
modules/stock_product_location_place/locale/zh_CN.po
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,location_places:"
|
||||
msgid "Places per Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.inventory.line,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,from_place:"
|
||||
msgid "From Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.move,to_place:"
|
||||
msgid "To Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,location:"
|
||||
msgid "Storage Location"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,place:"
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,product:"
|
||||
msgid "Variant"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.product.location.place,template:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:stock.product.location.place,place:"
|
||||
msgid "The place where the product is always stored in the location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_stock_product_location_unique"
|
||||
msgid "Only one product place can be defined per location."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.product.location.place,string:"
|
||||
msgid "Stock Product Location Place"
|
||||
msgstr ""
|
||||
10
modules/stock_product_location_place/message.xml
Normal file
10
modules/stock_product_location_place/message.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<data grouped="1">
|
||||
<record model="ir.message" id="msg_stock_product_location_unique">
|
||||
<field name="text">Only one product place can be defined per location.</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
85
modules/stock_product_location_place/product.py
Normal file
85
modules/stock_product_location_place/product.py
Normal file
@@ -0,0 +1,85 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
from trytond.model import fields
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
from trytond.pyson import Eval
|
||||
|
||||
|
||||
class Template(metaclass=PoolMeta):
|
||||
__name__ = 'product.template'
|
||||
|
||||
location_places = fields.One2Many(
|
||||
'stock.product.location.place', 'template',
|
||||
"Places per Location",
|
||||
states={
|
||||
'invisible': ~Eval('type').in_(['goods', 'assets']),
|
||||
})
|
||||
|
||||
def get_place(self, location):
|
||||
for place in self.location_places:
|
||||
if (not place.product
|
||||
and place.location == location):
|
||||
return place
|
||||
|
||||
@classmethod
|
||||
def copy(cls, templates, default=None):
|
||||
pool = Pool()
|
||||
ProductLocationPlace = pool.get('stock.product.location.place')
|
||||
default = default.copy() if default is not None else {}
|
||||
|
||||
copy_location_places = 'location_places' not in default
|
||||
default.setdefault('location_places', None)
|
||||
new_templates = super().copy(templates, default=default)
|
||||
if copy_location_places:
|
||||
old2new, to_copy = {}, []
|
||||
for template, new_template in zip(templates, new_templates):
|
||||
to_copy.extend(
|
||||
p for p in template.location_places if not p.product)
|
||||
old2new[template.id] = new_template.id
|
||||
if to_copy:
|
||||
ProductLocationPlace.copy(to_copy, {
|
||||
'template': lambda d: old2new[d['template']],
|
||||
})
|
||||
return new_templates
|
||||
|
||||
|
||||
class Product(metaclass=PoolMeta):
|
||||
__name__ = 'product.product'
|
||||
|
||||
location_places = fields.One2Many(
|
||||
'stock.product.location.place', 'product',
|
||||
"Places per Location",
|
||||
states={
|
||||
'invisible': ~Eval('type').in_(['goods', 'assets']),
|
||||
})
|
||||
|
||||
def get_place(self, location):
|
||||
for place in self.location_places:
|
||||
if place.location == location:
|
||||
return place
|
||||
return self.template.get_place(location)
|
||||
|
||||
@classmethod
|
||||
def copy(cls, products, default=None):
|
||||
pool = Pool()
|
||||
ProductLocationPlace = pool.get('stock.product.location.place')
|
||||
default = default.copy() if default is not None else {}
|
||||
|
||||
copy_location_places = 'location_places' not in default
|
||||
if 'template' in default:
|
||||
default.setdefault('location_places', None)
|
||||
new_products = super().copy(products, default=default)
|
||||
if 'template' in default and copy_location_places:
|
||||
template2new, product2new, to_copy = {}, {}, []
|
||||
for product, new_product in zip(products, new_products):
|
||||
if product.location_places:
|
||||
to_copy.extend(product.location_places)
|
||||
template2new[product.template.id] = new_product.template.id
|
||||
product2new[product.id] = new_product.id
|
||||
if to_copy:
|
||||
ProductLocationPlace.copy(to_copy, {
|
||||
'product': lambda d: product2new[d['product']],
|
||||
'template': lambda d: template2new[d['template']],
|
||||
})
|
||||
return new_products
|
||||
12
modules/stock_product_location_place/product.xml
Normal file
12
modules/stock_product_location_place/product.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="product_template_view_form">
|
||||
<field name="model">product.template</field>
|
||||
<field name="inherit" ref="product.template_view_form"/>
|
||||
<field name="name">product_template_form</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
235
modules/stock_product_location_place/stock.py
Normal file
235
modules/stock_product_location_place/stock.py
Normal file
@@ -0,0 +1,235 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
from trytond.model import ModelSQL, ModelView, Unique, fields
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
from trytond.pyson import Eval, If
|
||||
|
||||
|
||||
class ProductLocationPlace(ModelSQL, ModelView):
|
||||
__name__ = 'stock.product.location.place'
|
||||
_rec_name = 'place'
|
||||
|
||||
template = fields.Many2One(
|
||||
'product.template', "Product",
|
||||
required=True, ondelete='CASCADE',
|
||||
domain=[
|
||||
If(Eval('product'),
|
||||
('products', '=', Eval('product', -1)),
|
||||
()),
|
||||
])
|
||||
product = fields.Many2One(
|
||||
'product.product', "Variant", ondelete='CASCADE',
|
||||
domain=[
|
||||
If(Eval('template'),
|
||||
('template', '=', Eval('template', -1)),
|
||||
()),
|
||||
])
|
||||
location = fields.Many2One(
|
||||
'stock.location', "Storage Location",
|
||||
required=True, ondelete='CASCADE',
|
||||
domain=[
|
||||
('type', '=', 'storage'),
|
||||
])
|
||||
place = fields.Char(
|
||||
"Place", required=True,
|
||||
help="The place where the product is always stored in the location.")
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
t = cls.__table__()
|
||||
cls._sql_constraints += [
|
||||
('template_product_location_unique',
|
||||
Unique(t, t.template, t.product, t.location),
|
||||
'stock_product_location_place.'
|
||||
'msg_stock_product_location_unique'),
|
||||
]
|
||||
|
||||
@fields.depends('product', '_parent_product.template')
|
||||
def on_change_product(self):
|
||||
if self.product:
|
||||
self.template = self.product.template
|
||||
|
||||
@classmethod
|
||||
def default_location(cls):
|
||||
pool = Pool()
|
||||
Location = pool.get('stock.location')
|
||||
warehouse = Location.get_default_warehouse()
|
||||
if warehouse:
|
||||
warehouse = Location(warehouse)
|
||||
if (warehouse.storage_location
|
||||
and warehouse.storage_location.type == 'storage'):
|
||||
return warehouse.storage_location.id
|
||||
elif (warehouse.picking_location
|
||||
and warehouse.picking_location.type == 'storage'):
|
||||
return warehouse.picking_location.id
|
||||
|
||||
|
||||
class Move(metaclass=PoolMeta):
|
||||
__name__ = 'stock.move'
|
||||
|
||||
from_place = fields.Many2One(
|
||||
'stock.product.location.place', "From Place", readonly=True,
|
||||
domain=[
|
||||
If(~Eval('state').in_(['done', 'cancelled']),
|
||||
['OR',
|
||||
('template.products', '=', Eval('product', -1)),
|
||||
('product', '=', Eval('product', -1)),
|
||||
],
|
||||
('location', '=', Eval('from_location', -1)),
|
||||
),
|
||||
])
|
||||
to_place = fields.Many2One(
|
||||
'stock.product.location.place', "To Place", readonly=True,
|
||||
domain=[
|
||||
If(~Eval('state').in_(['done', 'cancelled']),
|
||||
['OR',
|
||||
('template.products', '=', Eval('product', -1)),
|
||||
('product', '=', Eval('product', -1)),
|
||||
],
|
||||
('location', '=', Eval('to_location', -1)),
|
||||
),
|
||||
])
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
cls._allow_modify_closed_period |= {'from_place', 'to_place'}
|
||||
|
||||
@fields.depends('from_location', 'product')
|
||||
def on_change_with_from_place(self):
|
||||
if self.product and self.from_location:
|
||||
return self.product.get_place(self.from_location)
|
||||
|
||||
@fields.depends('to_location', 'product')
|
||||
def on_change_with_to_place(self):
|
||||
if self.product and self.to_location:
|
||||
return self.product.get_place(self.to_location)
|
||||
|
||||
@fields.depends('from_place')
|
||||
def on_change_with_from_location_name(self, name=None):
|
||||
name = super().on_change_with_from_location_name(name=name)
|
||||
if self.from_place:
|
||||
name = ' @ '.join(
|
||||
filter(None, [name, self.from_place.rec_name])).strip()
|
||||
return name
|
||||
|
||||
@fields.depends('to_place')
|
||||
def on_change_with_to_location_name(self, name=None):
|
||||
name = super().on_change_with_to_location_name(name=name)
|
||||
if self.to_place:
|
||||
name = ' @ '.join(
|
||||
filter(None, [name, self.to_place.rec_name])).strip()
|
||||
return name
|
||||
|
||||
def compute_fields(self, field_names=None):
|
||||
cls = self.__class__
|
||||
values = super().compute_fields(field_names=field_names)
|
||||
if getattr(self, 'state', None) not in {'done', 'cancelled'}:
|
||||
if (field_names is None
|
||||
or cls.from_place.on_change_with & field_names):
|
||||
from_place = self.on_change_with_from_place()
|
||||
if getattr(self, 'from_place', None) != from_place:
|
||||
values['from_place'] = from_place
|
||||
if (field_names is None
|
||||
or cls.to_place.on_change_with & field_names):
|
||||
to_place = self.on_change_with_to_place()
|
||||
if getattr(self, 'to_place', None) != to_place:
|
||||
values['to_place'] = to_place
|
||||
return values
|
||||
|
||||
@classmethod
|
||||
def write(cls, *args):
|
||||
# clean places as they maybe no more valid
|
||||
actions = iter(args)
|
||||
args = []
|
||||
for moves, values in zip(actions, actions):
|
||||
if {'product', 'from_location', 'to_location'} & values.keys():
|
||||
values = values.copy()
|
||||
values.setdefault('from_place')
|
||||
values.setdefault('to_place')
|
||||
args.extend((moves, values))
|
||||
|
||||
super().write(*args)
|
||||
|
||||
|
||||
class ShipmentIn(metaclass=PoolMeta):
|
||||
__name__ = 'stock.shipment.in'
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
i = cls.inventory_moves.order.index(('to_location', 'ASC'))
|
||||
cls.inventory_moves.order.insert(i + 1, ('to_place', 'ASC'))
|
||||
|
||||
|
||||
class ShipmentInReturn(metaclass=PoolMeta):
|
||||
__name__ = 'stock.shipment.in.return'
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
i = cls.moves.order.index(('from_location', 'ASC'))
|
||||
cls.moves.order.insert(i + 1, ('from_place', 'ASC'))
|
||||
|
||||
|
||||
class ShipmentOut(metaclass=PoolMeta):
|
||||
__name__ = 'stock.shipment.out'
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
i = cls.inventory_moves.order.index(('from_location', 'ASC'))
|
||||
cls.inventory_moves.order.insert(i + 1, ('from_place', 'ASC'))
|
||||
|
||||
|
||||
class ShipmentOutReturn(metaclass=PoolMeta):
|
||||
__name__ = 'stock.shipment.out.return'
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
i = cls.inventory_moves.order.index(('to_location', 'ASC'))
|
||||
cls.inventory_moves.order.insert(i + 1, ('to_place', 'ASC'))
|
||||
|
||||
|
||||
class ShipmentInternal(metaclass=PoolMeta):
|
||||
__name__ = 'stock.shipment.internal'
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
i = cls.moves.order.index(('from_location', 'ASC'))
|
||||
cls.moves.order.insert(i + 1, ('from_place', 'ASC'))
|
||||
|
||||
i = cls.outgoing_moves.order.index(('from_location', 'ASC'))
|
||||
cls.outgoing_moves.order.insert(i + 1, ('from_place', 'ASC'))
|
||||
|
||||
i = cls.incoming_moves.order.index(('to_location', 'ASC'))
|
||||
cls.incoming_moves.order.insert(i + 1, ('to_place', 'ASC'))
|
||||
|
||||
|
||||
class InventoryLine(metaclass=PoolMeta):
|
||||
__name__ = 'stock.inventory.line'
|
||||
|
||||
place = fields.Many2One(
|
||||
'stock.product.location.place', "Place",
|
||||
domain=['OR',
|
||||
('template.products', '=', Eval('product', -1)),
|
||||
('product', '=', Eval('product', -1)),
|
||||
])
|
||||
|
||||
@fields.depends(
|
||||
'inventory_location', 'product',
|
||||
methods=['on_change_with_inventory_location'])
|
||||
def on_change_with_place(self):
|
||||
location = (self.inventory_location
|
||||
or self.on_change_with_inventory_location())
|
||||
if self.product and location:
|
||||
return self.product.get_place(location)
|
||||
|
||||
@fields.depends(methods=['on_change_with_place'])
|
||||
def update_for_complete(self, quantity):
|
||||
super().update_for_complete(quantity)
|
||||
self.place = self.on_change_with_place()
|
||||
59
modules/stock_product_location_place/stock.xml
Normal file
59
modules/stock_product_location_place/stock.xml
Normal file
@@ -0,0 +1,59 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="stock_product_location_place_view_form">
|
||||
<field name="model">stock.product.location.place</field>
|
||||
<field name="type">form</field>
|
||||
<field name="name">stock_product_location_place_form</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="stock_product_location_place_view_list">
|
||||
<field name="model">stock.product.location.place</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="name">stock_product_location_place_list</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.model.access" id="access_stock_product_location_place">
|
||||
<field name="model">stock.product.location.place</field>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="False"/>
|
||||
<field name="perm_create" eval="False"/>
|
||||
<field name="perm_delete" eval="False"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.model.access" id="access_stock_product_location_place_stock_admin">
|
||||
<field name="model">stock.product.location.place</field>
|
||||
<field name="group" ref="stock.group_stock_admin"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="True"/>
|
||||
<field name="perm_create" eval="True"/>
|
||||
<field name="perm_delete" eval="True"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="stock_move_view_list_shipment_in">
|
||||
<field name="model">stock.move</field>
|
||||
<field name="inherit" ref="stock.move_view_list_shipment_in"/>
|
||||
<field name="name">stock_move_list</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="stock_move_view_list_shipment">
|
||||
<field name="model">stock.move</field>
|
||||
<field name="inherit" ref="stock.move_view_list_shipment"/>
|
||||
<field name="name">stock_move_list</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="stock_inventory_line_view_form">
|
||||
<field name="model">stock.inventory.line</field>
|
||||
<field name="inherit" ref="stock.inventory_line_view_form"/>
|
||||
<field name="name">stock_inventory_line_form</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="stock_inventory_line_view_list">
|
||||
<field name="model">stock.inventory.line</field>
|
||||
<field name="inherit" ref="stock.inventory_line_view_list"/>
|
||||
<field name="name">stock_inventory_line_list</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
2
modules/stock_product_location_place/tests/__init__.py
Normal file
2
modules/stock_product_location_place/tests/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,86 @@
|
||||
=====================================
|
||||
Stock Product Location Place Scenario
|
||||
=====================================
|
||||
|
||||
Imports::
|
||||
|
||||
>>> from decimal import Decimal
|
||||
|
||||
>>> from proteus import Model
|
||||
>>> from trytond.modules.company.tests.tools import create_company
|
||||
>>> from trytond.tests.tools import activate_modules
|
||||
|
||||
Activate modules::
|
||||
|
||||
>>> config = activate_modules('stock_product_location_place', create_company)
|
||||
|
||||
>>> Location = Model.get('stock.location')
|
||||
>>> Move = Model.get('stock.move')
|
||||
>>> ProductTemplate = Model.get('product.template')
|
||||
>>> UoM = Model.get('product.uom')
|
||||
|
||||
Get location::
|
||||
|
||||
>>> storage_loc, = Location.find([('code', '=', 'STO')])
|
||||
|
||||
>>> child_loc = Location(name="Child Location")
|
||||
>>> child_loc.parent = storage_loc
|
||||
>>> child_loc.code = 'CHI'
|
||||
>>> child_loc.save()
|
||||
|
||||
Create product::
|
||||
|
||||
>>> unit, = UoM.find([('name', '=', "Unit")])
|
||||
|
||||
>>> template = ProductTemplate(name="Product")
|
||||
>>> template.default_uom = unit
|
||||
>>> template.type = 'goods'
|
||||
>>> template.list_price = Decimal('10.0000')
|
||||
>>> template.save()
|
||||
>>> product, = template.products
|
||||
|
||||
Set location places on template::
|
||||
|
||||
>>> location_place = template.location_places.new()
|
||||
>>> location_place.location = storage_loc
|
||||
>>> location_place.place = "P1"
|
||||
>>> location_place = template.location_places.new()
|
||||
>>> location_place.location = child_loc
|
||||
>>> location_place.place = "C1"
|
||||
>>> template.save()
|
||||
|
||||
Check places on move::
|
||||
|
||||
>>> move = Move(product=product)
|
||||
>>> move.from_place
|
||||
>>> move.to_place
|
||||
|
||||
>>> move.from_location = storage_loc
|
||||
>>> move.from_place.rec_name
|
||||
'P1'
|
||||
>>> move.to_location = child_loc
|
||||
>>> move.to_place.rec_name
|
||||
'C1'
|
||||
|
||||
Set location place on product::
|
||||
|
||||
>>> location_place = product.location_places.new()
|
||||
>>> location_place.location = storage_loc
|
||||
>>> location_place.place = "P2"
|
||||
>>> location_place = product.location_places.new()
|
||||
>>> location_place.location = child_loc
|
||||
>>> location_place.place = "C2"
|
||||
>>> product.save()
|
||||
|
||||
Check places on move::
|
||||
|
||||
>>> move = Move(product=product)
|
||||
>>> move.from_place
|
||||
>>> move.to_place
|
||||
|
||||
>>> move.from_location = storage_loc
|
||||
>>> move.from_place.rec_name
|
||||
'P2'
|
||||
>>> move.to_location = child_loc
|
||||
>>> move.to_place.rec_name
|
||||
'C2'
|
||||
@@ -0,0 +1,50 @@
|
||||
=====================================
|
||||
Stock Product Location Place Scenario
|
||||
=====================================
|
||||
|
||||
Imports::
|
||||
|
||||
>>> from decimal import Decimal
|
||||
|
||||
>>> from proteus import Model
|
||||
>>> from trytond.modules.company.tests.tools import create_company
|
||||
>>> from trytond.tests.tools import activate_modules
|
||||
|
||||
Activate modules::
|
||||
|
||||
>>> config = activate_modules('stock_product_location_place', create_company)
|
||||
|
||||
>>> Location = Model.get('stock.location')
|
||||
>>> ProductTemplate = Model.get('product.template')
|
||||
>>> UoM = Model.get('product.uom')
|
||||
|
||||
Get location::
|
||||
|
||||
>>> storage_loc, = Location.find([('code', '=', 'STO')])
|
||||
|
||||
Create product with location places::
|
||||
|
||||
>>> unit, = UoM.find([('name', '=', "Unit")])
|
||||
|
||||
>>> template = ProductTemplate(name="Product")
|
||||
>>> template.default_uom = unit
|
||||
>>> template.type = 'goods'
|
||||
>>> template.list_price = Decimal('10.0000')
|
||||
>>> location_place = template.location_places.new()
|
||||
>>> location_place.location = storage_loc
|
||||
>>> location_place.place = "P1"
|
||||
>>> template.save()
|
||||
>>> product, = template.products
|
||||
>>> location_place = product.location_places.new()
|
||||
>>> location_place.location = storage_loc
|
||||
>>> location_place.place = "P2"
|
||||
>>> product.save()
|
||||
|
||||
Location places are copied when copying template::
|
||||
|
||||
>>> template_copy, = template.duplicate()
|
||||
>>> product_copy, = template_copy.products
|
||||
>>> len(template_copy.location_places)
|
||||
2
|
||||
>>> len(product_copy.location_places)
|
||||
1
|
||||
@@ -0,0 +1,69 @@
|
||||
==================================================
|
||||
Stock Product Location Place Modification Scenario
|
||||
==================================================
|
||||
|
||||
Imports::
|
||||
|
||||
>>> from decimal import Decimal
|
||||
|
||||
>>> from proteus import Model
|
||||
>>> from trytond.modules.company.tests.tools import create_company
|
||||
>>> from trytond.modules.currency.tests.tools import get_currency
|
||||
>>> from trytond.tests.tools import activate_modules
|
||||
|
||||
Activate modules::
|
||||
|
||||
>>> config = activate_modules('stock_product_location_place', create_company)
|
||||
|
||||
>>> Location = Model.get('stock.location')
|
||||
>>> Move = Model.get('stock.move')
|
||||
>>> ProductTemplate = Model.get('product.template')
|
||||
>>> UoM = Model.get('product.uom')
|
||||
|
||||
Get location::
|
||||
|
||||
>>> supplier_loc, = Location.find([('code', '=', 'SUP')])
|
||||
>>> storage_loc, = Location.find([('code', '=', 'STO')])
|
||||
|
||||
Create products with different location places::
|
||||
|
||||
>>> unit, = UoM.find([('name', '=', "Unit")])
|
||||
|
||||
>>> template = ProductTemplate(name="Product")
|
||||
>>> template.default_uom = unit
|
||||
>>> template.type = 'goods'
|
||||
>>> template.list_price = Decimal('10.0000')
|
||||
>>> _ = template.products.new()
|
||||
>>> template.save()
|
||||
>>> product1, product2 = template.products
|
||||
|
||||
>>> location_place1 = product1.location_places.new()
|
||||
>>> location_place1.location = storage_loc
|
||||
>>> location_place1.place = "P1"
|
||||
>>> product1.save()
|
||||
|
||||
>>> location_place2 = product2.location_places.new()
|
||||
>>> location_place2.location = storage_loc
|
||||
>>> location_place2.place = "P2"
|
||||
>>> product2.save()
|
||||
|
||||
Create a stock move::
|
||||
|
||||
>>> move = Move(product=product1)
|
||||
>>> move.from_location = supplier_loc
|
||||
>>> move.to_location = storage_loc
|
||||
>>> move.quantity = 1
|
||||
>>> move.unit_price = Decimal(10)
|
||||
>>> move.currency = get_currency()
|
||||
>>> move.save()
|
||||
|
||||
>>> move.to_place.rec_name
|
||||
'P1'
|
||||
|
||||
Change product::
|
||||
|
||||
>>> move.product = product2
|
||||
>>> move.save()
|
||||
|
||||
>>> move.to_place.rec_name
|
||||
'P2'
|
||||
11
modules/stock_product_location_place/tests/test_module.py
Normal file
11
modules/stock_product_location_place/tests/test_module.py
Normal file
@@ -0,0 +1,11 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
from trytond.tests.test_tryton import ModuleTestCase
|
||||
|
||||
|
||||
class StockProductLocationPlaceTestCase(ModuleTestCase):
|
||||
"Test Stock Product Location Place module"
|
||||
module = 'stock_product_location_place'
|
||||
|
||||
|
||||
del ModuleTestCase
|
||||
@@ -0,0 +1,8 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
from trytond.tests.test_tryton import load_doc_tests
|
||||
|
||||
|
||||
def load_tests(*args, **kwargs):
|
||||
return load_doc_tests(__name__, __file__, *args, **kwargs)
|
||||
23
modules/stock_product_location_place/tryton.cfg
Normal file
23
modules/stock_product_location_place/tryton.cfg
Normal file
@@ -0,0 +1,23 @@
|
||||
[tryton]
|
||||
version=7.8.0
|
||||
depends:
|
||||
ir
|
||||
product
|
||||
stock
|
||||
xml:
|
||||
stock.xml
|
||||
product.xml
|
||||
message.xml
|
||||
|
||||
[register]
|
||||
model:
|
||||
product.Template
|
||||
product.Product
|
||||
stock.ProductLocationPlace
|
||||
stock.Move
|
||||
stock.ShipmentIn
|
||||
stock.ShipmentInReturn
|
||||
stock.ShipmentOut
|
||||
stock.ShipmentOutReturn
|
||||
stock.ShipmentInternal
|
||||
stock.InventoryLine
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<data>
|
||||
<xpath expr="/form/notebook" position="inside">
|
||||
<page name="location_places">
|
||||
<field name="location_places" colspan="4"/>
|
||||
</page>
|
||||
</xpath>
|
||||
</data>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<data>
|
||||
<xpath expr="//field[@name='inventory']" position="after">
|
||||
<label name="place"/>
|
||||
<field name="place" colspan="3"/>
|
||||
</xpath>
|
||||
</data>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<data>
|
||||
<xpath expr="//field[@name='inventory']" position="after">
|
||||
<field name="place" expand="1" optional="1"/>
|
||||
</xpath>
|
||||
</data>
|
||||
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<data>
|
||||
<xpath expr="//field[@name='from_location']" position="after">
|
||||
<field name="from_place" expand="1" optional="0"/>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//field[@name='to_location']" position="after">
|
||||
<field name="to_place" expand="1" optional="0"/>
|
||||
</xpath>
|
||||
</data>
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<form cursor="location">
|
||||
<label name="template"/>
|
||||
<field name="template"/>
|
||||
<newline/>
|
||||
|
||||
<label name="product"/>
|
||||
<field name="product"/>
|
||||
<newline/>
|
||||
|
||||
<label name="location"/>
|
||||
<field name="location"/>
|
||||
<label name="place"/>
|
||||
<field name="place"/>
|
||||
</form>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tree>
|
||||
<field name="template" expand="2"/>
|
||||
<field name="product" expand="2"/>
|
||||
<field name="location" expand="1"/>
|
||||
<field name="place"/>
|
||||
</tree>
|
||||
Reference in New Issue
Block a user