Skip to content
Snippets Groups Projects
Commit 963b82c3 authored by kir-odoo's avatar kir-odoo Committed by bat-odoo
Browse files

[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#120966

X-original-commit: 58f9139f
Signed-off-by: default avatarTiffany Chang <tic@odoo.com>
parent dead6731
No related branches found
No related tags found
No related merge requests found
......@@ -61,6 +61,10 @@ class SaleOrder(models.Model):
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_lines))
pending_deliveries.carrier_id = carrier.id
order._create_delivery_line(carrier, amount)
return True
......
......@@ -185,3 +185,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_lines.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_lines.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")
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment