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,2 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.

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

View File

@@ -0,0 +1,64 @@
<?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>
<record model="ir.ui.view" id="carrier_view_form">
<field name="model">carrier</field>
<field name="inherit" ref="carrier.carrier_view_form"/>
<field name="name">carrier_form</field>
</record>
<record model="ir.ui.view" id="credential_view_form">
<field name="model">carrier.credential.dpd</field>
<field name="type">form</field>
<field name="name">dpd_credential_form</field>
</record>
<record model="ir.ui.view" id="credential_view_tree">
<field name="model">carrier.credential.dpd</field>
<field name="type">tree</field>
<field name="name">dpd_credential_list</field>
</record>
<record model="ir.action.act_window" id="act_dpd_credential_form">
<field name="name">DPD Credentials</field>
<field name="res_model">carrier.credential.dpd</field>
</record>
<record model="ir.action.act_window.view"
id="act_dpd_credential_form_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="credential_view_tree"/>
<field name="act_window" ref="act_dpd_credential_form"/>
</record>
<record model="ir.action.act_window.view"
id="act_dpd_credential_form_view2">
<field name="sequence" eval="20"/>
<field name="view" ref="credential_view_form"/>
<field name="act_window" ref="act_dpd_credential_form"/>
</record>
<menuitem
parent="carrier.menu_configuration"
action="act_dpd_credential_form"
sequence="50"
id="menu_dpd_credential_form"/>
<record model="ir.model.access" id="access_carrier_credential">
<field name="model">carrier.credential.dpd</field>
<field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<record model="ir.model.access"
id="access_carrier_credential_carrier_admin">
<field name="model">carrier.credential.dpd</field>
<field name="group" ref="carrier.group_carrier_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_delete" eval="True"/>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,30 @@
# 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 urllib.parse import urljoin
from zeep import Client
from zeep.transports import Transport
import trytond.config as config
SERVER_URLS = {
'testing': 'https://public-ws-stage.dpd.com/services/',
'production': 'https://public-ws.dpd.com/services/',
}
LOGIN_SERVICE = 'LoginService/V2_0/?wsdl'
SHIPMENT_SERVICE = 'ShipmentService/V4_4/?wsdl'
def get_client(server, service):
api_base_url = config.get('stock_package_shipping_dpd',
server, default=SERVER_URLS[server])
url = urljoin(api_base_url, service)
timeout = config.get(
'stock_package_shipping_dpd', 'requests_timeout', default=300)
# Disable the cache for testing because zeep's bug
# https://github.com/mvantellingen/python-zeep/issues/48
# which makes testing environments fail
transport = (Transport(cache=None, operation_timeout=timeout)
if url.startswith(SERVER_URLS['testing']) else None)
return Client(url, transport=transport)

View File

@@ -0,0 +1,12 @@
# 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, UserWarning
class DPDError(UserError):
pass
class DPDCredentialWarning(UserWarning):
pass

View File

@@ -0,0 +1,129 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr ""
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr ""
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr ""
#, fuzzy
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr "Управление на производство"
#, fuzzy
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr "Фирма"
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr ""
#, fuzzy
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr "Парола"
#, fuzzy
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr "Сървър"
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr ""
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr ""
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
#, fuzzy
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr "DPD Credentials"
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr "Create DPD Shipping for Packages"
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr ""
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr ""
#, fuzzy
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr "Управление на производство"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr ""
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr ""
msgctxt "view:carrier:"
msgid "DPD"
msgstr ""

View File

@@ -0,0 +1,131 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr "Notificació"
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr "Format sortida"
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr "Format paper"
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr "Producte"
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr "Empresa"
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr "Dipòsit"
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr "Contrasenya"
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr "Servidor"
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr "Token"
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr "Identificador usuari"
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
"El canal de notificació preferit. \n"
"Deixeu-ho en blanc per desactivar la notificació."
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr "Credencial DPD"
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr "Crea enviaments DPD per paquets"
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr "Credencials DPD"
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr "Estas segur que vols modificar les credencials de DPD?"
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr "La identificació DPD ha fallat amb les credencials \"%(credential)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
"La crida al servei web DPD ha fallat amb el següent missatge d'error:\n"
"%(message)s"
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
"No podeu crear l'enviament per l'albarà \"%(shipment)s\" perquè ja té un "
"número de referència de l'enviament."
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
"Per validar l'albarà \"%(shipment)s\" heu d'establir una direcció al "
"magatzem \"%(warehouse)s\"."
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr "Credencials DPD"
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr "Correu electrònic"
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr "SMS"
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr "DPD"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr "Producció"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr "Proves"
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr "Informació de les credencials"
msgctxt "view:carrier:"
msgid "DPD"
msgstr "DPD"

View File

@@ -0,0 +1,124 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr ""
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr ""
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr ""
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr ""
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr ""
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr ""
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr ""
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr ""
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr ""
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr ""
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
#, fuzzy
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr "DPD Credentials"
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr "Create DPD Shipping for Packages"
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr ""
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr ""
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr ""
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr ""
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr ""
msgctxt "view:carrier:"
msgid "DPD"
msgstr ""

View File

@@ -0,0 +1,131 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr "Benachrichtigung"
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr "Ausgabeformat"
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr "Papierformat"
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr "Artikel"
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr "Unternehmen"
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr "Depot"
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr "Passwort"
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr "Server"
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr "Token"
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr "Benutzer ID"
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
"Der bevorzugte Benachrichtigungskanal.\n"
"Leer lassen für keine Benachrichtigung."
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr "Versanddienstleister Anmeldedaten DPD"
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr "DPD Versand für Pakete erstellen"
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Anmeldedaten"
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr "Möchten Sie die DPD-Anmeldeinformationen wirklich ändern?"
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr "Der DPD Login mit den Anmeldedaten \"%(credential)s\" ist fehlgeschlagen."
#, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
"Der Aufruf des DPD-Webservice schlug fehl mit der folgenden Fehlermeldung:\n"
"%(message)s"
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
"Für die Lieferung \"%(shipment)s\" kann keine Sendung erstellt werden, da "
"sie bereits eine Versandreferenz hat."
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
"Um die Lieferung \"%(shipment)s\" validieren zu können, muss eine Adresse "
"für den Logistikstandort \"%(warehouse)s\" erfasst werden."
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Anmeldedaten"
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr "E-Mail"
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr "SMS"
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr "DPD"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr "Produktivumgebung"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr "Testumgebung"
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr "Anmeldedaten"
msgctxt "view:carrier:"
msgid "DPD"
msgstr "DPD"

View File

@@ -0,0 +1,131 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr "Notificación"
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr "Formato salida"
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr "Formato papel"
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr "Producto"
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr "Empresa"
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr "Deposito"
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr "Contraseña"
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr "Servidor"
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr "Token"
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr "Identificador de usuario"
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
"El canal de notificación preferido. \n"
"Dejare en blanco para desactivar la notificación."
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr "Credencial DPD"
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr "Crear envíos DPD para paquetes"
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr "Credenciales DPD"
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr "¿Está seguro de que desea modificar las credenciales de DPD?"
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr "La identificación DPD ha fallado con las credenciales \"%(credential)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
"La llamada al servicio web DPD ha fallado con el siguiente mensaje de error:\n"
"%(message)s"
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
"No puede crear el envío para el albarán \"%(shipment)s\" porque ya tiene un "
"número de referencia del envío."
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
"Para validar el albarán \"%(shipment)s\" debe establecer una dirección en el"
" almacén \"%(warehouse)s\"."
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr "Credenciales DPD"
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr "Correo electrónico"
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr "SMS"
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr "DPD"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr "Producción"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr "Pruebas"
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr "Información de las credenciales"
msgctxt "view:carrier:"
msgid "DPD"
msgstr "DPD"

View File

@@ -0,0 +1,123 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr ""
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr ""
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr ""
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr ""
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr ""
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr "Depósito"
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr ""
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr ""
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr ""
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr ""
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr ""
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr ""
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr ""
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr ""
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr ""
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr ""
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr ""
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr ""
msgctxt "view:carrier:"
msgid "DPD"
msgstr ""

View File

@@ -0,0 +1,126 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr ""
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr ""
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr ""
#, fuzzy
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr "Tootmine"
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr "Ettevõte"
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr ""
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr "Salasõna"
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr "Server"
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr "Token"
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr "Kasutaja ID"
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
#, fuzzy
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr "DPD viide"
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr "Loo DPD saadetis"
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD viide"
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD viide"
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr ""
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr "DPD"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr "Tootmine"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr "Testimine"
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr "Viite info"
#, fuzzy
msgctxt "view:carrier:"
msgid "DPD"
msgstr "DPD"

View File

@@ -0,0 +1,133 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr ""
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr ""
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr ""
#, fuzzy
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr "تهیه کننده"
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr "شرکت"
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr "دپو"
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr "کلمه عبور"
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr "سرور"
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr "توکن"
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr "شناسه کاربر"
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
#, fuzzy
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr "گواهی نامه DPD"
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr "ایجاد حمل ونقل DPD برای بسته ها"
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr "گواهی نامه های DPD"
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr ""
#, fuzzy, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
"تماس با وب سرویس DPD با پیغام خطای زیر انجام نشد :\n"
"\"%s\""
#, fuzzy, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
"شما نمی توانید حمل و نقل را برای حمل و نقل :\"%(shipment)s\" ایجاد کنید زیرا"
" قبلا یک شماره مرجع است."
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
"برای تایید حمل و نقل :\"%(shipment)s\" شما باید یک آدرس را در "
"انبار:\"%(warehouse)s\" تنظیم کنید."
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr "گواهی نامه های DPD"
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr ""
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr "DPD"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr "تهیه کننده"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr "آزمایش"
#, fuzzy
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr "اطلاعات گواهی نامه"
#, fuzzy
msgctxt "view:carrier:"
msgid "DPD"
msgstr "DPD"

View File

@@ -0,0 +1,124 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr ""
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr ""
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr ""
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr ""
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr ""
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr ""
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr ""
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr ""
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr ""
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr ""
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
#, fuzzy
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr "DPD Credentials"
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr "Create DPD Shipping for Packages"
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr ""
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr ""
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr ""
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr ""
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr ""
msgctxt "view:carrier:"
msgid "DPD"
msgstr ""

View File

@@ -0,0 +1,133 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr "Notification"
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr "Format de sortie"
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr "Format papier"
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr "Produit"
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr "Société"
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr "Dépôt"
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr "Mot de passe"
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr "Serveur"
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr "Jeton"
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr "ID d'utilisateur"
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
"Le canal de notification préféré.\n"
"Laissez vide pour aucune notification."
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr "Identifiant du transporteur DPD"
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr "Créer la livraison DPD pour les emballages"
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr "Identifiants DPD"
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr "Êtes-vous sûr de vouloir modifier les identifiants de DPD ?"
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr ""
"La connexion DPD a échoué avec les informations d'identification "
"« %(credential)s »."
#, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
"L'appel au service web de DPD a échoué avec le message d'erreur suivant :\n"
"%(message)s"
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
"Vous ne pouvez pas créer de livraison pour l'expédition « %(shipment)s » car"
" elle a déjà un numéro de référence d'expédition."
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
"Pour valider la livraison « %(shipment)s », vous devez définir une adresse "
"pour l'entrepôt « %(warehouse)s »."
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr "Identifiants DPD"
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr "Courriel"
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr "SMS"
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr "DPD"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr "Production"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr "Essai"
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr "Informations d'identification"
msgctxt "view:carrier:"
msgid "DPD"
msgstr "DPD"

View File

@@ -0,0 +1,128 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr ""
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr ""
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr ""
#, fuzzy
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr "Termelés"
#, fuzzy
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr "Társaság"
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr ""
#, fuzzy
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr "Jelszó"
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr ""
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr ""
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr ""
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
#, fuzzy
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr "DPD Credentials"
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr "Create DPD Shipping for Packages"
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr ""
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr ""
#, fuzzy
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr "Termelés"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr ""
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr ""
msgctxt "view:carrier:"
msgid "DPD"
msgstr ""

View File

@@ -0,0 +1,124 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr ""
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr ""
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr ""
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr "Produk"
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr "Perusahaan"
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr ""
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr "Kata sandi"
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr "Server"
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr ""
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr ""
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr ""
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr ""
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr ""
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr ""
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr "DPD"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr "Produksi"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr "Testing"
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr ""
#, fuzzy
msgctxt "view:carrier:"
msgid "DPD"
msgstr "DPD"

View File

@@ -0,0 +1,125 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr ""
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr ""
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr ""
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr ""
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr "Azienda"
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr ""
#, fuzzy
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr "Password"
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr ""
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr ""
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr ""
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
#, fuzzy
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr "DPD Credentials"
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr "Create DPD Shipping for Packages"
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr ""
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr ""
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr ""
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr ""
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr ""
msgctxt "view:carrier:"
msgid "DPD"
msgstr ""

View File

@@ -0,0 +1,127 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr ""
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr ""
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr ""
#, fuzzy
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr "ຜະລິດຕະພັນ"
#, fuzzy
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr "ຫ້ອງການ/ສຳນັກງານ"
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr ""
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr ""
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr ""
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr ""
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr ""
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
#, fuzzy
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr "DPD Credentials"
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr "Create DPD Shipping for Packages"
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr ""
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr ""
#, fuzzy
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr "ຜະລິດຕະພັນ"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr ""
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr ""
msgctxt "view:carrier:"
msgid "DPD"
msgstr ""

View File

@@ -0,0 +1,124 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr ""
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr ""
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr ""
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr ""
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr "Organizacija"
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr ""
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr ""
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr ""
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr ""
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr "Naudotojo ID"
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
#, fuzzy
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr "DPD Credentials"
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr "Create DPD Shipping for Packages"
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr ""
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr ""
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr ""
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr ""
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr ""
msgctxt "view:carrier:"
msgid "DPD"
msgstr ""

View File

@@ -0,0 +1,131 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr "Melding"
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr "Uitvoer formaat"
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr "Papierformaat"
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr "Product"
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr "Bedrijf"
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr "Magazijn"
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr "Wachtwoord"
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr "Server"
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr "Token"
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr "Gebruiker ID"
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
"Voorkeur welk soort melding te gebruiken.\n"
"Laat leeg om meldingen uit te schakelen."
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr "Transporteur aanmeldgegevens DPD"
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr "Maak een DPD-verzending voor de pakketten"
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr "Weet u zeker dat u de inloggegevens bij DPD wilt wijzigen?"
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr "DPD-aanmelding is mislukt met referentie %(credential)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
"DPD webservice-oproep mislukt met het volgende foutbericht:\n"
"%(message)s"
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
"U kunt geen verzending voor zending \"%(shipment)s\" maken omdat deze al een"
" referentienummer heeft."
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
"Om zending \"%(shipment)s\" te valideren, moet u een adres voor magazijn "
"\"%(warehouse)s\" instellen."
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr "Email"
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr "SMS"
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr "DPD"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr "Productie"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr "Testen"
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr "Referentiegegevens"
msgctxt "view:carrier:"
msgid "DPD"
msgstr "DPD"

View File

@@ -0,0 +1,128 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr ""
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr ""
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr ""
#, fuzzy
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr "Produkcja"
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr "Firma"
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr ""
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr "Hasło"
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr "Serwer"
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr "Token"
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr "ID użytkownika"
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
#, fuzzy
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr "DPD Credentials"
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr "Create DPD Shipping for Packages"
#, fuzzy
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr ""
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr "DPD"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr "Produkcja"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr ""
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr ""
#, fuzzy
msgctxt "view:carrier:"
msgid "DPD"
msgstr "DPD"

View File

@@ -0,0 +1,132 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr ""
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr ""
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr ""
#, fuzzy
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr "Produção"
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr "Empresa"
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr "Depósito"
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr "Senha"
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr "Servidor"
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr "Token"
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr "ID de usuário"
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
#, fuzzy
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr "Credencial DPD"
#, fuzzy
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr "Create DPD Shipping for Packages"
#, fuzzy
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
"A chamada ao serviço web DPD falhou com a mensagem de erro:\n"
"%(message)s"
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr ""
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr "DPD"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr "Produção"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr "Testando"
#, fuzzy
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr "Informações da Credencial"
#, fuzzy
msgctxt "view:carrier:"
msgid "DPD"
msgstr "DPD"

View File

@@ -0,0 +1,123 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr ""
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr ""
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr ""
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr ""
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr "Societate"
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr ""
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr ""
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr ""
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr ""
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr ""
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr ""
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr ""
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr ""
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr ""
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr ""
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr ""
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr ""
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr ""
msgctxt "view:carrier:"
msgid "DPD"
msgstr ""

View File

@@ -0,0 +1,129 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr ""
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr ""
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr ""
#, fuzzy
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr "Производство"
#, fuzzy
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr "Учет.орг."
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr ""
#, fuzzy
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr "Пароль"
#, fuzzy
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr "Сервер"
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr ""
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr ""
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
#, fuzzy
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr "DPD Credentials"
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr "Create DPD Shipping for Packages"
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr ""
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr ""
#, fuzzy
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr "Производство"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr ""
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr ""
msgctxt "view:carrier:"
msgid "DPD"
msgstr ""

View File

@@ -0,0 +1,133 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr ""
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr ""
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr ""
#, fuzzy
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr "Produkcijski"
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr "Družba"
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr "Depot"
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr "Geslo"
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr "Strežnik"
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr "Žeton"
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr "ID uporabnika"
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
#, fuzzy
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr "DPD prijava"
#, fuzzy
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr "Create DPD Shipping for Packages"
#, fuzzy
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr ""
#, fuzzy, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
"Sporočilo napake pri klicu DPD spletne storitve:\n"
"\n"
"%(message)s"
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr ""
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr "DPD"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr "Produkcijski"
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr "Preizkusni"
#, fuzzy
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr "Prijavni podatki"
#, fuzzy
msgctxt "view:carrier:"
msgid "DPD"
msgstr "DPD"

View File

@@ -0,0 +1,124 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr ""
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr ""
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr ""
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr ""
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr ""
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr ""
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr ""
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr ""
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr ""
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr ""
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
#, fuzzy
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr "DPD Credentials"
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr "Create DPD Shipping for Packages"
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr ""
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr ""
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr ""
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr ""
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr ""
msgctxt "view:carrier:"
msgid "DPD"
msgstr ""

View File

@@ -0,0 +1,123 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr ""
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr ""
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr ""
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr ""
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr ""
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr ""
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr ""
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr ""
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr ""
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr ""
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr ""
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr ""
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr ""
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr ""
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr ""
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr ""
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr ""
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr ""
msgctxt "view:carrier:"
msgid "DPD"
msgstr ""

View File

@@ -0,0 +1,125 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,dpd_notification:"
msgid "Notification"
msgstr ""
msgctxt "field:carrier,dpd_output_format:"
msgid "Output Format"
msgstr ""
msgctxt "field:carrier,dpd_paper_format:"
msgid "Paper Format"
msgstr ""
msgctxt "field:carrier,dpd_product:"
msgid "Product"
msgstr ""
msgctxt "field:carrier.credential.dpd,company:"
msgid "Company"
msgstr ""
msgctxt "field:carrier.credential.dpd,depot:"
msgid "Depot"
msgstr ""
#, fuzzy
msgctxt "field:carrier.credential.dpd,password:"
msgid "Password"
msgstr "密码"
msgctxt "field:carrier.credential.dpd,server:"
msgid "Server"
msgstr ""
msgctxt "field:carrier.credential.dpd,token:"
msgid "Token"
msgstr ""
msgctxt "field:carrier.credential.dpd,user_id:"
msgid "User ID"
msgstr ""
msgctxt "help:carrier,dpd_notification:"
msgid ""
"The preferred notification channel.\n"
"Leave empty for no notification."
msgstr ""
#, fuzzy
msgctxt "model:carrier.credential.dpd,string:"
msgid "Carrier Credential Dpd"
msgstr "DPD Credentials"
msgctxt "model:ir.action,name:act_create_shipping_dpd_wizard"
msgid "Create DPD Shipping for Packages"
msgstr "Create DPD Shipping for Packages"
msgctxt "model:ir.action,name:act_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "model:ir.message,text:msg_dpd_credential_modified"
msgid "Are you sure you want to modify DPD credentials?"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_login_error"
msgid "DPD login failed with credential \"%(credential)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_dpd_webservice_error"
msgid ""
"DPD webservice call failed with the following error message:\n"
"%(message)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_has_shipping_reference_number"
msgid ""
"You cannot create shipping for shipment \"%(shipment)s\" because it has "
"already a shipping reference number."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_warehouse_address_required"
msgid ""
"To validate shipment \"%(shipment)s\" you must set an address on the "
"warehouse \"%(warehouse)s\"."
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_dpd_credential_form"
msgid "DPD Credentials"
msgstr "DPD Credentials"
msgctxt "selection:carrier,dpd_notification:"
msgid "Email"
msgstr ""
msgctxt "selection:carrier,dpd_notification:"
msgid "SMS"
msgstr ""
msgctxt "selection:carrier,shipping_service:"
msgid "DPD"
msgstr ""
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Production"
msgstr ""
msgctxt "selection:carrier.credential.dpd,server:"
msgid "Testing"
msgstr ""
msgctxt "view:carrier.credential.dpd:"
msgid "Credential Information"
msgstr ""
msgctxt "view:carrier:"
msgid "DPD"
msgstr ""

View File

@@ -0,0 +1,23 @@
<?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 grouped="1">
<record model="ir.message" id="msg_dpd_credential_modified">
<field name="text">Are you sure you want to modify DPD credentials?</field>
</record>
<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_dpd_login_error">
<field name="text">DPD login failed with credential "%(credential)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_shipping_reference_number">
<field name="text">You cannot create shipping for shipment "%(shipment)s" because it has already a shipping reference number.</field>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,443 @@
# 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 decimal import Decimal
from io import BytesIO
from itertools import zip_longest
from math import ceil
from lxml import etree
from pypdf import PdfReader, PdfWriter
from zeep.exceptions import Fault
from trytond.i18n import gettext
from trytond.model import fields
from trytond.model.exceptions import AccessError
from trytond.modules.stock_package_shipping.exceptions import (
PackingValidationError)
from trytond.modules.stock_package_shipping.stock import address_name
from trytond.pool import Pool, PoolMeta
from trytond.transaction import Transaction
from trytond.wizard import StateAction, StateTransition, Wizard
from .configuration import SHIPMENT_SERVICE, get_client
from .exceptions import DPDError
TRACKING_URL = 'https://tracking.dpd.de/status/%(code)s/parcel/%(reference)s'
def iter_pdf_pages(document):
if hasattr(document, 'pages'):
yield from document.pages
else:
for i in range(document.getNumPages()):
yield document.getPage(i)
class Package(metaclass=PoolMeta):
__name__ = 'stock.package'
def get_shipping_tracking_url(self, name):
url = super().get_shipping_tracking_url(name)
if (self.shipping_reference
and self.shipment
and self.shipment.id >= 0
and self.shipment.carrier
and self.shipment.carrier.shipping_service == 'dpd'):
party = self.shipment.shipping_to
address = self.shipment.shipping_to_address
if party and party.lang:
lang_code = party.lang.code
else:
lang_code = Transaction().language
if address and address.country:
code = '_'.join(
(lang_code.split('_')[0], address.country.code))
else:
code = lang_code
url = TRACKING_URL % {
'code': code,
'reference': self.shipping_reference,
}
return url
class ShippingDPDMixin:
__slots__ = ()
def validate_packing_dpd(self):
warehouse = self.shipping_warehouse
if not warehouse.address:
raise PackingValidationError(
gettext('stock_package_shipping_dpd'
'.msg_warehouse_address_required',
shipment=self.rec_name,
warehouse=warehouse.rec_name))
class CreateShipping(metaclass=PoolMeta):
__name__ = 'stock.shipment.create_shipping'
dpd = StateAction(
'stock_package_shipping_dpd.act_create_shipping_dpd_wizard')
def transition_start(self):
next_state = super().transition_start()
if self.record.carrier.shipping_service == 'dpd':
next_state = 'dpd'
return next_state
def do_dpd(self, action):
ctx = Transaction().context
return action, {
'model': ctx['active_model'],
'id': ctx['active_id'],
'ids': [ctx['active_id']],
}
class CreateDPDShipping(Wizard):
__name__ = 'stock.shipment.create_shipping.dpd'
start = StateTransition()
def transition_start(self):
pool = Pool()
Package = pool.get('stock.package')
shipment = self.record
if shipment.shipping_reference:
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:
credential.update_token()
carrier = shipment.carrier
shipping_client = get_client(credential.server, SHIPMENT_SERVICE)
print_options = self.get_print_options(shipment)
packages = shipment.root_packages
shipment_data = self.get_shipment_data(credential, shipment, packages)
count = 0
while count < 2:
lang = (credential.company.party.lang.code
if credential.company.party.lang else 'en')
lang = locale.normalize(lang)[:5]
authentication = {
'delisId': credential.user_id,
'authToken': credential.token,
'messageLanguage': lang,
}
try:
shipment_response = shipping_client.service.storeOrders(
print_options, shipment_data, _soapheaders={
'authentication': authentication,
})
break
except Fault as e:
if e.detail:
tag = etree.QName(e.detail[0].tag)
if tag.localname == 'authenticationFault':
count += 1
credential.update_token()
continue
raise DPDError(gettext(
'stock_package_shipping_dpd.'
'msg_dpd_webservice_error',
message=e.message)) from e
else:
raise DPDError(
gettext('stock_package_shipping_dpd.msg_dpd_login_error',
credential=credential.rec_name))
response, = shipment_response.shipmentResponses
if response.faults:
message = '\n'.join(f.message for f in response.faults)
raise DPDError(
gettext('stock_package_shipping_dpd.msg_dpd_webservice_error',
message=message))
labels = []
labels_pdf = BytesIO(shipment_response.output.content)
reader = PdfReader(labels_pdf)
for page in iter_pdf_pages(reader):
new_pdf = PdfWriter()
new_label = BytesIO()
new_pdf.add_page(page)
new_pdf.write(new_label)
labels.append(new_label)
shipment.shipping_reference = response.mpsId
parcels = response.parcelInformation
for package, label, parcel in zip_longest(packages, labels, parcels):
package.shipping_label = fields.Binary.cast(label.getvalue())
package.shipping_label_mimetype = (
carrier.shipping_label_mimetype)
package.shipping_reference = parcel.parcelLabelNumber
Package.save(packages)
shipment.save()
return 'end'
def get_credential_pattern(self, shipment):
return {
'company': shipment.company.id,
}
def get_credential(self, shipment):
pool = Pool()
DPDCredential = pool.get('carrier.credential.dpd')
credential_pattern = self.get_credential_pattern(shipment)
for credential in DPDCredential.search([]):
if credential.match(credential_pattern):
return credential
def get_print_options(self, shipment):
return {
'printOption': [{
'outputFormat': shipment.carrier.dpd_output_format,
'paperFormat': shipment.carrier.dpd_paper_format,
},
],
}
def shipping_party(self, party, address, usage=None, with_contact=False):
if address.street_unstructured:
street = address.street_single_line
house_no = ''
else:
street = address.street_name or ''
house_no = address.numbers
name = address_name(address, party)
contact = party.full_name if party.full_name != name else ''
if with_contact and not contact:
contact = party.full_name
shipping_party = {
'name1': name[:50],
'name2': name[50:85],
'street': street[:50],
'houseNo': house_no[:8],
'country': address.country.code if address.country else '',
'zipCode': address.postal_code[:9],
'city': address.city[:50],
'contact': contact[:35],
}
phone = address.contact_mechanism_get({'phone', 'mobile'}, usage=usage)
if phone and len(phone.value) <= 30:
shipping_party['phone'] = phone.value
mobile = address.contact_mechanism_get('mobile', usage=usage)
if mobile and len(mobile.value) <= 30:
shipping_party['mobile'] = mobile.value
email = address.contact_mechanism_get('email', usage=usage)
if email and 5 <= len(email.value) <= 100:
shipping_party['email'] = email.value
return shipping_party
def get_parcel(self, shipment, package):
pool = Pool()
UoM = pool.get('product.uom')
ModelData = pool.get('ir.model.data')
cm = UoM(ModelData.get_id('product', 'uom_centimeter'))
kg = UoM(ModelData.get_id('product', 'uom_kilogram'))
parcel = {}
if package.total_weight:
# in grams rounded in 10 gram units
weight = UoM.compute_qty(
package.weight_uom, package.total_weight, kg, round=False)
weight = int(round(weight, 2) * 100)
if weight < 1000000000:
parcel['weight'] = weight
if (package.length is not None
and package.width is not None
and package.height is not None):
length = ceil(UoM.compute_qty(
package.length_uom, package.length, cm, round=False))
width = ceil(UoM.compute_qty(
package.width_uom, package.width, cm, round=False))
height = ceil(UoM.compute_qty(
package.height_uom, package.height, cm, round=False))
if 1 <= length < 1000 and 1 <= width < 1000 and 1 <= height < 1000:
parcel['volume'] = int(
'%03i%03i%03i' % (length, width, height))
return parcel
def get_shipment_data(self, credential, shipment, packages):
pool = Pool()
UoM = pool.get('product.uom')
ModelData = pool.get('ir.model.data')
cm3 = UoM(ModelData.get_id('product', 'uom_cubic_centimeter'))
kg = UoM(ModelData.get_id('product', 'uom_kilogram'))
volume = round(UoM.compute_qty(
shipment.volume_uom, shipment.volume, cm3, round=False))
weight = round(UoM.compute_qty(
shipment.weight_uom, shipment.weight, kg, round=False), 2)
return {
'generalShipmentData': {
'identificationNumber': shipment.number,
'sendingDepot': credential.depot,
'product': shipment.carrier.dpd_product,
'mpsVolume': int(volume),
'mpsWeight': int(weight * 100),
'sender': self.shipping_party(
shipment.company.party,
shipment.shipping_warehouse.address),
'recipient': self.shipping_party(
shipment.shipping_to, shipment.shipping_to_address),
},
'parcels': [self.get_parcel(shipment, p) for p in packages],
'productAndServiceData': self.get_product_and_service(shipment),
}
def get_product_and_service(self, shipment):
return {
'orderType': 'consignment',
**self.get_notification(shipment),
}
def get_notification(self, shipment, usage=None):
carrier = shipment.carrier
if not carrier.dpd_notification:
return {}
party = shipment.shipping_to
if party and party.lang:
lang_code = party.lang.code
else:
lang_code = Transaction().language
lang_code = lang_code.upper()
channel2type = {
'sms': {'mobile'},
}
channels = [
(1, 'email'),
(3, 'sms'),
]
if carrier.dpd_notification == 'sms':
channels = reversed(channels)
for channel_id, channel in channels:
mechanism = party.contact_mechanism_get(
channel2type.get(channel, channel), usage=usage)
if not mechanism:
continue
value = mechanism.value
if len(value) > 50:
continue
return {
'predict': {
'channel': channel_id,
'value': value,
'language': lang_code,
},
}
return {}
class CreateDPDShipping_Customs(metaclass=PoolMeta):
__name__ = 'stock.shipment.create_shipping.dpd'
def get_product_and_service(self, shipment):
pool = Pool()
Date = pool.get('ir.date')
Currency = pool.get('currency.currency')
with Transaction().set_context(company=shipment.company.id):
today = Date.today()
product_and_service = super().get_product_and_service(shipment)
if shipment.customs_international:
invoice_date = shipment.effective_date or today
currency, = {m.currency for m in shipment.customs_moves}
amount = sum(
Currency.compute(
curr, Decimal(str(v['quantity'])) * price, currency,
round=False)
for (product, price, curr, _), v in
shipment.customs_products.items())
international = {
'parcelType': 0,
'customsAmount': int(
amount.quantize(Decimal('.01')) * Decimal(100)),
'customsCurrency': currency.code,
'customsTerms': self.get_customs_terms(shipment),
'customsPaper': 'A',
'customsInvoice': shipment.number[:20],
'customsInvoiceDate': invoice_date.strftime('%Y%m%d'),
}
if customs_agent := shipment.customs_agent:
international.update({
'commercialInvoiceConsigneeVatNumber': (
customs_agent.tax_identifier.code)[:20],
'commercialInvoiceConsignee': self.shipping_party(
customs_agent.party,
customs_agent.address,
with_contact=True),
})
if shipment.tax_identifier:
international['commercialInvoiceConsignorVatNumber'] = (
shipment.tax_identifier.code[:17])
international['commercialInvoiceConsignor'] = self.shipping_party(
shipment.company.party, shipment.customs_from_address)
international['additionalInvoiceLines'] = [
{'customsInvoicePosition': i,
**self.get_international_invoice_line(shipment, *k, **v)}
for i, (k, v) in enumerate(
shipment.customs_products.items(), 1)]
international['numberOfArticle'] = len(
international['additionalInvoiceLines'])
product_and_service['international'] = international
return product_and_service
def get_customs_terms(self, shipment):
if shipment and shipment.incoterm:
if shipment.incoterm.code == 'DAP':
return '01'
elif shipment.incoterm.code == 'DDP':
return '03'
elif shipment.incoterm.code == 'EXW':
return '05'
def get_international_invoice_line(
self, shipment, product, price, currency, unit, quantity, weight):
tariff_code = product.get_tariff_code({
'date': shipment.effective_date or shipment.planned_date,
'country': (
shipment.customs_to_country.id
if shipment.customs_to_country else None),
})
weight = round(weight, 2)
value = price * Decimal(str(quantity))
if not quantity.is_integer():
quantity = 1
return {
'quantityItems': int(quantity),
'customsContent': product.name[:200],
'customsTarif': tariff_code.code if tariff_code else None,
'customsAmountLine': int(
value.quantize(Decimal('.01')) * Decimal(100)),
'customsOrigin': (
product.country_of_origin.code_numeric
if product.country_of_origin else None),
'customsGrossWeight': int(weight * 100),
}

View File

@@ -0,0 +1,11 @@
<?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>
<record model="ir.action.wizard" id="act_create_shipping_dpd_wizard">
<field name="name">Create DPD Shipping for Packages</field>
<field name="wiz_name">stock.shipment.create_shipping.dpd</field>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,2 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.

View File

@@ -0,0 +1,224 @@
========================================
Stock Package Shipping with DPD scenario
========================================
Imports::
>>> import os
>>> from decimal import Decimal
>>> from proteus import Model
>>> from trytond.modules.account.tests.tools import (
... create_chart, create_fiscalyear, get_accounts)
>>> from trytond.modules.account_invoice.tests.tools import (
... create_payment_term, set_fiscalyear_invoice_sequences)
>>> from trytond.modules.company.tests.tools import create_company, get_company
>>> from trytond.tests.tools import activate_modules
Activate modules::
>>> config = activate_modules(
... ['stock_package_shipping_dpd', 'sale', 'sale_shipment_cost'],
... create_company, create_chart)
Get company::
>>> company = get_company()
Create fiscal year::
>>> fiscalyear = set_fiscalyear_invoice_sequences(create_fiscalyear())
>>> fiscalyear.click('create_period')
Get accounts::
>>> accounts = get_accounts()
>>> revenue = accounts['revenue']
>>> expense = accounts['expense']
Create a payment term::
>>> payment_term = create_payment_term()
>>> payment_term.save()
Create parties::
>>> Party = Model.get('party.party')
>>> Country = Model.get('country.country')
>>> belgium = Country(code='BE', name='Belgium')
>>> belgium.save()
>>> france = Country(code='FR', name='France')
>>> france.save()
>>> customer = Party(name='Customer')
>>> customer.save()
>>> customer_address = customer.addresses.new()
>>> customer_address.street = 'Champs élysées'
>>> customer_address.postal_code = '75008'
>>> customer_address.city = 'Paris'
>>> customer_address.country = france
>>> customer_address.save()
>>> customer_phone = customer.contact_mechanisms.new(type='mobile')
>>> customer_phone.value = '+33 93 842 8862'
>>> customer_phone.save()
Set the warehouse address::
>>> Address = Model.get('party.address')
>>> Location = Model.get('stock.location')
>>> warehouse, = Location.find([('type', '=', 'warehouse')])
>>> company_address = Address()
>>> company_address.party = company.party
>>> company_address.street = '2 rue de la Centrale'
>>> company_address.postal_code = '4000'
>>> company_address.city = 'Sclessin'
>>> company_address.country = belgium
>>> company_address.save()
>>> company_phone = company.party.contact_mechanisms.new()
>>> company_phone.type = 'phone'
>>> company_phone.value = '+32 4 2522122'
>>> company_phone.save()
>>> warehouse.address = company_address
>>> warehouse.save()
Get some units::
>>> UoM = Model.get('product.uom')
>>> cm, = UoM.find([('symbol', '=', 'cm')])
>>> g, = UoM.find([('symbol', '=', 'g')])
Create account category::
>>> ProductCategory = Model.get('product.category')
>>> account_category = ProductCategory(name="Account Category")
>>> account_category.accounting = True
>>> account_category.account_expense = expense
>>> account_category.account_revenue = revenue
>>> account_category.save()
Create product::
>>> ProductUom = Model.get('product.uom')
>>> unit, = ProductUom.find([('name', '=', 'Unit')])
>>> ProductTemplate = Model.get('product.template')
>>> template = ProductTemplate()
>>> template.name = 'product'
>>> template.default_uom = unit
>>> template.type = 'goods'
>>> template.salable = True
>>> template.weight = 100
>>> template.weight_uom = g
>>> template.list_price = Decimal('10')
>>> template.account_category = account_category
>>> template.save()
>>> product, = template.products
Create an Inventory::
>>> Inventory = Model.get('stock.inventory')
>>> storage, = Location.find([
... ('code', '=', 'STO'),
... ])
>>> inventory = Inventory()
>>> inventory.location = storage
>>> inventory_line = inventory.lines.new(product=product)
>>> inventory_line.quantity = 100.0
>>> inventory_line.expected_quantity = 0.0
>>> inventory.click('confirm')
>>> inventory.state
'done'
Create Package Type::
>>> PackageType = Model.get('stock.package.type')
>>> box = PackageType(
... name='Box',
... length=10, length_uom=cm,
... height=8, height_uom=cm,
... width=5, width_uom=cm)
>>> box.save()
Create a DPD Carrier and the related credential::
>>> Carrier = Model.get('carrier')
>>> CarrierSelection = Model.get('carrier.selection')
>>> DPDCredential = Model.get('carrier.credential.dpd')
>>> credential = DPDCredential()
>>> credential.company = company
>>> credential.user_id = os.getenv('DPD_USER_ID')
>>> credential.password = os.getenv('DPD_PASSWORD')
>>> credential.server = 'testing'
>>> credential.save()
>>> carrier_product_template = ProductTemplate()
>>> carrier_product_template.name = 'DPD Delivery'
>>> carrier_product_template.default_uom = unit
>>> carrier_product_template.type = 'service'
>>> carrier_product_template.salable = True
>>> carrier_product_template.list_price = Decimal(20)
>>> carrier_product_template.account_category = account_category
>>> carrier_product_template.save()
>>> carrier_product, = carrier_product_template.products
>>> dpd = Party(name='DPD')
>>> dpd.save()
>>> carrier = Carrier()
>>> carrier.party = dpd
>>> carrier.carrier_product = carrier_product
>>> carrier.shipping_service = 'dpd'
>>> carrier.dpd_product = 'CL'
>>> carrier.dpd_output_format = 'PDF'
>>> carrier.dpd_paper_format = 'A6'
>>> carrier.dpd_notification = 'sms'
>>> carrier.save()
>>> catchall_selection = CarrierSelection(carrier=carrier)
>>> catchall_selection.save()
Create a sale and thus a shipment::
>>> Sale = Model.get('sale.sale')
>>> SaleLine = Model.get('sale.line')
>>> sale = Sale()
>>> sale.party = customer
>>> sale.shipment_address = customer_address
>>> sale.payment_term = payment_term
>>> sale.invoice_method = 'order'
>>> sale.carrier = carrier
>>> sale_line = sale.lines.new()
>>> sale_line.product = product
>>> sale_line.quantity = 2.0
>>> sale.click('quote')
>>> sale.click('confirm')
>>> sale.click('process')
Create the packs and ship the shipment::
>>> Package = Model.get('stock.package')
>>> shipment, = sale.shipments
>>> shipment.click('assign_try')
>>> shipment.click('pick')
>>> pack = shipment.packages.new()
>>> pack.type = box
>>> pack_move, = pack.moves.find([])
>>> pack.moves.append(pack_move)
>>> shipment.click('pack')
>>> create_shipping = shipment.click('create_shipping')
>>> shipment.reload()
>>> bool(shipment.shipping_reference)
True
>>> pack, = shipment.root_packages
>>> pack.shipping_label is not None
True
>>> pack.shipping_label_mimetype
'application/pdf'
>>> pack.shipping_reference is not None
True
>>> pack.shipping_tracking_url
'https://tracking.dpd.de/status/...'
>>> pack.shipping_tracking_url.endswith(pack.shipping_reference)
True

View File

@@ -0,0 +1,200 @@
======================================================
Stock Package Shipping with DPD International Scenario
======================================================
Imports::
>>> import os
>>> from decimal import Decimal
>>> from proteus import Model
>>> from trytond.modules.company.tests.tools import create_company, get_company
>>> from trytond.tests.tools import activate_modules, assertEqual
Activate modules::
>>> config = activate_modules(
... ['stock_package_shipping_dpd', 'stock_shipment_customs', 'incoterm'],
... create_company)
>>> Address = Model.get('party.address')
>>> Agent = Model.get('customs.agent')
>>> AgentSelection = Model.get('customs.agent.selection')
>>> Carrier = Model.get('carrier')
>>> Country = Model.get('country.country')
>>> DPDCredential = Model.get('carrier.credential.dpd')
>>> Incoterm = Model.get('incoterm.incoterm')
>>> Location = Model.get('stock.location')
>>> Package = Model.get('stock.package')
>>> PackageType = Model.get('stock.package.type')
>>> Party = Model.get('party.party')
>>> ProductTemplate = Model.get('product.template')
>>> Shipment = Model.get('stock.shipment.out')
>>> TariffCode = Model.get('customs.tariff.code')
>>> UoM = Model.get('product.uom')
Get company::
>>> company = get_company()
Create countries::
>>> belgium = Country(code='BE', name="Belgium")
>>> belgium.save()
>>> switzerland = Country(code='CH', name="Switerland")
>>> switzerland.save()
>>> taiwan = Country(code='TW', code_numeric='158', name="Taiwan")
>>> taiwan.save()
Create parties::
>>> customer = Party(name="Customer")
>>> customer_address, = customer.addresses
>>> customer_address.street = "Pfistergasse 17"
>>> customer_address.postal_code = "6003"
>>> customer_address.city = "Lucerna"
>>> customer_address.country = switzerland
>>> customer_phone = customer.contact_mechanisms.new()
>>> customer_phone.type = 'phone'
>>> customer_phone.value = "+(41) (041) 410-62-66"
>>> customer_email = customer.contact_mechanisms.new()
>>> customer_email.type = 'email'
>>> customer_email.value = 'customer@example.com'
>>> customer.save()
>>> agent_party = Party(name="Agent")
>>> agent_address, = agent_party.addresses
>>> agent_address.street = "Gerechtigkeitsgasse 53"
>>> agent_address.postal_code = "3011"
>>> agent_address.city = "Berna"
>>> agent_address.country = switzerland
>>> agent_identifier = agent_party.identifiers.new()
>>> agent_identifier.type = 'ch_vat'
>>> agent_identifier.code = "CHE-123.456.788 IVA"
>>> agent_email = agent_party.contact_mechanisms.new()
>>> agent_email.type = 'email'
>>> agent_email.value = 'agent@example.com'
>>> agent_phone = agent_party.contact_mechanisms.new()
>>> agent_phone.type = 'phone'
>>> agent_phone.value = '+(41) (041) 745-55-28'
>>> agent_party.save()
>>> agent = Agent(party=agent_party)
>>> agent.save()
>>> AgentSelection(to_country=switzerland, agent=agent).save()
Set the warehouse address::
>>> warehouse, = Location.find([('type', '=', 'warehouse')])
>>> company_address = Address()
>>> company_address.party = company.party
>>> company_address.street = '2 rue de la Centrale'
>>> company_address.postal_code = '4000'
>>> company_address.city = 'Sclessin'
>>> company_address.country = belgium
>>> company_address.save()
>>> company_phone = company.party.contact_mechanisms.new()
>>> company_phone.type = 'phone'
>>> company_phone.value = '+32 4 2522122'
>>> company_phone.save()
>>> warehouse.address = company_address
>>> warehouse.save()
Get some units::
>>> unit, = UoM.find([('name', '=', "Unit")], limit=1)
>>> cm, = UoM.find([('name', '=', "Centimeter")], limit=1)
>>> gram, = UoM.find([('name', '=', "Gram")], limit=1)
Create tariff::
>>> tariff_code = TariffCode(code='17039099')
>>> tariff_code.save()
Create product::
>>> template = ProductTemplate()
>>> template.name = 'product'
>>> template.default_uom = unit
>>> template.type = 'goods'
>>> template.weight = 100
>>> template.weight_uom = gram
>>> template.list_price = Decimal('10.0000')
>>> template.country_of_origin = taiwan
>>> _ = template.tariff_codes.new(tariff_code=tariff_code)
>>> template.save()
>>> product, = template.products
Create Package Type::
>>> box = PackageType(
... name='Box',
... length=10, length_uom=cm,
... height=8, height_uom=cm,
... width=5, width_uom=cm)
>>> box.save()
Create a DPD Carrier and the related credential::
>>> credential = DPDCredential()
>>> credential.company = company
>>> credential.user_id = os.getenv('DPD_USER_ID')
>>> credential.password = os.getenv('DPD_PASSWORD')
>>> credential.server = 'testing'
>>> credential.save()
>>> carrier_product_template = ProductTemplate()
>>> carrier_product_template.name = 'DPD Delivery'
>>> carrier_product_template.default_uom = unit
>>> carrier_product_template.type = 'service'
>>> carrier_product_template.list_price = Decimal(20)
>>> carrier_product_template.save()
>>> carrier_product, = carrier_product_template.products
>>> dpd = Party(name='DPD')
>>> dpd.save()
>>> carrier = Carrier()
>>> carrier.party = dpd
>>> carrier.carrier_product = carrier_product
>>> carrier.shipping_service = 'dpd'
>>> carrier.dpd_product = 'CL'
>>> carrier.dpd_output_format = 'PDF'
>>> carrier.dpd_paper_format = 'A6'
>>> carrier.dpd_notification = 'sms'
>>> carrier.save()
Create a shipment::
>>> shipment = Shipment()
>>> shipment.customer = customer
>>> shipment.carrier = carrier
>>> shipment.incoterm, = Incoterm.find([('code', '=', 'DAP')], limit=1)
>>> move = shipment.outgoing_moves.new()
>>> move.product = product
>>> move.unit = unit
>>> move.quantity = 2
>>> move.from_location = shipment.warehouse_output
>>> move.to_location = shipment.customer_location
>>> move.unit_price = Decimal('50.0000')
>>> move.currency = company.currency
>>> shipment.click('wait')
>>> assertEqual(shipment.customs_agent, agent)
>>> shipment.click('assign_force')
>>> shipment.click('pick')
>>> shipment.state
'picked'
Create the packs and ship the shipment::
>>> pack = shipment.packages.new()
>>> pack.type = box
>>> pack_move, = pack.moves.find([])
>>> pack.moves.append(pack_move)
>>> shipment.click('pack')
>>> shipment.state
'packed'
>>> create_shipping = shipment.click('create_shipping')
>>> shipment.reload()
>>> bool(shipment.shipping_reference)
True

View File

@@ -0,0 +1,12 @@
# 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.tests.test_tryton import ModuleTestCase
class StockPackageShippingDpdTestCase(ModuleTestCase):
'Test Stock Package Shipping Dpd module'
module = 'stock_package_shipping_dpd'
del ModuleTestCase

View File

@@ -0,0 +1,16 @@
# 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 os
from trytond.tests.test_tryton import TEST_NETWORK, load_doc_tests
def load_tests(*args, **kwargs):
if (not TEST_NETWORK
or not (os.getenv('DPD_USER_ID') and os.getenv('DPD_PASSWORD'))):
kwargs.setdefault('skips', set()).update([
'scenario_shipping_dpd.rst',
'scenario_stock_package_shipping_dpd_international.rst',
])
return load_doc_tests(__name__, __file__, *args, **kwargs)

View File

@@ -0,0 +1,35 @@
[tryton]
version=7.8.0
depends:
ir
res
party
product
stock
stock_shipment_measurements
stock_package
stock_package_shipping
extras_depend:
customs
incoterm
stock_shipment_customs
xml:
carrier.xml
stock.xml
message.xml
[register]
model:
carrier.CredentialDPD
carrier.Carrier
stock.Package
wizard:
stock.CreateShipping
stock.CreateDPDShipping
[register incoterm stock_shipment_customs]
wizard:
stock.CreateDPDShipping_Customs
[register_mixin]
stock.ShippingDPDMixin: trytond.modules.stock_package_shipping.stock.ShippingMixin

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. -->
<data>
<xpath expr="/form/field[@name='shipping_service']" position="after">
<separator string="DPD" colspan="4" id="dpd"/>
<label name="dpd_product"/>
<field name="dpd_product"/>
<label name="dpd_notification"/>
<field name="dpd_notification"/>
<label name="dpd_output_format"/>
<field name="dpd_output_format"/>
<label name="dpd_paper_format"/>
<field name="dpd_paper_format"/>
</xpath>
</data>

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. -->
<form cursor="server">
<label name="company"/>
<field name="company"/>
<label name="sequence"/>
<field name="sequence"/>
<label name="server"/>
<field name="server"/>
<separator string="Credential Information" colspan="4" id="credential_info"/>
<label name="user_id"/>
<field name="user_id"/>
<label name="password"/>
<field name="password" widget="password"/>
</form>

View File

@@ -0,0 +1,8 @@
<?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. -->
<tree sequence="sequence">
<field name="company" expand="1"/>
<field name="user_id" expand="2"/>
<field name="server"/>
</tree>