first commit
This commit is contained in:
2
modules/sale_discount/__init__.py
Normal file
2
modules/sale_discount/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
BIN
modules/sale_discount/__pycache__/__init__.cpython-311.pyc
Normal file
BIN
modules/sale_discount/__pycache__/__init__.cpython-311.pyc
Normal file
Binary file not shown.
BIN
modules/sale_discount/__pycache__/sale.cpython-311.pyc
Normal file
BIN
modules/sale_discount/__pycache__/sale.cpython-311.pyc
Normal file
Binary file not shown.
27
modules/sale_discount/locale/bg.po
Normal file
27
modules/sale_discount/locale/bg.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
27
modules/sale_discount/locale/ca.po
Normal file
27
modules/sale_discount/locale/ca.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr "Preu base"
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr "Descompte"
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr "Import descompte"
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr "% Descompte"
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr "Descompte"
|
||||
27
modules/sale_discount/locale/cs.po
Normal file
27
modules/sale_discount/locale/cs.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
27
modules/sale_discount/locale/de.po
Normal file
27
modules/sale_discount/locale/de.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr "Basispreis"
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr "Rabatt"
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr "Rabattbetrag"
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr "Rabattsatz"
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr "Rabatt"
|
||||
27
modules/sale_discount/locale/es.po
Normal file
27
modules/sale_discount/locale/es.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr "Precio base"
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr "Descuento"
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr "Importe descuento"
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr "% Descuento"
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr "Descuento"
|
||||
27
modules/sale_discount/locale/es_419.po
Normal file
27
modules/sale_discount/locale/es_419.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
27
modules/sale_discount/locale/et.po
Normal file
27
modules/sale_discount/locale/et.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
27
modules/sale_discount/locale/fa.po
Normal file
27
modules/sale_discount/locale/fa.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
27
modules/sale_discount/locale/fi.po
Normal file
27
modules/sale_discount/locale/fi.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
27
modules/sale_discount/locale/fr.po
Normal file
27
modules/sale_discount/locale/fr.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr "Prix de base"
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr "Remise"
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr "Montant de la remise"
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr "Taux de remise"
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr "Remise"
|
||||
27
modules/sale_discount/locale/hu.po
Normal file
27
modules/sale_discount/locale/hu.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr "Alapár"
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr "Engedmény"
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr "Engedmény (összeg)"
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr "Engedmény (%)"
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr "Engedmény"
|
||||
27
modules/sale_discount/locale/id.po
Normal file
27
modules/sale_discount/locale/id.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
27
modules/sale_discount/locale/it.po
Normal file
27
modules/sale_discount/locale/it.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr "Prezzo Base"
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr "Sconto"
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr "Totale sconto"
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr "Tasso di sconto"
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr "Sconto"
|
||||
27
modules/sale_discount/locale/lo.po
Normal file
27
modules/sale_discount/locale/lo.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
27
modules/sale_discount/locale/lt.po
Normal file
27
modules/sale_discount/locale/lt.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
27
modules/sale_discount/locale/nl.po
Normal file
27
modules/sale_discount/locale/nl.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr "Basisprijs"
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr "Korting"
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr "Korting hoeveelheid"
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr "Kortingspercentage"
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr "Korting"
|
||||
27
modules/sale_discount/locale/pl.po
Normal file
27
modules/sale_discount/locale/pl.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr "Cena podstawowa"
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr "Rabat"
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr "Wartość rabatu"
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr "Wysokość rabatu"
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr "Rabat"
|
||||
27
modules/sale_discount/locale/pt.po
Normal file
27
modules/sale_discount/locale/pt.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
27
modules/sale_discount/locale/ro.po
Normal file
27
modules/sale_discount/locale/ro.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr "Preț Baza"
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr "Reducere"
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr "Sumă Reducere"
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr "Rata Reducere"
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr "Reducere"
|
||||
27
modules/sale_discount/locale/ru.po
Normal file
27
modules/sale_discount/locale/ru.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
27
modules/sale_discount/locale/sl.po
Normal file
27
modules/sale_discount/locale/sl.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
27
modules/sale_discount/locale/tr.po
Normal file
27
modules/sale_discount/locale/tr.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
27
modules/sale_discount/locale/uk.po
Normal file
27
modules/sale_discount/locale/uk.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
27
modules/sale_discount/locale/zh_CN.po
Normal file
27
modules/sale_discount/locale/zh_CN.po
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.line,base_price:"
|
||||
msgid "Base Price"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_amount:"
|
||||
msgid "Discount Amount"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,discount_rate:"
|
||||
msgid "Discount Rate"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "%"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:sale.line:"
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
151
modules/sale_discount/sale.py
Normal file
151
modules/sale_discount/sale.py
Normal file
@@ -0,0 +1,151 @@
|
||||
# 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.modules.currency.fields import Monetary
|
||||
from trytond.modules.product import price_digits, round_price
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
from trytond.pyson import Eval
|
||||
|
||||
|
||||
class Line(metaclass=PoolMeta):
|
||||
__name__ = 'sale.line'
|
||||
|
||||
base_price = Monetary(
|
||||
"Base Price", currency='currency', digits=price_digits,
|
||||
states={
|
||||
'invisible': Eval('type') != 'line',
|
||||
'readonly': Eval('sale_state') != 'draft',
|
||||
})
|
||||
|
||||
discount_rate = fields.Function(fields.Numeric(
|
||||
"Discount Rate", digits=(None, 4),
|
||||
states={
|
||||
'invisible': Eval('type') != 'line',
|
||||
'readonly': Eval('sale_state') != 'draft',
|
||||
}),
|
||||
'on_change_with_discount_rate', setter='set_discount_rate')
|
||||
discount_amount = fields.Function(Monetary(
|
||||
"Discount Amount", currency='currency', digits=price_digits,
|
||||
states={
|
||||
'invisible': Eval('type') != 'line',
|
||||
'readonly': Eval('sale_state') != 'draft',
|
||||
}),
|
||||
'on_change_with_discount_amount', setter='set_discount_amount')
|
||||
|
||||
discount = fields.Function(fields.Char(
|
||||
"Discount",
|
||||
states={
|
||||
'invisible': ~Eval('discount'),
|
||||
}),
|
||||
'on_change_with_discount')
|
||||
|
||||
@fields.depends(
|
||||
methods=[
|
||||
'compute_base_price', 'on_change_with_discount_rate',
|
||||
'on_change_with_discount_amount', 'on_change_with_discount'])
|
||||
def on_change_product(self):
|
||||
super().on_change_product()
|
||||
if self.product:
|
||||
self.base_price = self.compute_base_price()
|
||||
self.discount_rate = self.on_change_with_discount_rate()
|
||||
self.discount_amount = self.on_change_with_discount_amount()
|
||||
self.discount = self.on_change_with_discount()
|
||||
|
||||
@fields.depends('product', 'unit')
|
||||
def compute_base_price(self):
|
||||
pool = Pool()
|
||||
Uom = pool.get('product.uom')
|
||||
if (self.product
|
||||
and (price := self.product.list_price_used) is not None):
|
||||
if self.unit:
|
||||
price = Uom.compute_price(
|
||||
self.product.default_uom, price, self.unit)
|
||||
return round_price(price)
|
||||
|
||||
@fields.depends(
|
||||
methods=[
|
||||
'compute_base_price', 'on_change_with_discount_rate',
|
||||
'on_change_with_discount_amount', 'on_change_with_discount'])
|
||||
def on_change_quantity(self):
|
||||
super().on_change_quantity()
|
||||
self.base_price = self.compute_base_price()
|
||||
self.discount_rate = self.on_change_with_discount_rate()
|
||||
self.discount_amount = self.on_change_with_discount_amount()
|
||||
self.discount = self.on_change_with_discount()
|
||||
|
||||
@fields.depends('unit_price', 'base_price')
|
||||
def on_change_with_discount_rate(self, name=None):
|
||||
if self.unit_price is None or not self.base_price:
|
||||
return
|
||||
rate = 1 - self.unit_price / self.base_price
|
||||
return rate.quantize(
|
||||
Decimal(1) / 10 ** self.__class__.discount_rate.digits[1])
|
||||
|
||||
@fields.depends(
|
||||
'base_price', 'discount_rate',
|
||||
methods=['on_change_with_discount_amount', 'on_change_with_discount',
|
||||
'on_change_with_amount'])
|
||||
def on_change_discount_rate(self):
|
||||
if self.base_price is not None and self.discount_rate is not None:
|
||||
self.unit_price = round_price(
|
||||
self.base_price * (1 - self.discount_rate))
|
||||
self.discount_amount = self.on_change_with_discount_amount()
|
||||
self.discount = self.on_change_with_discount()
|
||||
self.amount = self.on_change_with_amount()
|
||||
|
||||
@classmethod
|
||||
def set_discount_rate(cls, lines, name, value):
|
||||
pass
|
||||
|
||||
@fields.depends('unit_price', 'base_price')
|
||||
def on_change_with_discount_amount(self, name=None):
|
||||
if self.unit_price is None or self.base_price is None:
|
||||
return
|
||||
return round_price(self.base_price - self.unit_price)
|
||||
|
||||
@fields.depends(
|
||||
'base_price', 'discount_amount',
|
||||
methods=['on_change_with_discount_rate', 'on_change_with_discount',
|
||||
'on_change_with_amount'])
|
||||
def on_change_discount_amount(self):
|
||||
if self.base_price is not None and self.discount_amount is not None:
|
||||
self.unit_price = round_price(
|
||||
self.base_price - self.discount_amount)
|
||||
self.discount_rate = self.on_change_with_discount_rate()
|
||||
self.discount = self.on_change_with_discount()
|
||||
self.amount = self.on_change_with_amount()
|
||||
|
||||
@classmethod
|
||||
def set_discount_amount(cls, lines, name, value):
|
||||
pass
|
||||
|
||||
@fields.depends(
|
||||
'sale', '_parent_sale.currency',
|
||||
methods=[
|
||||
'on_change_with_discount_rate', 'on_change_with_discount_amount'])
|
||||
def on_change_with_discount(self, name=None):
|
||||
pool = Pool()
|
||||
Lang = pool.get('ir.lang')
|
||||
lang = Lang.get()
|
||||
rate = self.on_change_with_discount_rate()
|
||||
if not rate or rate % Decimal('0.01'):
|
||||
amount = self.on_change_with_discount_amount()
|
||||
if amount:
|
||||
if self.sale and self.sale.currency:
|
||||
return lang.currency(
|
||||
amount, self.sale.currency, digits=price_digits[1])
|
||||
else:
|
||||
return lang.format_number(
|
||||
amount, digits=price_digits[1], monetary=True)
|
||||
else:
|
||||
return lang.format('%i', rate * 100) + '%'
|
||||
|
||||
@classmethod
|
||||
def view_attributes(cls):
|
||||
return super().view_attributes() + [
|
||||
('/form//label[@id="discount"]', 'states', {
|
||||
'invisible': Eval('type') != 'line',
|
||||
}, ['type']),
|
||||
]
|
||||
24
modules/sale_discount/sale.xml
Normal file
24
modules/sale_discount/sale.xml
Normal 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="sale_line_view_form">
|
||||
<field name="model">sale.line</field>
|
||||
<field name="inherit" ref="sale.sale_line_view_form"/>
|
||||
<field name="name">sale_line_form</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="sale_line_view_list">
|
||||
<field name="model">sale.line</field>
|
||||
<field name="inherit" ref="sale.sale_line_view_tree"/>
|
||||
<field name="name">sale_line_list</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="sale_line_view_list_sequence">
|
||||
<field name="model">sale.line</field>
|
||||
<field name="inherit" ref="sale.sale_line_view_tree_sequence"/>
|
||||
<field name="name">sale_line_list</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
2
modules/sale_discount/tests/__init__.py
Normal file
2
modules/sale_discount/tests/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
BIN
modules/sale_discount/tests/__pycache__/__init__.cpython-311.pyc
Normal file
BIN
modules/sale_discount/tests/__pycache__/__init__.cpython-311.pyc
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
78
modules/sale_discount/tests/scenario_sale_discount.rst
Normal file
78
modules/sale_discount/tests/scenario_sale_discount.rst
Normal file
@@ -0,0 +1,78 @@
|
||||
======================
|
||||
Sale Discount 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_discount', create_company)
|
||||
|
||||
Create parties::
|
||||
|
||||
>>> Party = Model.get('party.party')
|
||||
>>> customer = Party(name="Customer")
|
||||
>>> customer.save()
|
||||
|
||||
Create product::
|
||||
|
||||
>>> ProductUom = Model.get('product.uom')
|
||||
>>> unit, = ProductUom.find([('name', '=', 'Unit')])
|
||||
>>> ProductTemplate = Model.get('product.template')
|
||||
|
||||
>>> template = ProductTemplate()
|
||||
>>> template.name = 'product'
|
||||
>>> template.default_uom = unit
|
||||
>>> template.type = 'goods'
|
||||
>>> template.salable = True
|
||||
>>> template.list_price = Decimal('10')
|
||||
>>> template.save()
|
||||
>>> product, = template.products
|
||||
|
||||
Create a sale::
|
||||
|
||||
>>> Sale = Model.get('sale.sale')
|
||||
>>> sale = Sale()
|
||||
>>> sale.party = customer
|
||||
>>> line = sale.lines.new()
|
||||
>>> line.product = product
|
||||
>>> line.quantity = 1
|
||||
>>> line.base_price
|
||||
Decimal('10.0000')
|
||||
>>> line.unit_price
|
||||
Decimal('10.0000')
|
||||
|
||||
Set a discount of 10%::
|
||||
|
||||
>>> line.discount_rate = Decimal('0.1')
|
||||
>>> line.unit_price
|
||||
Decimal('9.0000')
|
||||
>>> line.discount_amount
|
||||
Decimal('1.0000')
|
||||
>>> line.discount
|
||||
'10%'
|
||||
|
||||
>>> sale.save()
|
||||
>>> line, = sale.lines
|
||||
>>> line.unit_price
|
||||
Decimal('9.0000')
|
||||
>>> line.discount_amount
|
||||
Decimal('1.0000')
|
||||
>>> line.discount
|
||||
'10%'
|
||||
|
||||
Set a discount amount::
|
||||
|
||||
>>> line.discount_amount = Decimal('3.3333')
|
||||
>>> line.unit_price
|
||||
Decimal('6.6667')
|
||||
>>> line.discount_rate
|
||||
Decimal('0.3333')
|
||||
>>> line.discount
|
||||
'$3.3333'
|
||||
12
modules/sale_discount/tests/test_module.py
Normal file
12
modules/sale_discount/tests/test_module.py
Normal file
@@ -0,0 +1,12 @@
|
||||
# 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 SaleDiscountTestCase(ModuleTestCase):
|
||||
'Test Sale Discount module'
|
||||
module = 'sale_discount'
|
||||
|
||||
|
||||
del ModuleTestCase
|
||||
8
modules/sale_discount/tests/test_scenario.py
Normal file
8
modules/sale_discount/tests/test_scenario.py
Normal 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)
|
||||
12
modules/sale_discount/tryton.cfg
Normal file
12
modules/sale_discount/tryton.cfg
Normal file
@@ -0,0 +1,12 @@
|
||||
[tryton]
|
||||
version=7.8.0
|
||||
depends:
|
||||
ir
|
||||
product
|
||||
sale
|
||||
xml:
|
||||
sale.xml
|
||||
|
||||
[register]
|
||||
model:
|
||||
sale.Line
|
||||
17
modules/sale_discount/view/sale_line_form.xml
Normal file
17
modules/sale_discount/view/sale_line_form.xml
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<data>
|
||||
<xpath expr="//label[@name='unit_price']" position="before">
|
||||
<label name="base_price"/>
|
||||
<field name="base_price"/>
|
||||
<label id="discount" string="Discount"/>
|
||||
<group col="-1" id="discounts">
|
||||
<group col="-1" id="discount_rate">
|
||||
<field name="discount_rate" factor="100" xexpand="0"/>
|
||||
<label name="discount_rate" string="%" xalign="0.0" xexpand="1"/>
|
||||
</group>
|
||||
<field name="discount_amount"/>
|
||||
</group>
|
||||
</xpath>
|
||||
</data>
|
||||
12
modules/sale_discount/view/sale_line_list.xml
Normal file
12
modules/sale_discount/view/sale_line_list.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<data>
|
||||
<xpath expr="//field[@name='unit_price']" position="before">
|
||||
<field name="base_price" optional="1"/>
|
||||
<field name="discount_rate" factor="100" optional="1">
|
||||
<suffix name="discount_rate" string="%"/>
|
||||
</field>
|
||||
<field name="discount_amount" optional="1"/>
|
||||
</xpath>
|
||||
</data>
|
||||
Reference in New Issue
Block a user