summaryrefslogtreecommitdiff
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
parent4a65f46a5b7fd1bc48bc04cbf456119332fff0fe (diff)
schema shipment group
-rw-r--r--fixco_custom/models/shipment_group.py99
-rwxr-xr-xfixco_custom/security/ir.model.access.csv3
-rw-r--r--fixco_custom/views/ir_sequence.xml9
-rw-r--r--fixco_custom/views/shipment_group.xml35
4 files changed, 73 insertions, 73 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
+
diff --git a/fixco_custom/security/ir.model.access.csv b/fixco_custom/security/ir.model.access.csv
index 422d603..bbdea7b 100755
--- a/fixco_custom/security/ir.model.access.csv
+++ b/fixco_custom/security/ir.model.access.csv
@@ -17,4 +17,5 @@ access_bundling_line,access.bundling.line,model_bundling_line,,1,1,1,1
access_print_picking_list,access.shipment.group,model_print_picking_list,,1,1,1,1
access_print_picking_list_line,access.shipment.group.line,model_print_picking_list_line,,1,1,1,1
access_stock_picking_print_picking_list,access.stock.picking.print_picking_list,model_stock_picking_print_picking_list,,1,1,1,1
-access_uangmuka_penjualan,access.uangmuka.penjualan,model_uangmuka_penjualan,,1,1,1,1 \ No newline at end of file
+access_uangmuka_penjualan,access.uangmuka.penjualan,model_uangmuka_penjualan,,1,1,1,1
+access_picking_line,access.picking.line,model_picking_line,,1,1,1,1 \ No newline at end of file
diff --git a/fixco_custom/views/ir_sequence.xml b/fixco_custom/views/ir_sequence.xml
index 10cc807..395add6 100644
--- a/fixco_custom/views/ir_sequence.xml
+++ b/fixco_custom/views/ir_sequence.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
- <data noupdate="1">
+ <data noupdate="0">
<record id="sequence_upload_payments" model="ir.sequence">
<field name="name">Upload Payments</field>
<field name="code">upload.payments</field>
@@ -9,8 +9,9 @@
<field name="padding">5</field>
<field name="number_next">1</field>
<field name="number_increment">1</field>
+ <field name="company_id">4</field>
</record>
-
+
<record id="sequence_shipment_group" model="ir.sequence">
<field name="name">Shipment Group</field>
<field name="code">shipment.group</field>
@@ -19,8 +20,9 @@
<field name="padding">5</field>
<field name="number_next">1</field>
<field name="number_increment">1</field>
+ <field name="company_id">4</field>
</record>
-
+
<record id="sequence_print_picking_list" model="ir.sequence">
<field name="name">Print Picking List</field>
<field name="code">print.picking.list</field>
@@ -29,6 +31,7 @@
<field name="padding">5</field>
<field name="number_next">1</field>
<field name="number_increment">1</field>
+ <field name="company_id">4</field>
</record>
</data>
</odoo> \ No newline at end of file
diff --git a/fixco_custom/views/shipment_group.xml b/fixco_custom/views/shipment_group.xml
index ed3f4c9..8a6c303 100644
--- a/fixco_custom/views/shipment_group.xml
+++ b/fixco_custom/views/shipment_group.xml
@@ -10,19 +10,6 @@
</field>
</record>
- <record id="shipment_group_line_tree" model="ir.ui.view">
- <field name="name">shipment.group.line.tree</field>
- <field name="model">shipment.group.line</field>
- <field name="arch" type="xml">
- <tree editable="bottom">
- <field name="invoice_marketplace" readonly="1"/>
- <field name="product_id" readonly="1"/>
- <field name="carrier" readonly="1"/>
- <field name="picking_id" readonly="1"/>
- </tree>
- </field>
- </record>
-
<record id="shipment_group_form" model="ir.ui.view">
<field name="name">shipment.group.form</field>
<field name="model">shipment.group</field>
@@ -31,14 +18,28 @@
<sheet>
<group>
<group>
- <field name="number" readonly="1"/>
- <field name="scan_invoice" widget="scan_barcode"
- placeholder="Scan Invoice Marketplace"/>
+ <field name="number" readonly="1"/>
</group>
</group>
<notebook>
+ <page string="Picking Line">
+ <field name="picking_lines">
+ <tree editable="bottom">
+ <field name="scan_invoice_marketplace"/>
+ <field name="picking_id"/>
+ <field name="carrier"/>
+ </tree>
+ </field>
+ </page>
<page string="Line">
- <field name="shipment_line"/>
+ <field name="shipment_line">
+ <tree editable="bottom">
+ <field name="product_id"/>
+ <field name="carrier"/>
+ <field name="invoice_marketplace"/>
+ <field name="picking_id"/>
+ </tree>
+ </field>
</page>
</notebook>
</sheet>