Initial import from Docker volume
This commit is contained in:
124
modules/stock_package_shipping_dpd/carrier.py
Executable file
124
modules/stock_package_shipping_dpd/carrier.py
Executable file
@@ -0,0 +1,124 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
import locale
|
||||
|
||||
from zeep.exceptions import Fault
|
||||
|
||||
from trytond.i18n import gettext
|
||||
from trytond.model import (
|
||||
MatchMixin, ModelSQL, ModelView, fields, sequence_ordered)
|
||||
from trytond.pool import PoolMeta
|
||||
from trytond.pyson import Eval
|
||||
|
||||
from .configuration import LOGIN_SERVICE, get_client
|
||||
from .exceptions import DPDError
|
||||
|
||||
|
||||
class CredentialDPD(sequence_ordered(), ModelSQL, ModelView, MatchMixin):
|
||||
'DPD Credential'
|
||||
__name__ = 'carrier.credential.dpd'
|
||||
|
||||
company = fields.Many2One('company.company', 'Company')
|
||||
user_id = fields.Char('User ID', required=True, strip=False)
|
||||
password = fields.Char('Password', required=True, strip=False)
|
||||
server = fields.Selection([
|
||||
('testing', 'Testing'),
|
||||
('production', 'Production'),
|
||||
], 'Server')
|
||||
depot = fields.Char('Depot', readonly=True, strip=False)
|
||||
token = fields.Char('Token', readonly=True, strip=False)
|
||||
|
||||
@classmethod
|
||||
def default_server(cls):
|
||||
return 'testing'
|
||||
|
||||
def update_token(self):
|
||||
auth_client = get_client(self.server, LOGIN_SERVICE)
|
||||
lang = (self.company.party.lang.code
|
||||
if self.company.party.lang else 'en')
|
||||
lang = locale.normalize(lang)[:5]
|
||||
try:
|
||||
result = auth_client.service.getAuth(
|
||||
delisId=self.user_id, password=self.password,
|
||||
messageLanguage=lang)
|
||||
except Fault as e:
|
||||
error_message = e.detail[0].find('errorMessage')
|
||||
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
|
||||
self.save()
|
||||
|
||||
|
||||
class Carrier(metaclass=PoolMeta):
|
||||
__name__ = 'carrier'
|
||||
|
||||
dpd_product = fields.Selection([
|
||||
(None, ''),
|
||||
('CL', "DPD CLASSIC"),
|
||||
('E830', "DPD 8:30"),
|
||||
('E10', "DPD 10:00"),
|
||||
('E12', "DPD 12:00"),
|
||||
('E18', "DPD 18:00"),
|
||||
('IE2', "DPD EXPRESS"),
|
||||
('PL', "DPD PARCEL Letter"),
|
||||
('PL+', "DPD PARCEL Letter Plus"),
|
||||
('MAIL', "DPD International Mail"),
|
||||
], "Product", sort=False, translate=False,
|
||||
states={
|
||||
'required': Eval('shipping_service') == 'dpd',
|
||||
'invisible': Eval('shipping_service') != 'dpd',
|
||||
})
|
||||
dpd_printer_language = fields.Selection([
|
||||
(None, ''),
|
||||
('PDF', "PDF"),
|
||||
('ZPL', "ZPL"),
|
||||
], "Printer Language", sort=False, translate=False,
|
||||
states={
|
||||
'required': Eval('shipping_service') == 'dpd',
|
||||
'invisible': Eval('shipping_service') != 'dpd',
|
||||
})
|
||||
dpd_paper_format = fields.Selection([
|
||||
(None, ''),
|
||||
('A4', "A4"),
|
||||
('A6', "A6"),
|
||||
('A7', "A7"),
|
||||
], "Paper Format", sort=False, translate=False,
|
||||
states={
|
||||
'required': Eval('shipping_service') == 'dpd',
|
||||
'invisible': Eval('shipping_service') != 'dpd',
|
||||
})
|
||||
|
||||
dpd_notification = fields.Selection([
|
||||
(None, ""),
|
||||
('email', "E-Mail"),
|
||||
('sms', "SMS"),
|
||||
], "Notification",
|
||||
states={
|
||||
'invisible': Eval('shipping_service') != 'dpd',
|
||||
},
|
||||
help="The preferred notification channel.\n"
|
||||
"Leave empty for no notification.")
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super(Carrier, cls).__setup__()
|
||||
cls.shipping_service.selection.append(('dpd', 'DPD'))
|
||||
|
||||
@classmethod
|
||||
def view_attributes(cls):
|
||||
return super().view_attributes() + [
|
||||
("/form/separator[@id='dpd']", 'states', {
|
||||
'invisible': Eval('shipping_service') != 'dpd',
|
||||
}),
|
||||
]
|
||||
|
||||
@property
|
||||
def shipping_label_mimetype(self):
|
||||
mimetype = super().shipping_label_mimetype
|
||||
if self.shipping_service == 'dpd':
|
||||
mimetype = 'application/pdf'
|
||||
return mimetype
|
||||
Reference in New Issue
Block a user