[FIX] delivery: shipping carrier is set after delivery generated

Before this commit
==================
when SO is confirmed and Delivery is created then add the shipping method
in SO, in this case, the shipping carrier is not set in the existing undelivered
delivery of that SO.

After this commit
=================
So in this commit, we set the shipping carrier for undelivered delivery.

taskId - 2946360

closes odoo/odoo#121363

X-original-commit: 51523c0dbf6ce9dd1a1ff35e03fa6a51267da14b
Signed-off-by: Tiffany Chang <tic@odoo.com>
This commit is contained in:
kir-odoo
2023-05-15 11:41:57 +02:00
committed by bat-odoo
parent 2b14e3148e
commit 88bcd855ae
2 changed files with 58 additions and 0 deletions
+4
View File
@@ -59,6 +59,10 @@ class SaleOrder(models.Model):
self._remove_delivery_line()
for order in self:
order.carrier_id = carrier.id
if order.state in ('sale', 'done'):
pending_deliveries = order.picking_ids.filtered(
lambda p: p.state not in ('done', 'cancel') and not any(m.origin_returned_move_id for m in p.move_ids))
pending_deliveries.carrier_id = carrier.id
order._create_delivery_line(carrier, amount)
return True
@@ -181,3 +181,57 @@ class StockMoveInvoice(AccountTestInvoicingCommon):
choose_delivery_carrier.button_confirm()
self.assertEqual(so.invoice_status, 'no', 'The status should still be "Nothing To Invoice"')
def test_delivery_carrier_from_confirmed_so(self):
"""Test if adding shipping method in sale order after confirmation
will add it in pickings too"""
sale_order = self.SaleOrder.create({
"partner_id": self.partner_18.id,
"partner_invoice_id": self.partner_18.id,
"partner_shipping_id": self.partner_18.id,
"order_line": [(0, 0, {
"name": "Cable Management Box",
"product_id": self.product_cable_management_box.id,
"product_uom_qty": 2,
"product_uom": self.product_uom_unit.id,
"price_unit": 750.00,
})],
})
sale_order.action_confirm()
sale_order.picking_ids.move_ids.quantity_done = 2
sale_order.picking_ids.button_validate()
# Return picking
return_form = Form(self.env["stock.return.picking"].with_context(active_id=sale_order.picking_ids.id, active_model="stock.picking"))
return_wizard = return_form.save()
action = return_wizard.create_returns()
return_picking = self.env["stock.picking"].browse(action["res_id"])
# add new product so new picking is created
sale_order.write({
"order_line": [(0, 0, {
"name": "Another product to deliver",
"product_id": self.product_11.id,
"product_uom_qty": 2,
"product_uom": self.product_uom_unit.id,
"price_unit": 750.00,
})],
})
# Add delivery cost in Sales order
delivery_wizard = Form(self.env["choose.delivery.carrier"].with_context({
"default_order_id": sale_order.id,
"default_carrier_id": self.normal_delivery.id,
}))
choose_delivery_carrier = delivery_wizard.save()
choose_delivery_carrier.button_confirm()
# Check the carrier in picking after confirm sale order
delivery_for_product_11 = sale_order.picking_ids.filtered(lambda p: self.product_11 in p.move_ids.product_id)
self.assertEqual(delivery_for_product_11.carrier_id, self.normal_delivery, "The shipping method should be set in pending deliveries.")
done_delivery = sale_order.picking_ids.filtered(lambda p: p.state == "done")
self.assertFalse(done_delivery.carrier_id.id, "The shipping method should not be set in done deliveries.")
self.assertFalse(return_picking.carrier_id.id, "The shipping method should not set in return pickings")