first commit
This commit is contained in:
2
modules/sale_supply/__init__.py
Normal file
2
modules/sale_supply/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
BIN
modules/sale_supply/__pycache__/__init__.cpython-311.pyc
Normal file
BIN
modules/sale_supply/__pycache__/__init__.cpython-311.pyc
Normal file
Binary file not shown.
BIN
modules/sale_supply/__pycache__/product.cpython-311.pyc
Normal file
BIN
modules/sale_supply/__pycache__/product.cpython-311.pyc
Normal file
Binary file not shown.
BIN
modules/sale_supply/__pycache__/purchase.cpython-311.pyc
Normal file
BIN
modules/sale_supply/__pycache__/purchase.cpython-311.pyc
Normal file
Binary file not shown.
BIN
modules/sale_supply/__pycache__/sale.cpython-311.pyc
Normal file
BIN
modules/sale_supply/__pycache__/sale.cpython-311.pyc
Normal file
Binary file not shown.
BIN
modules/sale_supply/__pycache__/stock.cpython-311.pyc
Normal file
BIN
modules/sale_supply/__pycache__/stock.cpython-311.pyc
Normal file
Binary file not shown.
76
modules/sale_supply/locale/bg.po
Normal file
76
modules/sale_supply/locale/bg.po
Normal file
@@ -0,0 +1,76 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr "Заявка за покупка"
|
||||
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr "Заявки за покупки"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr "Отказване"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr ""
|
||||
75
modules/sale_supply/locale/ca.po
Normal file
75
modules/sale_supply/locale/ca.po
Normal file
@@ -0,0 +1,75 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "Subministra a la venda"
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "Subministra a la venda"
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr "Línies de venda"
|
||||
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr "Sol·licitud de compra"
|
||||
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr "Estat subministrament"
|
||||
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr "Sol·licituds de compra"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr "El producte \"%(product)s\" es subministra a la venda."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
"El producte té regles d'aprovisionament de compra \"%(order_points)s\" "
|
||||
"definits."
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr "Sempre"
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr "Mai"
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr "Primer existències"
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr "Sempre"
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr "Mai"
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr "Primer existències"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr "Cancel·lat"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr "Sol·licitat"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr "Subministrat"
|
||||
74
modules/sale_supply/locale/cs.po
Normal file
74
modules/sale_supply/locale/cs.po
Normal file
@@ -0,0 +1,74 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr "Purchase Requests"
|
||||
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr "Purchase Requests"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr ""
|
||||
74
modules/sale_supply/locale/de.po
Normal file
74
modules/sale_supply/locale/de.po
Normal file
@@ -0,0 +1,74 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "Beschaffung bei Verkauf"
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "Beschaffung bei Verkauf"
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr "Verkaufspositionen"
|
||||
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr "Bestellvorschlag"
|
||||
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr "Beschaffungsstatus"
|
||||
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr "Bestellvorschläge"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr "Der Artikel \"%(product)s\" wird bei Bestellung beschafft."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
"Für den Artikel sind Einkaufsbestellpunkte \"%(order_points)s\" definiert."
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr "Immer"
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr "Niemals"
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr "Lagerbestand Zuerst"
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr "Immer"
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr "Niemals"
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr "Lagerbestand Zuerst"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr "Annulliert"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr "Angefragt"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr "Beschafft"
|
||||
75
modules/sale_supply/locale/es.po
Normal file
75
modules/sale_supply/locale/es.po
Normal file
@@ -0,0 +1,75 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "Suministrar en la venta"
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "Suministra en la venta"
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr "Líneas de venta"
|
||||
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr "Solicitud de compra"
|
||||
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr "Estado suministro"
|
||||
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr "Solicitudes de compra"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr "El producto \"%(product)s\" se subministra en la venta."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
"El producto tiene reglas de abastecimientod de compra \"%(order_points)s\" "
|
||||
"definidos."
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr "Siempre"
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr "Nunca"
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr "Primero existencias"
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr "Siempre"
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr "Nunca"
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr "Primero existencias"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr "Cancelado"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr "Solicitado"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr "Suministrado"
|
||||
74
modules/sale_supply/locale/es_419.po
Normal file
74
modules/sale_supply/locale/es_419.po
Normal file
@@ -0,0 +1,74 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr "Solicitado"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr ""
|
||||
76
modules/sale_supply/locale/et.po
Normal file
76
modules/sale_supply/locale/et.po
Normal file
@@ -0,0 +1,76 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "Müügitarne"
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "Müügitarne"
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr "Müügirida"
|
||||
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr "Ostupäring"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr "Müügitarne"
|
||||
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr "Ostupäringud"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr "Tühista"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr "Päritud"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr ""
|
||||
76
modules/sale_supply/locale/fa.po
Normal file
76
modules/sale_supply/locale/fa.po
Normal file
@@ -0,0 +1,76 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "عرضه در فروش"
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "عرضه در فروش"
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr "سطرهای فروش"
|
||||
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr "درخواست خرید"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr "عرضه در فروش"
|
||||
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr "درخواست های خرید"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr "انصراف"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr "درخواست شده"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr ""
|
||||
74
modules/sale_supply/locale/fi.po
Normal file
74
modules/sale_supply/locale/fi.po
Normal file
@@ -0,0 +1,74 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr "Purchase Requests"
|
||||
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr "Purchase Requests"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr ""
|
||||
75
modules/sale_supply/locale/fr.po
Normal file
75
modules/sale_supply/locale/fr.po
Normal file
@@ -0,0 +1,75 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "Approvisionnement sur vente"
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "Approvisionnement sur vente"
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr "Lignes de vente"
|
||||
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr "Demande d'achat"
|
||||
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr "État d'approvisionnement"
|
||||
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr "Demandes d'achat"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr "Le produit « %(product)s » est approvisionné sur vente."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
"Le produit a des règles d'approvisionnements d'achat « %(order_points)s » "
|
||||
"définies."
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr "Toujours"
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr "Jamais"
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr "Stock d'abord"
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr "Toujours"
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr "Jamais"
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr "Stock d'abord"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr "Annulé"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr "Demandé"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr "Approvisionné"
|
||||
75
modules/sale_supply/locale/hu.po
Normal file
75
modules/sale_supply/locale/hu.po
Normal file
@@ -0,0 +1,75 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr "Purchase Requests"
|
||||
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr "Purchase Requests"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr "Mégse"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr ""
|
||||
73
modules/sale_supply/locale/id.po
Normal file
73
modules/sale_supply/locale/id.po
Normal file
@@ -0,0 +1,73 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr "Dibatalkan"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr ""
|
||||
73
modules/sale_supply/locale/it.po
Normal file
73
modules/sale_supply/locale/it.po
Normal file
@@ -0,0 +1,73 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "forniture in vendita"
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "forniture in vendita"
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr "Righe di vendita"
|
||||
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr "Richiesta di acquisto"
|
||||
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr "Stato della fornitura"
|
||||
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr "Richiesta acquisti"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr "Annullato"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr "Richiesto"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr "Fornito"
|
||||
77
modules/sale_supply/locale/lo.po
Normal file
77
modules/sale_supply/locale/lo.po
Normal file
@@ -0,0 +1,77 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "ສະໜອງການຂາຍ"
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "ສະໜອງການຂາຍ"
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr "ລາຍການຂາຍ"
|
||||
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr "ຕ້ອງການສັ່ງຊື້"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr "ສະໜອງການຂາຍ"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr "Purchase Requests"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr "ຍົກເລີກ"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr "ສັ່ງແລ້ວ"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr ""
|
||||
74
modules/sale_supply/locale/lt.po
Normal file
74
modules/sale_supply/locale/lt.po
Normal file
@@ -0,0 +1,74 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr "Purchase Requests"
|
||||
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr "Purchase Requests"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr ""
|
||||
74
modules/sale_supply/locale/nl.po
Normal file
74
modules/sale_supply/locale/nl.po
Normal file
@@ -0,0 +1,74 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "Inkopen Bij Verkoop"
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "Inkopen Bij Verkoop"
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr "Verkoop Regels"
|
||||
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr "Inkoop Aanvraag"
|
||||
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr "Lever Status"
|
||||
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr "Inkoop Aanvragen"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr "Het product \"%(product)s\" is aangeleverd voor verkoop."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
"Op het product zijn inkoop order niveaus \"%(order_points)s\" gedefinieerd."
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr "Altijd"
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr "Nooit"
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr "Voorraad eerst"
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr "Altijd"
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr "Nooit"
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr "Voorraad eerst"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr "Geannuleerd"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr "Aangevraagd"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr "Geleverd"
|
||||
76
modules/sale_supply/locale/pl.po
Normal file
76
modules/sale_supply/locale/pl.po
Normal file
@@ -0,0 +1,76 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr "Wiersze sprzedaży"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr "Purchase Requests"
|
||||
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr "Purchase Requests"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr "Anuluj"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr ""
|
||||
75
modules/sale_supply/locale/pt.po
Normal file
75
modules/sale_supply/locale/pt.po
Normal file
@@ -0,0 +1,75 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "Abastecimento Na Venda"
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "Abastecimento Na Venda"
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr "Linhas de Venda"
|
||||
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr "Pedido de Compra"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr "Abastecimento Na Venda"
|
||||
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr "Solicitações de Compra"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr "Cancelado"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr "Solicitado"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr ""
|
||||
73
modules/sale_supply/locale/ro.po
Normal file
73
modules/sale_supply/locale/ro.po
Normal file
@@ -0,0 +1,73 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr ""
|
||||
76
modules/sale_supply/locale/ru.po
Normal file
76
modules/sale_supply/locale/ru.po
Normal file
@@ -0,0 +1,76 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr "Запрос на покупку"
|
||||
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr "Запросы на покупку"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr "Отменить"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr ""
|
||||
77
modules/sale_supply/locale/sl.po
Normal file
77
modules/sale_supply/locale/sl.po
Normal file
@@ -0,0 +1,77 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "Dobava ob prodaji"
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "Dobava ob prodaji"
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr "Prodajne postavke"
|
||||
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr "Nabavni zahtevek"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr "Dobava ob prodaji"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr "Purchase Requests"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr "Preklicano"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr "Zahtevano"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr ""
|
||||
80
modules/sale_supply/locale/tr.po
Normal file
80
modules/sale_supply/locale/tr.po
Normal file
@@ -0,0 +1,80 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "Satış Tedariği"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr "Satış Tedariği"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr "Satış Kanalları"
|
||||
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr "Satınalma Talebi"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr "Satış Tedariği"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr "Purchase Requests"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr "Vazgeç"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr "Talep Edilen"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr ""
|
||||
73
modules/sale_supply/locale/uk.po
Normal file
73
modules/sale_supply/locale/uk.po
Normal file
@@ -0,0 +1,73 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr ""
|
||||
75
modules/sale_supply/locale/zh_CN.po
Normal file
75
modules/sale_supply/locale/zh_CN.po
Normal file
@@ -0,0 +1,75 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:product.product,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,supply_on_sale:"
|
||||
msgid "Supply On Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:purchase.request,sale_lines:"
|
||||
msgid "Sale Lines"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:sale.line,purchase_request:"
|
||||
msgid "Purchase Request"
|
||||
msgstr "Purchase Requests"
|
||||
|
||||
msgctxt "field:sale.line,supply_state:"
|
||||
msgid "Supply State"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_purchase_request_form"
|
||||
msgid "Purchase Requests"
|
||||
msgstr "采购申请"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_order_point_product_supply_on_sale"
|
||||
msgid "The product \"%(product)s\" is supplied on sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_supply_on_sale_order_point"
|
||||
msgid "The product has purchase order points \"%(order_points)s\" defined."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.product,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:product.template,supply_on_sale:"
|
||||
msgid "Stock First"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Cancelled"
|
||||
msgstr "取消"
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Requested"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:sale.line,supply_state:"
|
||||
msgid "Supplied"
|
||||
msgstr ""
|
||||
13
modules/sale_supply/message.xml
Normal file
13
modules/sale_supply/message.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<data grouped="1">
|
||||
<record model="ir.message" id="msg_order_point_product_supply_on_sale">
|
||||
<field name="text">The product "%(product)s" is supplied on sale.</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_template_supply_on_sale_order_point">
|
||||
<field name="text">The product has purchase order points "%(order_points)s" defined.</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
91
modules/sale_supply/product.py
Normal file
91
modules/sale_supply/product.py
Normal file
@@ -0,0 +1,91 @@
|
||||
# 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 sql import Literal
|
||||
|
||||
from trytond.i18n import gettext
|
||||
from trytond.model import fields
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
from trytond.pyson import Eval
|
||||
from trytond.transaction import Transaction
|
||||
|
||||
|
||||
class Template(metaclass=PoolMeta):
|
||||
__name__ = 'product.template'
|
||||
|
||||
supply_on_sale = fields.Selection([
|
||||
(None, "Never"),
|
||||
('stock_first', "Stock First"),
|
||||
('always', "Always"),
|
||||
], "Supply On Sale",
|
||||
states={
|
||||
'invisible': ~Eval('purchasable') | ~Eval('salable'),
|
||||
})
|
||||
|
||||
@classmethod
|
||||
def __register__(cls, module):
|
||||
table_h = cls.__table_handler__(module)
|
||||
table = cls.__table__()
|
||||
cursor = Transaction().connection.cursor()
|
||||
|
||||
migrate_supply_on_sale = (
|
||||
table_h.column_exist('supply_on_sale')
|
||||
and table_h.column_is_type('supply_on_sale', 'BOOL'))
|
||||
if migrate_supply_on_sale:
|
||||
table_h.column_rename('supply_on_sale', '_temp_supply_on_sale')
|
||||
if cls._history:
|
||||
h_table_h = cls.__table_handler__(module, history=True)
|
||||
h_table = cls.__table_history__()
|
||||
h_migrate_supply_on_sale = (
|
||||
h_table_h.column_exist('supply_on_sale')
|
||||
and h_table_h.column_is_type('supply_on_sale', 'BOOL'))
|
||||
if h_migrate_supply_on_sale:
|
||||
h_table_h.column_rename(
|
||||
'supply_on_sale', '_temp_supply_on_sale')
|
||||
|
||||
super().__register__(module)
|
||||
|
||||
# Migration from 6.6: convert supply_on_sale from boolean to selection
|
||||
if migrate_supply_on_sale:
|
||||
cursor.execute(*table.update(
|
||||
[table.supply_on_sale],
|
||||
['always'],
|
||||
where=table._temp_supply_on_sale == Literal(True)))
|
||||
table_h.drop_column('_temp_supply_on_sale')
|
||||
if cls._history and h_migrate_supply_on_sale:
|
||||
cursor.execute(*h_table.update(
|
||||
[h_table.supply_on_sale],
|
||||
['always'],
|
||||
where=h_table._temp_supply_on_sale == Literal(True)))
|
||||
h_table_h.drop_column('_temp_supply_on_sale')
|
||||
|
||||
@fields.depends(methods=['_notify_order_point'])
|
||||
def on_change_notify(self):
|
||||
notifications = super().on_change_notify()
|
||||
notifications.extend(self._notify_order_point())
|
||||
return notifications
|
||||
|
||||
@fields.depends('id', 'supply_on_sale')
|
||||
def _notify_order_point(self):
|
||||
pool = Pool()
|
||||
try:
|
||||
OrderPoint = pool.get('stock.order_point')
|
||||
except KeyError:
|
||||
return
|
||||
if self.supply_on_sale and self.id is not None and self.id >= 0:
|
||||
order_points = OrderPoint.search([
|
||||
('product.template.id', '=', self.id),
|
||||
('type', '=', 'purchase'),
|
||||
], limit=6)
|
||||
if order_points:
|
||||
names = ', '.join(o.rec_name for o in order_points[:5])
|
||||
if len(order_points) > 5:
|
||||
names + '...'
|
||||
yield ('warning', gettext(
|
||||
'sale_supply'
|
||||
'.msg_template_supply_on_sale_order_point',
|
||||
order_points=names))
|
||||
|
||||
|
||||
class Product(metaclass=PoolMeta):
|
||||
__name__ = 'product.product'
|
||||
12
modules/sale_supply/product.xml
Normal file
12
modules/sale_supply/product.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="template_view_form">
|
||||
<field name="model">product.template</field>
|
||||
<field name="inherit" ref="product.template_view_form"/>
|
||||
<field name="name">template_form</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
61
modules/sale_supply/purchase.py
Normal file
61
modules/sale_supply/purchase.py
Normal file
@@ -0,0 +1,61 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
from trytond.model import fields
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
from trytond.transaction import Transaction, without_check_access
|
||||
|
||||
|
||||
class Request(metaclass=PoolMeta):
|
||||
__name__ = 'purchase.request'
|
||||
|
||||
sale_lines = fields.One2Many(
|
||||
'sale.line', 'purchase_request', "Sale Lines", readonly=True)
|
||||
|
||||
@classmethod
|
||||
def _get_origin(cls):
|
||||
return super()._get_origin() | {'sale.sale'}
|
||||
|
||||
@classmethod
|
||||
def update_state(cls, requests):
|
||||
pool = Pool()
|
||||
Sale = pool.get('sale.sale')
|
||||
transaction = Transaction()
|
||||
context = transaction.context
|
||||
|
||||
super().update_state(requests)
|
||||
|
||||
sales = {r.origin for r in requests if isinstance(r.origin, Sale)}
|
||||
if sales:
|
||||
with transaction.set_context(
|
||||
queue_batch=context.get('queue_batch', True)):
|
||||
Sale.__queue__.process(Sale.browse(sales))
|
||||
|
||||
@classmethod
|
||||
def copy(cls, requests, default=None):
|
||||
default = default.copy() if default is not None else {}
|
||||
default.setdefault('sale_lines')
|
||||
return super().copy(requests, default=default)
|
||||
|
||||
@classmethod
|
||||
def on_delete(cls, requests):
|
||||
pool = Pool()
|
||||
Sale = pool.get('sale.sale')
|
||||
SaleLine = pool.get('sale.line')
|
||||
transaction = Transaction()
|
||||
context = transaction.context
|
||||
|
||||
with without_check_access():
|
||||
reqs = cls.browse(requests)
|
||||
sales = set(r.origin for r in reqs if isinstance(r.origin, Sale))
|
||||
sale_lines = [l for r in reqs for l in r.sale_lines]
|
||||
if sale_lines:
|
||||
SaleLine.write(sale_lines, {
|
||||
'purchase_request': None,
|
||||
})
|
||||
|
||||
if sales:
|
||||
with transaction.set_context(
|
||||
queue_batch=context.get('queue_batch', True)):
|
||||
Sale.__queue__.process(sales)
|
||||
return super().on_delete(requests)
|
||||
285
modules/sale_supply/sale.py
Normal file
285
modules/sale_supply/sale.py
Normal file
@@ -0,0 +1,285 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
from collections import defaultdict
|
||||
from itertools import groupby
|
||||
from operator import attrgetter
|
||||
|
||||
from trytond.model import fields
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
from trytond.pyson import Eval
|
||||
from trytond.transaction import Transaction
|
||||
|
||||
|
||||
class Sale(metaclass=PoolMeta):
|
||||
__name__ = 'sale.sale'
|
||||
|
||||
def is_done(self):
|
||||
done = super().is_done()
|
||||
if done:
|
||||
if any(l.supply_state == 'requested'
|
||||
for l in self.lines if l.supply_on_sale):
|
||||
return False
|
||||
return done
|
||||
|
||||
@classmethod
|
||||
def _process_shipment(cls, sales):
|
||||
pool = Pool()
|
||||
Product = pool.get('product.product')
|
||||
|
||||
product_quantities = defaultdict(float)
|
||||
for (company, warehouse), sub_sales in groupby(
|
||||
filter(attrgetter('warehouse'), sales),
|
||||
key=attrgetter('company', 'warehouse')):
|
||||
sub_sales = list(sub_sales)
|
||||
products = {
|
||||
l.product for s in sub_sales for l in s.lines
|
||||
if l.product and l.product.supply_on_sale == 'stock_first'}
|
||||
locations = [warehouse.id]
|
||||
with Transaction().set_context(
|
||||
company=company.id, locations=locations,
|
||||
stock_assign=True,
|
||||
stock_date_end=None):
|
||||
product_quantities.update(
|
||||
(p, p.forecast_quantity)
|
||||
for p in Product.browse(products))
|
||||
|
||||
# purchase requests must be created before shipments to get
|
||||
# information about requests during the shipments creation like the
|
||||
# supplier
|
||||
cls._process_supply(sub_sales, product_quantities)
|
||||
product_quantities.clear()
|
||||
super()._process_shipment(sales)
|
||||
|
||||
@classmethod
|
||||
def _process_supply(cls, sales, product_quantities):
|
||||
pool = Pool()
|
||||
Line = pool.get('sale.line')
|
||||
PurchaseRequest = pool.get('purchase.request')
|
||||
|
||||
requests, lines = [], []
|
||||
for sale in sales:
|
||||
reqs, lns = sale.create_purchase_requests(product_quantities)
|
||||
requests.extend(reqs)
|
||||
lines.extend(lns)
|
||||
PurchaseRequest.save(requests)
|
||||
Line.save(lines)
|
||||
|
||||
cls._update_moves_from_supply(sales)
|
||||
|
||||
def create_purchase_requests(self, product_quantities):
|
||||
requests, lines = [], []
|
||||
for line in self.lines:
|
||||
request = line.get_purchase_request(product_quantities)
|
||||
if not request:
|
||||
continue
|
||||
requests.append(request)
|
||||
assert not line.purchase_request
|
||||
line.purchase_request = request
|
||||
lines.append(line)
|
||||
return requests, lines
|
||||
|
||||
@classmethod
|
||||
def _update_moves_from_supply(cls, sales):
|
||||
pool = Pool()
|
||||
Shipment = pool.get('stock.shipment.out')
|
||||
Move = pool.get('stock.move')
|
||||
|
||||
shipments = set()
|
||||
|
||||
def add_shipment(shipment):
|
||||
if (isinstance(shipment, Shipment)
|
||||
and shipment.state in {'draft', 'waiting'}):
|
||||
shipments.add(shipment)
|
||||
|
||||
moves_to_draft, moves_to_cancel = [], []
|
||||
for sale in sales:
|
||||
for line in sale.lines:
|
||||
for move in line.moves:
|
||||
if move.state == 'staging':
|
||||
if (not line.has_supply
|
||||
or line.supply_state == 'supplied'):
|
||||
moves_to_draft.append(move)
|
||||
elif line.supply_state == 'cancelled':
|
||||
moves_to_cancel.append(move)
|
||||
else:
|
||||
continue
|
||||
add_shipment(move.shipment)
|
||||
if moves_to_draft:
|
||||
Move.draft(moves_to_draft)
|
||||
shipments = Shipment.browse(shipments)
|
||||
shipments_waiting = [s for s in shipments if s.state == 'waiting']
|
||||
if shipments:
|
||||
Shipment.draft(shipments) # clear inventory moves
|
||||
if moves_to_cancel:
|
||||
Move.cancel(moves_to_cancel)
|
||||
if shipments:
|
||||
Shipment.wait([
|
||||
s for s in shipments_waiting
|
||||
if any(m.state != 'cancelled' for m in s.moves)])
|
||||
Shipment.cancel([
|
||||
s for s in shipments
|
||||
if all(m.state == 'cancelled' for m in s.moves)])
|
||||
|
||||
|
||||
class Line(metaclass=PoolMeta):
|
||||
__name__ = 'sale.line'
|
||||
|
||||
purchase_request = fields.Many2One('purchase.request', 'Purchase Request',
|
||||
ondelete='SET NULL', readonly=True)
|
||||
supply_state = fields.Function(fields.Selection([
|
||||
('', ""),
|
||||
('requested', "Requested"),
|
||||
('supplied', "Supplied"),
|
||||
('cancelled', "Cancelled"),
|
||||
], "Supply State",
|
||||
states={
|
||||
'invisible': ~Eval('supply_state'),
|
||||
}), 'get_supply_state')
|
||||
|
||||
@property
|
||||
def has_supply(self):
|
||||
return bool(self.purchase_request)
|
||||
|
||||
def get_supply_state(self, name):
|
||||
if self.purchase_request is not None:
|
||||
if self.purchase_request.state == 'cancelled':
|
||||
return 'cancelled'
|
||||
else:
|
||||
purchase_line = self.purchase_request.purchase_line
|
||||
if purchase_line is not None:
|
||||
purchase = purchase_line.purchase
|
||||
if purchase.state in {'processing', 'done'}:
|
||||
return 'supplied'
|
||||
return 'requested'
|
||||
return ''
|
||||
|
||||
@classmethod
|
||||
def copy(cls, lines, default=None):
|
||||
if default is None:
|
||||
default = {}
|
||||
else:
|
||||
default = default.copy()
|
||||
default.setdefault('purchase_request', None)
|
||||
return super().copy(lines, default=default)
|
||||
|
||||
@property
|
||||
def supply_on_sale(self):
|
||||
"Returns True if the sale line has to be supply by purchase request"
|
||||
if (self.type != 'line'
|
||||
or self.sale.shipment_method == 'manual'
|
||||
or not self.product
|
||||
or self.quantity <= 0
|
||||
or any(m.state not in ['staging', 'cancelled']
|
||||
for m in self.moves)):
|
||||
return False
|
||||
return bool(self.product.supply_on_sale)
|
||||
|
||||
@property
|
||||
def ready_for_supply(self):
|
||||
if self.sale.shipment_method == 'invoice':
|
||||
# Ensure to create the request for the maximum paid
|
||||
invoice_skips = (
|
||||
set(self.sale.invoices_ignored)
|
||||
| set(self.sale.invoices_recreated))
|
||||
invoice_lines = [
|
||||
l for l in self.invoice_lines
|
||||
if l.invoice not in invoice_skips]
|
||||
if (not invoice_lines
|
||||
or any(
|
||||
(not l.invoice) or l.invoice.state != 'paid'
|
||||
for l in invoice_lines)):
|
||||
return False
|
||||
return True
|
||||
|
||||
def get_move(self, shipment_type):
|
||||
move = super().get_move(shipment_type)
|
||||
if (move
|
||||
and shipment_type == 'out'
|
||||
and self.has_supply):
|
||||
if self.supply_state == 'requested':
|
||||
move.state = 'staging'
|
||||
return move
|
||||
|
||||
def _get_move_quantity(self, shipment_type):
|
||||
quantity = super()._get_move_quantity(shipment_type)
|
||||
if self.supply_on_sale and not self.ready_for_supply:
|
||||
quantity = 0
|
||||
return quantity
|
||||
|
||||
def _get_purchase_request_product_supplier_pattern(self):
|
||||
return {
|
||||
'company': self.sale.company.id,
|
||||
}
|
||||
|
||||
def get_purchase_request(self, product_quantities):
|
||||
"""Return purchase request for the sale line
|
||||
depending on the product quantities"""
|
||||
pool = Pool()
|
||||
Uom = pool.get('product.uom')
|
||||
Request = pool.get('purchase.request')
|
||||
|
||||
if (not self.supply_on_sale
|
||||
or self.purchase_request
|
||||
or not self.ready_for_supply
|
||||
or not self.product.purchasable):
|
||||
return
|
||||
|
||||
product = self.product
|
||||
quantity = self._get_move_quantity('out')
|
||||
if product.supply_on_sale == 'stock_first':
|
||||
available_qty = product_quantities[product]
|
||||
available_qty = Uom.compute_qty(
|
||||
product.default_uom, available_qty, self.unit,
|
||||
round=False)
|
||||
if available_qty > 0:
|
||||
product_quantities[product] -= Uom.compute_qty(
|
||||
self.unit, quantity, product.default_uom, round=False)
|
||||
return
|
||||
|
||||
supplier, purchase_date = Request.find_best_supplier(product,
|
||||
self.shipping_date,
|
||||
**self._get_purchase_request_product_supplier_pattern())
|
||||
unit = product.purchase_uom or product.default_uom
|
||||
quantity = Uom.compute_qty(self.unit, quantity, unit)
|
||||
return Request(
|
||||
product=product,
|
||||
party=supplier,
|
||||
quantity=quantity,
|
||||
unit=unit,
|
||||
computed_quantity=quantity,
|
||||
computed_unit=unit,
|
||||
purchase_date=purchase_date,
|
||||
supply_date=self.shipping_date,
|
||||
company=self.sale.company,
|
||||
warehouse=self.warehouse,
|
||||
origin=self.sale,
|
||||
)
|
||||
|
||||
def assign_supplied(self, quantities, grouping=('product',)):
|
||||
'''
|
||||
Assign supplied move
|
||||
The quantities will be updated according to assigned quantities.
|
||||
'''
|
||||
pool = Pool()
|
||||
Move = pool.get('stock.move')
|
||||
ShipmentOut = pool.get('stock.shipment.out')
|
||||
|
||||
if self.supply_state != 'supplied':
|
||||
return
|
||||
|
||||
moves = set()
|
||||
for move in self.moves:
|
||||
shipment = move.shipment
|
||||
if isinstance(shipment, ShipmentOut):
|
||||
if shipment.warehouse_storage == shipment.warehouse_output:
|
||||
inventory_moves = shipment.outgoing_moves
|
||||
else:
|
||||
inventory_moves = shipment.inventory_moves
|
||||
for inv_move in inventory_moves:
|
||||
if inv_move.product == self.product:
|
||||
moves.add(inv_move)
|
||||
|
||||
Move.assign_try(list(moves), grouping=grouping, pblc={
|
||||
self.company.id: quantities,
|
||||
})
|
||||
36
modules/sale_supply/sale.xml
Normal file
36
modules/sale_supply/sale.xml
Normal file
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="sale_line_view_form">
|
||||
<field name="model">sale.line</field>
|
||||
<field name="inherit" ref="sale.sale_line_view_form"/>
|
||||
<field name="name">sale_line_form</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.action.act_window" id="act_purchase_request_form">
|
||||
<field name="name">Purchase Requests</field>
|
||||
<field name="res_model">purchase.request</field>
|
||||
<field name="domain"
|
||||
eval="[If(Eval('active_ids', []) == [Eval('active_id')], ('origin.id', '=', Eval('active_id'), 'sale.sale'), ('origin.id', 'in', Eval('active_ids'), 'sale.sale'))]"
|
||||
pyson="1"/>
|
||||
</record>
|
||||
<record model="ir.action.keyword"
|
||||
id="act_open_purchase_request_keyword">
|
||||
<field name="keyword">form_relate</field>
|
||||
<field name="model">sale.sale,-1</field>
|
||||
<field name="action" ref="act_purchase_request_form"/>
|
||||
</record>
|
||||
<record model="ir.action-res.group"
|
||||
id="action_purchase_request_group_purchase_request">
|
||||
<field name="action" ref="act_purchase_request_form"/>
|
||||
<field name="group" ref="purchase_request.group_purchase_request"/>
|
||||
</record>
|
||||
<record model="ir.action-res.group"
|
||||
id="action_purchase_request_group_purchase">
|
||||
<field name="action" ref="act_purchase_request_form"/>
|
||||
<field name="group" ref="purchase.group_purchase"/>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
78
modules/sale_supply/stock.py
Normal file
78
modules/sale_supply/stock.py
Normal file
@@ -0,0 +1,78 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
from collections import defaultdict
|
||||
|
||||
from trytond.i18n import gettext
|
||||
from trytond.model import Model, ModelView, Workflow, fields
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
|
||||
|
||||
class ShipmentIn(metaclass=PoolMeta):
|
||||
__name__ = 'stock.shipment.in'
|
||||
|
||||
@classmethod
|
||||
@ModelView.button
|
||||
@Workflow.transition('done')
|
||||
def do(cls, shipments):
|
||||
super().do(shipments)
|
||||
|
||||
# Assigned sale move lines
|
||||
for shipment in shipments:
|
||||
shipment.assign_supplied()
|
||||
|
||||
def assign_supplied(self, grouping=('product',), filter_=None):
|
||||
pool = Pool()
|
||||
SaleLine = pool.get('sale.line')
|
||||
|
||||
def filter_func(move):
|
||||
if filter_ is None:
|
||||
return True
|
||||
for fieldname, values in filter_:
|
||||
value = getattr(move, fieldname)
|
||||
if isinstance(value, Model):
|
||||
value = value.id
|
||||
if value not in values:
|
||||
return False
|
||||
|
||||
def get_key(move):
|
||||
key = (move.to_location.id,)
|
||||
for field in grouping:
|
||||
value = getattr(move, field)
|
||||
if isinstance(value, Model):
|
||||
value = value.id
|
||||
key += (value,)
|
||||
return key
|
||||
move_ids = [m.id for m in filter(filter_func, self.incoming_moves)]
|
||||
sale_lines = SaleLine.search([
|
||||
('purchase_request.purchase_line.moves', 'in', move_ids),
|
||||
('purchase_request.origin', 'like', 'sale.sale,%'),
|
||||
])
|
||||
pbl = defaultdict(lambda: defaultdict(int))
|
||||
if self.warehouse_storage == self.warehouse_input:
|
||||
inventory_moves = self.incoming_moves
|
||||
else:
|
||||
inventory_moves = self.inventory_moves
|
||||
for move in filter(filter_func, inventory_moves):
|
||||
pbl[move.product][get_key(move)] += move.internal_quantity
|
||||
for sale_line in sale_lines:
|
||||
sale_line.assign_supplied(
|
||||
pbl[sale_line.product], grouping=grouping)
|
||||
|
||||
|
||||
class OrderPoint(metaclass=PoolMeta):
|
||||
__name__ = 'stock.order_point'
|
||||
|
||||
@fields.depends(methods=['_notify_product_supply_on_sale'])
|
||||
def on_change_notify(self):
|
||||
notifications = super().on_change_notify()
|
||||
notifications.extend(self._notify_product_supply_on_sale())
|
||||
return notifications
|
||||
|
||||
@fields.depends('type', 'product')
|
||||
def _notify_product_supply_on_sale(self):
|
||||
if (self.type == 'purchase'
|
||||
and self.product and self.product.supply_on_sale):
|
||||
yield ('warning', gettext(
|
||||
'sale_supply'
|
||||
'.msg_order_point_product_supply_on_sale',
|
||||
product=self.product.rec_name))
|
||||
2
modules/sale_supply/tests/__init__.py
Normal file
2
modules/sale_supply/tests/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
BIN
modules/sale_supply/tests/__pycache__/__init__.cpython-311.pyc
Normal file
BIN
modules/sale_supply/tests/__pycache__/__init__.cpython-311.pyc
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
209
modules/sale_supply/tests/scenario_sale_supply.rst
Normal file
209
modules/sale_supply/tests/scenario_sale_supply.rst
Normal file
@@ -0,0 +1,209 @@
|
||||
====================
|
||||
Sale Supply Scenario
|
||||
====================
|
||||
|
||||
Imports::
|
||||
|
||||
>>> from decimal import Decimal
|
||||
|
||||
>>> from proteus import Model, Wizard
|
||||
>>> from trytond.modules.account.tests.tools import (
|
||||
... create_chart, create_fiscalyear, get_accounts)
|
||||
>>> from trytond.modules.account_invoice.tests.tools import (
|
||||
... create_payment_term, set_fiscalyear_invoice_sequences)
|
||||
>>> from trytond.modules.company.tests.tools import create_company
|
||||
>>> from trytond.tests.tools import activate_modules
|
||||
|
||||
Activate modules::
|
||||
|
||||
>>> config = activate_modules(
|
||||
... ['sale_supply', 'sale', 'purchase'],
|
||||
... create_company, create_chart)
|
||||
|
||||
Create fiscal year::
|
||||
|
||||
>>> fiscalyear = set_fiscalyear_invoice_sequences(create_fiscalyear())
|
||||
>>> fiscalyear.click('create_period')
|
||||
|
||||
Get accounts::
|
||||
|
||||
>>> accounts = get_accounts()
|
||||
>>> revenue = accounts['revenue']
|
||||
>>> expense = accounts['expense']
|
||||
|
||||
Create parties::
|
||||
|
||||
>>> Party = Model.get('party.party')
|
||||
>>> supplier = Party(name='Supplier')
|
||||
>>> supplier.save()
|
||||
>>> 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_expense = expense
|
||||
>>> account_category.account_revenue = revenue
|
||||
>>> account_category.save()
|
||||
|
||||
Create product::
|
||||
|
||||
>>> ProductUom = Model.get('product.uom')
|
||||
>>> unit, = ProductUom.find([('name', '=', 'Unit')])
|
||||
>>> ProductTemplate = Model.get('product.template')
|
||||
|
||||
>>> template = ProductTemplate()
|
||||
>>> template.name = 'product'
|
||||
>>> template.default_uom = unit
|
||||
>>> template.type = 'goods'
|
||||
>>> template.purchasable = True
|
||||
>>> template.salable = True
|
||||
>>> template.list_price = Decimal('10')
|
||||
>>> template.supply_on_sale = 'always'
|
||||
>>> template.account_category = account_category
|
||||
>>> template.save()
|
||||
>>> product, = template.products
|
||||
|
||||
Create payment term::
|
||||
|
||||
>>> payment_term = create_payment_term()
|
||||
>>> payment_term.save()
|
||||
|
||||
Sale 250 products::
|
||||
|
||||
>>> Sale = Model.get('sale.sale')
|
||||
>>> sale = Sale()
|
||||
>>> sale.party = customer
|
||||
>>> sale.payment_term = payment_term
|
||||
>>> sale_line = sale.lines.new()
|
||||
>>> sale_line.product = product
|
||||
>>> sale_line.quantity = 250
|
||||
>>> sale.click('quote')
|
||||
>>> sale.click('confirm')
|
||||
>>> sale.state
|
||||
'processing'
|
||||
>>> shipment, = sale.shipments
|
||||
>>> move, = shipment.outgoing_moves
|
||||
>>> move.state
|
||||
'staging'
|
||||
>>> move, = shipment.inventory_moves
|
||||
>>> move.state
|
||||
'staging'
|
||||
|
||||
Delete Purchase Request::
|
||||
|
||||
>>> PurchaseRequest = Model.get('purchase.request')
|
||||
>>> purchase_request, = PurchaseRequest.find()
|
||||
>>> purchase_request.quantity
|
||||
250.0
|
||||
>>> purchase_request.delete()
|
||||
>>> purchase_request, = PurchaseRequest.find()
|
||||
>>> purchase_request.quantity
|
||||
250.0
|
||||
|
||||
Create Purchase from Request::
|
||||
|
||||
>>> Purchase = Model.get('purchase.purchase')
|
||||
>>> purchase_request, = PurchaseRequest.find()
|
||||
>>> purchase_request.quantity
|
||||
250.0
|
||||
>>> create_purchase = Wizard('purchase.request.create_purchase',
|
||||
... [purchase_request])
|
||||
>>> create_purchase.form.party = supplier
|
||||
>>> create_purchase.execute('start')
|
||||
>>> purchase, = Purchase.find()
|
||||
>>> purchase.payment_term = payment_term
|
||||
>>> purchase_line, = purchase.lines
|
||||
>>> purchase_line.unit_price = Decimal('5.0000')
|
||||
>>> purchase.click('quote')
|
||||
>>> purchase.click('confirm')
|
||||
>>> purchase.state
|
||||
'processing'
|
||||
>>> sale.reload()
|
||||
>>> shipment, = sale.shipments
|
||||
>>> move, = shipment.outgoing_moves
|
||||
>>> move.state
|
||||
'draft'
|
||||
>>> move, = shipment.inventory_moves
|
||||
>>> move.state
|
||||
'draft'
|
||||
|
||||
Receive 100 products::
|
||||
|
||||
>>> ShipmentIn = Model.get('stock.shipment.in')
|
||||
>>> Move = Model.get('stock.move')
|
||||
>>> shipment = ShipmentIn(supplier=supplier)
|
||||
>>> move, = shipment.incoming_moves.find()
|
||||
>>> shipment.incoming_moves.append(move)
|
||||
>>> move.quantity = 100
|
||||
>>> shipment.click('receive')
|
||||
>>> shipment.click('do')
|
||||
>>> shipment.state
|
||||
'done'
|
||||
>>> sale.reload()
|
||||
>>> shipment, = sale.shipments
|
||||
>>> move, = [x for x in shipment.inventory_moves
|
||||
... if x.state == 'assigned']
|
||||
>>> move.quantity
|
||||
100.0
|
||||
>>> move, = [x for x in shipment.inventory_moves
|
||||
... if x.state == 'draft']
|
||||
>>> move.quantity
|
||||
150.0
|
||||
|
||||
Switching from not supplying on sale to supplying on sale for product should
|
||||
not create a new purchase request::
|
||||
|
||||
|
||||
>>> changing_template = ProductTemplate()
|
||||
>>> changing_template.name = 'product'
|
||||
>>> changing_template.default_uom = unit
|
||||
>>> changing_template.type = 'goods'
|
||||
>>> changing_template.purchasable = True
|
||||
>>> changing_template.salable = True
|
||||
>>> changing_template.list_price = Decimal('10')
|
||||
>>> changing_template.account_category = account_category
|
||||
>>> changing_template.supply_on_sale = None
|
||||
>>> changing_template.save()
|
||||
>>> changing_product, = changing_template.products
|
||||
|
||||
>>> Sale = Model.get('sale.sale')
|
||||
>>> sale = Sale()
|
||||
>>> sale.party = customer
|
||||
>>> sale.payment_term = payment_term
|
||||
>>> sale_line = sale.lines.new()
|
||||
>>> sale_line.product = changing_product
|
||||
>>> sale_line.quantity = 100
|
||||
>>> sale.click('quote')
|
||||
>>> sale.click('confirm')
|
||||
>>> sale.state
|
||||
'processing'
|
||||
>>> shipment, = sale.shipments
|
||||
>>> Inventory = Model.get('stock.inventory')
|
||||
>>> Location = Model.get('stock.location')
|
||||
>>> storage, = Location.find([
|
||||
... ('code', '=', 'STO'),
|
||||
... ])
|
||||
>>> inventory = Inventory()
|
||||
>>> inventory.location = storage
|
||||
>>> inventory.save()
|
||||
>>> inventory_line = inventory.lines.new()
|
||||
>>> inventory_line.product = changing_product
|
||||
>>> inventory_line.quantity = 100.0
|
||||
>>> inventory_line.expected_quantity = 0.0
|
||||
>>> inventory.save()
|
||||
>>> inventory.click('confirm')
|
||||
>>> inventory.state
|
||||
'done'
|
||||
>>> shipment.click('assign_try')
|
||||
>>> shipment.click('pick')
|
||||
>>> shipment.click('pack')
|
||||
|
||||
>>> changing_template.supply_on_sale = 'always'
|
||||
>>> changing_template.save()
|
||||
|
||||
>>> shipment.click('do')
|
||||
>>> len(PurchaseRequest.find([('product', '=', changing_product.id)]))
|
||||
0
|
||||
@@ -0,0 +1,53 @@
|
||||
=========================
|
||||
Sale Supply Notifications
|
||||
=========================
|
||||
|
||||
Imports::
|
||||
|
||||
>>> from proteus import Model
|
||||
>>> from trytond.modules.company.tests.tools import create_company
|
||||
>>> from trytond.tests.tools import activate_modules
|
||||
|
||||
Activate modules::
|
||||
|
||||
>>> config = activate_modules(['sale_supply', 'stock_supply'], create_company)
|
||||
|
||||
>>> Location = Model.get('stock.location')
|
||||
>>> OrderPoint = Model.get('stock.order_point')
|
||||
>>> ProductTemplate = Model.get('product.template')
|
||||
>>> UoM = Model.get('product.uom')
|
||||
|
||||
Get locations::
|
||||
|
||||
>>> warehouse_location, = Location.find([('type', '=', 'warehouse')])
|
||||
|
||||
Create product::
|
||||
|
||||
>>> unit, = UoM.find([('name', '=', "Unit")])
|
||||
|
||||
>>> product_template = ProductTemplate()
|
||||
>>> product_template.name = "Product"
|
||||
>>> product_template.type = 'goods'
|
||||
>>> product_template.default_uom = unit
|
||||
>>> product_template.purchasable = True
|
||||
>>> product_template.salable = True
|
||||
>>> product_template.supply_on_sale = 'always'
|
||||
>>> product_template.save()
|
||||
>>> product, = product_template.products
|
||||
|
||||
Create order point::
|
||||
|
||||
>>> order_point = OrderPoint()
|
||||
>>> order_point.product = product
|
||||
>>> order_point.location = warehouse_location
|
||||
>>> order_point.type = 'purchase'
|
||||
>>> order_point.min_quantity = 0
|
||||
>>> order_point.target_quantity = 5
|
||||
>>> order_point.save()
|
||||
|
||||
Check notifications::
|
||||
|
||||
>>> len(product_template.notifications())
|
||||
1
|
||||
>>> len(order_point.notifications())
|
||||
1
|
||||
@@ -0,0 +1,150 @@
|
||||
======================================
|
||||
Sale Supply Request Cancelled Scenario
|
||||
======================================
|
||||
|
||||
Imports::
|
||||
|
||||
>>> from decimal import Decimal
|
||||
|
||||
>>> from proteus import Model, Wizard
|
||||
>>> 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_supply', create_company, create_chart)
|
||||
|
||||
>>> Party = Model.get('party.party')
|
||||
>>> ProductCategory = Model.get('product.category')
|
||||
>>> ProductTemplate = Model.get('product.template')
|
||||
>>> Purchase = Model.get('purchase.purchase')
|
||||
>>> PurchaseRequest = Model.get('purchase.request')
|
||||
>>> Sale = Model.get('sale.sale')
|
||||
>>> UoM = Model.get('product.uom')
|
||||
|
||||
Get accounts::
|
||||
|
||||
>>> accounts = get_accounts()
|
||||
|
||||
Create parties::
|
||||
|
||||
>>> supplier = Party(name="Supplier")
|
||||
>>> supplier.save()
|
||||
>>> customer = Party(name="Customer")
|
||||
>>> customer.save()
|
||||
|
||||
Create account category::
|
||||
|
||||
>>> account_category = ProductCategory(name="Account Category")
|
||||
>>> account_category.accounting = True
|
||||
>>> account_category.account_expense = accounts['expense']
|
||||
>>> account_category.account_revenue = accounts['revenue']
|
||||
>>> account_category.save()
|
||||
|
||||
Create product::
|
||||
|
||||
>>> unit, = UoM.find([('name', '=', "Unit")])
|
||||
|
||||
>>> template = ProductTemplate(name="Product")
|
||||
>>> template.default_uom = unit
|
||||
>>> template.type = 'goods'
|
||||
>>> template.purchasable = True
|
||||
>>> template.salable = True
|
||||
>>> template.list_price = Decimal('100.0000')
|
||||
>>> template.supply_on_sale = 'always'
|
||||
>>> product_supplier = template.product_suppliers.new()
|
||||
>>> product_supplier.party = supplier
|
||||
>>> template.account_category = account_category
|
||||
>>> template.save()
|
||||
>>> product, = template.products
|
||||
|
||||
Sale product::
|
||||
|
||||
>>> sale = Sale(party=customer)
|
||||
>>> line = sale.lines.new()
|
||||
>>> line.product = product
|
||||
>>> line.quantity = 1
|
||||
>>> sale.click('quote')
|
||||
>>> sale.click('confirm')
|
||||
>>> sale.state
|
||||
'processing'
|
||||
|
||||
>>> shipment, = sale.shipments
|
||||
>>> shipment.state
|
||||
'waiting'
|
||||
>>> [m.state for m in shipment.moves]
|
||||
['staging', 'staging']
|
||||
|
||||
Create purchase from request::
|
||||
|
||||
>>> purchase_request, = PurchaseRequest.find()
|
||||
>>> create_purchase = Wizard(
|
||||
... 'purchase.request.create_purchase', [purchase_request])
|
||||
|
||||
>>> purchase_request.state
|
||||
'purchased'
|
||||
>>> shipment.reload()
|
||||
>>> [m.state for m in shipment.moves]
|
||||
['staging', 'staging']
|
||||
|
||||
Cancel purchase::
|
||||
|
||||
>>> purchase = purchase_request.purchase
|
||||
>>> purchase.click('cancel')
|
||||
>>> purchase.state
|
||||
'cancelled'
|
||||
|
||||
>>> purchase_request.reload()
|
||||
>>> purchase_request.state
|
||||
'exception'
|
||||
>>> shipment.reload()
|
||||
>>> [m.state for m in shipment.moves]
|
||||
['staging', 'staging']
|
||||
|
||||
Reset exception::
|
||||
|
||||
>>> handle_purchase = purchase_request.click(
|
||||
... 'handle_purchase_cancellation_exception')
|
||||
>>> handle_purchase.execute('reset')
|
||||
|
||||
>>> purchase_request.state
|
||||
'draft'
|
||||
>>> shipment.reload()
|
||||
>>> [m.state for m in shipment.moves]
|
||||
['staging', 'staging']
|
||||
|
||||
Cancel again purchase::
|
||||
|
||||
>>> create_purchase = Wizard(
|
||||
... 'purchase.request.create_purchase', [purchase_request])
|
||||
>>> purchase = purchase_request.purchase
|
||||
>>> purchase.click('cancel')
|
||||
>>> purchase.state
|
||||
'cancelled'
|
||||
|
||||
>>> purchase_request.reload()
|
||||
>>> purchase_request.state
|
||||
'exception'
|
||||
>>> shipment.reload()
|
||||
>>> [m.state for m in shipment.moves]
|
||||
['staging', 'staging']
|
||||
|
||||
Cancel request::
|
||||
|
||||
>>> handle_purchase = purchase_request.click(
|
||||
... 'handle_purchase_cancellation_exception')
|
||||
>>> handle_purchase.execute('cancel_request')
|
||||
>>> purchase_request.state
|
||||
'cancelled'
|
||||
|
||||
>>> shipment.reload()
|
||||
>>> move, = shipment.moves
|
||||
>>> move.state
|
||||
'cancelled'
|
||||
>>> shipment.state
|
||||
'cancelled'
|
||||
|
||||
>>> sale.reload()
|
||||
>>> sale.shipment_state
|
||||
'exception'
|
||||
@@ -0,0 +1,123 @@
|
||||
=============================================
|
||||
Sale Supply with Shipment on Invoice Scenario
|
||||
=============================================
|
||||
|
||||
Imports::
|
||||
|
||||
>>> from decimal import Decimal
|
||||
|
||||
>>> from proteus import Model
|
||||
>>> from trytond.modules.account.tests.tools import (
|
||||
... create_chart, create_fiscalyear, get_accounts)
|
||||
>>> from trytond.modules.account_invoice.tests.tools import (
|
||||
... set_fiscalyear_invoice_sequences)
|
||||
>>> from trytond.modules.company.tests.tools import create_company
|
||||
>>> from trytond.tests.tools import activate_modules
|
||||
|
||||
Activate modules::
|
||||
|
||||
>>> config = activate_modules('sale_supply', create_company, create_chart)
|
||||
|
||||
Create fiscal year::
|
||||
|
||||
>>> fiscalyear = set_fiscalyear_invoice_sequences(create_fiscalyear())
|
||||
>>> fiscalyear.click('create_period')
|
||||
|
||||
Get accounts::
|
||||
|
||||
>>> accounts = get_accounts()
|
||||
|
||||
>>> Journal = Model.get('account.journal')
|
||||
>>> PaymentMethod = Model.get('account.invoice.payment.method')
|
||||
>>> cash_journal, = Journal.find([('type', '=', 'cash')])
|
||||
>>> cash_journal.save()
|
||||
>>> payment_method = PaymentMethod()
|
||||
>>> payment_method.name = 'Cash'
|
||||
>>> payment_method.journal = cash_journal
|
||||
>>> payment_method.credit_account = accounts['cash']
|
||||
>>> payment_method.debit_account = accounts['cash']
|
||||
>>> payment_method.save()
|
||||
|
||||
Create parties::
|
||||
|
||||
>>> 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_expense = accounts['expense']
|
||||
>>> account_category.account_revenue = accounts['revenue']
|
||||
>>> account_category.save()
|
||||
|
||||
Create product::
|
||||
|
||||
>>> ProductUom = Model.get('product.uom')
|
||||
>>> unit, = ProductUom.find([('name', '=', 'Unit')])
|
||||
>>> ProductTemplate = Model.get('product.template')
|
||||
|
||||
>>> template = ProductTemplate()
|
||||
>>> template.name = 'product'
|
||||
>>> template.default_uom = unit
|
||||
>>> template.type = 'goods'
|
||||
>>> template.salable = True
|
||||
>>> template.purchasable = True
|
||||
>>> template.list_price = Decimal('10')
|
||||
>>> template.supply_on_sale = 'always'
|
||||
>>> template.account_category = account_category
|
||||
>>> template.save()
|
||||
>>> product, = template.products
|
||||
|
||||
Sale 5 products with shipment method on invoice::
|
||||
|
||||
>>> Sale = Model.get('sale.sale')
|
||||
>>> sale = Sale()
|
||||
>>> sale.party = customer
|
||||
>>> sale.shipment_method = 'invoice'
|
||||
>>> sale_line = sale.lines.new()
|
||||
>>> sale_line.product = product
|
||||
>>> sale_line.quantity = 5
|
||||
>>> sale.click('quote')
|
||||
>>> sale.click('confirm')
|
||||
>>> sale.click('process')
|
||||
>>> sale.state
|
||||
'processing'
|
||||
>>> len(sale.shipments)
|
||||
0
|
||||
>>> invoice, = sale.invoices
|
||||
>>> sale_line, = sale.lines
|
||||
>>> sale_line.purchase_request
|
||||
|
||||
Pay for 4 products::
|
||||
|
||||
>>> invoice_line, = invoice.lines
|
||||
>>> invoice_line.quantity = 4
|
||||
>>> invoice.click('post')
|
||||
>>> pay = invoice.click('pay')
|
||||
>>> pay.form.payment_method = payment_method
|
||||
>>> pay.execute('choice')
|
||||
|
||||
Not yet a purchase request::
|
||||
|
||||
>>> sale_line.reload()
|
||||
>>> sale_line.purchase_request
|
||||
|
||||
Pay for remaining products::
|
||||
|
||||
>>> sale.reload()
|
||||
>>> _, invoice = sale.invoices
|
||||
>>> invoice.click('post')
|
||||
>>> pay = invoice.click('pay')
|
||||
>>> pay.form.payment_method = payment_method
|
||||
>>> pay.execute('choice')
|
||||
|
||||
Check purchase request::
|
||||
|
||||
>>> sale_line.reload()
|
||||
>>> bool(sale_line.purchase_request)
|
||||
True
|
||||
>>> sale_line.purchase_request.quantity
|
||||
5.0
|
||||
123
modules/sale_supply/tests/scenario_sale_supply_stock_first.rst
Normal file
123
modules/sale_supply/tests/scenario_sale_supply_stock_first.rst
Normal file
@@ -0,0 +1,123 @@
|
||||
================================
|
||||
Sale Supply Stock First 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_supply', create_company, create_chart)
|
||||
|
||||
>>> Inventory = Model.get('stock.inventory')
|
||||
>>> Location = Model.get('stock.location')
|
||||
>>> Party = Model.get('party.party')
|
||||
>>> ProductCategory = Model.get('product.category')
|
||||
>>> ProductTemplate = Model.get('product.template')
|
||||
>>> Sale = Model.get('sale.sale')
|
||||
>>> UoM = Model.get('product.uom')
|
||||
|
||||
Get accounts::
|
||||
|
||||
>>> accounts = get_accounts()
|
||||
|
||||
Create parties::
|
||||
|
||||
>>> supplier = Party(name="Supplier")
|
||||
>>> supplier.save()
|
||||
>>> customer = Party(name="Customer")
|
||||
>>> customer.save()
|
||||
|
||||
Create account category::
|
||||
|
||||
>>> account_category = ProductCategory(name="Account Category")
|
||||
>>> account_category.accounting = True
|
||||
>>> account_category.account_expense = accounts['expense']
|
||||
>>> account_category.account_revenue = accounts['revenue']
|
||||
>>> account_category.save()
|
||||
|
||||
Create product::
|
||||
|
||||
>>> unit, = UoM.find([('name', '=', "Unit")])
|
||||
|
||||
>>> template = ProductTemplate(name="Product")
|
||||
>>> template.default_uom = unit
|
||||
>>> template.type = 'goods'
|
||||
>>> template.purchasable = True
|
||||
>>> template.salable = True
|
||||
>>> template.list_price = Decimal('100.0000')
|
||||
>>> template.supply_on_sale = 'stock_first'
|
||||
>>> template.account_category = account_category
|
||||
>>> template.save()
|
||||
>>> product, = template.products
|
||||
|
||||
Fill warehouse::
|
||||
|
||||
>>> inventory = Inventory()
|
||||
>>> inventory.location, = Location.find([('code', '=', 'STO')])
|
||||
>>> line = inventory.lines.new()
|
||||
>>> line.product = product
|
||||
>>> line.quantity = 5
|
||||
>>> inventory.click('confirm')
|
||||
>>> inventory.state
|
||||
'done'
|
||||
|
||||
Sale 3 products with 5 in stock::
|
||||
|
||||
>>> sale = Sale()
|
||||
>>> sale.party = customer
|
||||
>>> line = sale.lines.new()
|
||||
>>> line.product = product
|
||||
>>> line.quantity = 3
|
||||
>>> sale.click('quote')
|
||||
>>> sale.click('confirm')
|
||||
>>> sale.state
|
||||
'processing'
|
||||
>>> line, = sale.lines
|
||||
>>> bool(line.purchase_request)
|
||||
False
|
||||
>>> move, = line.moves
|
||||
>>> move.state
|
||||
'draft'
|
||||
|
||||
Sale 3 products with 2 in stock::
|
||||
|
||||
>>> sale = Sale()
|
||||
>>> sale.party = customer
|
||||
>>> line = sale.lines.new()
|
||||
>>> line.product = product
|
||||
>>> line.quantity = 3
|
||||
>>> sale.click('quote')
|
||||
>>> sale.click('confirm')
|
||||
>>> sale.state
|
||||
'processing'
|
||||
>>> line, = sale.lines
|
||||
>>> bool(line.purchase_request)
|
||||
False
|
||||
>>> move, = line.moves
|
||||
>>> move.state
|
||||
'draft'
|
||||
|
||||
Sale 4 products with no stock::
|
||||
|
||||
>>> sale = Sale()
|
||||
>>> sale.party = customer
|
||||
>>> line = sale.lines.new()
|
||||
>>> line.product = product
|
||||
>>> line.quantity = 4
|
||||
>>> sale.click('quote')
|
||||
>>> sale.click('confirm')
|
||||
>>> sale.state
|
||||
'processing'
|
||||
>>> line, = sale.lines
|
||||
>>> bool(line.purchase_request)
|
||||
True
|
||||
>>> move, = line.moves
|
||||
>>> move.state
|
||||
'staging'
|
||||
13
modules/sale_supply/tests/test_module.py
Normal file
13
modules/sale_supply/tests/test_module.py
Normal file
@@ -0,0 +1,13 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
from trytond.tests.test_tryton import ModuleTestCase
|
||||
|
||||
|
||||
class SaleSupplyTestCase(ModuleTestCase):
|
||||
'Test SaleSupply module'
|
||||
module = 'sale_supply'
|
||||
extras = ['stock_supply']
|
||||
|
||||
|
||||
del ModuleTestCase
|
||||
8
modules/sale_supply/tests/test_scenario.py
Normal file
8
modules/sale_supply/tests/test_scenario.py
Normal file
@@ -0,0 +1,8 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
from trytond.tests.test_tryton import load_doc_tests
|
||||
|
||||
|
||||
def load_tests(*args, **kwargs):
|
||||
return load_doc_tests(__name__, __file__, *args, **kwargs)
|
||||
27
modules/sale_supply/tryton.cfg
Normal file
27
modules/sale_supply/tryton.cfg
Normal file
@@ -0,0 +1,27 @@
|
||||
[tryton]
|
||||
version=7.8.0
|
||||
depends:
|
||||
ir
|
||||
purchase
|
||||
purchase_request
|
||||
sale
|
||||
stock
|
||||
extras_depend:
|
||||
stock_supply
|
||||
xml:
|
||||
product.xml
|
||||
sale.xml
|
||||
message.xml
|
||||
|
||||
[register]
|
||||
model:
|
||||
product.Template
|
||||
product.Product
|
||||
sale.Sale
|
||||
sale.Line
|
||||
purchase.Request
|
||||
stock.ShipmentIn
|
||||
|
||||
[register stock_supply]
|
||||
model:
|
||||
stock.OrderPoint
|
||||
10
modules/sale_supply/view/sale_line_form.xml
Normal file
10
modules/sale_supply/view/sale_line_form.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<data>
|
||||
<xpath expr="/form/notebook/page/field[@name='shipping_date']"
|
||||
position="after">
|
||||
<label name="supply_state"/>
|
||||
<field name="supply_state"/>
|
||||
</xpath>
|
||||
</data>
|
||||
12
modules/sale_supply/view/template_form.xml
Normal file
12
modules/sale_supply/view/template_form.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<data>
|
||||
<xpath
|
||||
expr="/form/notebook/page[@id='suppliers']/field[@name='product_suppliers']"
|
||||
position="before">
|
||||
<label name="supply_on_sale"/>
|
||||
<field name="supply_on_sale"/>
|
||||
<newline/>
|
||||
</xpath>
|
||||
</data>
|
||||
Reference in New Issue
Block a user