Check lines has product package when confirm sales

#038359
This commit is contained in:
Raimon Esteve 2019-08-27 12:25:02 +02:00
parent f2bb4eb182
commit d2e3924418
5 changed files with 58 additions and 13 deletions

View file

@ -8,6 +8,7 @@ from . import sale
def register():
Pool.register(
product.Package,
sale.Sale,
sale.SaleLine,
module='sale_product_package', type_='model')
Pool.register(

View file

@ -18,12 +18,6 @@ msgctxt "field:sale.line,product_template:"
msgid "Product's template"
msgstr "Plantilla de producte"
msgctxt "model:ir.message,text:msg_product_package_null"
msgid "You can not create a package because there are sale lines that already "
"use the product without packages."
msgstr "No pot crear paquets perque ja hi han línies de venta que ja utilitzen "
"aquest producte sense paquets."
msgctxt "model:ir.message,text:msg_package_quantity"
msgid ""
"The quantity \"%(qty)s\" of product \"%(product)s\" is not a multiple of "
@ -31,3 +25,17 @@ msgid ""
msgstr ""
"La quantitat \"%(qty)s\" del producte \"%(product)s\" no és un múltiple de "
"la quantitat \"%(package_qty)s\" del seu paquet \"%(package)s\"."
msgctxt "model:ir.message,text:msg_product_has_package_required"
msgid ""
"You can not confirm because some lines has not product package and is "
"required."
msgstr ""
"No pot confirmar perquè algunes linies no disposa de paquets de producte "
"i es requerit."
msgctxt "model:ir.message,text:msg_product_package_null"
msgid "You can not create a package because there are sale lines that already "
"use the product without packages."
msgstr "No pot crear paquets perquè ja hi han línies de venta que ja utilitzen "
"aquest producte sense paquets."

View file

@ -18,12 +18,6 @@ msgctxt "field:sale.line,product_template:"
msgid "Product's template"
msgstr "Plantilla de producto"
msgctxt "model:ir.message,text:msg_product_package_null"
msgid "You can not create a package because there are sale lines that already "
"use the product without packages."
msgstr "No puede crear paquetes porque hay líneas de venta que ya usan este "
"producto sin paquetes."
msgctxt "model:ir.message,text:msg_package_quantity"
msgid ""
"The quantity \"%(qty)s\" of product \"%(product)s\" is not a multiple of "
@ -31,3 +25,19 @@ msgid ""
msgstr ""
"La cantidad \"%(qty)s\" del producto \"%(product)s\" no es un múltiplo de la"
" cantidad \"%(package_qty)s\" de su paquete \"%(package)s\"."
msgctxt "model:ir.message,text:msg_product_has_package_required"
msgid ""
"You can not confirm because some lines has not product package and is "
"required."
msgstr ""
"No puede confirmar porque algunas líneas no dispone de paquetes de producto "
"y es requerido."
msgctxt "model:ir.message,text:msg_product_package_null"
msgid ""
"You can not create a package because there are sale lines that already use "
"the product without packages."
msgstr ""
"No puede crear paquetes porque hay líneas de venta que ya usan este producto"
" sin paquetes."

View file

@ -9,5 +9,8 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.message" id="msg_product_package_null">
<field name="text">You can not create a package because there are sale lines that already use the product without packages.</field>
</record>
<record model="ir.message" id="msg_product_has_package_required">
<field name="text">You can not confirm because some lines has not product package and is required.</field>
</record>
</data>
</tryton>

25
sale.py
View file

@ -7,7 +7,30 @@ from trytond.transaction import Transaction
from trytond.i18n import gettext
from trytond.exceptions import UserError
__all__ = ['SaleLine', 'HandleShipmentException', 'HandleInvoiceException']
__all__ = ['Sale', 'SaleLine',
'HandleShipmentException', 'HandleInvoiceException']
class Sale(metaclass=PoolMeta):
__name__ = 'sale.sale'
@classmethod
def _check_product_has_package_required(cls, sales):
for sale in sales:
for line in sale.lines:
if line.type != 'line':
continue
if (line.product and line.product_has_packages
and not line.product_package):
return False
return True
@classmethod
def confirm(cls, sales):
if not cls._check_product_has_package_required(sales):
raise UserError(gettext(
'sale_product_package.msg_product_has_package_required'))
super(Sale, cls).confirm(sales)
class SaleLine(metaclass=PoolMeta):