diff --git a/delivery_hibou/__manifest__.py b/delivery_hibou/__manifest__.py
index a17ed470..a776fb28 100644
--- a/delivery_hibou/__manifest__.py
+++ b/delivery_hibou/__manifest__.py
@@ -1,7 +1,7 @@
{
'name': 'Delivery Hibou',
'summary': 'Adds underlying pinnings for things like "RMA Return Labels"',
- 'version': '11.0.1.2.0',
+ 'version': '11.0.1.2.1',
'author': "Hibou Corp.",
'category': 'Stock',
'license': 'AGPL-3',
diff --git a/delivery_hibou/models/delivery.py b/delivery_hibou/models/delivery.py
index b3318147..f4aeeff3 100644
--- a/delivery_hibou/models/delivery.py
+++ b/delivery_hibou/models/delivery.py
@@ -19,7 +19,7 @@ class DeliveryCarrier(models.Model):
# Utility
- def get_insurance_value(self, order=None, picking=None):
+ def get_insurance_value(self, order=None, picking=None, package=None):
value = 0.0
if order:
if order.order_line:
@@ -27,14 +27,17 @@ class DeliveryCarrier(models.Model):
else:
return value
if picking:
- value = picking.declared_value()
- if picking.require_insurance == 'no':
- value = 0.0
- elif picking.require_insurance == 'auto' and self.automatic_insurance_value and self.automatic_insurance_value > value:
+ value = picking.declared_value(package=package)
+ if package and not package.require_insurance:
value = 0.0
+ else:
+ if picking.require_insurance == 'no':
+ value = 0.0
+ elif picking.require_insurance == 'auto' and self.automatic_insurance_value and self.automatic_insurance_value > value:
+ value = 0.0
return value
- def get_signature_required(self, order=None, picking=None):
+ def get_signature_required(self, order=None, picking=None, package=None):
value = 0.0
if order:
if order.order_line:
@@ -42,11 +45,14 @@ class DeliveryCarrier(models.Model):
else:
return False
if picking:
- value = picking.declared_value()
- if picking.require_signature == 'no':
- return False
- elif picking.require_signature == 'yes':
- return True
+ value = picking.declared_value(package=package)
+ if package:
+ return package.require_signature
+ else:
+ if picking.require_signature == 'no':
+ return False
+ elif picking.require_signature == 'yes':
+ return True
return self.automatic_sig_req_value and value >= self.automatic_sig_req_value
def get_third_party_account(self, order=None, picking=None):
@@ -262,3 +268,44 @@ class DeliveryCarrier(models.Model):
})
return getattr(self, '%s_cancel_shipment' % self.delivery_type)(pickings)
+
+
+class ChooseDeliveryPackage(models.TransientModel):
+ _inherit = 'choose.delivery.package'
+
+ package_declared_value = fields.Float(string='Declared Value',
+ default=lambda self: self._default_package_declared_value())
+ package_require_insurance = fields.Boolean(string='Require Insurance')
+ package_require_signature = fields.Boolean(string='Require Signature')
+
+ def _default_package_declared_value(self):
+ if self.env.context.get('default_stock_quant_package_id'):
+ stock_quant_package = self.env['stock.quant.package'].browse(self.env.context['default_stock_quant_package_id'])
+ return stock_quant_package.package_declared_value
+ else:
+ picking_id = self.env['stock.picking'].browse(self.env.context['active_id'])
+ move_line_ids = [po for po in picking_id.move_line_ids if po.qty_done > 0 and not po.result_package_id]
+ total_value = sum([po.qty_done * po.product_id.standard_price for po in move_line_ids])
+ return total_value
+
+ @api.onchange('package_declared_value')
+ def _onchange_package_declared_value(self):
+ picking = self.env['stock.picking'].browse(self.env.context['active_id'])
+ value = self.package_declared_value
+ if picking.require_insurance == 'auto':
+ self.package_require_insurance = value and picking.carrier_id.automatic_insurance_value and value >= picking.carrier_id.automatic_insurance_value
+ else:
+ self.package_require_insurance = picking.require_insurance == 'yes'
+ if picking.require_signature == 'auto':
+ self.package_require_signature = value and picking.carrier_id.automatic_sig_req_value and value >= picking.carrier_id.automatic_sig_req_value
+ else:
+ self.package_require_signature = picking.require_signature == 'yes'
+
+ def put_in_pack(self):
+ super().put_in_pack()
+ if self.stock_quant_package_id:
+ self.stock_quant_package_id.write({
+ 'declared_value': self.package_declared_value,
+ 'require_insurance': self.package_require_insurance,
+ 'require_signature': self.package_require_signature,
+ })
diff --git a/delivery_hibou/models/stock.py b/delivery_hibou/models/stock.py
index 946f35cc..7aa55838 100644
--- a/delivery_hibou/models/stock.py
+++ b/delivery_hibou/models/stock.py
@@ -7,12 +7,18 @@ class StockQuantPackage(models.Model):
carrier_id = fields.Many2one('delivery.carrier', string='Carrier')
carrier_tracking_ref = fields.Char(string='Tracking Reference')
+ require_insurance = fields.Boolean(string='Require Insurance')
+ require_signature = fields.Boolean(string='Require Signature')
+ declared_value = fields.Float(string='Declared Value')
def _get_active_picking(self):
picking_id = self._context.get('active_id')
picking_model = self._context.get('active_model')
if not picking_id or picking_model != 'stock.picking':
- raise UserError('Cannot cancel package other than through shipment/picking.')
+ picking_id = self._context.get('picking_active_id')
+ picking_model = self._context.get('picking_active_model')
+ if not picking_id or picking_model != 'stock.picking':
+ raise UserError('Cannot cancel package other than through shipment/picking.')
return self.env['stock.picking'].browse(picking_id)
def send_to_shipper(self):
@@ -81,8 +87,10 @@ class StockPicking(models.Model):
res = super(StockPicking, self).create(values)
return res
- def declared_value(self):
+ def declared_value(self, package=None):
self.ensure_one()
+ if package:
+ return package.declared_value
cost = sum([(l.product_id.standard_price * l.qty_done) for l in self.move_line_ids] or [0.0])
if not cost:
# Assume Full Value
@@ -126,6 +134,8 @@ class StockPicking(models.Model):
tracking_numbers.append(tracking_number)
# Try to add tracking to the individual packages.
potential_tracking_numbers = tracking_number.split(',')
+ if len(potential_tracking_numbers) == 1:
+ potential_tracking_numbers = tracking_number.split('+') # UPS for example...
if len(potential_tracking_numbers) >= len(carrier_packages):
for t, p in zip(potential_tracking_numbers, carrier_packages):
p.carrier_tracking_ref = t
diff --git a/delivery_hibou/views/delivery_views.xml b/delivery_hibou/views/delivery_views.xml
index 47d5a848..a1e4015f 100644
--- a/delivery_hibou/views/delivery_views.xml
+++ b/delivery_hibou/views/delivery_views.xml
@@ -21,6 +21,11 @@
[('product_id', '=', False)]
+
+
+
+
+
diff --git a/delivery_hibou/views/stock_views.xml b/delivery_hibou/views/stock_views.xml
index 2eb0526c..8cbf343c 100644
--- a/delivery_hibou/views/stock_views.xml
+++ b/delivery_hibou/views/stock_views.xml
@@ -17,6 +17,9 @@
+
+
+
@@ -36,12 +39,12 @@
-
+
-
+