[IMP] delivery_purolator: declared value and signature required

This commit is contained in:
Jared Kipe
2022-09-21 20:04:32 +00:00
parent 940f1e3408
commit 36b28cde42
2 changed files with 63 additions and 41 deletions

View File

@@ -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'))

View File

@@ -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