summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fixco_custom/models/shipment_group.py48
1 files changed, 26 insertions, 22 deletions
diff --git a/fixco_custom/models/shipment_group.py b/fixco_custom/models/shipment_group.py
index b6ffbda..766bd75 100644
--- a/fixco_custom/models/shipment_group.py
+++ b/fixco_custom/models/shipment_group.py
@@ -193,29 +193,33 @@ class PickingLine(models.Model):
@api.onchange('scan_receipt')
def _onchange_scan_receipt(self):
for line in self:
- if line.scan_receipt:
- lines = line.shipment_id.picking_lines.filtered(
- lambda p_lines: p_lines.scan_receipt == line.scan_receipt
- )
+ scan = (line.scan_receipt or "").strip()
+ if not scan:
+ return
+
+ # Cek dari database (aman dari NewId)
+ duplicate = self.env['picking.line'].search([
+ ('shipment_id', '=', line.shipment_id.id),
+ ('scan_receipt', '=', scan),
+ ('id', '!=', line.id or 0), # exclude diri sendiri kalau sudah ada ID
+ ], limit=1)
+
+ if duplicate:
+ raise UserError("Receipt '%s' already exists." % scan)
+
+ # Ambil picking by tracking number
+ picking = self.env['stock.picking'].search([
+ ('tracking_number', '=', scan)
+ ], limit=1)
+
+ if not picking:
+ raise UserError("Receipt '%s' not found." % scan)
+
+ line.picking_id = picking
+ line.carrier = picking.carrier
+ line.order_reference = picking.order_reference
+ line.invoice_marketplace = picking.invoice_mp
- if lines:
- raise UserError((
- "Receipt '%s' already exists. "
- ) % line.scan_receipt)
-
- picking = self.env['stock.picking'].search([
- ('tracking_number', '=', line.scan_receipt)
- ], limit=1)
-
- if not picking:
- raise UserError((
- "Receipt '%s' not found. "
- ) % line.scan_receipt)
-
- line.picking_id = picking
- line.carrier = picking.carrier
- line.order_reference = picking.order_reference
- line.invoice_marketplace = picking.invoice_mp
class ProductShipmentLine(models.Model):
_name = 'product.shipment.line'