mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
[FIX] delivery_fedex_hibou,delivery_hibou,delivery_ups_hibou: FedEx per-warehouse account/meter, choose packaging 14
This commit is contained in:
@@ -38,6 +38,8 @@ class DeliveryFedex(models.Model):
|
||||
if not third_party_account.delivery_type == 'fedex':
|
||||
raise ValidationError('Non-FedEx Shipping Account indicated during FedEx shipment.')
|
||||
return third_party_account.name
|
||||
if picking and picking.picking_type_id.warehouse_id.fedex_account_number:
|
||||
return picking.picking_type_id.warehouse_id.fedex_account_number
|
||||
return self.fedex_account_number
|
||||
|
||||
def _get_fedex_account_number(self, order=None, picking=None):
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
from odoo import api, fields, models
|
||||
from odoo.tools.float_utils import float_compare
|
||||
from odoo.addons.stock.models.stock_move import PROCUREMENT_PRIORITIES
|
||||
from odoo.exceptions import UserError
|
||||
|
||||
@@ -272,27 +273,29 @@ class DeliveryCarrier(models.Model):
|
||||
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_declared_value = fields.Float(string='Declared Value')
|
||||
package_require_insurance = fields.Boolean(string='Require Insurance')
|
||||
package_require_signature = fields.Boolean(string='Require Signature')
|
||||
|
||||
def _default_package_declared_value(self):
|
||||
# guard for install
|
||||
if not self.env.context.get('active_id'):
|
||||
return 0.0
|
||||
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.model
|
||||
def default_get(self, fields_list):
|
||||
defaults = super().default_get(fields_list)
|
||||
if 'package_declared_value' in fields_list:
|
||||
picking = self.env['stock.picking'].browse(defaults.get('picking_id'))
|
||||
move_line_ids = picking.move_line_ids.filtered(lambda m:
|
||||
float_compare(m.qty_done, 0.0, precision_rounding=m.product_uom_id.rounding) > 0
|
||||
and not m.result_package_id
|
||||
)
|
||||
total_value = 0.0
|
||||
for ml in move_line_ids:
|
||||
qty = ml.product_uom_id._compute_quantity(ml.qty_done, ml.product_id.uom_id)
|
||||
total_value += qty * ml.product_id.standard_price
|
||||
defaults['package_declared_value'] = total_value
|
||||
return defaults
|
||||
|
||||
@api.onchange('package_declared_value')
|
||||
def _onchange_package_declared_value(self):
|
||||
picking = self.env['stock.picking'].browse(self.env.context['active_id'])
|
||||
picking = self.picking_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
|
||||
@@ -303,11 +306,30 @@ class ChooseDeliveryPackage(models.TransientModel):
|
||||
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,
|
||||
})
|
||||
def action_put_in_pack(self):
|
||||
# Copied because `delivery_package` is not retained by reference or returned...
|
||||
picking_move_lines = self.picking_id.move_line_ids
|
||||
if not self.picking_id.picking_type_id.show_reserved and not self.env.context.get('barcode_view'):
|
||||
picking_move_lines = self.picking_id.move_line_nosuggest_ids
|
||||
|
||||
move_line_ids = picking_move_lines.filtered(lambda ml:
|
||||
float_compare(ml.qty_done, 0.0, precision_rounding=ml.product_uom_id.rounding) > 0
|
||||
and not ml.result_package_id
|
||||
)
|
||||
if not move_line_ids:
|
||||
move_line_ids = picking_move_lines.filtered(lambda ml: float_compare(ml.product_uom_qty, 0.0,
|
||||
precision_rounding=ml.product_uom_id.rounding) > 0 and float_compare(ml.qty_done, 0.0,
|
||||
precision_rounding=ml.product_uom_id.rounding) == 0)
|
||||
|
||||
delivery_package = self.picking_id._put_in_pack(move_line_ids)
|
||||
# write shipping weight and product_packaging on 'stock_quant_package' if needed
|
||||
if self.delivery_packaging_id:
|
||||
delivery_package.packaging_id = self.delivery_packaging_id
|
||||
if self.shipping_weight:
|
||||
delivery_package.shipping_weight = self.shipping_weight
|
||||
# Hibou : Fill additional fields.
|
||||
delivery_package.write({
|
||||
'declared_value': self.package_declared_value,
|
||||
'require_insurance': self.package_require_insurance,
|
||||
'require_signature': self.package_require_signature,
|
||||
})
|
||||
|
||||
@@ -164,9 +164,10 @@ class StockPicking(models.Model):
|
||||
for carrier in carriers:
|
||||
carrier_packages = packages_with_carrier.filtered(lambda p: p.carrier_id == carrier)
|
||||
carrier.cancel_shipment(self, packages=carrier_packages)
|
||||
package_refs = ','.join(carrier_packages.mapped('carrier_tracking_ref'))
|
||||
msg = "Shipment %s cancelled" % package_refs
|
||||
picking.message_post(body=msg)
|
||||
# Above cancel should also say which are cancelled in chatter.
|
||||
# package_refs = ','.join(carrier_packages.mapped('carrier_tracking_ref'))
|
||||
# msg = "Shipment %s cancelled" % package_refs
|
||||
# picking.message_post(body=msg)
|
||||
carrier_packages.write({'carrier_tracking_ref': False})
|
||||
|
||||
pickings_without_package_tracking = self - pickings_with_package_tracking
|
||||
|
||||
@@ -26,7 +26,7 @@ class ProviderUPS(models.Model):
|
||||
if not third_party_account.delivery_type == 'ups':
|
||||
raise ValidationError('Non-UPS Shipping Account indicated during UPS shipment.')
|
||||
return True
|
||||
if order and self.ups_bill_my_account and order.ups_carrier_account:
|
||||
if order and order.ups_bill_my_account and order.partner_ups_carrier_account:
|
||||
return True
|
||||
return False
|
||||
|
||||
@@ -51,12 +51,12 @@ class ProviderUPS(models.Model):
|
||||
if not third_party_account.delivery_type == 'ups':
|
||||
raise ValidationError('Non-UPS Shipping Account indicated during UPS shipment.')
|
||||
return third_party_account.name
|
||||
if order and order.ups_carrier_account:
|
||||
return order.ups_carrier_account
|
||||
if order and order.partner_ups_carrier_account:
|
||||
return order.partner_ups_carrier_account
|
||||
if picking and picking.sale_id.partner_ups_carrier_account:
|
||||
return picking.sale_id.partner_ups_carrier_account
|
||||
if picking and picking.picking_type_id.warehouse_id.ups_shipper_number:
|
||||
return picking.picking_type_id.warehouse_id.ups_shipper_number
|
||||
if picking and picking.sale_id.ups_carrier_account:
|
||||
return picking.sale_id.ups_carrier_account
|
||||
return self.ups_shipper_number
|
||||
|
||||
def _get_ups_carrier_account(self, picking):
|
||||
@@ -127,7 +127,7 @@ class ProviderUPS(models.Model):
|
||||
'error_message': check_value,
|
||||
'warning_message': False}
|
||||
|
||||
ups_service_type = order.ups_service_type or self.ups_default_service_type
|
||||
ups_service_type = self.ups_default_service_type
|
||||
result = srm.get_shipping_price(
|
||||
shipment_info=shipment_info, packages=packages, shipper=shipper_company, ship_from=shipper_warehouse,
|
||||
ship_to=recipient, packaging_type=self.ups_default_packaging_id.shipper_package_code, service_type=ups_service_type,
|
||||
@@ -204,10 +204,7 @@ class ProviderUPS(models.Model):
|
||||
'itl_currency_code': self.env.user.company_id.currency_id.name,
|
||||
'phone': recipient.mobile or recipient.phone,
|
||||
}
|
||||
if picking.sale_id and picking.sale_id.carrier_id != picking.carrier_id:
|
||||
ups_service_type = picking.carrier_id.ups_default_service_type or picking.ups_service_type or superself.ups_default_service_type
|
||||
else:
|
||||
ups_service_type = picking.ups_service_type or superself.ups_default_service_type
|
||||
ups_service_type = picking.carrier_id.ups_default_service_type
|
||||
|
||||
# Hibou Delivery
|
||||
ups_carrier_account = superself._get_ups_carrier_account(picking)
|
||||
@@ -353,7 +350,7 @@ class ProviderUPS(models.Model):
|
||||
'warning_message': False,
|
||||
}]
|
||||
# We now use Shop if we send multi=True
|
||||
ups_service_type = (order.ups_service_type or self.ups_default_service_type) if order else self.ups_default_service_type
|
||||
ups_service_type = self.ups_default_service_type
|
||||
result = srm.get_shipping_price(
|
||||
shipment_info=shipment_info, packages=packages, shipper=shipper_company, ship_from=shipper_warehouse,
|
||||
ship_to=recipient, packaging_type=self.ups_default_packaging_id.shipper_package_code, service_type=ups_service_type,
|
||||
|
||||
@@ -388,9 +388,10 @@ def patched_set_package_detail(self, client, packages, packaging_type, ship_from
|
||||
if not package.PackageServiceOptions:
|
||||
package.PackageServiceOptions = self.factory_ns2.PackageServiceOptionsType()
|
||||
if not package.PackageServiceOptions.DeclaredValue:
|
||||
package.PackageServiceOptions.DeclaredValue = self.factory_ns2.InsuredValueType()
|
||||
# Shipping service
|
||||
# package.PackageServiceOptions.DeclaredValue = self.factory_ns2.PackageDeclaredValueType()
|
||||
if request_type == 'shipping':
|
||||
package.PackageServiceOptions.DeclaredValue = self.factory_ns2.PackageDeclaredValueType()
|
||||
else:
|
||||
package.PackageServiceOptions.DeclaredValue = self.factory_ns2.ShipperDeclaredValueType()
|
||||
package.PackageServiceOptions.DeclaredValue.MonetaryValue = p.insurance_value
|
||||
package.PackageServiceOptions.DeclaredValue.CurrencyCode = p.insurance_currency_code
|
||||
if p.signature_required:
|
||||
|
||||
Reference in New Issue
Block a user