[IMP] delivery_purolator: multi handling, and rating

Now tested with Sale Order Planner and Delivery Planner.
This commit is contained in:
Jared Kipe
2022-09-20 02:56:15 +00:00
parent ea3d1dddab
commit e1ffd6ad09
2 changed files with 14 additions and 10 deletions

View File

@@ -103,10 +103,10 @@ class ProviderPurolator(models.Model):
if res.get('carrier') == self: if res.get('carrier') == self:
if downgrade_response: if downgrade_response:
return { return {
'success': True, 'success': res.get('success', True),
'price': res.get('price', 0.0), 'price': res.get('price', 0.0),
'error_message': False, 'error_message': res.get('error_message', False),
'warning_message': False, 'warning_message': res.get('warning_message', False),
} }
return res return res
return { return {
@@ -129,9 +129,9 @@ class ProviderPurolator(models.Model):
errors = response_body.ResponseInformation.Errors errors = response_body.ResponseInformation.Errors
if errors: if errors:
errors = errors.Error # unpack container node errors = errors.Error # unpack container node
puro_errors = '\n\n'.join(['%s - %s - %s' % (e.Code, e.AdditionalInformation, e.Description) for e in errors]) puro_errors = ['%s - %s - %s' % (e.Code, e.AdditionalInformation, e.Description) for e in errors]
if raise_class: if raise_class:
raise raise_class(_('Error(s) during Purolator Request:\n%s') % (puro_errors, )) raise raise_class(_('Error(s) during Purolator Request:\n%s') % ('\n\n'.join(puro_errors), ))
return puro_errors return puro_errors
def _purolator_shipment_fill_payor(self, request, picking=None, order=None): def _purolator_shipment_fill_payor(self, request, picking=None, order=None):
@@ -150,12 +150,9 @@ class ProviderPurolator(models.Model):
sender = self.get_shipper_warehouse(order=order, picking=picking) sender = self.get_shipper_warehouse(order=order, picking=picking)
receiver = self.get_recipient(order=order, picking=picking) receiver = self.get_recipient(order=order, picking=picking)
date_planned = fields.Date.today() date_planned = fields.Datetime.now()
if self.env.context.get('date_planned'): if self.env.context.get('date_planned'):
date_planned = self.env.context.get('date_planned') date_planned = self.env.context.get('date_planned')
if hasattr(date_planned, 'date'):
# this should be a datetime
date_planned = date_planned.date()
# create SOAP request to fill in # create SOAP request to fill in
shipment = service.estimate_shipment_request() shipment = service.estimate_shipment_request()
@@ -163,6 +160,8 @@ class ProviderPurolator(models.Model):
shipment.ShowAlternativeServicesIndicator = "true" shipment.ShowAlternativeServicesIndicator = "true"
# indicate when we will ship this for time in transit # indicate when we will ship this for time in transit
shipment.ShipmentDate = str(date_planned) shipment.ShipmentDate = str(date_planned)
if hasattr(date_planned, 'date'):
shipment.ShipmentDate = str(date_planned.date())
# populate origin information # populate origin information
self._purolator_fill_address(shipment.SenderInformation.Address, sender) self._purolator_fill_address(shipment.SenderInformation.Address, sender)
@@ -201,7 +200,7 @@ class ProviderPurolator(models.Model):
'error_message': False, 'error_message': False,
'warning_message': _('TotalCharge not found.') if price == 0.0 else False, 'warning_message': _('TotalCharge not found.') if price == 0.0 else False,
'date_planned': date_planned, 'date_planned': date_planned,
'date_delivered': fields.Date.to_date(shipment['ExpectedDeliveryDate']), 'date_delivered': fields.Datetime.to_datetime(shipment['ExpectedDeliveryDate']),
'transit_days': shipment['EstimatedTransitDays'], 'transit_days': shipment['EstimatedTransitDays'],
'service_code': shipment['ServiceID'], 'service_code': shipment['ServiceID'],
}) })
@@ -339,3 +338,6 @@ class ProviderPurolator(models.Model):
res.append(shipping_data) res.append(shipping_data)
return res return res
# TODO cancel shipment
# TODO track shipment

View File

@@ -15,6 +15,8 @@
<field name="purolator_activation_key" attrs="{'required': [('delivery_type', '=', 'purolator')]}"/> <field name="purolator_activation_key" attrs="{'required': [('delivery_type', '=', 'purolator')]}"/>
<field name="purolator_account_number" attrs="{'required': [('delivery_type', '=', 'purolator')]}"/> <field name="purolator_account_number" attrs="{'required': [('delivery_type', '=', 'purolator')]}"/>
<field name="purolator_service_type" attrs="{'required': [('delivery_type', '=', 'purolator')]}"/> <field name="purolator_service_type" attrs="{'required': [('delivery_type', '=', 'purolator')]}"/>
<field name="purolator_label_file_type" attrs="{'required': [('delivery_type', '=', 'purolator')]}"/>
<field name="package_by_field" />
<field name="purolator_default_package_type_id" attrs="{'required': [('delivery_type', '=', 'purolator')]}"/> <field name="purolator_default_package_type_id" attrs="{'required': [('delivery_type', '=', 'purolator')]}"/>
</group> </group>
</group> </group>