first commit

This commit is contained in:
root
2026-03-14 09:42:12 +00:00
commit 0adbd20c2c
10991 changed files with 1646955 additions and 0 deletions

View 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.

View 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 ""

View 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"

View 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 ""

View 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"

View 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"

View 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 ""

View 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 ""

View 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 ""

View 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 ""

View 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"

View 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 ""

View 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 ""

View 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 ""

View 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 ""

View 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 ""

View 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"

View 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 ""

View 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 ""

View 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 ""

View 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 ""

View 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 ""

View 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 ""

View 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 ""

View 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 ""

View 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>

View 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

View 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>

View 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()

View 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>

View 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.

View File

@@ -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'

View File

@@ -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

View File

@@ -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'

View 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

View File

@@ -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)

View 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

View 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. -->
<data>
<xpath expr="/form/notebook" position="inside">
<page name="location_places">
<field name="location_places" colspan="4"/>
</page>
</xpath>
</data>

View File

@@ -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>

View File

@@ -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>

View 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. -->
<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>

View File

@@ -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>

View File

@@ -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>