Add ir.message and use custom exceptions

issue3672
This commit is contained in:
Cédric Krier
2018-12-29 14:20:30 +01:00
parent 609df5239e
commit e2b942d6ad
5 changed files with 49 additions and 38 deletions
+5 -11
View File
@@ -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
+8
View File
@@ -0,0 +1,8 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.exceptions import UserError
class DPDError(UserError):
pass
+17
View File
@@ -0,0 +1,17 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data group="1">
<record model="ir.message" id="msg_dpd_webservice_error">
<field name="text">DPD webservice call failed with the following error message:
%(message)s</field>
</record>
<record model="ir.message" id="msg_warehouse_address_required">
<field name="text">To validate shipment "%(shipment)s" you must set an address on the warehouse "%(warehouse)s".</field>
</record>
<record model="ir.message" id="msg_shipment_has_reference_number">
<field name="text">You cannot create shipping for shipment "%(shipment)s" because it has already a reference number.</field>
</record>
</data>
</tryton>
+18 -27
View File
@@ -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)
+1
View File
@@ -12,3 +12,4 @@ depends:
xml:
carrier.xml
stock.xml
message.xml