diff options
| author | Azka Nathan <darizkyfaz@gmail.com> | 2025-06-17 10:28:39 +0700 |
|---|---|---|
| committer | Azka Nathan <darizkyfaz@gmail.com> | 2025-06-17 10:28:39 +0700 |
| commit | 8b11b194bb84bfbdd9372ae16987f08c7826c21e (patch) | |
| tree | 2c14e95455b06267af585e5a79dcb1aed830c4a0 /fixco_custom/models | |
| parent | 4a65f46a5b7fd1bc48bc04cbf456119332fff0fe (diff) | |
schema shipment group
Diffstat (limited to 'fixco_custom/models')
| -rw-r--r-- | fixco_custom/models/shipment_group.py | 99 |
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 + |
