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,41 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""

View File

@@ -0,0 +1,45 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr "Dígits de la quantitat de venda"
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr "Quantitat mínima de venda"
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr "Arrodoniment de la quantitat de venda"
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr "Dígits de la quantitat de venda"
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr "Quantitat mínima de venda"
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr "Arrodoniment de la quantitat de venda"
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
"La quantitat %(quantity)s de la línia %(line)s és massa petita, ha de ser "
"com a mínim %(minimum)s."
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""
"La quantitat %(quantity)s de la línia %(line)s no es vàlida, ha de ser "
"múltiple de %(rounding)s."

View File

@@ -0,0 +1,41 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""

View File

@@ -0,0 +1,45 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr "Nachkommastellen Verkaufsmenge"
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr "Verkauf Mindestabnahmemenge"
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr "Verkauf Rundungsmenge"
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr "Nachkommastellen Verkaufsmenge"
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr "Verkauf Mindestabnahmemenge"
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr "Verkauf Rundungsmenge"
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
"Die Menge %(quantity)s von Verkaufsposition %(line)s ist zu niedrig und muss"
" auf mindestens %(minimum)s erhöht werden."
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""
"Die Menge %(quantity)s von Verkaufsposition %(line)s ist ungültig und muss "
"ein Vielfaches von %(rounding)s sein."

View File

@@ -0,0 +1,45 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr "Dígitos de la cantidad de venta"
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr "Cantidad mínima de venta"
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr "Redondeo cantidad venta"
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr "Dígitos de la cantidad de venta"
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr "Cantidad mínima de venta"
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr "Redondeo cantidad venta"
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
"La cantidad %(quantity)s de la línea %(line)s es demasiado pequeña, debe ser"
" al menos %(minimum)s."
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""
"La cantidad %(quantity)s de la línea %(line)s no es válida, debe ser "
"múltiple de %(rounding)s."

View File

@@ -0,0 +1,41 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""

View File

@@ -0,0 +1,41 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""

View File

@@ -0,0 +1,41 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""

View File

@@ -0,0 +1,41 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""

View File

@@ -0,0 +1,45 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr "Décimales de quantité de vente"
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr "Quantité minimale de vente"
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr "Quantité d'arrondi de vente"
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr "Décimales de quantité de vente"
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr "Quantité minimale de vente"
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr "Quantité d'arrondi de vente"
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
"La quantité %(quantity)s de la ligne %(line)s est trop petite, vous devez "
"mettre au moins %(minimum)s."
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""
"La quantité %(quantity)s de la ligne %(line)s n'est pas valide, vous devez "
"utiliser un multiple de %(rounding)s."

View File

@@ -0,0 +1,41 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""

View File

@@ -0,0 +1,41 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""

View File

@@ -0,0 +1,45 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr "Decimali della quantià di vendita"
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr "Quantità minima di vendita"
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr "Quantità di arrotondamento vendita"
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr "Decimali della quantià di vendita"
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr "Quantità minima di vendita"
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr "Quantità di arrotondamento vendita"
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
"La quantità %(quantity)s della riga %(line)s è troppo piccola, devi "
"impostare almeno %(minimum)s."
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""
"La quantità %(quantity)s della riga %(line)s non è valida, è necessario "
"impostare multipli di %(rounding)s."

View File

@@ -0,0 +1,41 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""

View File

@@ -0,0 +1,41 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""

View File

@@ -0,0 +1,45 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr "Aantal decimalen verkoop"
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr "Minimale hoeveelheid verkoop"
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr "Afronding hoeveelheid verkoop"
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr "Aantal decimalen verkoop"
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr "Minimale hoeveelheid verkoop"
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr "Afronding hoeveelheid verkoop"
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
"Het aantal %(quantity)s van regel %(line)s is te klein, het moet minimaal "
"%(minimum)s zijn."
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""
"Het aantal %(quantity)s van regel %(line)s is niet geldig, het moet een "
"veelvoud zijn van %(rounding)s."

View File

@@ -0,0 +1,41 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""

View File

@@ -0,0 +1,41 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""

View File

@@ -0,0 +1,41 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""

View File

@@ -0,0 +1,41 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""

View File

@@ -0,0 +1,41 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""

View File

@@ -0,0 +1,41 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""

View File

@@ -0,0 +1,41 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""

View File

@@ -0,0 +1,41 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:product.product,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.product,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.product,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_digits:"
msgid "Sale Quantity Digits"
msgstr ""
msgctxt "field:product.template,sale_quantity_minimal:"
msgid "Sale Minimal Quantity"
msgstr ""
msgctxt "field:product.template,sale_quantity_rounding:"
msgid "Sale Rounding Quantity"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_minimal"
msgid ""
"The quantity %(quantity)s of line %(line)s is too small, you must set at "
"least %(minimum)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_quantity_rounding"
msgid ""
"The quantity %(quantity)s of line %(line)s is not valid, you must set "
"multiple of %(rounding)s."
msgstr ""

View File

@@ -0,0 +1,13 @@
<?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_sale_line_quantity_minimal">
<field name="text">The quantity %(quantity)s of line %(line)s is too small, you must set at least %(minimum)s.</field>
</record>
<record model="ir.message" id="msg_sale_line_quantity_rounding">
<field name="text">The quantity %(quantity)s of line %(line)s is not valid, you must set multiple of %(rounding)s.</field>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,51 @@
# 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 decimal import Decimal
from trytond.model import fields
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Eval
class Template(metaclass=PoolMeta):
__name__ = 'product.template'
sale_quantity_minimal = fields.Float(
"Sale Minimal Quantity",
digits=(None, Eval('sale_quantity_digits', None)),
states={
'invisible': ~Eval('salable', False),
},
domain=['OR',
('sale_quantity_minimal', '=', None),
('sale_quantity_minimal', '>', 0),
])
sale_quantity_rounding = fields.Float(
"Sale Rounding Quantity",
digits=(None, Eval('sale_quantity_digits', None)),
states={
'invisible': ~Eval('salable', False),
},
domain=['OR',
('sale_quantity_rounding', '=', None),
('sale_quantity_rounding', '>', 0),
])
sale_quantity_digits = fields.Function(
fields.Integer("Sale Quantity Digits"),
'on_change_with_sale_quantity_digits')
@fields.depends('default_uom', 'sale_uom')
def on_change_with_sale_quantity_digits(self, name=None):
pool = Pool()
Uom = pool.get('product.uom')
if self.default_uom:
rounding = self.default_uom.rounding
if self.sale_uom:
rounding = Uom.compute_qty(
self.default_uom, rounding, self.sale_uom, round=False)
return -Decimal(str(rounding)).as_tuple().exponent
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="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,87 @@
# 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.i18n import gettext
from trytond.model import ModelStorage, fields
from trytond.modules.sale.exceptions import SaleValidationError
from trytond.pool import Pool, PoolMeta
def product_quantity_mixin(states):
class ProductQuantityMixin(ModelStorage):
@fields.depends('product', 'quantity', 'unit')
def on_change_product(self):
pool = Pool()
Uom = pool.get('product.uom')
super().on_change_product()
if self.product and self.quantity is None:
if self.unit:
unit = self.unit
else:
unit = self.product.sale_uom
if self.product.sale_quantity_minimal:
self.quantity = Uom.compute_qty(
self.product.sale_uom,
self.product.sale_quantity_minimal,
unit)
@classmethod
def validate(cls, lines):
super().validate(lines)
for line in lines:
line.check_quantity()
def check_quantity(self):
pool = Pool()
Lang = pool.get('ir.lang')
Uom = pool.get('product.uom')
if (not self.product
or self.sale.state not in states
or self.quantity < 0):
return
lang = Lang.get()
quantity = Uom.compute_qty(
self.unit, self.quantity, self.product.sale_uom, round=False)
if self.product.sale_quantity_minimal:
if quantity < self.product.sale_quantity_minimal:
minimum = Uom.compute_qty(
self.product.sale_uom,
self.product.sale_quantity_minimal,
self.unit)
raise SaleValidationError(gettext(
'sale_product_quantity'
'.msg_sale_line_quantity_minimal',
line=self.rec_name,
quantity=lang.format_number_symbol(
self.quantity, self.unit),
minimum=lang.format_number_symbol(
minimum, self.unit)))
if self.product.sale_quantity_rounding:
remainder = round(
quantity % self.product.sale_quantity_rounding,
self.product.sale_quantity_digits)
if (remainder
and remainder != self.product.sale_quantity_rounding):
rounding = Uom.compute_qty(
self.product.sale_uom,
self.product.sale_quantity_rounding,
self.unit, round=False)
raise SaleValidationError(gettext(
'sale_product_quantity'
'.msg_sale_line_quantity_rounding',
line=self.rec_name,
quantity=lang.format_number_symbol(
self.quantity, self.unit),
rounding=lang.format_number_symbol(
rounding, self.unit)))
return ProductQuantityMixin
class Line(product_quantity_mixin(['draft']), metaclass=PoolMeta):
__name__ = 'sale.line'
class POSLine(product_quantity_mixin(['open']), metaclass=PoolMeta):
__name__ = 'sale.point.sale.line'

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,95 @@
==============================
Sale Product Quantity 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('sale_product_quantity', create_company)
>>> Party = Model.get('party.party')
>>> ProductTemplate = Model.get('product.template')
>>> ProductUom = Model.get('product.uom')
>>> Sale = Model.get('sale.sale')
Create parties::
>>> customer = Party(name="Customer")
>>> customer.save()
Create product::
>>> gr, = ProductUom.find([('name', '=', "Gram")])
>>> kg, = ProductUom.find([('name', '=', "Kilogram")])
>>> template = ProductTemplate()
>>> template.name = "Product"
>>> template.default_uom = gr
>>> template.type = 'goods'
>>> template.list_price = Decimal('10')
>>> template.salable = True
>>> template.sale_uom = kg
>>> template.sale_quantity_minimal = 0.1
>>> template.sale_quantity_rounding = 0.05
>>> template.save()
>>> product, = template.products
Make a sale::
>>> sale = Sale()
>>> sale.party = customer
>>> line = sale.lines.new()
>>> line.product = product
>>> line.quantity
0.1
>>> sale.save()
Can not set quantity below minimal::
>>> line, = sale.lines
>>> line.quantity = 0.05
>>> sale.save()
Traceback (most recent call last):
...
SaleValidationError: ...
Can not set quantity different than rounding::
>>> line, = sale.lines
>>> line.quantity = 1.01
>>> sale.save()
Traceback (most recent call last):
...
SaleValidationError: ...
Use different unit::
>>> line, = sale.lines
>>> line.unit = gr
>>> line.quantity = 500
>>> sale.save()
Can not set quantity below minimal::
>>> line, = sale.lines
>>> line.quantity = 50
>>> sale.save()
Traceback (most recent call last):
...
SaleValidationError: ...
Can not set quantity different than rounding::
>>> line, = sale.lines
>>> line.quantity = 505
>>> sale.save()
Traceback (most recent call last):
...
SaleValidationError: ...

View File

@@ -0,0 +1,93 @@
==================================
Sale Product Quantity POS 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(
... ['sale_product_quantity', 'sale_point'],
... create_company)
>>> Journal = Model.get('account.journal')
>>> Location = Model.get('stock.location')
>>> POS = Model.get('sale.point')
>>> Party = Model.get('party.party')
>>> ProductTemplate = Model.get('product.template')
>>> ProductUom = Model.get('product.uom')
>>> Sale = Model.get('sale.point.sale')
>>> SequenceStrict = Model.get('ir.sequence.strict')
>>> SequenceType = Model.get('ir.sequence.type')
Get journal::
>>> journal_revenue, = Journal.find([('type', '=', 'revenue')], limit=1)
Get stock locations::
>>> storage_loc, = Location.find([('code', '=', 'STO')])
>>> customer_loc, = Location.find([('code', '=', 'CUS')])
Create POS::
>>> pos = POS(name="POS")
>>> pos.journal = journal_revenue
>>> pos.sequence = SequenceStrict(name="POS", company=pos.company)
>>> pos.sequence.sequence_type, = SequenceType.find(
... [('name', '=', "POS")], limit=1)
>>> pos.sequence.save()
>>> pos.storage_location = storage_loc
>>> pos.customer_location = customer_loc
>>> pos.save()
Create product::
>>> gr, = ProductUom.find([('name', '=', "Gram")])
>>> kg, = ProductUom.find([('name', '=', "Kilogram")])
>>> template = ProductTemplate()
>>> template.name = "Product"
>>> template.default_uom = gr
>>> template.type = 'goods'
>>> template.list_price = Decimal('10')
>>> template.salable = True
>>> template.sale_uom = kg
>>> template.sale_quantity_minimal = 0.1
>>> template.sale_quantity_rounding = 0.05
>>> template.save()
>>> product, = template.products
Make a sale::
>>> sale = Sale(point=pos)
>>> line = sale.lines.new()
>>> line.product = product
>>> line.quantity
0.1
>>> sale.save()
Can not set quantity below minimal::
>>> line, = sale.lines
>>> line.quantity = 0.05
>>> sale.save()
Traceback (most recent call last):
...
SaleValidationError: ...
Can not set quantity different than rounding::
>>> line, = sale.lines
>>> line.quantity = 1.01
>>> sale.save()
Traceback (most recent call last):
...
SaleValidationError: ...

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 SaleProductQuantityTestCase(ModuleTestCase):
'Test Sale Product Quantity module'
module = 'sale_product_quantity'
extras = ['sale_point']
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,21 @@
[tryton]
version=7.8.0
depends:
ir
product
sale
extras_depend:
sale_point
xml:
product.xml
message.xml
[register]
model:
product.Template
product.Product
sale.Line
[register sale_point]
model:
sale.POSLine

View File

@@ -0,0 +1,11 @@
<?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="//page[@id='customers']/field[@name='sale_uom']" position="after">
<label name="sale_quantity_minimal"/>
<field name="sale_quantity_minimal"/>
<label name="sale_quantity_rounding"/>
<field name="sale_quantity_rounding"/>
</xpath>
</data>