diff options
| author | Azka Nathan <darizkyfaz@gmail.com> | 2025-06-09 16:23:51 +0700 |
|---|---|---|
| committer | Azka Nathan <darizkyfaz@gmail.com> | 2025-06-09 16:23:51 +0700 |
| commit | 8d482347f6dff03919db3f0a92ba1f3c5eb74ffe (patch) | |
| tree | 35323f6be9a29ba41a6af7e0b2f231e2cbed5f0e | |
| parent | ef860cf6815dceb0a806a08b2118390830ccdae0 (diff) | |
shipment group
| -rwxr-xr-x | fixco_custom/__manifest__.py | 2 | ||||
| -rwxr-xr-x | fixco_custom/models/__init__.py | 2 | ||||
| -rwxr-xr-x | fixco_custom/models/detail_order.py | 2 | ||||
| -rw-r--r-- | fixco_custom/models/shipment_group.py | 33 | ||||
| -rwxr-xr-x | fixco_custom/models/stock_picking.py | 14 | ||||
| -rw-r--r-- | fixco_custom/models/stock_picking_shipment_group.py | 36 | ||||
| -rwxr-xr-x | fixco_custom/security/ir.model.access.csv | 4 | ||||
| -rw-r--r-- | fixco_custom/views/ir_sequence.xml | 10 | ||||
| -rw-r--r-- | fixco_custom/views/shipment_group.xml | 65 | ||||
| -rwxr-xr-x | fixco_custom/views/stock_picking.xml | 5 | ||||
| -rw-r--r-- | fixco_custom/views/stock_picking_shipment_group.xml | 35 |
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 |
