From 55936047e729cadcd462a57c7838f77f7c57ee1a Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 13 Jun 2025 14:35:38 +0700 Subject: print picking list --- fixco_custom/__manifest__.py | 2 + fixco_custom/models/__init__.py | 2 + fixco_custom/models/account_move.py | 7 ++- fixco_custom/models/detail_order.py | 2 +- fixco_custom/models/print_picking_list.py | 30 +++++++++++ fixco_custom/models/sale.py | 1 + fixco_custom/models/stock_picking.py | 12 +++++ .../models/stock_picking_print_picking_list.py | 31 +++++++++++ fixco_custom/security/ir.model.access.csv | 5 +- fixco_custom/views/account_move.xml | 1 + fixco_custom/views/detail_order.xml | 12 +++++ fixco_custom/views/ir_sequence.xml | 10 ++++ fixco_custom/views/print_picking_list.xml | 62 ++++++++++++++++++++++ fixco_custom/views/stock_picking.xml | 8 +++ .../views/stock_picking_print_picking_list.xml | 32 +++++++++++ 15 files changed, 214 insertions(+), 3 deletions(-) create mode 100644 fixco_custom/models/print_picking_list.py create mode 100644 fixco_custom/models/stock_picking_print_picking_list.py create mode 100644 fixco_custom/views/print_picking_list.xml create mode 100644 fixco_custom/views/stock_picking_print_picking_list.xml diff --git a/fixco_custom/__manifest__.py b/fixco_custom/__manifest__.py index f464112..83d085a 100755 --- a/fixco_custom/__manifest__.py +++ b/fixco_custom/__manifest__.py @@ -25,6 +25,8 @@ 'views/purchase_pricelist.xml', 'views/shipment_group.xml', 'views/stock_picking_shipment_group.xml', + 'views/stock_picking_print_picking_list.xml', + 'views/print_picking_list.xml', ], 'demo': [], 'css': [], diff --git a/fixco_custom/models/__init__.py b/fixco_custom/models/__init__.py index ae6b655..9eba2c6 100755 --- a/fixco_custom/models/__init__.py +++ b/fixco_custom/models/__init__.py @@ -11,3 +11,5 @@ from . import upload_payments from . import purchase_pricelist from . import shipment_group from . import stock_picking_shipment_group +from . import print_picking_list +from . import stock_picking_print_picking_list diff --git a/fixco_custom/models/account_move.py b/fixco_custom/models/account_move.py index 3f52319..82223b6 100644 --- a/fixco_custom/models/account_move.py +++ b/fixco_custom/models/account_move.py @@ -17,4 +17,9 @@ class AccountMove(models.Model): invoice_marketplace = fields.Char('Invoice Marketplace') address = fields.Char('Address') sale_id = fields.Many2one('sale.order', string='Sale Order') - picking_id = fields.Many2one('stock.picking', string='Picking') \ No newline at end of file + picking_id = fields.Many2one('stock.picking', string='Picking') + transaction_type = fields.Selection( + [('digunggung', 'Digunggung'), + ('difaktur', 'Faktur Pajak')], + string='Transaction Type' + ) \ No newline at end of file diff --git a/fixco_custom/models/detail_order.py b/fixco_custom/models/detail_order.py index e3370b0..2c82db6 100755 --- a/fixco_custom/models/detail_order.py +++ b/fixco_custom/models/detail_order.py @@ -182,7 +182,7 @@ class DetailOrder(models.Model): 'product_id': bline.variant_id.id if bline.variant_id else product.id, 'product_uom_qty': bline.product_uom_qty * item.get('quantity') if bline.product_uom_qty else item.get('quantity'), 'price_unit': bline.price * bline.product_uom_qty if bline.price else item.get('actualPrice'), - 'name': f"{bline.master_sku} (Bundle Component)" if bline.master_sku else product.name, + 'name': f"{bline.variant_id.display_name} (Bundle Component)" if bline.variant_id.display_name else product.name, })) continue diff --git a/fixco_custom/models/print_picking_list.py b/fixco_custom/models/print_picking_list.py new file mode 100644 index 0000000..6998526 --- /dev/null +++ b/fixco_custom/models/print_picking_list.py @@ -0,0 +1,30 @@ +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 PrintPickingList(models.Model): + _name = "print.picking.list" + _description = "Print Picking List" + _inherit = ['mail.thread'] + _rec_name = 'number' + + number = fields.Char(string='Document No', index=True, copy=False, readonly=True, tracking=True) + print_picking_list_line = fields.One2many('print.picking.list.line', 'print_picking_list_id', string='Print Picking List Lines', auto_join=True) + + @api.model + def create(self, vals): + vals['number'] = self.env['ir.sequence'].next_by_code('print.picking.list') or '0' + result = super(PrintPickingList, self).create(vals) + return result + +class PrintPickingListLine(models.Model): + _name = 'print.picking.list.line' + _description = 'Print Picking List Line' + _order = 'print_picking_list_id, id' + + print_picking_list_id = fields.Many2one('print.picking.list', string='Ref', required=True, ondelete='cascade', index=True, copy=False) + invoice_marketplace = fields.Char(string='Invoice Marketplace') + diff --git a/fixco_custom/models/sale.py b/fixco_custom/models/sale.py index b36f4b5..bc7a734 100755 --- a/fixco_custom/models/sale.py +++ b/fixco_custom/models/sale.py @@ -34,6 +34,7 @@ class SaleOrder(models.Model): 'ref': self.client_order_ref or '', 'move_type': 'out_invoice', 'narration': self.note, + 'transaction_type': self.partner_invoice_id.transaction_type, 'invoice_marketplace': self.invoice_mp, 'address': self.address, 'sale_id': self.id, diff --git a/fixco_custom/models/stock_picking.py b/fixco_custom/models/stock_picking.py index 15dcd27..78d4c16 100755 --- a/fixco_custom/models/stock_picking.py +++ b/fixco_custom/models/stock_picking.py @@ -51,6 +51,18 @@ class StockPicking(models.Model): } } + def open_form_print_picking_list(self): + return { + 'name': _('Create Print Picking List'), + 'type': 'ir.actions.act_window', + 'res_model': 'stock.picking.print_picking_list', + 'view_mode': 'form', + 'target': 'new', + 'context': { + 'picking_ids': self.ids, + } + } + def label_ginee(self): try: order_id = self.order_reference diff --git a/fixco_custom/models/stock_picking_print_picking_list.py b/fixco_custom/models/stock_picking_print_picking_list.py new file mode 100644 index 0000000..7cc7995 --- /dev/null +++ b/fixco_custom/models/stock_picking_print_picking_list.py @@ -0,0 +1,31 @@ +from odoo import models, fields, api, _ +from odoo.exceptions import UserError + +class StockPickingPrintPickingList(models.TransientModel): + _name = 'stock.picking.print_picking_list' + _description = 'Stock Picking Shipment Group' + + def create_print_picking_list(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) + + print_picking_list = self.env['print.picking.list'].create({}) + + for picking in pickings: + self.env['print.picking.list.line'].create({ + 'print_picking_list_id': print_picking_list.id, + 'invoice_marketplace': picking.invoice_mp, + }) + + return { + 'type': 'ir.actions.act_window', + 'res_model': 'print.picking.list', + 'view_mode': 'form', + 'res_id': print_picking_list.id, + 'target': 'current', + } + + diff --git a/fixco_custom/security/ir.model.access.csv b/fixco_custom/security/ir.model.access.csv index e40c7d1..ef91758 100755 --- a/fixco_custom/security/ir.model.access.csv +++ b/fixco_custom/security/ir.model.access.csv @@ -13,4 +13,7 @@ access_purchase_pricelist,access.purchase.pricelist,model_purchase_pricelist,,1, access_shipment_group,access.shipment.group,model_shipment_group,,1,1,1,1 access_shipment_group_line,access.shipment.group.line,model_shipment_group_line,,1,1,1,1 access_stock_picking_shipment_group,access.stock.picking.shipment_group,model_stock_picking_shipment_group,,1,1,1,1 -access_bundling_line,access.bundling.line,model_bundling_line,,1,1,1,1 \ No newline at end of file +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 \ No newline at end of file diff --git a/fixco_custom/views/account_move.xml b/fixco_custom/views/account_move.xml index 7e24873..97414e6 100644 --- a/fixco_custom/views/account_move.xml +++ b/fixco_custom/views/account_move.xml @@ -8,6 +8,7 @@ + diff --git a/fixco_custom/views/detail_order.xml b/fixco_custom/views/detail_order.xml index 711f908..60a335c 100755 --- a/fixco_custom/views/detail_order.xml +++ b/fixco_custom/views/detail_order.xml @@ -20,6 +20,18 @@ detail.order
+
+
diff --git a/fixco_custom/views/ir_sequence.xml b/fixco_custom/views/ir_sequence.xml index 9de8525..10cc807 100644 --- a/fixco_custom/views/ir_sequence.xml +++ b/fixco_custom/views/ir_sequence.xml @@ -20,5 +20,15 @@ 1 1 + + + Print Picking List + print.picking.list + TRUE + PPL/%(year)s/ + 5 + 1 + 1 + \ No newline at end of file diff --git a/fixco_custom/views/print_picking_list.xml b/fixco_custom/views/print_picking_list.xml new file mode 100644 index 0000000..a6a33b5 --- /dev/null +++ b/fixco_custom/views/print_picking_list.xml @@ -0,0 +1,62 @@ + + + + print.picking.list.tree + print.picking.list + + + + + + + + + print.picking.list.line.tree + print.picking.list.line + + + + + + + + + print.picking.list.form + print.picking.list + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + + Print Picking List + ir.actions.act_window + print.picking.list + tree,form + + + +
diff --git a/fixco_custom/views/stock_picking.xml b/fixco_custom/views/stock_picking.xml index 446e735..21d0aae 100755 --- a/fixco_custom/views/stock_picking.xml +++ b/fixco_custom/views/stock_picking.xml @@ -55,6 +55,14 @@ code action = records.open_form_shipment_group() + + + Print Picking List + + + code + action = records.open_form_print_picking_list() + check.product.tree diff --git a/fixco_custom/views/stock_picking_print_picking_list.xml b/fixco_custom/views/stock_picking_print_picking_list.xml new file mode 100644 index 0000000..1903c8f --- /dev/null +++ b/fixco_custom/views/stock_picking_print_picking_list.xml @@ -0,0 +1,32 @@ + + + + + Stock Picking Print Picking List + stock.picking.print_picking_list + +
+ +
+

Create Print Picking List for Selected Stock Picking

+
+
+
+
+
+
+
+ + + Create Print Picking List + stock.picking.print_picking_list + ir.actions.act_window + form + + new + +
+
\ No newline at end of file -- cgit v1.2.3