[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:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user