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,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.
__all__ = ['LotUnitMixin']
def __getattr__(name):
if name == 'LotUnitMixin':
from .stock import LotUnitMixin
return LotUnitMixin
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")

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.model.exceptions import ValidationError
class LotUnitQuantityError(ValidationError):
pass

View File

@@ -0,0 +1,74 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""

View File

@@ -0,0 +1,77 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr "Unitat del lot"
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr "Unitat del lot"
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr "Categoria UdM del producte per defecte"
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr "Unitat"
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr "Quantitat unitària"
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr "Categoria UdM del producte per defecte"
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr "Unitat"
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr "Quantitat unitària"
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr "La unitat per defecte del lot."
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr "La unitat per defecte del lot."
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr "La major unitat del lot."
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr "La quantitat màxima del lot."
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr "La major unitat del lot."
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr "La quantitat màxima del lot."
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr "No podeu canviar la unitat d'un lot que té moviments d'existències."
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr ""
"No podeu canviar la quantitat d'un lot que té moviments d'existències."
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""
"No podeu utililizar més de %(quantity)s%(unit)s del lot \"%(lot)s\" en "
"\"%(name)s\"."

View File

@@ -0,0 +1,74 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""

View File

@@ -0,0 +1,80 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr "Chargenmaßeinheit"
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr "Chargenmaßeinheit"
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr "Standardmaßeinheitenkategorie"
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr "Einheit"
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr "Maßeinheit Menge"
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr "Standardmaßeinheitenkategorie"
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr "Einheit"
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr "Maßeinheit Menge"
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr "Die Standardmaßeinheit für Chargen."
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr "Die Standardmaßeinheit für Chargen."
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr "Die größte Maßeinheit für die Charge."
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr "Die maximale Menge für die Charge."
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr "Die größte Maßeinheit für die Charge."
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr "Die maximale Menge für die Charge."
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr ""
"Die Einheit einer Charge, für die es Warenbewegungen gibt, kann nicht "
"geändert werden."
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr ""
"Die Menge einer Charge, für die es Warenbewegungen gibt, kann nicht gändert "
"werden."
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""
"In \"%(name)s\" kann nicht mehr als %(quantity)s%(unit)s von Charge "
"\"%(lot)s\" verwendet werden."

View File

@@ -0,0 +1,77 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr "UdM del lote"
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr "UdM del lote"
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr "Cateogría de UdM de producto por defecto"
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr "Unidad"
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr "Cantidad unitaria"
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr "Cateogría de UdM de producto por defecto"
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr "Unidad"
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr "Cantidad unitaria"
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr "La unidad por defecto del lote."
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr "La unidad por defecto del lote."
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr "La mayor unidad del lote."
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr "La cantidad máxima del lote."
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr "La mayor unidad del lote."
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr "La cantidad máxima del lote."
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr ""
"No puede cambiar la unidad de un lote que tiene movimientos de existencias."
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr ""
"No puede cambiar la cantidad de un lote que tiene movimientos de "
"existencias."
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr "No puede usar más de %(quantity)s%(unit)s del \"%(lot)s\" en \"%(name)s\"."

View File

@@ -0,0 +1,74 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""

View File

@@ -0,0 +1,86 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
#, fuzzy
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr "Partii ühik"
#, fuzzy
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr "Partii ühik"
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr "Vaikimisi toote mõõtühiku kategooria"
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr "Ühik"
#, fuzzy
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr "Kogus"
#, fuzzy
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr "Vaikimisi toote mõõtühiku kategooria"
#, fuzzy
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr "Ühik"
#, fuzzy
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr "Kogus"
#, fuzzy
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr "Partii vaikeühik."
#, fuzzy
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr "Partii vaikeühik."
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr "Partii suurim ühik."
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr "Suurim partiikogus."
#, fuzzy
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr "Partii suurim ühik."
#, fuzzy
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr "Suurim partiikogus."
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr "Laoliikumistega seotud partii ühikut ei saa muuta."
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr "Laoliikumistega seotud partii kogust ei saa muuta."
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""
"\"%(name)s\" ei saa kasutada suuremat partii \"%(lot)s\" kogust "
"%(quantity)s%(unit)s"

View File

@@ -0,0 +1,86 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
#, fuzzy
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr "واحد قطعه"
#, fuzzy
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr "واحد قطعه"
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr "دسته بندی واحد اندازه گیری محصول پیشفرض"
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr "واحد"
#, fuzzy
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr "مقدار"
#, fuzzy
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr "دسته بندی واحد اندازه گیری محصول پیشفرض"
#, fuzzy
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr "واحد"
#, fuzzy
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr "مقدار"
#, fuzzy
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr "واحد پیشفرض قطعه."
#, fuzzy
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr "واحد پیشفرض قطعه."
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr "بزرگترین واحد برای قطعه"
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr "حداکثر مقدار برای قطعه."
#, fuzzy
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr "بزرگترین واحد برای قطعه"
#, fuzzy
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr "حداکثر مقدار برای قطعه."
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr "شما نمی توانید یک واحد جنس را تغییر دهید که جابجایی اجناس داشته باشد."
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr "شما نمی توانید مقدار جنس را تغییر دهید که جابجایی اجناس داشته باشد."
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""
"شما نمی توانید بیش از:\"%(quantity)s%(unit)s\" از قطعه :\"%(lot)s\" "
"در:\"%(name)s\" استفاده کنید."

View File

@@ -0,0 +1,74 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""

View File

@@ -0,0 +1,79 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr "UDM de lot"
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr "UDM de lot"
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr "Catégorie d'unité de mesure par défaut"
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr "Unité"
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr "Quantité Unitaire"
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr "Catégorie d'unité de mesure par défaut"
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr "Unité"
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr "Quantité Unitaire"
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr "L'unité de mesure par défaut pour le lot."
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr "L'unité de mesure par défaut pour le lot."
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr "La plus grande unité pour le lot."
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr "La quantité maximal pour le lot."
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr "La plus grande unité pour le lot."
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr "La quantité maximal pour le lot."
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr ""
"Vous ne pouvez pas changer l'unité d'un lot qui a des mouvements de stock."
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr ""
"Vous ne pouvez pas changer la quantité d'un lot qui a des mouvements de "
"stock."
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""
"Vous ne pouvez pas utiliser plus que %(quantity)s%(unit)s du lot « %(lot)s »"
" sur « %(name)s »."

View File

@@ -0,0 +1,74 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""

View File

@@ -0,0 +1,74 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""

View File

@@ -0,0 +1,86 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
#, fuzzy
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr "Lotto Unità"
#, fuzzy
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr "Lotto Unità"
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr "Categoria UdM prodotto predefinita"
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr "Unità"
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr "Quantità unitaria"
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr "Categoria UdM prodotto predefinita"
#, fuzzy
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr "Unità"
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr "Quantità unitaria"
#, fuzzy
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr "L'unità predefinita per il lotto."
#, fuzzy
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr "L'unità predefinita per il lotto."
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr "L'unità più grande per il lotto."
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr "La quantità massima per il lotto."
#, fuzzy
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr "L'unità più grande per il lotto."
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr "La quantità massima per il lotto."
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr ""
"Non è possibile modificare l'unità di un lotto di stock che ha movimenti di "
"stock."
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr ""
"Non è possibile modificare la quantità di un lotto di stock che ha movimenti"
" di stock."
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""
"Non è possibile utilizzare più di %(quantity)s%(unit)s del lotto \"%(lot)s\""
" in \"%(name)s\"."

View File

@@ -0,0 +1,74 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""

View File

@@ -0,0 +1,74 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""

View File

@@ -0,0 +1,79 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr "Batch maateenheid"
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr "Batch maateenheid"
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr "Standaard Product Maateenheid Categorie"
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr "Eenheid"
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr "Eenheid Hoeveelheid"
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr "Standaard Product Maateenheid Categorie"
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr "Eenheid"
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr "Eenheid Hoeveelheid"
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr "De standaard maateenheid voor een batch."
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr "De standaard maateenheid voor een batch."
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr "De grootste eenheid voor een batch."
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr "De maximale hoeveelheid voor een batch."
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr "De grootste eenheid voor het lot."
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr "De maximale hoeveelheid voor een batch."
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr ""
"U kunt de eenheid van een batch die voorraadbewegingen heeft niet wijzigen."
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr ""
"U kunt de hoeveelheid van een batch die voorraadbewegingen heeft niet "
"wijzigen."
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""
"U kunt niet meer dan %(quantity)s%(unit)s van batch \"%(lot)s\" in "
"\"%(name)s\" gebruiken."

View File

@@ -0,0 +1,74 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""

View File

@@ -0,0 +1,74 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""

View File

@@ -0,0 +1,74 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""

View File

@@ -0,0 +1,74 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""

View File

@@ -0,0 +1,74 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""

View File

@@ -0,0 +1,74 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""

View File

@@ -0,0 +1,74 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""

View File

@@ -0,0 +1,74 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:product.template,lot_uom:"
msgid "Lot UoM"
msgstr ""
msgctxt "field:stock.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,product_default_uom_category:"
msgid "Default Product UoM Category"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit:"
msgid "Unit"
msgstr ""
msgctxt "field:stock.move.add.lots.start.lot,unit_quantity:"
msgid "Unit Quantity"
msgstr ""
msgctxt "help:product.product,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:product.template,lot_uom:"
msgid "The default unit of measure for lot."
msgstr ""
msgctxt "help:stock.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit:"
msgid "The biggest unit for the lot."
msgstr ""
msgctxt "help:stock.move.add.lots.start.lot,unit_quantity:"
msgid "The maximal quantity for the lot."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit"
msgid "You cannot change the unit of a stock lot which has stock moves."
msgstr ""
msgctxt "model:ir.message,text:msg_change_unit_quantity"
msgid "You cannot change the quantity of a stock lot which has stock moves."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_lot_unit_quantity_greater"
msgid ""
"You cannot use more than %(quantity)s%(unit)s of lot \"%(lot)s\" in "
"\"%(name)s\"."
msgstr ""

View File

@@ -0,0 +1,16 @@
<?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_change_unit">
<field name="text">You cannot change the unit of a stock lot which has stock moves.</field>
</record>
<record model="ir.message" id="msg_change_unit_quantity">
<field name="text">You cannot change the quantity of a stock lot which has stock moves.</field>
</record>
<record model="ir.message" id="msg_lot_unit_quantity_greater">
<field name="text">You cannot use more than %(quantity)s%(unit)s of lot "%(lot)s" in "%(name)s".</field>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,34 @@
# 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 PoolMeta
from trytond.pyson import Eval
class Template(metaclass=PoolMeta):
__name__ = 'product.template'
lot_uom = fields.Many2One('product.uom', "Lot UoM",
domain=[
('category', '=', Eval('default_uom_category', -1)),
],
states={
'invisible': Eval('type') == 'service',
},
help="The default unit of measure for lot.")
@classmethod
def __register__(cls, module_name):
table_h = cls.__table_handler__(module_name)
# Migration from 6.8: rename lot_unit to lot_uom
if (table_h.column_exist('lot_unit')
and not table_h.column_exist('lot_uom')):
table_h.column_rename('lot_unit', 'lot_uom')
super().__register__(module_name)
class Product(metaclass=PoolMeta):
__name__ = 'product.product'

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="template_view_form">
<field name="model">product.template</field>
<field name="inherit" ref="product.template_view_form"/>
<field name="name">template_form</field>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,212 @@
# 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 collections import defaultdict
from trytond.i18n import gettext
from trytond.model import ModelView, Workflow, fields
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Bool, Eval
from .exceptions import LotUnitQuantityError
class LotUnitMixin:
__slots__ = ()
unit = fields.Many2One(
'product.uom', "Unit",
domain=[
('category', '=', Eval('product_default_uom_category', -1)),
],
help="The biggest unit for the lot.")
unit_quantity = fields.Float(
"Unit Quantity", digits='unit',
states={
'required': Bool(Eval('unit')),
'invisible': ~Eval('unit'),
},
help="The maximal quantity for the lot.")
product_default_uom_category = fields.Function(
fields.Many2One(
'product.uom.category', "Default Product UoM Category"),
'on_change_with_product_default_uom_category')
@fields.depends('product', methods=['on_change_unit'])
def on_change_product(self):
try:
super().on_change_product()
except AttributeError:
pass
if self.product and self.product.lot_uom:
self.unit = self.product.lot_uom
self.on_change_unit()
@fields.depends('unit')
def on_change_unit(self):
if self.unit:
self.unit_quantity = self.unit.rounding
@fields.depends('product')
def on_change_with_product_default_uom_category(self, name=None):
if self.product:
return self.product.default_uom_category
class Lot(LotUnitMixin, metaclass=PoolMeta):
__name__ = 'stock.lot'
@classmethod
def __setup__(cls):
super().__setup__()
cls._modify_no_move += [
('unit', 'done', 'stock_lot_unit.msg_change_unit'),
('unit_quantity', 'done',
'stock_lot_unit.msg_change_unit_quantity'),
]
class MoveAddLotsStartLot(LotUnitMixin, metaclass=PoolMeta):
__name__ = 'stock.move.add.lots.start.lot'
@fields.depends(
'unit', 'unit_quantity', 'quantity', 'parent', '_parent_parent.unit')
def _set_lot_values(self, lot):
pool = Pool()
Uom = pool.get('product.uom')
super()._set_lot_values(lot)
self.unit = lot.unit
self.unit_quantity = lot.unit_quantity
if self.parent.unit:
maximum_quantity = Uom.compute_qty(
lot.unit, lot.unit_quantity, self.parent.unit, round=False)
if self.quantity > maximum_quantity:
self.quantity = self.parent.unit.round(maximum_quantity)
def _get_lot_values(self, move):
values = super()._get_lot_values(move)
values['unit'] = self.unit
values['unit_quantity'] = self.unit_quantity
return values
class Move(metaclass=PoolMeta):
__name__ = 'stock.move'
def check_lot(self):
pool = Pool()
UoM = pool.get('product.uom')
super().check_lot()
if (self.state == 'done'
and self.lot
and self.lot.unit):
quantity = UoM.compute_qty(
self.unit, self.quantity,
self.lot.unit, round=False)
if quantity > self.lot.unit_quantity:
raise LotUnitQuantityError(
gettext('stock_lot_unit.msg_lot_unit_quantity_greater',
quantity=self.lot.unit_quantity,
unit=self.lot.unit.symbol,
lot=self.lot.rec_name,
name=self.rec_name))
class Inventory(metaclass=PoolMeta):
__name__ = 'stock.inventory'
@classmethod
@ModelView.button
@Workflow.transition('done')
def confirm(cls, inventories):
for inventory in inventories:
for line in inventory.lines:
if (line.quantity is not None
and line.lot
and line.lot.unit
and line.quantity > line.lot.unit_quantity):
raise LotUnitQuantityError(
gettext('stock_lot_unit.msg_lot_unit_quantity_greater',
quantity=line.lot.unit_quantity,
unit=line.lot.unit.symbol,
lot=line.lot.rec_name,
name=line.rec_name))
super().confirm(inventories)
class InventoryCount(metaclass=PoolMeta):
__name__ = 'stock.inventory.count'
def default_quantity(self, fields):
pool = Pool()
InventoryLine = pool.get('stock.inventory.line')
UoM = pool.get('product.uom')
values = super().default_quantity(fields)
line = InventoryLine(values['line'])
if line.lot and line.lot.unit:
values['quantity'] = UoM.compute_qty(
line.lot.unit, line.lot.unit_quantity,
line.unit)
return values
class LotUnitMixin(object):
__slots__ = ()
_lot_unit_moves = None
@classmethod
def validate(cls, shipments):
pool = Pool()
UoM = pool.get('product.uom')
super().validate(shipments)
for shipment in shipments:
for move_attribute in cls._lot_unit_moves:
lot_quantities = defaultdict(int)
for move in getattr(shipment, move_attribute):
if move.state != 'done':
continue
if not move.lot or not move.lot.unit:
continue
lot_quantities[move.lot] += UoM.compute_qty(
move.unit, move.quantity,
move.lot.unit, round=False)
for lot, quantity in lot_quantities.items():
if quantity > lot.unit_quantity:
raise LotUnitQuantityError(
gettext('stock_lot_unit'
'.msg_lot_unit_quantity_greater',
quantity=lot.unit_quantity,
unit=lot.unit.symbol,
lot=lot.rec_name,
name=shipment.rec_name))
class ShipmentIn(LotUnitMixin, metaclass=PoolMeta):
__name__ = 'stock.shipment.in'
_lot_unit_moves = ['incoming_moves', 'inventory_moves']
class ShipmentInReturn(LotUnitMixin, metaclass=PoolMeta):
__name__ = 'stock.shipment.in.return'
_lot_unit_moves = ['moves']
class ShipmentOut(LotUnitMixin, metaclass=PoolMeta):
__name__ = 'stock.shipment.out'
_lot_unit_moves = ['outgoing_moves', 'inventory_moves']
class ShipmentOutReturn(LotUnitMixin, metaclass=PoolMeta):
__name__ = 'stock.shipment.out.return'
_lot_unit_moves = ['incoming_moves', 'inventory_moves']
class ShipmentInternal(LotUnitMixin, metaclass=PoolMeta):
__name__ = 'stock.shipment.internal'
_lot_unit_moves = ['incoming_moves', 'outgoing_moves']
class Production(LotUnitMixin, metaclass=PoolMeta):
__name__ = 'production'
_lot_unit_moves = ['inputs', 'outputs']

View File

@@ -0,0 +1,24 @@
<?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="lot_view_form">
<field name="model">stock.lot</field>
<field name="inherit" ref="stock_lot.lot_view_form"/>
<field name="name">lot_form</field>
</record>
<record model="ir.ui.view" id="lot_view_list">
<field name="model">stock.lot</field>
<field name="inherit" ref="stock_lot.lot_view_tree"/>
<field name="name">lot_list</field>
</record>
<record model="ir.ui.view" id="move_add_lots_start_lot_view_list">
<field name="model">stock.move.add.lots.start.lot</field>
<field name="inherit" ref="stock_lot.move_add_lots_start_lot_view_list"/>
<field name="name">lot_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,68 @@
=======================================
Stock Lot Unit Inventory Count Scenario
=======================================
Imports::
>>> from proteus import Model
>>> from trytond.modules.company.tests.tools import create_company
>>> from trytond.tests.tools import activate_modules, assertEqual
Activate modules::
>>> config = activate_modules('stock_lot_unit', create_company)
>>> config.skip_warning = True
>>> Inventory = Model.get('stock.inventory')
>>> Location = Model.get('stock.location')
>>> Lot = Model.get('stock.lot')
>>> ProductTemplate = Model.get('product.template')
>>> ProductUom = Model.get('product.uom')
Get stock location::
>>> storage_loc, = Location.find([('code', '=', 'STO')])
Create product and lot::
>>> unit, = ProductUom.find([('name', '=', 'Unit')])
>>> template = ProductTemplate()
>>> template.name = 'Product'
>>> template.default_uom = unit
>>> template.type = 'goods'
>>> template.lot_required = ['storage']
>>> template.save()
>>> product, = template.products
>>> lot = Lot(number="0001", product=product, unit=unit)
>>> lot.save()
Create an inventory::
>>> inventory = Inventory()
>>> inventory.location = storage_loc
>>> inventory.empty_quantity = 'keep'
>>> inventory.save()
Count inventory::
>>> count = inventory.click('do_count')
>>> count.form.search = lot
>>> count.execute('quantity')
>>> assertEqual(count.form.product, product)
>>> assertEqual(count.form.lot, lot)
>>> count.form.quantity
1.0
>>> count.form.total_quantity
1.0
>>> count.execute('add')
>>> count.execute('end')
Check inventory::
>>> line, = inventory.lines
>>> assertEqual(line.product, product)
>>> assertEqual(line.lot, lot)
>>> line.quantity
1.0

View File

@@ -0,0 +1,184 @@
=======================
Stock Lot Unit 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, assertEqual
Activate modules::
>>> config = activate_modules('stock_lot_unit', create_company)
Get currency::
>>> currency = get_currency()
Create customer::
>>> Party = Model.get('party.party')
>>> customer = Party(name='Customer')
>>> customer.save()
Create supplier::
>>> supplier = Party(name='Supplier')
>>> supplier.save()
Create product::
>>> ProductUom = Model.get('product.uom')
>>> ProductTemplate = Model.get('product.template')
>>> unit, = ProductUom.find([('name', '=', 'Unit')])
>>> template = ProductTemplate()
>>> template.name = 'Product'
>>> template.default_uom = unit
>>> template.type = 'goods'
>>> template.list_price = Decimal('20')
>>> template.lot_uom = unit
>>> template.save()
>>> product, = template.products
>>> product.cost_price = Decimal('8')
>>> product.save()
Get stock locations::
>>> Location = Model.get('stock.location')
>>> warehouse_loc, = Location.find([('code', '=', 'WH')])
>>> supplier_loc, = Location.find([('code', '=', 'SUP')])
>>> customer_loc, = Location.find([('code', '=', 'CUS')])
>>> input_loc, = Location.find([('code', '=', 'IN')])
>>> output_loc, = Location.find([('code', '=', 'OUT')])
>>> storage_loc, = Location.find([('code', '=', 'STO')])
Create an incoming shipment without lot::
>>> ShipmentIn = Model.get('stock.shipment.in')
>>> shipment = ShipmentIn()
>>> shipment.supplier = supplier
>>> move1 = shipment.incoming_moves.new()
>>> move1.product = product
>>> move1.quantity = 60
>>> move1.unit_price = Decimal('8')
>>> move1.currency = currency
>>> move1.from_location = supplier_loc
>>> move1.to_location = input_loc
>>> move2 = shipment.incoming_moves.new()
>>> move2.product = product
>>> move2.quantity = 40
>>> move2.unit_price = Decimal('8')
>>> move2.currency = currency
>>> move2.from_location = supplier_loc
>>> move2.to_location = input_loc
>>> shipment.click('receive')
>>> shipment.click('do')
Let's ship a product with a lot::
>>> Lot = Model.get('stock.lot')
>>> lot = Lot(number='00001', product=product)
>>> assertEqual(lot.unit, unit)
>>> lot.unit_quantity
1.0
>>> lot.save()
>>> ShipmentOut = Model.get('stock.shipment.out')
>>> shipment = ShipmentOut()
>>> shipment.customer = customer
>>> move = shipment.outgoing_moves.new()
>>> move.product = product
>>> move.quantity = 1
>>> move.unit_price = Decimal('20')
>>> move.currency = currency
>>> move.from_location = output_loc
>>> move.to_location = customer_loc
>>> shipment.click('wait')
>>> shipment.click('assign_try')
>>> move.lot = lot
>>> shipment.click('pick')
>>> shipment.click('pack')
>>> shipment.click('do')
Let's ship now two times the same lot::
>>> lot = Lot(number='00002', product=product)
>>> lot.save()
>>> shipment = ShipmentOut()
>>> shipment.customer = customer
>>> move1 = shipment.outgoing_moves.new()
>>> move1.product = product
>>> move1.quantity = 1
>>> move1.unit_price = Decimal('20')
>>> move1.currency = currency
>>> move1.from_location = output_loc
>>> move1.to_location = customer_loc
>>> move2 = shipment.outgoing_moves.new()
>>> move2.product = product
>>> move2.quantity = 1
>>> move2.unit_price = Decimal('20')
>>> move2.currency = currency
>>> move2.from_location = output_loc
>>> move2.to_location = customer_loc
>>> shipment.click('wait')
>>> shipment.click('assign_try')
>>> move1, move2 = shipment.inventory_moves
>>> move1.lot = lot
>>> move2.lot = lot
>>> shipment.save()
>>> shipment.click('pick')
Traceback (most recent call last):
...
LotUnitQuantityError: ...
Now let's ship one move with a quantity bigger than lot unit quantity::
>>> lot = Lot(number='00003', product=product)
>>> lot.unit_quantity = 3
>>> lot.save()
>>> shipment = ShipmentOut()
>>> shipment.customer = customer
>>> move = shipment.outgoing_moves.new()
>>> move.product = product
>>> move.quantity = 4
>>> move.unit_price = Decimal('20')
>>> move.currency = currency
>>> move.from_location = output_loc
>>> move.to_location = customer_loc
>>> shipment.click('wait')
>>> shipment.click('assign_try')
>>> move, = shipment.inventory_moves
>>> move.lot = lot
>>> shipment.click('pick')
Traceback (most recent call last):
...
LotUnitQuantityError: ...
Make an inventory::
>>> lot = Lot(number='00004', product=product)
>>> lot.unit_quantity = 2
>>> lot.save()
>>> Inventory = Model.get('stock.inventory')
>>> inventory = Inventory()
>>> inventory.location = storage_loc
>>> line = inventory.lines.new()
>>> line.product = product
>>> line.lot = lot
>>> line.quantity = 3
>>> inventory.save()
>>> inventory.click('confirm')
Traceback (most recent call last):
...
LotUnitQuantityError: ...
>>> line, = inventory.lines
>>> line.quantity = 2
>>> inventory.click('confirm')

View File

@@ -0,0 +1,70 @@
================================
Stock Lot Unit Move Add 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, assertEqual
Activate modules::
>>> config = activate_modules('stock_lot_unit', create_company)
Create product::
>>> ProductUom = Model.get('product.uom')
>>> ProductTemplate = Model.get('product.template')
>>> unit, = ProductUom.find([('name', '=', 'Unit')])
>>> template = ProductTemplate()
>>> template.name = 'Product'
>>> template.default_uom = unit
>>> template.type = 'goods'
>>> template.list_price = Decimal('20')
>>> template.save()
>>> product, = template.products
Get stock locations::
>>> Location = Model.get('stock.location')
>>> storage_loc, = Location.find([('code', '=', 'STO')])
>>> customer_loc, = Location.find([('code', '=', 'CUS')])
Create a move::
>>> Move = Model.get('stock.move')
>>> move = Move()
>>> move.from_location = storage_loc
>>> move.to_location = customer_loc
>>> move.product = product
>>> move.quantity = 5
>>> move.unit_price = Decimal('20')
>>> move.currency = get_currency()
>>> move.save()
Create a lot::
>>> Lot = Model.get('stock.lot')
>>> lot = Lot(number='01', product=product)
>>> lot.unit = unit
>>> lot.unit_quantity = 1
>>> lot.save()
Add a lot::
>>> add_lots = move.click('add_lots_wizard')
>>> lot = add_lots.form.lots.new()
>>> lot.quantity
5.0
>>> lot.product = product # proteus does not set reverse domain
>>> lot.number = '01'
>>> assertEqual(lot.unit, unit)
>>> lot.unit_quantity
1.0
>>> lot.quantity
1.0

View File

@@ -0,0 +1,13 @@
# 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 StockLotUnitTestCase(ModuleTestCase):
'Test Stock Lot Unit module'
module = 'stock_lot_unit'
extras = ['production']
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,33 @@
[tryton]
version=7.8.0
depends:
ir
res
product
stock
stock_lot
extras_depend:
production
xml:
product.xml
stock.xml
message.xml
[register]
model:
product.Template
product.Product
stock.Lot
stock.MoveAddLotsStartLot
stock.Move
stock.Inventory
stock.ShipmentIn
stock.ShipmentInReturn
stock.ShipmentOut
stock.ShipmentOutReturn
wizard:
stock.InventoryCount
[register production]
model:
stock.Production

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='product']" position="after">
<newline/>
<label name="unit"/>
<field name="unit"/>
<label name="unit_quantity"/>
<field name="unit_quantity"/>
</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='product']" position="after">
<field name="unit_quantity"/>
<field name="unit"/>
</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="/form/notebook/page[@name='lot_required']/field[@name='lot_required']" position="after">
<label name="lot_uom"/>
<field name="lot_uom"/>
</xpath>
</data>