summaryrefslogtreecommitdiff
path: root/fixco_custom/models/shipment_group.py
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2025-06-17 10:28:39 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2025-06-17 10:28:39 +0700
commit8b11b194bb84bfbdd9372ae16987f08c7826c21e (patch)
tree2c14e95455b06267af585e5a79dcb1aed830c4a0 /fixco_custom/models/shipment_group.py
parent4a65f46a5b7fd1bc48bc04cbf456119332fff0fe (diff)
schema shipment group
Diffstat (limited to 'fixco_custom/models/shipment_group.py')
-rw-r--r--fixco_custom/models/shipment_group.py99
1 files changed, 47 insertions, 52 deletions
diff --git a/fixco_custom/models/shipment_group.py b/fixco_custom/models/shipment_group.py
index 5f6c315..3d60840 100644
--- a/fixco_custom/models/shipment_group.py
+++ b/fixco_custom/models/shipment_group.py
@@ -13,58 +13,33 @@ class ShipmentGroup(models.Model):
number = fields.Char(string='Document No', index=True, copy=False, readonly=True, tracking=True)
shipment_line = fields.One2many('shipment.group.line', 'shipment_id', string='Shipment Group Lines', auto_join=True)
- scan_invoice = fields.Char(string="Scan Invoice Marketplace")
+ picking_lines = fields.One2many('picking.line', 'shipment_id', string='Picking Lines', auto_join=True)
- @api.onchange('scan_invoice')
- def _onchange_scan_invoice(self):
- if self.scan_invoice:
- result = self.add_lines_from_scan(self.scan_invoice)
- self.scan_invoice = False # Reset field setelah scan
- return result
-
- def add_lines_from_scan(self, scan_value):
- self.ensure_one()
- picking = self.env['stock.picking'].search([
- ('invoice_mp', '=', scan_value)
- ], limit=1)
-
- if not picking:
- return {
- 'warning': {
- 'title': 'Not Found',
- 'message': f'No picking found with invoice: {scan_value}'
- }
- }
-
- # Cek duplikat
- existing_lines = self.shipment_line.filtered(lambda l: l.picking_id == picking)
- if existing_lines:
- return {
- 'warning': {
- 'title': 'Duplicate',
- 'message': 'This picking has already been added to the shipment group'
- }
- }
-
- # Buat line untuk setiap move
- created_lines = []
- for move in picking.move_ids_without_package:
- line = self.env['shipment.group.line'].create({
- 'shipment_id': self.id,
- 'product_id': move.product_id.id,
- 'carrier': picking.carrier,
- 'invoice_marketplace': picking.invoice_mp,
- 'picking_id': picking.id,
- })
- created_lines.append(line.id)
-
- return {
- 'effect': {
- 'fadeout': 'slow',
- 'message': f'Added {len(created_lines)} products from {picking.name}',
- 'type': 'rainbow_man',
- }
- }
+ @api.constrains('picking_lines')
+ def _check_picking_lines(self):
+ for record in self:
+ record.shipment_line.unlink()
+
+ for picking_line in record.picking_lines:
+ if not picking_line.picking_id:
+ continue
+
+ for move in picking_line.picking_id.move_ids_without_package:
+ existing_line = record.shipment_line.filtered(
+ lambda l: l.product_id == move.product_id and
+ l.invoice_marketplace == picking_line.scan_invoice_marketplace and
+ l.carrier == picking_line.carrier
+ )
+
+ if not existing_line:
+ self.env['shipment.group.line'].create({
+ 'shipment_id': record.id,
+ 'product_id': move.product_id.id,
+ 'carrier': picking_line.picking_id.carrier,
+ 'invoice_marketplace': picking_line.picking_id.invoice_mp,
+ 'picking_id': picking_line.picking_id.id
+ })
+
@api.model
def create(self, vals):
@@ -77,9 +52,29 @@ class ShipmentGroupLine(models.Model):
_description = 'Shipment Group Line'
_order = 'shipment_id, id'
- shipment_id = fields.Many2one('shipment.group', string='Shipment Ref', required=True, ondelete='cascade', index=True, copy=False)
+ shipment_id = fields.Many2one('shipment.group', string='Shipment Ref', required=True, ondelete='cascade')
product_id = fields.Many2one('product.product', string='Product')
carrier = fields.Char(string='Shipping Method')
invoice_marketplace = fields.Char(string='Invoice Marketplace')
picking_id = fields.Many2one('stock.picking', string='Picking')
+
+
+class PickingLine(models.Model):
+ _name = 'picking.line'
+ _description = 'Picking Line'
+ _order = 'shipment_id, id'
+
+ shipment_id = fields.Many2one('shipment.group', string='Shipment Ref', required=True, ondelete='cascade')
+ picking_id = fields.Many2one('stock.picking', string='Picking')
+ scan_invoice_marketplace = fields.Char(string="Scan Invoice Marketplace")
+ carrier = fields.Char(string='Ekspedisi')
+
+ @api.onchange('scan_invoice_marketplace')
+ def _onchange_scan_invoice_marketplace(self):
+ for line in self:
+ if line.scan_invoice_marketplace:
+ picking = self.env['stock.picking'].search([('invoice_mp', '=', line.scan_invoice_marketplace)], limit=1)
+ line.picking_id = picking.id
+ line.carrier = picking.carrier
+