summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2025-06-09 16:23:51 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2025-06-09 16:23:51 +0700
commit8d482347f6dff03919db3f0a92ba1f3c5eb74ffe (patch)
tree35323f6be9a29ba41a6af7e0b2f231e2cbed5f0e
parentef860cf6815dceb0a806a08b2118390830ccdae0 (diff)
shipment group
-rwxr-xr-xfixco_custom/__manifest__.py2
-rwxr-xr-xfixco_custom/models/__init__.py2
-rwxr-xr-xfixco_custom/models/detail_order.py2
-rw-r--r--fixco_custom/models/shipment_group.py33
-rwxr-xr-xfixco_custom/models/stock_picking.py14
-rw-r--r--fixco_custom/models/stock_picking_shipment_group.py36
-rwxr-xr-xfixco_custom/security/ir.model.access.csv4
-rw-r--r--fixco_custom/views/ir_sequence.xml10
-rw-r--r--fixco_custom/views/shipment_group.xml65
-rwxr-xr-xfixco_custom/views/stock_picking.xml5
-rw-r--r--fixco_custom/views/stock_picking_shipment_group.xml35
11 files changed, 207 insertions, 1 deletions
diff --git a/fixco_custom/__manifest__.py b/fixco_custom/__manifest__.py
index 4abf544..f464112 100755
--- a/fixco_custom/__manifest__.py
+++ b/fixco_custom/__manifest__.py
@@ -23,6 +23,8 @@
'views/upload_payments.xml',
'views/ir_sequence.xml',
'views/purchase_pricelist.xml',
+ 'views/shipment_group.xml',
+ 'views/stock_picking_shipment_group.xml',
],
'demo': [],
'css': [],
diff --git a/fixco_custom/models/__init__.py b/fixco_custom/models/__init__.py
index c362a04..ae6b655 100755
--- a/fixco_custom/models/__init__.py
+++ b/fixco_custom/models/__init__.py
@@ -9,3 +9,5 @@ from . import sale_order_multi_invoices
from . import account_move
from . import upload_payments
from . import purchase_pricelist
+from . import shipment_group
+from . import stock_picking_shipment_group
diff --git a/fixco_custom/models/detail_order.py b/fixco_custom/models/detail_order.py
index 120a5ea..eeb9d00 100755
--- a/fixco_custom/models/detail_order.py
+++ b/fixco_custom/models/detail_order.py
@@ -214,6 +214,7 @@ class DetailOrder(models.Model):
self.picking_id = sale_order.picking_ids[0].id
self.picking_id.order_reference = order_id
self.picking_id.invoice_mp = sale_order.invoice_mp
+ self.picking_id.carrier = sale_order.carrier
self.picking_id.address = json_data.get('data', [{}])[0].get('shippingAddressInfo', []).get('fullAddress', [])
self.picking_id.note_by_buyer = json_data.get('data', [{}])[0].get('extraInfo', []).get('noteByBuyer', [])
@@ -233,6 +234,7 @@ class DetailOrder(models.Model):
self.picking_id = sale_order.picking_ids[0].id
self.picking_id.order_reference = order_id
self.picking_id.invoice_mp = sale_order.invoice_mp
+ self.picking_id.carrier = sale_order.carrier
self.picking_id.address = json_data.get('data', [{}])[0].get('shippingAddressInfo', []).get('fullAddress', [])
self.picking_id.note_by_buyer = json_data.get('data', [{}])[0].get('extraInfo', []).get('noteByBuyer', [])
diff --git a/fixco_custom/models/shipment_group.py b/fixco_custom/models/shipment_group.py
new file mode 100644
index 0000000..71d7981
--- /dev/null
+++ b/fixco_custom/models/shipment_group.py
@@ -0,0 +1,33 @@
+from odoo import models, api, fields
+from odoo.exceptions import AccessError, UserError, ValidationError
+from datetime import timedelta, date
+import logging
+
+_logger = logging.getLogger(__name__)
+
+class ShipmentGroup(models.Model):
+ _name = "shipment.group"
+ _description = "Shipment Group"
+ _inherit = ['mail.thread']
+ _rec_name = 'number'
+
+ 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)
+
+ @api.model
+ def create(self, vals):
+ vals['number'] = self.env['ir.sequence'].next_by_code('shipment.group') or '0'
+ result = super(ShipmentGroup, self).create(vals)
+ return result
+
+class ShipmentGroupLine(models.Model):
+ _name = 'shipment.group.line'
+ _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)
+ 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')
+
diff --git a/fixco_custom/models/stock_picking.py b/fixco_custom/models/stock_picking.py
index 55b6d7e..15dcd27 100755
--- a/fixco_custom/models/stock_picking.py
+++ b/fixco_custom/models/stock_picking.py
@@ -36,6 +36,20 @@ class StockPicking(models.Model):
invoice_mp = fields.Char(string='Invoice Marketplace')
address = fields.Char('Address')
note_by_buyer = fields.Char('Note By Buyer')
+ carrier = fields.Char(string='Shipping Method')
+ shipment_group_id = fields.Many2one('shipment.group', string='Shipment Group', copy=False)
+
+ def open_form_shipment_group(self):
+ return {
+ 'name': _('Create Shipment Group'),
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'stock.picking.shipment_group',
+ 'view_mode': 'form',
+ 'target': 'new',
+ 'context': {
+ 'picking_ids': self.ids,
+ }
+ }
def label_ginee(self):
try:
diff --git a/fixco_custom/models/stock_picking_shipment_group.py b/fixco_custom/models/stock_picking_shipment_group.py
new file mode 100644
index 0000000..89b26bd
--- /dev/null
+++ b/fixco_custom/models/stock_picking_shipment_group.py
@@ -0,0 +1,36 @@
+from odoo import models, fields, api, _
+from odoo.exceptions import UserError
+
+class StockPickingShipmentGroup(models.TransientModel):
+ _name = 'stock.picking.shipment_group'
+ _description = 'Stock Picking Shipment Group'
+
+class StockPickingShipmentGroup(models.TransientModel):
+ _name = 'stock.picking.shipment_group'
+ _description = 'Stock Picking Shipment Group'
+
+ def create_shipment_group(self):
+ picking_ids = self.env.context.get('picking_ids')
+ if not picking_ids:
+ raise UserError("No stock picking selected.")
+
+ pickings = self.env['stock.picking'].browse(picking_ids)
+
+ # Create the Shipment Group
+ shipment_group = self.env['shipment.group'].create({})
+
+ for picking in pickings:
+ # Link picking to shipment group
+ picking.shipment_group_id = shipment_group.id
+
+ for move in picking.move_ids_without_package:
+ self.env['shipment.group.line'].create({
+ 'shipment_id': shipment_group.id,
+ 'product_id': move.product_id.id,
+ 'carrier': picking.carrier,
+ 'invoice_marketplace': picking.invoice_mp,
+ })
+
+ return {'type': 'ir.actions.act_window_close'}
+
+
diff --git a/fixco_custom/security/ir.model.access.csv b/fixco_custom/security/ir.model.access.csv
index a5a3434..6c1a672 100755
--- a/fixco_custom/security/ir.model.access.csv
+++ b/fixco_custom/security/ir.model.access.csv
@@ -9,4 +9,6 @@ access_sale_order_multi_invoices,access.sale.order.multi_invoices,model_sale_ord
access_account_move,access.account.move,model_account_move,,1,1,1,1
access_upload_payments,access.upload.payments,model_upload_payments,,1,1,1,1
access_upload_payments_line,access.upload.payments.line,model_upload_payments_line,,1,1,1,1
-access_purchase_pricelist,access.purchase.pricelist,model_purchase_pricelist,,1,1,1,1 \ No newline at end of file
+access_purchase_pricelist,access.purchase.pricelist,model_purchase_pricelist,,1,1,1,1
+access_shipment_group,access.shipment.group,model_shipment_group,,1,1,1,1
+access_sale_order_shipment_group,access.sale.order.shipment_group,model_sale_order_shipment_group,,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 b89b3de..9de8525 100644
--- a/fixco_custom/views/ir_sequence.xml
+++ b/fixco_custom/views/ir_sequence.xml
@@ -10,5 +10,15 @@
<field name="number_next">1</field>
<field name="number_increment">1</field>
</record>
+
+ <record id="sequence_shipment_group" model="ir.sequence">
+ <field name="name">Shipment Group</field>
+ <field name="code">shipment.group</field>
+ <field name="active">TRUE</field>
+ <field name="prefix">SGR/%(year)s/</field>
+ <field name="padding">5</field>
+ <field name="number_next">1</field>
+ <field name="number_increment">1</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
new file mode 100644
index 0000000..4239bea
--- /dev/null
+++ b/fixco_custom/views/shipment_group.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<odoo>
+ <record id="shipment_group_tree" model="ir.ui.view">
+ <field name="name">shipment.group.tree</field>
+ <field name="model">shipment.group</field>
+ <field name="arch" type="xml">
+ <tree default_order="create_date desc">
+ <field name="number"/>
+ </tree>
+ </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>
+ <field name="arch" type="xml">
+ <form>
+ <sheet>
+ <group>
+ <group>
+ <field name="number" readonly="1"/>
+ </group>
+ </group>
+ <notebook>
+ <page string="Line">
+ <field name="shipment_line"/>
+ </page>
+ </notebook>
+ </sheet>
+ <div class="oe_chatter">
+ <field name="message_follower_ids" widget="mail_followers"/>
+ <field name="message_ids" widget="mail_thread"/>
+ </div>
+ </form>
+ </field>
+ </record>
+
+ <record id="shipment_group_action" model="ir.actions.act_window">
+ <field name="name">Shipment Group</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">shipment.group</field>
+ <field name="view_mode">tree,form</field>
+ </record>
+
+ <menuitem
+ action="shipment_group_action"
+ id="shipment_group"
+ parent="stock.menu_stock_warehouse_mgmt"
+ name="Shipment Group"
+ sequence="1"
+ />
+</odoo>
diff --git a/fixco_custom/views/stock_picking.xml b/fixco_custom/views/stock_picking.xml
index 3f3464c..4bea530 100755
--- a/fixco_custom/views/stock_picking.xml
+++ b/fixco_custom/views/stock_picking.xml
@@ -23,6 +23,11 @@
<field name="pdf_label_url" readonly="1" widget="url"/>
</group>
</group>
+
+ <field name="location_id" position="after">
+ <field name="carrier"/>
+ <field name="shipment_group_id"/>
+ </field>
<page name="note" position="after">
<page string="Check Product" name="check_product">
diff --git a/fixco_custom/views/stock_picking_shipment_group.xml b/fixco_custom/views/stock_picking_shipment_group.xml
new file mode 100644
index 0000000..68e0187
--- /dev/null
+++ b/fixco_custom/views/stock_picking_shipment_group.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<odoo>
+ <data>
+ <record id="view_stock_picking_shipment_group_form" model="ir.ui.view">
+ <field name="name">Stock Picking Shipment Group</field>
+ <field name="model">stock.picking.shipment_group</field>
+ <field name="arch" type="xml">
+ <form string="Create Shipment Group">
+ <sheet>
+ <div class="oe_title">
+ <h2>Create Shipment Group for Selected Stock Picking</h2>
+ </div>
+ <div class="alert alert-info">
+ <p>This will create Shipment Group for all selected Stock Picking.</p>
+ </div>
+ </sheet>
+ <footer>
+ <button name="create_shipment_group" string="Create Shipment Group" type="object"
+ class="btn-primary" default_focus="1"/>
+ <button string="Cancel" class="btn-secondary" special="cancel"/>
+ </footer>
+ </form>
+ </field>
+ </record>
+
+ <record id="action_stock_picking_shipment_group" model="ir.actions.act_window">
+ <field name="name">Create Shipment Group</field>
+ <field name="res_model">stock.picking.shipment_group</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="view_mode">form</field>
+ <field name="view_id" ref="view_stock_picking_shipment_group_form"/>
+ <field name="target">new</field>
+ </record>
+ </data>
+</odoo> \ No newline at end of file