summaryrefslogtreecommitdiff
path: root/fixco_custom/models
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 /fixco_custom/models
parentef860cf6815dceb0a806a08b2118390830ccdae0 (diff)
shipment group
Diffstat (limited to 'fixco_custom/models')
-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
5 files changed, 87 insertions, 0 deletions
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'}
+
+