mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
[IMP] delivery_purolator: declared value and signature required
This commit is contained in:
@@ -7,6 +7,7 @@ import logging
|
|||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
# 2022-09-21 - US Methods are known to rate, but cannot ship without additional customs/documents
|
||||||
PUROLATOR_SERVICES = [
|
PUROLATOR_SERVICES = [
|
||||||
('PurolatorExpress9AM', 'Purolator Express 9AM'),
|
('PurolatorExpress9AM', 'Purolator Express 9AM'),
|
||||||
('PurolatorExpress10:30AM', 'Purolator Express 10:30AM'),
|
('PurolatorExpress10:30AM', 'Purolator Express 10:30AM'),
|
||||||
@@ -36,39 +37,41 @@ PUROLATOR_SERVICES = [
|
|||||||
('PurolatorQuickShipEnvelope', 'Purolator Quick Ship Envelope'),
|
('PurolatorQuickShipEnvelope', 'Purolator Quick Ship Envelope'),
|
||||||
('PurolatorQuickShipPack', 'Purolator Quick Ship Pack'),
|
('PurolatorQuickShipPack', 'Purolator Quick Ship Pack'),
|
||||||
('PurolatorQuickShipBox', 'Purolator Quick Ship Box'),
|
('PurolatorQuickShipBox', 'Purolator Quick Ship Box'),
|
||||||
('PurolatorExpressU.S.', 'Purolator Express U.S.'),
|
# 2022-09-21 - US Methods are known to rate, but cannot ship without additional customs/documents
|
||||||
('PurolatorExpressU.S.9AM', 'Purolator Express U.S. 9AM'),
|
# ('PurolatorExpressU.S.', 'Purolator Express U.S.'),
|
||||||
('PurolatorExpressU.S.10:30AM', 'Purolator Express U.S. 10:30AM'),
|
# ('PurolatorExpressU.S.9AM', 'Purolator Express U.S. 9AM'),
|
||||||
('PurolatorExpressU.S.12:00', 'Purolator Express U.S. 12:00'),
|
# ('PurolatorExpressU.S.10:30AM', 'Purolator Express U.S. 10:30AM'),
|
||||||
('PurolatorExpressEnvelopeU.S.', 'Purolator Express Envelope U.S.'),
|
# ('PurolatorExpressU.S.12:00', 'Purolator Express U.S. 12:00'),
|
||||||
('PurolatorExpressU.S.Envelope9AM', 'Purolator Express U.S. Envelope 9AM'),
|
# ('PurolatorExpressEnvelopeU.S.', 'Purolator Express Envelope U.S.'),
|
||||||
('PurolatorExpressU.S.Envelope10:30AM', 'Purolator Express U.S. Envelope 10:30AM'),
|
# ('PurolatorExpressU.S.Envelope9AM', 'Purolator Express U.S. Envelope 9AM'),
|
||||||
('PurolatorExpressU.S.Envelope12:00', 'Purolator Express U.S. Envelope 12:00'),
|
# ('PurolatorExpressU.S.Envelope10:30AM', 'Purolator Express U.S. Envelope 10:30AM'),
|
||||||
('PurolatorExpressPackU.S.', 'Purolator Express Pack U.S.'),
|
# ('PurolatorExpressU.S.Envelope12:00', 'Purolator Express U.S. Envelope 12:00'),
|
||||||
('PurolatorExpressU.S.Pack9AM', 'Purolator Express U.S. Pack 9AM'),
|
# ('PurolatorExpressPackU.S.', 'Purolator Express Pack U.S.'),
|
||||||
('PurolatorExpressU.S.Pack10:30AM', 'Purolator Express U.S. Pack 10:30AM'),
|
# ('PurolatorExpressU.S.Pack9AM', 'Purolator Express U.S. Pack 9AM'),
|
||||||
('PurolatorExpressU.S.Pack12:00', 'Purolator Express U.S. Pack 12:00'),
|
# ('PurolatorExpressU.S.Pack10:30AM', 'Purolator Express U.S. Pack 10:30AM'),
|
||||||
('PurolatorExpressBoxU.S.', 'Purolator Express Box U.S.'),
|
# ('PurolatorExpressU.S.Pack12:00', 'Purolator Express U.S. Pack 12:00'),
|
||||||
('PurolatorExpressU.S.Box9AM', 'Purolator Express U.S. Box 9AM'),
|
# ('PurolatorExpressBoxU.S.', 'Purolator Express Box U.S.'),
|
||||||
('PurolatorExpressU.S.Box10:30AM', 'Purolator Express U.S. Box 10:30AM'),
|
# ('PurolatorExpressU.S.Box9AM', 'Purolator Express U.S. Box 9AM'),
|
||||||
('PurolatorExpressU.S.Box12:00', 'Purolator Express U.S. Box 12:00'),
|
# ('PurolatorExpressU.S.Box10:30AM', 'Purolator Express U.S. Box 10:30AM'),
|
||||||
('PurolatorGroundU.S.', 'Purolator Ground U.S.'),
|
# ('PurolatorExpressU.S.Box12:00', 'Purolator Express U.S. Box 12:00'),
|
||||||
('PurolatorExpressInternational', 'Purolator Express International'),
|
# ('PurolatorGroundU.S.', 'Purolator Ground U.S.'),
|
||||||
('PurolatorExpressInternational9AM', 'Purolator Express International 9AM'),
|
# 2022-09-21 - International Methods are known to rate
|
||||||
('PurolatorExpressInternational10:30AM', 'Purolator Express International 10:30AM'),
|
# ('PurolatorExpressInternational', 'Purolator Express International'),
|
||||||
('PurolatorExpressInternational12:00', 'Purolator Express International 12:00'),
|
# ('PurolatorExpressInternational9AM', 'Purolator Express International 9AM'),
|
||||||
('PurolatorExpressEnvelopeInternational', 'Purolator Express Envelope International'),
|
# ('PurolatorExpressInternational10:30AM', 'Purolator Express International 10:30AM'),
|
||||||
('PurolatorExpressInternationalEnvelope9AM', 'Purolator Express International Envelope 9AM'),
|
# ('PurolatorExpressInternational12:00', 'Purolator Express International 12:00'),
|
||||||
('PurolatorExpressInternationalEnvelope10:30AM', 'Purolator Express International Envelope 10:30AM'),
|
# ('PurolatorExpressEnvelopeInternational', 'Purolator Express Envelope International'),
|
||||||
('PurolatorExpressInternationalEnvelope12:00', 'Purolator Express International Envelope 12:00'),
|
# ('PurolatorExpressInternationalEnvelope9AM', 'Purolator Express International Envelope 9AM'),
|
||||||
('PurolatorExpressPackInternational', 'Purolator Express Pack International'),
|
# ('PurolatorExpressInternationalEnvelope10:30AM', 'Purolator Express International Envelope 10:30AM'),
|
||||||
('PurolatorExpressInternationalPack9AM', 'Purolator Express International Pack 9AM'),
|
# ('PurolatorExpressInternationalEnvelope12:00', 'Purolator Express International Envelope 12:00'),
|
||||||
('PurolatorExpressInternationalPack10:30AM', 'Purolator Express International Pack 10:30AM'),
|
# ('PurolatorExpressPackInternational', 'Purolator Express Pack International'),
|
||||||
('PurolatorExpressInternationalPack12:00', 'Purolator Express International Pack 12:00'),
|
# ('PurolatorExpressInternationalPack9AM', 'Purolator Express International Pack 9AM'),
|
||||||
('PurolatorExpressBoxInternational', 'Purolator Express Box International'),
|
# ('PurolatorExpressInternationalPack10:30AM', 'Purolator Express International Pack 10:30AM'),
|
||||||
('PurolatorExpressInternationalBox9AM', 'Purolator Express International Box 9AM'),
|
# ('PurolatorExpressInternationalPack12:00', 'Purolator Express International Pack 12:00'),
|
||||||
('PurolatorExpressInternationalBox10:30AM', 'Purolator Express International Box 10:30AM'),
|
# ('PurolatorExpressBoxInternational', 'Purolator Express Box International'),
|
||||||
('PurolatorExpressInternationalBox12:00', 'Purolator Express International Box 12:00'),
|
# ('PurolatorExpressInternationalBox9AM', 'Purolator Express International Box 9AM'),
|
||||||
|
# ('PurolatorExpressInternationalBox10:30AM', 'Purolator Express International Box 10:30AM'),
|
||||||
|
# ('PurolatorExpressInternationalBox12:00', 'Purolator Express International Box 12:00'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@@ -145,6 +148,28 @@ class ProviderPurolator(models.Model):
|
|||||||
request.PaymentInformation.PaymentType = 'ThirdParty'
|
request.PaymentInformation.PaymentType = 'ThirdParty'
|
||||||
request.PaymentInformation.BillingAccountNumber = third_party_account
|
request.PaymentInformation.BillingAccountNumber = third_party_account
|
||||||
|
|
||||||
|
def _purolator_shipment_fill_options(self, request, picking=None, order=None, packages=None):
|
||||||
|
# Signature can come from any package/packages
|
||||||
|
require_signature = False
|
||||||
|
if packages:
|
||||||
|
# if ANY package has it
|
||||||
|
require_signature = any(packages.mapped('require_signature'))
|
||||||
|
else:
|
||||||
|
require_signature = self.get_signature_required(order=order, picking=picking)
|
||||||
|
# when we support international, there is also ResidentialSignatureIntl (and AdultSignatureRequired)
|
||||||
|
request.ResidentialSignatureDomestic = 'true' if require_signature else 'false'
|
||||||
|
|
||||||
|
declared_value = 0.0
|
||||||
|
if packages:
|
||||||
|
declared_value = sum(s or 0.0 for s in packages.mapped('declared_value'))
|
||||||
|
else:
|
||||||
|
declared_value = self.get_insurance_value(picking=picking, order=order)
|
||||||
|
if declared_value:
|
||||||
|
request.DeclaredValue = str(round(declared_value, 2))
|
||||||
|
|
||||||
|
request.DeclaredValue = str(self.get_insurance_value())
|
||||||
|
# _logger.info(' _purolator_shipment_fill_options set sig.req. %s set declared val. %s' % (require_signature, declared_value))
|
||||||
|
|
||||||
def _purolator_rate_shipment_multi_package(self, order=None, picking=None, package=None):
|
def _purolator_rate_shipment_multi_package(self, order=None, picking=None, package=None):
|
||||||
service = self._purolator_service()
|
service = self._purolator_service()
|
||||||
third_party = self.purolator_third_party(order=order, picking=picking)
|
third_party = self.purolator_third_party(order=order, picking=picking)
|
||||||
@@ -175,6 +200,7 @@ class ProviderPurolator(models.Model):
|
|||||||
service.estimate_shipment_add_picking_packages(shipment, self, picking, package)
|
service.estimate_shipment_add_picking_packages(shipment, self, picking, package)
|
||||||
|
|
||||||
self._purolator_shipment_fill_payor(shipment, order=order, picking=picking)
|
self._purolator_shipment_fill_payor(shipment, order=order, picking=picking)
|
||||||
|
self._purolator_shipment_fill_options(shipment, order=order, picking=picking, packages=package)
|
||||||
|
|
||||||
shipment_res = service.get_full_estimate(shipment)
|
shipment_res = service.get_full_estimate(shipment)
|
||||||
|
|
||||||
@@ -294,15 +320,8 @@ class ProviderPurolator(models.Model):
|
|||||||
|
|
||||||
service.shipment_add_picking_packages(shipment, self, picking, picking_packages)
|
service.shipment_add_picking_packages(shipment, self, picking, picking_packages)
|
||||||
|
|
||||||
# TODO package level signature and insurance....
|
|
||||||
# IF we cannot do this at the package level, then we must implement it here.
|
|
||||||
# We may need to warn that all packages will follow the same rule.
|
|
||||||
# //Define OptionsInformation
|
|
||||||
# //ResidentialSignatureDomestic
|
|
||||||
# $request->Shipment->PackageInformation->OptionsInformation->Options->OptionIDValuePair->ID = "ResidentialSignatureDomestic";
|
|
||||||
# $request->Shipment->PackageInformation->OptionsInformation->Options->OptionIDValuePair->Value = "true";
|
|
||||||
|
|
||||||
self._purolator_shipment_fill_payor(shipment, picking=picking)
|
self._purolator_shipment_fill_payor(shipment, picking=picking)
|
||||||
|
self._purolator_shipment_fill_options(shipment, picking=picking, packages=picking_packages)
|
||||||
|
|
||||||
shipment_res = service.shipment_create(shipment,
|
shipment_res = service.shipment_create(shipment,
|
||||||
printer_type=('Regular' if self.purolator_label_file_type == 'PDF' else 'Thermal'))
|
printer_type=('Regular' if self.purolator_label_file_type == 'PDF' else 'Thermal'))
|
||||||
|
|||||||
@@ -57,6 +57,9 @@ class TestPurolator(TransactionCase):
|
|||||||
# reconfigure this method so that we can set its default package to one that needs a service code
|
# reconfigure this method so that we can set its default package to one that needs a service code
|
||||||
self.delivery_carrier_ground = self.env.ref('delivery_purolator.purolator_ground')
|
self.delivery_carrier_ground = self.env.ref('delivery_purolator.purolator_ground')
|
||||||
self.delivery_carrier_ground.purolator_default_package_type_id = self.env.ref('delivery_purolator.purolator_packaging_large_package')
|
self.delivery_carrier_ground.purolator_default_package_type_id = self.env.ref('delivery_purolator.purolator_packaging_large_package')
|
||||||
|
# set a VERY low requirement for signature
|
||||||
|
self.delivery_carrier_ground.automatic_insurance_value = 0.1
|
||||||
|
self.delivery_carrier_ground.automatic_sig_req_value = 0.1
|
||||||
|
|
||||||
def _so_pick_shipping(self):
|
def _so_pick_shipping(self):
|
||||||
# Regular Update Shipping functionality
|
# Regular Update Shipping functionality
|
||||||
|
|||||||
Reference in New Issue
Block a user