diff --git a/carrier.py b/carrier.py index 3b63667311..bf6b911bf2 100644 --- a/carrier.py +++ b/carrier.py @@ -5,10 +5,12 @@ import locale from zeep.exceptions import Fault +from trytond.i18n import gettext from trytond.model import ModelSQL, ModelView, MatchMixin, fields from trytond.pool import PoolMeta from .configuration import get_client, LOGIN_SERVICE +from .exceptions import DPDError __all__ = ['CredentialDPD', 'Carrier'] @@ -27,14 +29,6 @@ class CredentialDPD(ModelSQL, ModelView, MatchMixin): depot = fields.Char('Depot', readonly=True) token = fields.Char('Token', readonly=True) - @classmethod - def __setup__(cls): - super(CredentialDPD, cls).__setup__() - cls._error_messages.update({ - 'dpd_webservice_error': ('DPD webservice call failed with the' - ' following error message:\n\n%(message)s'), - }) - @classmethod def default_server(cls): return 'testing' @@ -50,9 +44,9 @@ class CredentialDPD(ModelSQL, ModelView, MatchMixin): messageLanguage=lang) except Fault as e: error_message = e.detail[0].find('errorMessage') - self.raise_user_error('authentication_error', { - 'message': error_message.text, - }) + raise DPDError( + gettext('stock_package_shipping_dpd.msg_dpd_webservice_error', + message=error_message.text)) from e self.token = result.authToken self.depot = result.depot diff --git a/exceptions.py b/exceptions.py new file mode 100644 index 0000000000..d3cb0d2c64 --- /dev/null +++ b/exceptions.py @@ -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.exceptions import UserError + + +class DPDError(UserError): + pass diff --git a/message.xml b/message.xml new file mode 100644 index 0000000000..fdf27f1c9c --- /dev/null +++ b/message.xml @@ -0,0 +1,17 @@ + + + + + + DPD webservice call failed with the following error message: +%(message)s + + + To validate shipment "%(shipment)s" you must set an address on the warehouse "%(warehouse)s". + + + You cannot create shipping for shipment "%(shipment)s" because it has already a reference number. + + + diff --git a/stock.py b/stock.py index 86978ad408..61bf4b8d8b 100644 --- a/stock.py +++ b/stock.py @@ -7,12 +7,18 @@ from lxml import etree from zeep.exceptions import Fault from PyPDF2 import PdfFileReader, PdfFileWriter +from trytond.i18n import gettext from trytond.pool import Pool, PoolMeta from trytond.model import fields +from trytond.model.exceptions import AccessError from trytond.wizard import Wizard, StateAction, StateTransition from trytond.transaction import Transaction +from trytond.modules.stock_package_shipping.exceptions import ( + PackingValidationError) + from .configuration import get_client, SHIPMENT_SERVICE +from .exceptions import DPDError __all__ = ['ShipmentOut', 'CreateShipping', 'CreateDPDShipping'] @@ -20,20 +26,14 @@ __all__ = ['ShipmentOut', 'CreateShipping', 'CreateDPDShipping'] class ShipmentOut(metaclass=PoolMeta): __name__ = 'stock.shipment.out' - @classmethod - def __setup__(cls): - super(ShipmentOut, cls).__setup__() - cls._error_messages.update({ - 'warehouse_address_required': ('An address is required for' - ' warehouse "%(warehouse)s".'), - }) - def validate_packing_dpd(self): warehouse_address = self.warehouse.address if not warehouse_address: - self.raise_user_error('warehouse_address_required', { - 'warehouse': self.warehouse.rec_name, - }) + raise PackingValidationError( + gettext('stock_package_shipping_dpd' + '.msg_warehouse_address_required', + shipment=self.rec_name, + warehouse=self.warehouse.rec_name)) class CreateShipping(metaclass=PoolMeta): @@ -67,16 +67,6 @@ class CreateDPDShipping(Wizard): start = StateTransition() - @classmethod - def __setup__(cls): - super(CreateDPDShipping, cls).__setup__() - cls._error_messages.update({ - 'has_reference_number': ('Shipment "%(shipment)s" already has' - ' a reference number.'), - 'dpd_webservice_error': ('DPD webservice call failed with the' - ' following error message:\n\n%(message)s'), - }) - def transition_start(self): pool = Pool() ShipmentOut = pool.get('stock.shipment.out') @@ -84,9 +74,10 @@ class CreateDPDShipping(Wizard): shipment = ShipmentOut(Transaction().context['active_id']) if shipment.reference: - self.raise_user_error('has_reference_number', { - 'shipment': shipment.rec_name, - }) + raise AccessError( + gettext('stock_package_shipping_dpd' + '.msg_shipment_has_reference_number', + shipment=shipment.rec_name)) credential = self.get_credential(shipment) if not credential.depot or not credential.token: @@ -128,9 +119,9 @@ class CreateDPDShipping(Wizard): response, = shipment_response.shipmentResponses if response.faults: message = '\n'.join(f.message for f in response.faults) - self.raise_user_error('dpd_webservice_error', { - 'message': message, - }) + raise DPDError( + gettext('stock_package_shipping_dpd.msg_dpd_webservice_error', + message=message)) labels = [] labels_pdf = BytesIO(shipment_response.parcellabelsPDF) diff --git a/tryton.cfg b/tryton.cfg index fbceb45e1d..2f3a17fdb5 100644 --- a/tryton.cfg +++ b/tryton.cfg @@ -12,3 +12,4 @@ depends: xml: carrier.xml stock.xml + message.xml