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,7 @@
# 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 PromotionCouponNumberDatesError(ValidationError):
pass

View File

@@ -0,0 +1,119 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr ""
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr ""
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr ""
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr ""
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr ""
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr ""
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr ""
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr ""
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr ""
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr ""

View File

@@ -0,0 +1,126 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr "Cupons"
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr "Empresa"
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr "Nombre d'usos"
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr "Números"
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr "Per tercer"
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr "Promoció"
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr "Empresa"
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr "Cupó"
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr "Data finalització"
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr "Número"
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr "Data d'inici"
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr "Tercers dels cupons"
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr "Cupons"
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr "Número"
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr "Venda"
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
"El nombre de vegades que es pot utilitzar el cupó.\n"
"0 o menys indica sense límit."
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr "Marca per contar l'ús per tercer."
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr "Número cupó promocional"
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
"Les dates dels números de cupó amb el mateix número no es poden solapar."
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr ""
"La data de finalització dels cupons numerats \"%(numbers)s\" ha de ser "
"anterior a %(start_date)s."
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr ""
"La data d'inici dels cupons numerats \"%(numbers)s\" ha de ser posterior a "
"%(start_date)s."
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr "Usuari a les empreses"
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr "Usuari a les empreses"
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr "Número cupó promocional"
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr "Cupó promocional"
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr "Venda - Número de cupó promocional"
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr "Venda - Número de cupó promocional"

View File

@@ -0,0 +1,119 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr ""
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr ""
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr ""
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr ""
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr ""
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr ""
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr ""
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr ""
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr ""
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr ""

View File

@@ -0,0 +1,129 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr "Coupons"
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr "Unternehmen"
# For a condensed but talking representation in list view it seems better to
# put 'Anzahl' at the first place.
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr "Maximale Anzahl Verwendung"
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr "Nummern"
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr "Pro Partei"
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr "Verkaufsaktion"
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr "Unternehmen"
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr "Coupon"
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr "Enddatum"
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr "Nummer"
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr "Startdatum"
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr "Coupons Parteien"
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr "Coupons"
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr "Nummer"
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr "Verkauf"
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
"Wie oft eine Coupon-Nummer genutzt werden kann.\n"
"0 oder weniger für kein Limit."
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr "Aktivieren um die Anzahl der Verwendungen pro Partei zu zählen."
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr "Couponnummern"
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
"Die Datumsangaben von Couponnummern mit gleicher Nummer dürfen sich nicht "
"überschneiden."
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr ""
"Das Enddatum von Coupons mit den Nummern „%(numbers)s“ muss vor dem "
"%(start_date)s liegen."
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr ""
"Das Startdatum von Coupons mit den Nummern „%(numbers)s“ muss nach dem "
"%(start_date)s liegen."
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr "Benutzer in Unternehmen"
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr "Benutzer in Unternehmen"
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr "Couponnummern"
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr "Verkaufsaktion Coupon"
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr "Verkaufsaktion Couponnummer"
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr "Verkauf - Verkaufsaktions Couponnummer"

View File

@@ -0,0 +1,127 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr "Cupones"
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr "Empresa"
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr "Nombre de usos"
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr "Números"
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr "Por tercero"
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr "Promoción"
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr "Empresa"
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr "Cupón"
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr "Fecha final"
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr "Número"
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr "Fecha inicial"
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr "Terceros de los cupones"
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr "Cupones"
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr "Número"
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr "Venta"
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
"El número de veces que se puede utilizar el cupón.\n"
"0 o menos indica sin límite."
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr "Marcar para contar el uso por tercero."
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr "Números de cupón"
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
"Las fechas de los números de cupón con el mismo número no pueden "
"superponerse."
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr ""
"La fecha de finalización de los cupones numerados \"%(numbers)s\" debe ser "
"anterior a %(start_date)s."
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr ""
"La fecha de inicio de los cupones numerados \"%(numbers)s\" debe ser "
"posterior a %(start_date)s."
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr "Usuario en las empresas"
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr "Usuario en las empresas"
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr "Número de cupón promocional"
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr "Cupón promocional"
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr "Venta Número de cupón promocional"
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr "Venta - Número de cupón promocional"

View File

@@ -0,0 +1,119 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr ""
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr ""
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr ""
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr ""
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr ""
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr ""
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr ""
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr ""
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr ""
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr ""

View File

@@ -0,0 +1,126 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr "Kupongid"
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr "Kasutuse arv"
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr "Numbrid"
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr "Osapoole kohta"
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr "Soodustus"
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr "Kupong"
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr "Number"
#, fuzzy
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr "Muutmise kuupäev"
#, fuzzy
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr "Kupongid"
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr "Kupongid"
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr "Number"
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr "Müük"
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr ""
#, fuzzy
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr "Sooduskupongi number"
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr ""
#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr "Sooduskupongi number"
#, fuzzy
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr "Sooduskupong"
#, fuzzy
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr "Müük - sooduskupongi number"
#, fuzzy
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr "Müük - sooduskupongi number"

View File

@@ -0,0 +1,128 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr "کوپن ها"
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr "تعداد استفاده"
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr "تعداد"
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr "در هر نهاد/سازمان"
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr "تبلیغ و ترویج"
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr "کوپن"
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr "شماره"
#, fuzzy
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr "تاریخ نوشته"
#, fuzzy
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr "کوپن ها"
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr "کوپن ها"
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr "شماره"
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr "فروش"
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
"چه مدت زمان یک کوپن باید استفاده شود.\n"
"0 یا کمتر برای نامحدود."
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr "تیک بزنید برای شمارش استفاده در هر نهاد/سازمان."
#, fuzzy
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr "شماره کوپن تبلیغ و ترویج"
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
#, fuzzy, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr "تعداد کوپن های :\"%s\" دوبرابر شده است."
#, fuzzy, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr "تعداد کوپن های :\"%s\" دوبرابر شده است."
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr ""
#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr "شماره کوپن تبلیغ و ترویج"
#, fuzzy
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr "کوپن تبلیغ و ترویج"
#, fuzzy
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr "فروش - شماره کوپن تبلیغ و ترویج"
#, fuzzy
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr "فروش - شماره کوپن تبلیغ و ترویج"

View File

@@ -0,0 +1,119 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr ""
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr ""
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr ""
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr ""
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr ""
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr ""
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr ""
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr ""
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr ""
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr ""

View File

@@ -0,0 +1,127 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr "Coupons"
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr "Société"
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr "Nombre d'utilisation"
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr "Numéros"
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr "Par tiers"
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr "Promotion"
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr "Société"
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr "Coupon"
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr "Date de fin"
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr "Numéro"
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr "Date de début"
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr "Tiers de coupon"
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr "Coupons"
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr "Numéro"
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr "Vente"
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
"Combien de fois un numéro de coupon peut être utilisé.\n"
"0 ou moins pour aucune limite."
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr "Cochez pour compter l'utilisation par tiers."
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr "Numéros de coupon"
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
"Les dates des numéros de coupon portant le même numéro ne peuvent pas se "
"chevaucher."
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr ""
"La date de fin des coupons numérotés « %(numbers)s » doit être antérieure à "
"%(start_date)s."
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr ""
"La date de début des coupons numérotés « %(numbers)s » doit être postérieure"
" à %(start_date)s."
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr "Utilisateur dans les sociétés"
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr "Utilisateur dans les sociétés"
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr "Numéros de coupon"
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr "Coupon de promotion de vente"
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr "Numéro de coupon de promotion de vente"
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr "Vente - Numéro de coupon de promotion de vente"

View File

@@ -0,0 +1,119 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr ""
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr ""
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr ""
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr ""
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr ""
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr ""
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr ""
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr ""
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr ""
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr ""

View File

@@ -0,0 +1,128 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr "Kupon"
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr ""
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr ""
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr ""
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr "Nomor"
#, fuzzy
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr "Tanggal Penulisan"
#, fuzzy
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr "Kupon"
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr "Kupon"
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr "Nomor"
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr "Penjualan"
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
"Berapa kali nomor kupondapat digunakan.\n"
"0 atau di bawahnya untuk tanpa batas."
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr "Periksa untuk menghitung penggunaan per pihak."
#, fuzzy
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr "Nomor Kupon Promosi"
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
#, fuzzy, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr "Kupon bernomor \"%(numbers)s\" digandakan."
#, fuzzy, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr "Kupon bernomor \"%(numbers)s\" digandakan."
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr ""
#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr "Nomor Kupon Promosi"
#, fuzzy
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr "Kupon Promosi"
#, fuzzy
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr "Penjualan - Nomor Kupon Promosi"
#, fuzzy
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr "Penjualan - Nomor Kupon Promosi"

View File

@@ -0,0 +1,119 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr ""
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr ""
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr ""
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr "Numero"
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr ""
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr ""
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr "Numero"
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr ""
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr ""
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr ""
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr ""
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr ""

View File

@@ -0,0 +1,119 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr ""
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr ""
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr ""
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr ""
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr ""
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr ""
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr ""
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr ""
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr ""
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr ""

View File

@@ -0,0 +1,120 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr ""
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr ""
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr "Kontrahentui"
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
#, fuzzy
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr "Pakeitimo data"
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr ""
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr ""
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr ""
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr ""
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr ""
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr ""

View File

@@ -0,0 +1,126 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr "Bonnen"
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr "Bedrijf"
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr "aantal gebruik"
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr "Nummers"
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr "Per relatie"
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr "Promotie"
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr "Bedrijf"
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr "Bon"
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr "Eind Datum"
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr "Nummer"
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr "Start Datum"
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr "Relatie Bon"
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr "Bonnen"
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr "Nummer"
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr "verkoop"
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
"Hoe vaak kan een couponnummer gebruikt worden.\n"
"0 of lager voor geen limiet."
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr "Vink aan om het gebruik per relatie te tellen."
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr "Waardebon nummers"
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
"De datums van de couponnummers met hetzelfde nummer mogen niet overlappen."
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr ""
"De einddatum van de coupons met nummer \"%(numbers)s\" moet vóór "
"%(start_date)s liggen."
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr ""
"De startdatum van de coupons met het nummer \"%(numbers)s\" moet na "
"%(start_date)s liggen."
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr "Gebruiker in bedrijven"
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr "Gebruiker in bedrijven"
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr "Waardebon nummers"
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr "Verkoop waardebon"
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr "Verkoop waardebon nummer"
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr "Verkoop - Verkoop waardebon nummer"

View File

@@ -0,0 +1,119 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr ""
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr ""
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr ""
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr ""
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr ""
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr ""
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr ""
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr ""
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr ""
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr ""

View File

@@ -0,0 +1,119 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr ""
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr ""
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr ""
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr ""
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr ""
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr ""
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr ""
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr ""
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr ""
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr ""

View File

@@ -0,0 +1,119 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr ""
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr ""
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr ""
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr ""
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr ""
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr ""
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr ""
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr ""
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr ""
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr ""

View File

@@ -0,0 +1,119 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr ""
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr ""
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr ""
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr ""
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr ""
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr ""
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr ""
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr ""
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr ""
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr ""

View File

@@ -0,0 +1,119 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr ""
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr ""
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr ""
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr ""
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr ""
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr ""
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr ""
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr ""
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr ""
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr ""

View File

@@ -0,0 +1,119 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr ""
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr ""
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr ""
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr ""
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr ""
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr ""
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr ""
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr ""
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr ""
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr ""

View File

@@ -0,0 +1,119 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr ""
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr ""
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr ""
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr ""
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr ""
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr ""
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr ""
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr ""
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr ""
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
msgstr ""

View File

@@ -0,0 +1,119 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:sale.promotion,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.promotion.coupon,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon,number_of_use:"
msgid "Number of Use"
msgstr ""
msgctxt "field:sale.promotion.coupon,numbers:"
msgid "Numbers"
msgstr ""
msgctxt "field:sale.promotion.coupon,per_party:"
msgid "Per Party"
msgstr ""
msgctxt "field:sale.promotion.coupon,promotion:"
msgid "Promotion"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,company:"
msgid "Company"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,coupon:"
msgid "Coupon"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,end_date:"
msgid "End Date"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.promotion.coupon.number,start_date:"
msgid "Start Date"
msgstr ""
msgctxt "field:sale.sale,coupon_parties:"
msgid "Coupon Parties"
msgstr ""
msgctxt "field:sale.sale,coupons:"
msgid "Coupons"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,number:"
msgid "Number"
msgstr ""
msgctxt "field:sale.sale-sale.promotion.coupon.number,sale:"
msgid "Sale"
msgstr ""
msgctxt "help:sale.promotion.coupon,number_of_use:"
msgid ""
"How much times a coupon number can be used.\n"
"0 or below for no limit."
msgstr ""
msgctxt "help:sale.promotion.coupon,per_party:"
msgid "Check to count usage per party."
msgstr ""
msgctxt "model:ir.action,name:act_promotion_coupon_number_form"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:ir.message,text:msg_duplicate_numbers"
msgid "The dates of coupon numbers with the same number can not overlap."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_end_date"
msgid ""
"The end date of coupons numbered \"%(numbers)s\" must be before "
"%(start_date)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_promotion_coupon_number_start_date"
msgid ""
"The start date of coupons numbered \"%(numbers)s\" must be after "
"%(start_date)s."
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.rule.group,name:rule_group_coupon_number_companies"
msgid "User in companies"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_promotion_coupon_number"
msgid "Coupon Numbers"
msgstr ""
msgctxt "model:sale.promotion.coupon,string:"
msgid "Sale Promotion Coupon"
msgstr ""
msgctxt "model:sale.promotion.coupon.number,string:"
msgid "Sale Promotion Coupon Number"
msgstr ""
msgctxt "model:sale.sale-sale.promotion.coupon.number,string:"
msgid "Sale - Sale Promotion Coupon Number"
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_promotion_coupon_number_start_date">
<field name="text">The start date of coupons numbered "%(numbers)s" must be after %(start_date)s.</field>
</record>
<record model="ir.message" id="msg_promotion_coupon_number_end_date">
<field name="text">The end date of coupons numbered "%(numbers)s" must be before %(start_date)s.</field>
</record>
<record model="ir.message" id="msg_duplicate_numbers">
<field name="text">The dates of coupon numbers with the same number can not overlap.</field>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,398 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import datetime as dt
from sql import Literal
from sql.aggregate import Count
from sql.conditionals import Case, Coalesce
from sql.operators import Equal
from trytond.i18n import gettext
from trytond.model import (
DeactivableMixin, Exclude, ModelSQL, ModelView, Workflow, fields)
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Eval, If
from trytond.sql.functions import DateRange
from trytond.sql.operators import RangeOverlap
from trytond.tools import grouped_slice, reduce_ids
from trytond.transaction import Transaction
from .exceptions import PromotionCouponNumberDatesError
class Promotion(metaclass=PoolMeta):
__name__ = 'sale.promotion'
coupons = fields.One2Many(
'sale.promotion.coupon', 'promotion', "Coupons",
domain=[
('company', '=', Eval('company', -1)),
])
def get_pattern(self, sale):
pattern = super().get_pattern(sale)
if sale.coupons:
pattern['coupons'] = [c.coupon.id for c in sale.coupons]
return pattern
def match(self, pattern):
if self.coupons:
pattern = pattern.copy()
coupons = pattern.pop('coupons', [])
if not set(coupons).intersection({c.id for c in self.coupons}):
return False
return super().match(pattern)
@classmethod
def on_modification(cls, mode, promotions, field_names=None):
pool = Pool()
Number = pool.get('sale.promotion.coupon.number')
super().on_modification(mode, promotions, field_names=field_names)
if mode == 'write' and field_names & {'start_date', 'end_date'}:
Number.save(list(cls._update_coupon_number_dates(promotions)))
@classmethod
def _update_coupon_number_dates(cls, promotions):
for promotion in promotions:
for coupon in promotion.coupons:
for number in coupon.numbers:
number.on_change_coupon()
yield number
class PromotionCoupon(ModelSQL, ModelView):
__name__ = 'sale.promotion.coupon'
number_of_use = fields.Integer(
"Number of Use", required=True,
help="How much times a coupon number can be used.\n"
"0 or below for no limit.")
per_party = fields.Boolean(
"Per Party", help="Check to count usage per party.")
numbers = fields.One2Many(
'sale.promotion.coupon.number', 'coupon', "Numbers",
domain=[
('company', '=', Eval('company', -1)),
],
filter=[
('active', 'in', [True, False]), # Show inactive numbers
])
promotion = fields.Many2One(
'sale.promotion', "Promotion", required=True,
domain=[
('company', '=', Eval('company', -1)),
])
company = fields.Many2One('company.company', "Company", required=True)
@classmethod
def __setup__(cls):
super().__setup__()
cls.__access__.add('promotion')
@classmethod
def __register__(cls, module):
pool = Pool()
Promotion = pool.get('sale.promotion.coupon')
table = cls.__table__()
promotion = Promotion.__table__()
table_h = cls.__table_handler__(module)
cursor = Transaction().connection.cursor()
company_exist = table_h.column_exist('company')
super().__register__(module)
# Migration from 7.2: add company
if not company_exist:
cursor.execute(*table.update(
[table.company],
[promotion.select(
promotion.company,
where=promotion.id == table.promotion)]))
# Migration from 7.4: remove name
table_h.not_null_action('name', 'remove')
@classmethod
def default_company(cls):
return Transaction().context.get('company')
@classmethod
def default_number_of_use(cls):
return 0
@classmethod
def default_per_party(cls):
return False
def get_rec_name(self, name):
return self.promotion.rec_name
@classmethod
def search_rec_name(cls, name, clause):
return [('promotion.rec_name', *clause[1:])]
class PromotionCouponNumber(DeactivableMixin, ModelSQL, ModelView):
__name__ = 'sale.promotion.coupon.number'
_rec_name = 'number'
number = fields.Char("Number", required=True)
coupon = fields.Many2One(
'sale.promotion.coupon', "Coupon", required=True,
domain=[
('company', '=', Eval('company', -1)),
])
company = fields.Many2One('company.company', "Company", required=True)
start_date = fields.Date("Start Date",
domain=['OR',
('start_date', '<=', If(~Eval('end_date', None),
dt.date.max,
Eval('end_date', dt.date.max))),
('start_date', '=', None),
])
end_date = fields.Date("End Date",
domain=['OR',
('end_date', '>=', If(~Eval('start_date', None),
dt.date.min,
Eval('start_date', dt.date.min))),
('end_date', '=', None),
])
@classmethod
def __setup__(cls):
super().__setup__()
t = cls.__table__()
cls._sql_constraints += [
('dates_number_overlap',
Exclude(t,
(t.company, Equal),
(t.number, Equal),
(DateRange(t.start_date, t.end_date, '[]'), RangeOverlap)),
'sale_promotion_coupon.msg_duplicate_numbers'),
]
cls.__access__.add('coupon')
cls.active = fields.Function(
cls.active, 'get_active', searcher='search_active')
@classmethod
def __register__(cls, module):
pool = Pool()
Coupon = pool.get('sale.promotion.coupon')
Promotion = pool.get('sale.promotion')
table = cls.__table__()
coupon = Coupon.__table__()
promotion = Promotion.__table__()
table_h = cls.__table_handler__(module)
cursor = Transaction().connection.cursor()
start_date_exists = table_h.column_exist('start_date')
end_date_exists = table_h.column_exist('end_date')
company_exist = table_h.column_exist('company')
super().__register__(module)
# Migration from 7.2: add start_date and end_date
if not start_date_exists:
cursor.execute(*table.update(
[table.start_date],
[coupon
.join(promotion,
condition=coupon.promotion == promotion.id)
.select(
promotion.start_date,
where=coupon.id == table.coupon)]))
if not end_date_exists:
cursor.execute(*table.update(
[table.end_date],
[coupon
.join(promotion,
condition=coupon.promotion == promotion.id)
.select(
promotion.end_date,
where=coupon.id == table.coupon)]))
# Migration from 7.2: add company
if not company_exist:
cursor.execute(*table.update(
[table.company],
[coupon
.join(promotion,
condition=coupon.promotion == promotion.id)
.select(
promotion.company,
where=coupon.id == table.coupon)]))
@classmethod
def default_company(cls):
return Transaction().context.get('company')
@classmethod
def default_start_date(cls):
return Pool().get('ir.date').today()
@fields.depends(
'coupon', '_parent_coupon.promotion',
'_parent_coupon._parent_promotion.start_date',
'_parent_coupon._parent_promotion.end_date',
'start_date', 'end_date')
def on_change_coupon(self):
if self.coupon and self.coupon.promotion:
if start_date := self.coupon.promotion.start_date:
if not self.start_date or self.start_date < start_date:
self.start_date = start_date
if end_date := self.coupon.promotion.end_date:
if not self.end_date or self.end_date > end_date:
self.end_date = end_date
@classmethod
def _active_query(cls):
pool = Pool()
Date = pool.get('ir.date')
Coupon = pool.get('sale.promotion.coupon')
Sale = pool.get('sale.sale')
Sale_Number = pool.get('sale.sale-sale.promotion.coupon.number')
table = cls.__table__()
coupon = Coupon.__table__()
sale = Sale.__table__()
sale_number = Sale_Number.__table__()
context = Transaction().context
party = context.get('party')
if isinstance(party, int):
party = [party]
today = Date.today()
query = (table
.join(sale_number, 'LEFT',
condition=table.id == sale_number.number)
.join(coupon, condition=table.coupon == coupon.id))
if party:
query = query.join(sale, 'LEFT',
condition=(sale_number.sale == sale.id)
& (sale.party.in_(party)))
active = Case(
((coupon.number_of_use > 0) & (coupon.per_party),
Count(sale.id) < coupon.number_of_use),
((coupon.number_of_use > 0)
& ~Coalesce(coupon.per_party, False),
Count(sale_number.sale) < coupon.number_of_use),
else_=Literal(True))
else:
active = Case(
((coupon.number_of_use > 0)
& ~Coalesce(coupon.per_party, False),
Count(sale_number.sale) < coupon.number_of_use),
else_=Literal(True))
active &= Coalesce(table.start_date, dt.date.min) <= today
active &= Coalesce(table.end_date, dt.date.max) >= today
query = query.select(
group_by=[table.id, coupon.number_of_use, coupon.per_party])
return query, table, active
@classmethod
def get_active(cls, numbers, name):
cursor = Transaction().connection.cursor()
query, table, active = cls._active_query()
query.columns = [table.id, active]
result = {}
for sub_numbers in grouped_slice(numbers):
query.where = reduce_ids(table.id, map(int, sub_numbers))
cursor.execute(*query)
result.update(dict(cursor))
return result
@classmethod
def search_active(cls, name, clause):
_, operator, value = clause
Operator = fields.SQL_OPERATORS[operator]
query, table, active = cls._active_query()
query.columns = [table.id]
query.having = Operator(active, value)
return [('id', 'in', query)]
@classmethod
def validate(cls, numbers):
super().validate(numbers)
cls.check_dates(numbers)
@classmethod
def check_dates(cls, numbers):
pool = Pool()
Lang = pool.get('ir.lang')
lang = Lang.get()
for number in numbers:
start_date = number.coupon.promotion.start_date or dt.date.min
end_date = number.coupon.promotion.end_date or dt.date.max
if number.start_date and number.start_date < start_date:
raise PromotionCouponNumberDatesError(gettext(
'sale_promotion_coupon'
'.msg_promotion_coupon_number_start_date',
number=number.rec_name,
start_date=lang.strftime(start_date)))
if number.end_date and number.end_date > end_date:
raise PromotionCouponNumberDatesError(gettext(
'sale_promotion_coupon'
'.msg_promotion_coupon_number_end_date',
number=number.rec_name,
end_date=lang.strftime(end_date)))
class Sale(metaclass=PoolMeta):
__name__ = 'sale.sale'
coupons = fields.Many2Many(
'sale.sale-sale.promotion.coupon.number', 'sale', 'number', "Coupons",
domain=[
('coupon.promotion.company', '=', Eval('company', -1)),
],
context={
'party': Eval('coupon_parties', []),
},
states={
'readonly': Eval('state') != 'draft',
},
depends={'coupon_parties'})
coupon_parties = fields.Function(fields.Many2Many(
'party.party', None, None, "Coupon Parties",
context={
'company': Eval('company', -1),
}),
'on_change_with_coupon_parties')
@fields.depends(methods=['_coupon_parties'])
def on_change_with_coupon_parties(self, name=None):
return list(self._coupon_parties())
@fields.depends('party')
def _coupon_parties(self):
parties = set()
if self.party:
parties.add(self.party)
return parties
@classmethod
@ModelView.button
@Workflow.transition('cancelled')
def cancel(cls, sales):
for sale in sales:
if sale.coupons:
sale.coupons = []
cls.save(sales)
super().cancel(sales)
class Sale_PromotionCouponNumber(ModelSQL):
__name__ = 'sale.sale-sale.promotion.coupon.number'
sale = fields.Many2One(
'sale.sale', "Sale", required=True, ondelete='CASCADE')
number = fields.Many2One(
'sale.promotion.coupon.number', "Number",
required=True, ondelete='RESTRICT')

View File

@@ -0,0 +1,80 @@
<?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="promotion_view_form">
<field name="model">sale.promotion</field>
<field name="inherit" ref="sale_promotion.promotion_view_form"/>
<field name="name">promotion_form</field>
</record>
<record model="ir.ui.view" id="coupon_view_form">
<field name="model">sale.promotion.coupon</field>
<field name="type">form</field>
<field name="name">coupon_form</field>
</record>
<record model="ir.ui.view" id="coupon_view_list">
<field name="model">sale.promotion.coupon</field>
<field name="type">tree</field>
<field name="name">coupon_list</field>
</record>
<record model="ir.rule.group" id="rule_group_coupon_companies">
<field name="name">User in companies</field>
<field name="model">sale.promotion.coupon</field>
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_coupon_companies">
<field name="domain" eval="[('company', 'in', Eval('companies', []))]" pyson="1"/>
<field name="rule_group" ref="rule_group_coupon_companies"/>
</record>
<record model="ir.ui.view" id="coupon_number_view_form">
<field name="model">sale.promotion.coupon.number</field>
<field name="type">form</field>
<field name="name">coupon_number_form</field>
</record>
<record model="ir.ui.view" id="coupon_number_view_list">
<field name="model">sale.promotion.coupon.number</field>
<field name="type">tree</field>
<field name="name">coupon_number_list</field>
</record>
<record model="ir.action.act_window" id="act_promotion_coupon_number_form">
<field name="name">Coupon Numbers</field>
<field name="res_model">sale.promotion.coupon.number</field>
</record>
<record model="ir.action.act_window.view" id="act_promotion_coupon_number_form_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="coupon_number_view_list"/>
<field name="act_window" ref="act_promotion_coupon_number_form"/>
</record>
<record model="ir.action.act_window.view" id="act_promotion_coupon_number_form_view2">
<field name="sequence" eval="20"/>
<field name="view" ref="coupon_number_view_form"/>
<field name="act_window" ref="act_promotion_coupon_number_form"/>
</record>
<menuitem
parent="sale.menu_configuration"
action="act_promotion_coupon_number_form"
sequence="30"
id="menu_promotion_coupon_number"/>
<record model="ir.rule.group" id="rule_group_coupon_number_companies">
<field name="name">User in companies</field>
<field name="model">sale.promotion.coupon.number</field>
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_coupon_number_companies">
<field name="domain" eval="[('company', 'in', Eval('companies', []))]" pyson="1"/>
<field name="rule_group" ref="rule_group_coupon_number_companies"/>
</record>
<record model="ir.ui.view" id="sale_view_form">
<field name="model">sale.sale</field>
<field name="inherit" ref="sale.sale_view_form"/>
<field name="name">sale_form</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,124 @@
==============================
Sale Promotion Coupon Scenario
==============================
Imports::
>>> from decimal import Decimal
>>> from proteus import Model
>>> from trytond.modules.account.tests.tools import create_chart, get_accounts
>>> from trytond.modules.company.tests.tools import create_company
>>> from trytond.tests.tools import activate_modules
Activate modules::
>>> config = activate_modules(
... 'sale_promotion_coupon', create_company, create_chart)
Get accounts::
>>> accounts = get_accounts()
>>> revenue = accounts['revenue']
Create customer::
>>> Party = Model.get('party.party')
>>> customer = Party(name='Customer')
>>> customer.save()
Create account category::
>>> ProductCategory = Model.get('product.category')
>>> account_category = ProductCategory(name="Account Category")
>>> account_category.accounting = True
>>> account_category.account_revenue = revenue
>>> account_category.save()
Create products::
>>> ProductUom = Model.get('product.uom')
>>> ProductTemplate = Model.get('product.template')
>>> Product = Model.get('product.product')
>>> unit, = ProductUom.find([('name', '=', 'Unit')])
>>> template = ProductTemplate()
>>> template.name = 'Product'
>>> template.default_uom = unit
>>> template.type = 'goods'
>>> template.salable = True
>>> template.list_price = Decimal('20')
>>> template.account_category = account_category
>>> template.save()
>>> product, = template.products
Create Promotion with coupon::
>>> Promotion = Model.get('sale.promotion')
>>> promotion = Promotion(name="10%")
>>> promotion.formula = '0.9 * unit_price'
>>> coupon = promotion.coupons.new()
>>> coupon.number_of_use = 0
>>> number = coupon.numbers.new(number="CODE10")
>>> promotion.save()
Sale without promotion coupon::
>>> Sale = Model.get('sale.sale')
>>> sale = Sale()
>>> sale.party = customer
>>> sale_line = sale.lines.new()
>>> sale_line.product = product
>>> sale_line.quantity = 5
>>> sale.save()
>>> sale.untaxed_amount
Decimal('100.00')
>>> sale.click('quote')
>>> sale.untaxed_amount
Decimal('100.00')
Add promotion coupon to the sale::
>>> sale.click('draft')
>>> sale.coupons.extend(sale.coupons.find([('rec_name', '=', 'CODE10')]))
>>> len(sale.coupons)
1
>>> sale.save()
>>> sale.untaxed_amount
Decimal('100.00')
>>> sale.click('quote')
>>> sale.untaxed_amount
Decimal('90.00')
Check coupon inactive after usage::
>>> Number = Model.get('sale.promotion.coupon.number')
>>> coupon, = promotion.coupons
>>> number, = Number.find([('rec_name', '=', 'CODE10')])
>>> bool(number.active)
True
>>> with config.set_context(party=customer.id):
... number_party, = Number.find([('rec_name', '=', 'CODE10')])
>>> bool(number_party.active)
True
>>> coupon.number_of_use = 1
>>> coupon.save()
>>> number.reload()
>>> bool(number.active)
False
>>> Number.find([('rec_name', '=', 'CODE10')])
[]
>>> number_party.reload()
>>> bool(number_party.active)
False
>>> with config.set_context(party=customer.id):
... Number.find([('rec_name', '=', 'CODE10')])
[]
Cancel sale remove the coupons::
>>> sale.click('cancel')
>>> len(sale.coupons)
0

View File

@@ -0,0 +1,55 @@
=====================================
Sale Promotion Coupon Unique Scenario
=====================================
Imports::
>>> import datetime as dt
>>> from proteus import Model
>>> from trytond.modules.company.tests.tools import create_company
>>> from trytond.tests.tools import activate_modules, assertEqual
>>> today = dt.date.today()
>>> tomorrow = today + dt.timedelta(days=1)
Activate modules::
>>> config = activate_modules('sale_promotion_coupon')
>>> Promotion = Model.get('sale.promotion')
Create a company::
>>> _ = create_company()
Create a promotion with coupon::
>>> promotion1 = Promotion(name="Promotion 1")
>>> promotion1.formula = 'unit_price'
>>> coupon = promotion1.coupons.new()
>>> number = coupon.numbers.new(number="TEST", start_date=None)
>>> promotion1.save()
Try to create a second promotion with same coupon number::
>>> promotion2 = Promotion(name="Promotion 2")
>>> promotion2.formula = 'unit_price'
>>> coupon = promotion2.coupons.new()
>>> number = coupon.numbers.new(number="TEST")
>>> promotion2.save()
Traceback (most recent call last):
...
SQLConstraintError: ...
End the first promotion and start the second after::
>>> promotion1.end_date = today
>>> promotion1.save()
>>> coupon1 = promotion1.coupons[0].numbers[0]
>>> coupon1.start_date
>>> assertEqual(coupon1.end_date, today)
>>> coupon2 = promotion2.coupons[0].numbers[0]
>>> coupon2.start_date = tomorrow
>>> promotion2.save()

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.modules.company.tests import CompanyTestMixin
from trytond.tests.test_tryton import ModuleTestCase
class SalePromotionCouponTestCase(CompanyTestMixin, ModuleTestCase):
'Test Sale Promotion Coupon module'
module = 'sale_promotion_coupon'
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,18 @@
[tryton]
version=7.8.0
depends:
company
ir
sale
sale_promotion
xml:
sale.xml
message.xml
[register]
model:
sale.Promotion
sale.PromotionCoupon
sale.PromotionCouponNumber
sale.Sale
sale.Sale_PromotionCouponNumber

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. -->
<form cursor="number_of_use">
<label name="promotion"/>
<field name="promotion"/>
<label name="company"/>
<field name="company"/>
<label name="number_of_use"/>
<field name="number_of_use"/>
<label name="per_party"/>
<field name="per_party"/>
<field name="numbers" colspan="4"/>
</form>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tree>
<field name="company" expand="1" optional="1"/>
<field name="promotion" expand="1"/>
<field name="number_of_use"/>
<field name="per_party"/>
</tree>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form>
<label name="coupon"/>
<field name="coupon" create="0"/>
<label name="company"/>
<field name="company"/>
<label name="number"/>
<field name="number"/>
<label name="active"/>
<field name="active"/>
<label name="start_date"/>
<field name="start_date"/>
<label name="end_date"/>
<field name="end_date"/>
</form>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tree>
<field name="company" expand="1" optional="1"/>
<field name="coupon" expand="1"/>
<field name="number" expand="1"/>
<field name="start_date" optional="1"/>
<field name="end_date" optional="1"/>
</tree>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<data>
<xpath expr="//page[@id='products']" position="after">
<page name="coupons">
<field name="coupons" mode="form,tree"/>
</page>
</xpath>
</data>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<data>
<xpath expr="//notebook/page[@id='sale']" position="after">
<page name="coupons">
<field name="coupons" colspan="4"/>
</page>
</xpath>
</data>