first commit

This commit is contained in:
root
2026-03-14 09:42:12 +00:00
commit 0adbd20c2c
10991 changed files with 1646955 additions and 0 deletions

View File

@@ -0,0 +1,149 @@
# 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 Pool, PoolMeta
from trytond.pyson import Eval
from .configuration import LOGIN_SERVICE, get_client
from .exceptions import DPDCredentialWarning, DPDError
class CredentialDPD(sequence_ordered(), ModelSQL, ModelView, MatchMixin):
__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()
@classmethod
def check_modification(
cls, mode, credentials, values=None, external=False):
pool = Pool()
Warning = pool.get('res.user.warning')
super().check_modification(
mode, credentials, values=values, external=external)
if (mode == 'write'
and external
and values.keys() & {'user_id', 'password', 'server'}):
warning_name = Warning.format('dpd_credential', credentials)
if Warning.check(warning_name):
raise DPDCredentialWarning(
warning_name,
gettext('stock_package_shipping_dpd'
'.msg_dpd_credential_modified'))
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"),
('MAIL', "DPD International Mail"),
('MAX', "DPD MAX"),
('PL', "DPD PARCEL Letter"),
('PM4', "DPD Priority"),
], "Product", sort=False, translate=False,
states={
'required': Eval('shipping_service') == 'dpd',
'invisible': Eval('shipping_service') != 'dpd',
})
dpd_output_format = fields.Selection([
(None, ''),
('PDF', "PDF"),
], "Output Format", 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', "Email"),
('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().__setup__()
cls.shipping_service.selection.append(('dpd', 'DPD'))
@classmethod
def __register__(cls, module):
table_h = cls.__table_handler__(module)
# Migration from 7.4: rename dpd_printer_language to dpd_output_format
table_h.column_rename('dpd_printer_language', 'dpd_output_format')
super().__register__(module)
@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