[IMP] rma: set rma to received on invoice delete.

Remove 'waiting_refund' rma state.
RMAs go from received to refunded.
When the linked refund is deleted the rma is set to received.
This commit is contained in:
Ernesto Tejeda
2020-09-15 16:04:43 -04:00
parent cc673918f2
commit d576afb058
3 changed files with 23 additions and 11 deletions

View File

@@ -21,11 +21,12 @@ class AccountInvoice(models.Model):
raise ValidationError( raise ValidationError(
_("There is at least one invoice lines whose quantity is " _("There is at least one invoice lines whose quantity is "
"less than the quantity specified in its linked RMA.")) "less than the quantity specified in its linked RMA."))
res = super().action_invoice_open() return super().action_invoice_open()
self.sudo().mapped('invoice_line_ids.rma_id').write(
{'state': 'refunded'} def unlink(self):
) rma = self.mapped('invoice_line_ids.rma_id')
return res rma.write({'state': 'received'})
return super().unlink()
class AccountInvoiceLine(models.Model): class AccountInvoiceLine(models.Model):

View File

@@ -164,7 +164,6 @@ class Rma(models.Model):
("draft", "Draft"), ("draft", "Draft"),
("confirmed", "Confirmed"), ("confirmed", "Confirmed"),
("received", "Received"), ("received", "Received"),
("waiting_refund", "Waiting for refund"),
("waiting_return", "Waiting for return"), ("waiting_return", "Waiting for return"),
("waiting_replacement", "Waiting for replacement"), ("waiting_replacement", "Waiting for replacement"),
("refunded", "Refunded"), ("refunded", "Refunded"),
@@ -402,7 +401,7 @@ class Rma(models.Model):
def _compute_can_be_locked(self): def _compute_can_be_locked(self):
for r in self: for r in self:
r.can_be_locked = (r.remaining_qty_to_done > 0 r.can_be_locked = (r.remaining_qty_to_done > 0
and r.state in ['received', 'waiting_refund', and r.state in ['received',
'waiting_return', 'waiting_return',
'waiting_replacement']) 'waiting_replacement'])
@@ -590,7 +589,7 @@ class Rma(models.Model):
rma.write({ rma.write({
'refund_line_id': line.id, 'refund_line_id': line.id,
'refund_id': refund.id, 'refund_id': refund.id,
'state': 'waiting_refund', 'state': 'refunded',
}) })
refund.message_post_with_view( refund.message_post_with_view(
'mail.message_origin_link', 'mail.message_origin_link',

View File

@@ -266,7 +266,7 @@ class TestRma(SavepointCase):
self.assertEqual(rma.refund_line_id.product_id, rma.product_id) self.assertEqual(rma.refund_line_id.product_id, rma.product_id)
self.assertEqual(rma.refund_line_id.quantity, 10) self.assertEqual(rma.refund_line_id.quantity, 10)
self.assertEqual(rma.refund_line_id.uom_id, rma.product_uom) self.assertEqual(rma.refund_line_id.uom_id, rma.product_uom)
self.assertEqual(rma.state, 'waiting_refund') self.assertEqual(rma.state, 'refunded')
self.assertFalse(rma.can_be_refunded) self.assertFalse(rma.can_be_refunded)
self.assertFalse(rma.can_be_returned) self.assertFalse(rma.can_be_returned)
self.assertFalse(rma.can_be_replaced) self.assertFalse(rma.can_be_replaced)
@@ -275,7 +275,6 @@ class TestRma(SavepointCase):
rma.refund_id.action_invoice_open() rma.refund_id.action_invoice_open()
rma.refund_line_id.quantity = 10 rma.refund_line_id.quantity = 10
rma.refund_id.action_invoice_open() rma.refund_id.action_invoice_open()
self.assertEqual(rma.state, 'refunded')
self.assertFalse(rma.can_be_refunded) self.assertFalse(rma.can_be_refunded)
self.assertFalse(rma.can_be_returned) self.assertFalse(rma.can_be_returned)
self.assertFalse(rma.can_be_replaced) self.assertFalse(rma.can_be_replaced)
@@ -311,6 +310,8 @@ class TestRma(SavepointCase):
ctx = dict(self.env.context) ctx = dict(self.env.context)
ctx.update(active_ids=all_rmas.ids, active_model='rma') ctx.update(active_ids=all_rmas.ids, active_model='rma')
action.with_context(ctx).run() action.with_context(ctx).run()
# After that all RMAs are in 'refunded' state
self.assertEqual(all_rmas.mapped('state'), ['refunded'] * 4)
# Two refunds were created # Two refunds were created
refund_1 = (rma_1 | rma_2 | rma_3).mapped('refund_id') refund_1 = (rma_1 | rma_2 | rma_3).mapped('refund_id')
refund_2 = rma_4.refund_id refund_2 = rma_4.refund_id
@@ -351,7 +352,6 @@ class TestRma(SavepointCase):
rma_2.refund_line_id.quantity = 15 rma_2.refund_line_id.quantity = 15
refund_1.action_invoice_open() refund_1.action_invoice_open()
refund_2.action_invoice_open() refund_2.action_invoice_open()
self.assertEqual(all_rmas.mapped('state'), ['refunded']*4)
def test_replace(self): def test_replace(self):
# Create, confirm and receive an RMA # Create, confirm and receive an RMA
@@ -636,3 +636,15 @@ class TestRma(SavepointCase):
self.assertEqual(new_rma.product_uom_qty + rma.product_uom_qty, 10) self.assertEqual(new_rma.product_uom_qty + rma.product_uom_qty, 10)
self.assertEqual(new_rma.move_id.quantity_done, 10) self.assertEqual(new_rma.move_id.quantity_done, 10)
self.assertEqual(new_rma.reception_move_id.quantity_done, 10) self.assertEqual(new_rma.reception_move_id.quantity_done, 10)
def test_rma_to_receive_on_delete_invoice(self):
rma = self._create_confirm_receive(self.partner, self.product, 10,
self.rma_loc)
rma.action_refund()
self.assertEqual(rma.state, 'refunded')
rma.refund_id.unlink()
self.assertFalse(rma.refund_id)
self.assertEqual(rma.state, 'received')
self.assertTrue(rma.can_be_refunded)
self.assertTrue(rma.can_be_returned)
self.assertTrue(rma.can_be_replaced)