Skip to content

Commit

Permalink
[IMP] purchase_request - unlinking of a pr or a prl is only possible …
Browse files Browse the repository at this point in the history
…if pr is draft
  • Loading branch information
baimont authored and HviorForgeFlow committed Nov 6, 2020
1 parent 9642524 commit 3a5dc36
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 0 deletions.
12 changes: 12 additions & 0 deletions purchase_request/models/purchase_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,18 @@ def write(self, vals):
request.message_subscribe(partner_ids=[partner_id])
return res

def _can_be_deleted(self):
self.ensure_one()
return self.state == "draft"

def unlink(self):
for request in self:
if not request._can_be_deleted():
raise UserError(
_("You cannot delete a purchase request which is not draft.")
)
return super(PurchaseRequest, self).unlink()

def button_draft(self):
self.mapped("line_ids").do_uncancel()
return self.write({"state": "draft"})
Expand Down
12 changes: 12 additions & 0 deletions purchase_request/models/purchase_request_line.py
Original file line number Diff line number Diff line change
Expand Up @@ -380,9 +380,21 @@ def _calc_new_qty(self, request_line, po_line=None, new_pr_line=False):
qty = max(rl_qty, supplierinfo_min_qty)
return qty

def _can_be_deleted(self):
self.ensure_one()
return self.request_state == "draft"

def unlink(self):
if self.mapped("purchase_lines"):
raise UserError(
_("You cannot delete a record that refers to purchase " "lines!")
)
for line in self:
if not line._can_be_deleted():
raise UserError(
_(
"You can only delete a purchase request line "
"if the purchase request is in draft state."
)
)
return super(PurchaseRequestLine, self).unlink()
42 changes: 42 additions & 0 deletions purchase_request/tests/test_purchase_request.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Copyright 2018-2019 ForgeFlow, S.L.
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0)

from odoo import exceptions
from odoo.exceptions import UserError
from odoo.tests.common import Form, TransactionCase
from odoo.tools import SUPERUSER_ID
Expand Down Expand Up @@ -31,17 +32,26 @@ def test_purchase_request_status(self):
purchase_request = self.purchase_request
purchase_request.write({"assigned_to": SUPERUSER_ID})
self.assertEqual(purchase_request.is_editable, True, "Should be editable")
self.assertEqual(purchase_request.state, "draft", "Should be in state draft")
purchase_request.button_to_approve()
self.assertEqual(
purchase_request.state, "to_approve", "Should be in state to_approve"
)
with self.assertRaises(exceptions.UserError) as e:
purchase_request.unlink()
msg = "You cannot delete a purchase request which is not draft."
self.assertIn(msg, e.exception.name)
self.assertEqual(purchase_request.is_editable, False, "Should not be editable")
purchase_request.button_draft()
self.assertEqual(purchase_request.is_editable, True, "Should be editable")
self.assertEqual(purchase_request.state, "draft", "Should be in state draft")
purchase_request.button_to_approve()
purchase_request.button_done()
self.assertEqual(purchase_request.is_editable, False, "Should not be editable")
with self.assertRaises(exceptions.UserError) as e:
purchase_request.unlink()
msg = "You cannot delete a purchase request which is not draft."
self.assertIn(msg, e.exception.name)
purchase_request.button_rejected()
self.assertEqual(purchase_request.is_editable, False, "Should not be editable")
vals = {
Expand Down Expand Up @@ -70,6 +80,12 @@ def test_purchase_request_status(self):
purchase.button_cancel()
self.assertEqual(purchase.state, "cancel")
purchase_request_line._compute_purchase_state()
with self.assertRaises(exceptions.UserError) as e:
purchase_request.unlink()
msg = "You cannot delete a purchase request which is not draft."
self.assertIn(msg, e.exception.name)
purchase_request.button_draft()
purchase_request.unlink()

def test_auto_reject(self):
"""Tests if a Purchase Request is autorejected when all lines are
Expand Down Expand Up @@ -201,3 +217,29 @@ def test_raise_error(self):
).create(vals)
with self.assertRaises(UserError):
wiz_id.make_purchase_order()

def test_purchase_request_unlink(self):
pr = self.purchase_request
pr_lines = pr.line_ids

pr.button_to_approve()
self.assertEqual(pr.state, "to_approve", "Should be in state to_approve")
with self.assertRaises(exceptions.UserError) as e:
pr_lines.unlink()
msg = (
"You can only delete a purchase request line "
"if the purchase request is in draft state."
)
self.assertIn(msg, e.exception.name)
pr.button_done()
self.assertEqual(pr.state, "done", "Should be in state done")
with self.assertRaises(exceptions.UserError) as e:
pr_lines.unlink()
msg = (
"You can only delete a purchase request line "
"if the purchase request is in draft state."
)
self.assertIn(msg, e.exception.name)
pr.button_draft()
self.assertEqual(pr.state, "draft", "Should be in state draft")
pr_lines.unlink()

0 comments on commit 3a5dc36

Please sign in to comment.