summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMqdd <ahmadmiqdad27@gmail.com>2026-02-15 00:05:12 +0700
committerMqdd <ahmadmiqdad27@gmail.com>2026-02-15 00:05:12 +0700
commitd951091bcb1bcab9d5aedf8060bbc1cd8905326c (patch)
treeafc4e24eb897750995d78ae98fa59646a0365bf9
parent1cef765c69c4ba7e305ec7c66beda01332efa0f4 (diff)
<Miqdad> fix state typo & code improvement
-rw-r--r--indoteknik_custom/models/gudang_service.py65
1 files changed, 48 insertions, 17 deletions
diff --git a/indoteknik_custom/models/gudang_service.py b/indoteknik_custom/models/gudang_service.py
index 4900113f..5d89cfad 100644
--- a/indoteknik_custom/models/gudang_service.py
+++ b/indoteknik_custom/models/gudang_service.py
@@ -45,15 +45,49 @@ class GudangService(models.Model):
('cancel', 'Cancel')], default='draft', tracking=True)
cancel_reason = fields.Text('Cancel Reason', tracking=True)
+ @api.constrains('gudang_service_lines')
+ def _check_qty(self):
+ for rec in self:
+ if not rec.origin:
+ continue
+
+ so_qty_map = {
+ line.product_id.id: line.product_uom_qty
+ for line in rec.origin.order_line
+ }
+
+ for line in rec.gudang_service_lines:
+ if line.quantity <= 0:
+ raise ValidationError(
+ f"Quantity for product {line.product_id.display_name} cannot be 0 or negative."
+ )
+
+ so_qty = so_qty_map.get(line.product_id.id, 0)
+
+ if line.quantity > so_qty:
+ raise ValidationError(
+ f"Quantity for product {line.product_id.display_name} "
+ f"cannot exceed SO quantity ({so_qty})."
+ )
+
+
+ @api.constrains('state', 'schedule_date')
+ def _check_edit_after_sent(self):
+ for rec in self:
+ if rec.state in ['sent_to_vendor', 'received_from_vendor', 'delivered_to_cust']:
+ if rec._origin.schedule_date != rec.schedule_date:
+ raise ValidationError("Schedule cannot be modified after sent to vendor")
+
+
def _send_logistic_notification(self):
group = self.env.ref('indoteknik_custom.group_role_logistic', raise_if_not_found=False)
if not group:
return
users = group.users
- # Safa
- md = self.env['res.users'].browse([3425])
- # send to logistic and safa
+ # MD
+ md = self.env['res.users'].browse([3425, 4801, 1036])
+ # send to logistic and MD
users = users | md
if not users:
@@ -88,7 +122,7 @@ class GudangService(models.Model):
@api.model
def cron_notify_onprogress_gudang_service(self):
records = self.search([
- ('state', 'in', ['draft', 'received_from_customer']),
+ ('state', 'in', ['draft', 'received_from_cust']),
])
if records:
@@ -127,19 +161,16 @@ class GudangService(models.Model):
rec.state = 'received_from_vendor'
def action_done(self):
- if self.state != 'received_from_vendor':
- raise UserError("Only 'Received From Vendor' state can be set to Done")
- else:
- for rec in self:
- activities = self.env['mail.activity'].search([
- ('res_id', '=', rec.id),
- ('res_model', '=', 'gudang.service'),
- ('state', '=', 'delivered_to_cust'),
- ])
- activities.unlink()
- rec.state = 'delivered_to_cust'
- if not rec.done_date:
- rec.done_date = fields.Datetime.now()
+ for rec in self:
+ if rec.state != 'received_from_vendor':
+ raise UserError("Only 'Received From Vendor' state can be set to Done")
+
+ rec.activity_ids.unlink()
+
+ rec.write({
+ 'state': 'delivered_to_cust',
+ 'done_date': fields.Datetime.now()
+ })
def action_draft(self):
"""Reset to draft state"""