From 49b8f17c48a04b28a54608cf45367266f35cf420 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 11 Oct 2024 11:21:52 +0700 Subject: add dokumentasi driver --- indoteknik_custom/models/stock_picking.py | 2 ++ 1 file changed, 2 insertions(+) (limited to 'indoteknik_custom/models/stock_picking.py') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 14190474..066ce238 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -53,6 +53,8 @@ class StockPicking(models.Model): readonly=True, copy=False ) + sj_documentation = fields.Binary(string="Dokumentasi Surat Jalan", ) + paket_documentation = fields.Binary(string="Dokumentasi Paket", ) approval_status = fields.Selection([ ('pengajuan1', 'Approval Accounting'), -- cgit v1.2.3 From e8be87ce9143c92e2b1011649fa6b8280338fa69 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Wed, 23 Oct 2024 09:12:35 +0700 Subject: fedback indoteknik delivery --- indoteknik_custom/models/stock_picking.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'indoteknik_custom/models/stock_picking.py') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 066ce238..9dede1af 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -25,7 +25,7 @@ class StockPicking(models.Model): # Delivery Order driver_departure_date = fields.Datetime( - string='Driver Departure Date', + string='Delivery Departure Date', copy=False ) arrival_time = fields.Datetime( @@ -33,7 +33,7 @@ class StockPicking(models.Model): copy=False ) driver_arrival_date = fields.Datetime( - string='Driver Arrival Date', + string='Delivery Arrival Date', readonly=True, copy=False ) @@ -55,6 +55,8 @@ class StockPicking(models.Model): ) sj_documentation = fields.Binary(string="Dokumentasi Surat Jalan", ) paket_documentation = fields.Binary(string="Dokumentasi Paket", ) + sj_return_date = fields.Datetime(string="SJ Return Date", ) + responsible = fields.Many2one('res.users', string='Responsible', tracking=True) approval_status = fields.Selection([ ('pengajuan1', 'Approval Accounting'), @@ -419,7 +421,7 @@ class StockPicking(models.Model): self.date_reserved = current_time self.validation_minus_onhand_quantity() - + self.responsible = self.env.user.id res = super(StockPicking, self).button_validate() self.calculate_line_no() self.date_done = datetime.datetime.utcnow() -- cgit v1.2.3 From af190fa1e5e9301d84307b39b1927f77d3f0ee21 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 25 Oct 2024 09:03:36 +0700 Subject: fix bug date reserved --- indoteknik_custom/models/stock_picking.py | 73 +++++++++++++++++++++++-------- 1 file changed, 55 insertions(+), 18 deletions(-) (limited to 'indoteknik_custom/models/stock_picking.py') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 2a73d631..df72dadf 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -110,43 +110,78 @@ class StockPicking(models.Model): def action_send_to_biteship(self): url = "https://api.biteship.com/v1/orders" - api_key = "biteship_test.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSW5kb3Rla25payIsInVzZXJJZCI6IjY3MTViYTJkYzVkMjdkMDAxMjRjODk2MiIsImlhdCI6MTcyOTQ5ODAwMX0.L6C73couP4-cgVEfhKI2g7eMCMo3YOFSRZhS-KSuHNA" - items_data = [] - for item in self.items: - items_data.append({ - "name": item.name, - "description": item.description, - "category": item.category, - "value": item.value, - "quantity": item.quantity, - "weight": item.weight - }) - + # Mencari data sale.order.line berdasarkan sale_id + products = self.env['sale.order.line'].search([('order_id', '=', self.sale_id.id)]) + + # Fungsi untuk membangun items_data dari order lines + def build_items_data(lines): + return [{ + "name": line.product_id.name, + "description": line.name, + "value": line.price_unit, + "quantity": line.product_uom_qty, + "weight": line.weight + } for line in lines] + + # Items untuk pengiriman standard + items_data_standard = build_items_data(products) + + # Items untuk pengiriman instant, mengambil product_id dari move_line_ids_without_package + items_data_instant = [] + for move_line in self.move_line_ids_without_package: + # Mencari baris di sale.order.line berdasarkan product_id dari move_line + order_line = self.env['sale.order.line'].search([ + ('order_id', '=', self.sale_id.id), + ('product_id', '=', move_line.product_id.id) + ], limit=1) + + if order_line: + items_data_instant.append({ + "name": order_line.product_id.name, + "description": order_line.name, + "value": order_line.price_unit, + "quantity": move_line.qty_done, # Menggunakan qty_done dari move_line + "weight": order_line.weight + }) + payload = { "shipper_contact_name": self.carrier_id.pic_name or '', "shipper_contact_phone": self.carrier_id.pic_phone or '', - # "shipper_contact_email": "sales@indoteknik.co.id", "shipper_organization": self.carrier_id.name, "origin_contact_name": "PT. Indoteknik Dotcom Gemilang", "origin_contact_phone": "081717181922", "origin_address": "Jl. Bandengan Utara Komp A & BRT. Penjaringan, Kec. Penjaringan, Jakarta (BELAKANG INDOMARET) KOTA JAKARTA UTARA PENJARINGAN", - "origin_postal_code": "14440", + "origin_postal_code": 14440, "destination_contact_name": self.real_shipping_id.name, "destination_contact_phone": self.real_shipping_id.phone or self.real_shipping_id.mobile, - "destination_contact_email": self.real_shipping_id.email or '', "destination_address": self.real_shipping_id.street, "destination_postal_code": self.real_shipping_id.zip, - "items": items_data + "courier_type": "reg", + "courier_company": self.carrier_id.name.lower(), + "delivery_type": "now", + "destination_postal_code": self.real_shipping_id.zip, + "items": items_data_standard } + # Cek jika pengiriman instant atau same_day + if "instant" in self.sale_id.delivery_service_type or "same_day" in self.sale_id.delivery_service_type: + payload.update({ + "origin_note": "BELAKANG INDOMARET", + "courier_company": self.carrier_id.name.lower(), + "courier_type": self.sale_id.delivery_service_type, + "delivery_type": "now", + "items": items_data_instant # Gunakan items untuk instant + }) + headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } - response = requests.post(url, headers=headers, data=json.dumps(payload)) + # Kirim request ke Biteship + response = requests.post(url, headers=headers, json=payload) if response.status_code == 201: return response.json() @@ -218,7 +253,9 @@ class StockPicking(models.Model): ]) data.state_reserve = 'ready' - data.date_reserved = datetime.datetime.utcnow() + if not data.date_reserved: + data.date_reserved = datetime.datetime.utcnow() + for rec in fullfilment: if rec.reserved_from not in ['Inventory On Hand', 'Reserved from stock', 'Free Stock']: data.state_reserve = 'waiting' -- cgit v1.2.3 From 9b86d64f64e149d26b5e33254fefd5dfc15ce1c4 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 31 Oct 2024 09:03:21 +0700 Subject: approval retur picking --- indoteknik_custom/models/stock_picking.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'indoteknik_custom/models/stock_picking.py') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 4c9d7658..107a6e72 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -104,6 +104,7 @@ class StockPicking(models.Model): ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice') ], string='Invoice Status', related="sale_id.invoice_status") + note_return = fields.Text(string="Note Return", help="Catatan untuk kirim barang kembali") state_reserve = fields.Selection([ ('waiting', 'Waiting For Fullfilment'), @@ -445,6 +446,11 @@ class StockPicking(models.Model): pick.approval_return_status = 'approved' else: pick.approval_return_status = 'pengajuan1' + action = self.env['ir.actions.act_window']._for_xml_id('indoteknik_custom.action_stock_return_note_wizard') + action['context'] = { + 'picking_ids': [x.id for x in self] + } + return action def calculate_line_no(self): for picking in self: @@ -503,6 +509,9 @@ class StockPicking(models.Model): def button_validate(self): + if not self.env.user.is_logistic_approver and 'Return of' in self.origin: + raise UserError("Button ini hanya untuk Logistik") + if self._name != 'stock.picking': return super(StockPicking, self).button_validate() @@ -553,6 +562,11 @@ class StockPicking(models.Model): self.date_done = datetime.datetime.utcnow() self.state_reserve = 'done' return res + def action_cancel(self): + if not self.env.user.is_logistic_approver and 'Return of' in self.origin: + raise UserError("Button ini hanya untuk Logistik") + res = super(StockPicking, self).action_cancel() + return res @api.model def create(self, vals): @@ -688,4 +702,4 @@ class StockPicking(models.Model): formatted_fastest_eta = fastest_eta.strftime(format_time_fastest) formatted_longest_eta = longest_eta.strftime(format_time) - return f'{formatted_fastest_eta} - {formatted_longest_eta}' + return f'{formatted_fastest_eta} - {formatted_longest_eta}' \ No newline at end of file -- cgit v1.2.3 From 8d4ba8a22aa90a7c2dfad48c5de38ee17b68db60 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 7 Nov 2024 16:21:20 +0700 Subject: deactivate function constrains driver departure date date doc kirim --- indoteknik_custom/models/stock_picking.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'indoteknik_custom/models/stock_picking.py') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 4c9d7658..a4031d52 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -192,9 +192,9 @@ class StockPicking(models.Model): else: raise UserError(f"Error saat mengirim ke Biteship: {response.content}") - @api.constrains('driver_departure_date') - def constrains_driver_departure_date(self): - self.date_doc_kirim = self.driver_departure_date + # @api.constrains('driver_departure_date') + # def constrains_driver_departure_date(self): + # self.date_doc_kirim = self.driver_departure_date @api.constrains('arrival_time') def constrains_arrival_time(self): -- cgit v1.2.3 From 1d7d90b35078c82ed1904bfb4486e172488bf747 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 8 Nov 2024 14:08:10 +0700 Subject: cr function state reserve transfer --- indoteknik_custom/models/stock_picking.py | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) (limited to 'indoteknik_custom/models/stock_picking.py') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index a4031d52..1906dae0 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -246,25 +246,22 @@ class StockPicking(models.Model): # break def check_state_reserve(self): - picking = self.search([ + pickings = self.search([ ('state', 'not in', ['cancel', 'draft', 'done']), ('picking_type_code', '=', 'outgoing') - ]) + ]) - for data in picking: - fullfilment = self.env['sales.order.fullfillment'].search([ - ('sales_order_id', '=', data.sale_id.id) + for picking in pickings: + fullfillments = self.env['sales.order.fullfillment'].search([ + ('sales_order_id', '=', picking.sale_id.id) ]) - - data.state_reserve = 'ready' - if not data.date_reserved: - data.date_reserved = datetime.datetime.utcnow() - - for rec in fullfilment: - if rec.reserved_from not in ['Inventory On Hand', 'Reserved from stock', 'Free Stock']: - data.state_reserve = 'waiting' - data.date_reserved = '' - break + + picking.state_reserve = 'ready' + picking.date_reserved = picking.date_reserved or datetime.datetime.utcnow() + + if any(rec.reserved_from not in ['Inventory On Hand', 'Reserved from stock', 'Free Stock'] for rec in fullfillments): + picking.state_reserve = 'waiting' + picking.date_reserved = '' def _create_approval_notification(self, approval_role): title = 'Warning' -- cgit v1.2.3 From 4be403f544f63a5161275f0d600c6f6950f3a30c Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Mon, 11 Nov 2024 16:13:27 +0700 Subject: push --- indoteknik_custom/models/stock_picking.py | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'indoteknik_custom/models/stock_picking.py') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 107a6e72..ad31a2ba 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -445,14 +445,28 @@ class StockPicking(models.Model): if self.env.user.is_accounting: pick.approval_return_status = 'approved' else: - pick.approval_return_status = 'pengajuan1' - action = self.env['ir.actions.act_window']._for_xml_id('indoteknik_custom.action_stock_return_note_wizard') - action['context'] = { - 'picking_ids': [x.id for x in self] - } - return action + if self.picking_type_code == 'outgoing': + if self.env.user.id in [3988, 3401, 20]: + action = self.env['ir.actions.act_window']._for_xml_id('indoteknik_custom.action_stock_return_note_wizard') + action['context'] = { + 'picking_ids': [x.id for x in self] + } + return action + else: + raise UserError('Harus Sales Admin yang Ask Return') + elif self.picking_type_code == 'incoming': + if self.env.user.has_group('indoteknik_custom.group_role_purchasing'): + action = self.env['ir.actions.act_window']._for_xml_id('indoteknik_custom.action_stock_return_note_wizard') + action['context'] = { + 'picking_ids': [x.id for x in self] + } + return action + else: + raise UserError('Harus Purchasing yang Ask Return') + def calculate_line_no(self): + for picking in self: name = picking.group_id.name for move in picking.move_ids_without_package: -- cgit v1.2.3 From d9d9159e43aaabcc88661d0f23d362ed2e0128f6 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Tue, 12 Nov 2024 11:04:24 +0700 Subject: cr stock picking --- indoteknik_custom/models/stock_picking.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'indoteknik_custom/models/stock_picking.py') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index ef26e002..50e9304b 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -520,8 +520,9 @@ class StockPicking(models.Model): def button_validate(self): - if not self.env.user.is_logistic_approver and 'Return of' in self.origin: - raise UserError("Button ini hanya untuk Logistik") + if not self.env.user.is_logistic_approver and self.env.context.get('active_model') == 'stock.picking': + if self.origin and 'Return of' in self.origin: + raise UserError("Button ini hanya untuk Logistik") if self._name != 'stock.picking': return super(StockPicking, self).button_validate() @@ -574,11 +575,14 @@ class StockPicking(models.Model): self.state_reserve = 'done' return res def action_cancel(self): - if not self.env.user.is_logistic_approver and 'Return of' in self.origin: - raise UserError("Button ini hanya untuk Logistik") + if not self.env.user.is_logistic_approver and self.env.context.get('active_model') == 'stock.picking': + if self.origin and 'Return of' in self.origin: + raise UserError("Button ini hanya untuk Logistik") + res = super(StockPicking, self).action_cancel() return res + @api.model def create(self, vals): self._use_faktur(vals) -- cgit v1.2.3 From 9365e1bb72a34eb17cbb25536d9e2dbb843e7fe8 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 14 Nov 2024 10:05:08 +0700 Subject: note so line on stock picking --- indoteknik_custom/models/stock_picking.py | 1 + 1 file changed, 1 insertion(+) (limited to 'indoteknik_custom/models/stock_picking.py') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 50e9304b..ee1dd68c 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -112,6 +112,7 @@ class StockPicking(models.Model): ('done', 'Done'), ('cancel', 'Cancelled'), ], string='Status Reserve', readonly=True, tracking=True, help="The current state of the stock picking.") + notee = fields.Text(string="Note") def action_send_to_biteship(self): url = "https://api.biteship.com/v1/orders" -- cgit v1.2.3 From 5fda2edbacb79e31f26e0ba332a76244354ec337 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Sat, 16 Nov 2024 09:47:49 +0700 Subject: activate function constrains departure date --- indoteknik_custom/models/stock_picking.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'indoteknik_custom/models/stock_picking.py') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index ee1dd68c..68e94ef7 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -194,9 +194,9 @@ class StockPicking(models.Model): else: raise UserError(f"Error saat mengirim ke Biteship: {response.content}") - # @api.constrains('driver_departure_date') - # def constrains_driver_departure_date(self): - # self.date_doc_kirim = self.driver_departure_date + @api.constrains('driver_departure_date') + def constrains_driver_departure_date(self): + self.date_doc_kirim = self.driver_departure_date @api.constrains('arrival_time') def constrains_arrival_time(self): -- cgit v1.2.3 From b57a1313743121f4a6a089fd175bb1594e042afb Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Mon, 18 Nov 2024 09:58:20 +0700 Subject: cr stock_picking --- indoteknik_custom/models/stock_picking.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'indoteknik_custom/models/stock_picking.py') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 68e94ef7..430c54f3 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -196,7 +196,8 @@ class StockPicking(models.Model): @api.constrains('driver_departure_date') def constrains_driver_departure_date(self): - self.date_doc_kirim = self.driver_departure_date + if not self.date_doc_kirim: + self.date_doc_kirim = self.driver_departure_date @api.constrains('arrival_time') def constrains_arrival_time(self): @@ -450,6 +451,8 @@ class StockPicking(models.Model): 'picking_ids': [x.id for x in self] } return action + elif not self.env.user.id in [3988, 3401, 20] and 'Return of' in self.origin: + raise UserError('Harus Purchasing yang Ask Return') else: raise UserError('Harus Sales Admin yang Ask Return') elif self.picking_type_code == 'incoming': @@ -459,6 +462,8 @@ class StockPicking(models.Model): 'picking_ids': [x.id for x in self] } return action + elif not self.env.user.has_group('indoteknik_custom.group_role_purchasing') and 'Return of' in self.origin: + raise UserError('Harus Sales Admin yang Ask Return') else: raise UserError('Harus Purchasing yang Ask Return') -- cgit v1.2.3 From cc3b79a25e277bd360fdcf34eed1f26bdc44204e Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Tue, 19 Nov 2024 15:58:45 +0700 Subject: remove readonly driver_arrival_date --- indoteknik_custom/models/stock_picking.py | 1 - 1 file changed, 1 deletion(-) (limited to 'indoteknik_custom/models/stock_picking.py') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 430c54f3..464e728a 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -34,7 +34,6 @@ class StockPicking(models.Model): ) driver_arrival_date = fields.Datetime( string='Delivery Arrival Date', - readonly=True, copy=False ) delivery_tracking_no = fields.Char( -- cgit v1.2.3 From d64eccc538c5eb130efddb4d1b6c5bfc441957e8 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Tue, 19 Nov 2024 17:29:27 +0700 Subject: shipment --- indoteknik_custom/models/stock_picking.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'indoteknik_custom/models/stock_picking.py') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 430c54f3..0bcb591e 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -281,9 +281,9 @@ class StockPicking(models.Model): def _compute_shipping_status(self): for rec in self: status = 'pending' - if rec.driver_departure_date and not rec.driver_arrival_date: + if rec.driver_departure_date and not (rec.sj_return_date or rec.driver_arrival_date): status = 'shipment' - elif rec.driver_departure_date and rec.driver_arrival_date: + elif rec.driver_departure_date and (rec.sj_return_date or rec.driver_arrival_date): status = 'completed' rec.shipping_status = status @@ -657,13 +657,13 @@ class StockPicking(models.Model): manifest_datas = [] departure_date = self.driver_departure_date - arrival_date = self.driver_arrival_date + arrival_date = self.sj_return_date if self.sj_return_date else self.driver_arrival_date status = status_mapping.get(status_key) if not status: return manifest_datas - if arrival_date: + if arrival_date or self.sj_return_date: manifest_datas.append(self.create_manifest_data(status['arrival'], arrival_date)) if departure_date: manifest_datas.append(self.create_manifest_data(status['departure'], departure_date)) @@ -690,7 +690,7 @@ class StockPicking(models.Model): } if not self.waybill_id or len(self.waybill_id.manifest_ids) == 0: - response['delivered'] = self.driver_arrival_date != False + response['delivered'] = self.sj_return_date != False or self.driver_arrival_date != False return response response['delivery_order']['receiver_name'] = self.waybill_id.receiver_name -- cgit v1.2.3 From 1c8ecb8d4532e73e3cf5e5ea74e0a2ff1ca95939 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Wed, 20 Nov 2024 11:39:53 +0700 Subject: add validation if qty_done > qty_onhand --- indoteknik_custom/models/stock_picking.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'indoteknik_custom/models/stock_picking.py') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 464e728a..52e70367 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -522,12 +522,31 @@ class StockPicking(models.Model): and quant.inventory_quantity < line.product_uom_qty ): raise UserError('Quantity reserved lebih besar dari quantity onhand di product') + + def check_qty_done_stock(self): + for line in self.move_line_ids_without_package: + def check_qty_per_inventory(self, product, location): + quant = self.env['stock.quant'].search([ + ('product_id', '=', product.id), + ('location_id', '=', location.id), + ]) + if quant: + return quant.quantity + + return 0 + + qty_onhand = check_qty_per_inventory(self, line.product_id, line.location_id) + if line.qty_done > qty_onhand: + raise UserError('Quantity Done melebihi Quantity Onhand') def button_validate(self): if not self.env.user.is_logistic_approver and self.env.context.get('active_model') == 'stock.picking': if self.origin and 'Return of' in self.origin: raise UserError("Button ini hanya untuk Logistik") + + if self.picking_type_code == 'internal': + self.check_qty_done_stock() if self._name != 'stock.picking': return super(StockPicking, self).button_validate() -- cgit v1.2.3 From 5a71f4543a265562abc36630d16059f9db92d056 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 21 Nov 2024 09:24:56 +0700 Subject: cr stock_picking --- indoteknik_custom/models/stock_picking.py | 48 ++++++++++++++++--------------- 1 file changed, 25 insertions(+), 23 deletions(-) (limited to 'indoteknik_custom/models/stock_picking.py') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 071e3dfe..f17e12b7 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -442,29 +442,31 @@ class StockPicking(models.Model): for pick in self: if self.env.user.is_accounting: pick.approval_return_status = 'approved' - else: - if self.picking_type_code == 'outgoing': - if self.env.user.id in [3988, 3401, 20]: - action = self.env['ir.actions.act_window']._for_xml_id('indoteknik_custom.action_stock_return_note_wizard') - action['context'] = { - 'picking_ids': [x.id for x in self] - } - return action - elif not self.env.user.id in [3988, 3401, 20] and 'Return of' in self.origin: - raise UserError('Harus Purchasing yang Ask Return') - else: - raise UserError('Harus Sales Admin yang Ask Return') - elif self.picking_type_code == 'incoming': - if self.env.user.has_group('indoteknik_custom.group_role_purchasing'): - action = self.env['ir.actions.act_window']._for_xml_id('indoteknik_custom.action_stock_return_note_wizard') - action['context'] = { - 'picking_ids': [x.id for x in self] - } - return action - elif not self.env.user.has_group('indoteknik_custom.group_role_purchasing') and 'Return of' in self.origin: - raise UserError('Harus Sales Admin yang Ask Return') - else: - raise UserError('Harus Purchasing yang Ask Return') + continue + + action_context = { + 'picking_ids': [x.id for x in self] + } + + if self.picking_type_code == 'outgoing': + if self.env.user.id in [3988, 3401, 20] or ( + self.env.user.has_group('indoteknik_custom.group_role_purchasing') and 'Return of' in self.origin + ): + return self.env['ir.actions.act_window']._for_xml_id('indoteknik_custom.action_stock_return_note_wizard', context=action_context) + elif not self.env.user.has_group('indoteknik_custom.group_role_purchasing') and 'Return of' in self.origin: + raise UserError('Harus Purchasing yang Ask Return') + else: + raise UserError('Harus Sales Admin yang Ask Return') + + elif self.picking_type_code == 'incoming': + if self.env.user.has_group('indoteknik_custom.group_role_purchasing') or ( + self.env.user.id in [3988, 3401, 20] and 'Return of' in self.origin + ): + return self.env['ir.actions.act_window']._for_xml_id('indoteknik_custom.action_stock_return_note_wizard', context=action_context) + elif not self.env.user.id in [3988, 3401, 20] and 'Return of' in self.origin: + raise UserError('Harus Sales Admin yang Ask Return') + else: + raise UserError('Harus Purchasing yang Ask Return') def calculate_line_no(self): -- cgit v1.2.3 From ffa3c65f93c3b042fb2cb813c17483e7b8ccc4cf Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 21 Nov 2024 09:46:54 +0700 Subject: cr stock picking --- indoteknik_custom/models/stock_picking.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'indoteknik_custom/models/stock_picking.py') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index f17e12b7..16805197 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -444,15 +444,15 @@ class StockPicking(models.Model): pick.approval_return_status = 'approved' continue - action_context = { - 'picking_ids': [x.id for x in self] - } - if self.picking_type_code == 'outgoing': if self.env.user.id in [3988, 3401, 20] or ( self.env.user.has_group('indoteknik_custom.group_role_purchasing') and 'Return of' in self.origin ): - return self.env['ir.actions.act_window']._for_xml_id('indoteknik_custom.action_stock_return_note_wizard', context=action_context) + action = self.env['ir.actions.act_window']._for_xml_id('indoteknik_custom.action_stock_return_note_wizard') + action['context'] = { + 'picking_ids': [x.id for x in self] + } + return action elif not self.env.user.has_group('indoteknik_custom.group_role_purchasing') and 'Return of' in self.origin: raise UserError('Harus Purchasing yang Ask Return') else: @@ -462,7 +462,11 @@ class StockPicking(models.Model): if self.env.user.has_group('indoteknik_custom.group_role_purchasing') or ( self.env.user.id in [3988, 3401, 20] and 'Return of' in self.origin ): - return self.env['ir.actions.act_window']._for_xml_id('indoteknik_custom.action_stock_return_note_wizard', context=action_context) + action = self.env['ir.actions.act_window']._for_xml_id('indoteknik_custom.action_stock_return_note_wizard') + action['context'] = { + 'picking_ids': [x.id for x in self] + } + return action elif not self.env.user.id in [3988, 3401, 20] and 'Return of' in self.origin: raise UserError('Harus Sales Admin yang Ask Return') else: -- cgit v1.2.3 From b9bdfb05f96affaeec8e197b6585df140d4cd11c Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 21 Nov 2024 09:48:11 +0700 Subject: cr stock_picking --- indoteknik_custom/models/stock_picking.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) (limited to 'indoteknik_custom/models/stock_picking.py') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 16805197..10b26711 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -444,14 +444,13 @@ class StockPicking(models.Model): pick.approval_return_status = 'approved' continue + action = self.env['ir.actions.act_window']._for_xml_id('indoteknik_custom.action_stock_return_note_wizard') + if self.picking_type_code == 'outgoing': if self.env.user.id in [3988, 3401, 20] or ( self.env.user.has_group('indoteknik_custom.group_role_purchasing') and 'Return of' in self.origin ): - action = self.env['ir.actions.act_window']._for_xml_id('indoteknik_custom.action_stock_return_note_wizard') - action['context'] = { - 'picking_ids': [x.id for x in self] - } + action['context'] = {'picking_ids': [x.id for x in self]} return action elif not self.env.user.has_group('indoteknik_custom.group_role_purchasing') and 'Return of' in self.origin: raise UserError('Harus Purchasing yang Ask Return') @@ -462,17 +461,13 @@ class StockPicking(models.Model): if self.env.user.has_group('indoteknik_custom.group_role_purchasing') or ( self.env.user.id in [3988, 3401, 20] and 'Return of' in self.origin ): - action = self.env['ir.actions.act_window']._for_xml_id('indoteknik_custom.action_stock_return_note_wizard') - action['context'] = { - 'picking_ids': [x.id for x in self] - } + action['context'] = {'picking_ids': [x.id for x in self]} return action elif not self.env.user.id in [3988, 3401, 20] and 'Return of' in self.origin: raise UserError('Harus Sales Admin yang Ask Return') else: raise UserError('Harus Purchasing yang Ask Return') - def calculate_line_no(self): for picking in self: -- cgit v1.2.3 From 447c98f3079af31a850dd3898190da1063f45cf0 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Mon, 25 Nov 2024 09:07:05 +0700 Subject: cr validation link midtrans do --- indoteknik_custom/models/stock_picking.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'indoteknik_custom/models/stock_picking.py') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 10b26711..17dd5766 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -570,10 +570,10 @@ class StockPicking(models.Model): if self.location_dest_id.id == 47 and not self.env.user.is_purchasing_manager: raise UserError("Transfer ke gudang selisih harus di approve Rafly Hanggara") - if self.group_id.sale_id: - if self.group_id.sale_id.payment_link_midtrans: - if self.group_id.sale_id.payment_status != 'settlement': - raise UserError('Uang belum masuk (settlement), mohon konfirmasi ke sales atau finance') + # if self.group_id.sale_id: + # if self.group_id.sale_id.payment_link_midtrans: + # if self.group_id.sale_id.payment_status != 'settlement' and self.group_id.sale_id.state == 'draft': + # raise UserError('Uang belum masuk (settlement), mohon konfirmasi ke sales atau finance') if self.is_internal_use: self.approval_status = 'approved' -- cgit v1.2.3