summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2024-09-24 15:47:47 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2024-09-24 15:47:47 +0700
commitbe5ae68ee9c9d55611cfbb8243feeee886bc95fd (patch)
treef91dd72ece0c67b1d799afd472f84b3dce187200
parentcc4be72fc2f0d98f8bc2190ea5c404536bb3c56d (diff)
push
-rw-r--r--indoteknik_custom/models/approval_unreserve.py24
1 files changed, 22 insertions, 2 deletions
diff --git a/indoteknik_custom/models/approval_unreserve.py b/indoteknik_custom/models/approval_unreserve.py
index 00fd1555..e617e11a 100644
--- a/indoteknik_custom/models/approval_unreserve.py
+++ b/indoteknik_custom/models/approval_unreserve.py
@@ -50,8 +50,28 @@ class ApprovalUnreserve(models.Model):
return super(ApprovalUnreserve, self).create(vals)
def action_submit_for_approval(self):
+ self._check_product_and_qty()
self.write({'state': 'waiting_approval'})
+
+ def _check_product_and_qty(self):
+ stock_move = self.env['stock.move']
+ for line in self.approval_line:
+ if line.dest_picking_id:
+ move = stock_move.search([
+ ('picking_id', '=', line.dest_picking_id.id),
+ ('product_id', '=', line.product_id.id),
+ ('state', 'not in', ['done', 'cancel'])
+ ])
+
+ if not move:
+ raise UserError("Product tidak ada di destination picking")
+
+ qty_unreserve = line.unreserve_qty + move.forecast_availability
+
+ if move.product_uom_qty < qty_unreserve:
+ raise UserError("Quantity yang di unreserve melebihi quantity yang ada")
+
def action_approve(self):
if self.env.user.id != self.user_id.id:
raise UserError("Hanya Sales nya yang bisa approve.")
@@ -59,7 +79,6 @@ class ApprovalUnreserve(models.Model):
if self.state != 'waiting_approval':
raise UserError("Approval can only be done in 'Waiting for Approval' state")
-
self.write({
'state': 'approved',
'approved_by': self.env.user.id
@@ -86,7 +105,8 @@ class ApprovalUnreserve(models.Model):
move = stock_move_obj.browse(line.move_id.id)
move._do_unreserve(product=line.product_id, quantity=line.unreserve_qty)
- line.dest_picking_id.action_assign()
+ if line.dest_picking_id:
+ line.dest_picking_id.action_assign()
# Step 2: Update existing stock move in dest_picking_id
# if line.dest_picking_id: