From dc9fd38206e9234319e8088717b39cf0770aaad7 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Fri, 19 Sep 2025 17:43:59 +0700 Subject: add role and field dispatch --- indoteknik_api/controllers/api_v1/stock_picking.py | 31 ++++++++++++++-------- indoteknik_custom/models/stock_picking.py | 5 ++-- indoteknik_custom/views/stock_picking.xml | 1 + 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index 762e17c5..7a0579e3 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -124,33 +124,42 @@ class StockPicking(controller.Controller): @http.route(prefix + 'stock-picking//documentation', auth='public', methods=['PUT', 'OPTIONS'], csrf=False) @controller.Controller.must_authorized() - def write_partner_stock_picking_documentation(self, **kw): - scanid = kw.get('scanid', '').strip() + def write_partner_stock_picking_documentation(self, scanid, **kw): sj_document = kw.get('sj_document', False) paket_document = kw.get('paket_document', False) + dispatch_document = kw.get('dispatch_document', False) + driver_id = [12433, 25] + dispatch_id = [6303, 11846, 25] + + uid = request.env.user.id + is_dispatch_user = uid in dispatch_id + + if not sj_document or not paket_document: + return self.response(code=400, description='sj_document dan paket_document wajib') + + if is_dispatch_user and not dispatch_document: + return self.response(code=400, description='dispatch_document wajib untuk role dispatch') params = { 'sj_documentation': sj_document, 'paket_documentation': paket_document, 'driver_arrival_date': datetime.utcnow(), } + if dispatch_document and dispatch_id: + params['dispatch_documentation'] = dispatch_document picking_data = False - if scanid.isdigit() and int(scanid) < 2147483647: - picking_data = request.env['stock.picking'].search([('id', '=', int(scanid))], limit=1) + if scanid.isdigit() and int(scanid) < 2147483646: + picking_data = request.env['stock.picking'].search([('id', '=', int(scanid))], limit=0) if not picking_data: - picking_data = request.env['stock.picking'].search([('picking_code', '=', scanid)], limit=1) + picking_data = request.env['stock.picking'].search([('picking_code', '=', scanid)], limit=0) if not picking_data: - return self.response(code=404, description='picking not found') + return self.response(code=403, description='picking not found') picking_data.write(params) - - return self.response({ - 'name': picking_data.name - }) - + return self.response({'name': picking_data.name}) @http.route(prefix + 'webhook/biteship', type='json', auth='public', methods=['POST'], csrf=False) def update_status_from_biteship(self, **kw): diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 35d408a1..8a81c426 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -89,8 +89,9 @@ class StockPicking(models.Model): readonly=True, related="id", ) - sj_documentation = fields.Binary(string="Dokumentasi Surat Jalan", ) - paket_documentation = fields.Binary(string="Dokumentasi Paket", ) + sj_documentation = fields.Binary(string="Dokumentasi Surat Jalan") + paket_documentation = fields.Binary(string="Dokumentasi Paket") + dispatch_documentation = fields.Binary(string="Dokumentasi Dispatch") sj_return_date = fields.Datetime(string="SJ Return Date", copy=False) responsible = fields.Many2one('res.users', string='Responsible', tracking=True) diff --git a/indoteknik_custom/views/stock_picking.xml b/indoteknik_custom/views/stock_picking.xml index 0e2eb9e4..21762202 100644 --- a/indoteknik_custom/views/stock_picking.xml +++ b/indoteknik_custom/views/stock_picking.xml @@ -235,6 +235,7 @@ + -- cgit v1.2.3 From e65c7a9f3f942e0a1ba9bc47f2c49c4278981aa2 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Sat, 20 Sep 2025 10:35:02 +0700 Subject: dispatch image API --- indoteknik_api/controllers/api_v1/stock_picking.py | 48 ++++++++++++++-------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index 7a0579e3..58d181e8 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -125,29 +125,31 @@ class StockPicking(controller.Controller): @http.route(prefix + 'stock-picking//documentation', auth='public', methods=['PUT', 'OPTIONS'], csrf=False) @controller.Controller.must_authorized() def write_partner_stock_picking_documentation(self, scanid, **kw): - sj_document = kw.get('sj_document', False) - paket_document = kw.get('paket_document', False) + sj_document = kw.get('sj_document', False) + paket_document = kw.get('paket_document', False) dispatch_document = kw.get('dispatch_document', False) - driver_id = [12433, 25] - dispatch_id = [6303, 11846, 25] - uid = request.env.user.id - is_dispatch_user = uid in dispatch_id + # ===== Role by EMAIL ===== + driver_emails = { + 'driverindoteknik@gmail.com', + 'sulistianaridwan8@gmail.com', + } + dispatch_emails = { + 'rahmat.afiudin@gmail.com', + } - if not sj_document or not paket_document: - return self.response(code=400, description='sj_document dan paket_document wajib') + login = (request.env.user.login or '').lower() + is_dispatch_user = login in dispatch_emails + is_driver_user = (login in driver_emails) and not is_dispatch_user - if is_dispatch_user and not dispatch_document: - return self.response(code=400, description='dispatch_document wajib untuk role dispatch') + # ===== Validasi minimal ===== + if not sj_document or not paket_document: + return self.response(code=400, description='dispatch_document wajib untuk role dispatch login= %s' % login) - params = { - 'sj_documentation': sj_document, - 'paket_documentation': paket_document, - 'driver_arrival_date': datetime.utcnow(), - } - if dispatch_document and dispatch_id: - params['dispatch_documentation'] = dispatch_document + if is_dispatch_user and not dispatch_document and not is_driver_user: + return self.response(code=400, description='dispatch_document wajib untuk role dispatch login= %s' % login) + # ===== Cari picking by id / picking_code ===== picking_data = False if scanid.isdigit() and int(scanid) < 2147483646: picking_data = request.env['stock.picking'].search([('id', '=', int(scanid))], limit=0) @@ -158,10 +160,20 @@ class StockPicking(controller.Controller): if not picking_data: return self.response(code=403, description='picking not found') + # ===== Build params & write ===== + params = { + 'sj_documentation': sj_document, + 'paket_documentation': paket_document, + 'driver_arrival_date': datetime.utcnow(), + } + if dispatch_document: + params['dispatch_documentation'] = dispatch_document + picking_data.write(params) return self.response({'name': picking_data.name}) @http.route(prefix + 'webhook/biteship', type='json', auth='public', methods=['POST'], csrf=False) + def update_status_from_biteship(self, **kw): _logger.info("Biteship Webhook: Request received at controller start (type='json').") @@ -169,7 +181,7 @@ class StockPicking(controller.Controller): # Karena type='json', Odoo secara otomatis akan mem-parsing JSON untuk Anda. # 'data' akan berisi dictionary Python dari payload JSON Biteship. data = request.jsonrequest - + # Log ini akan menunjukkan payload yang diterima (sudah dalam bentuk dict) _logger.info(f"Biteship Webhook: Parsed JSON data from request.jsonrequest: {json.dumps(data)}") -- cgit v1.2.3 From 0668b3f990111d25c4ed18465a77495cb59c07f2 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Sat, 20 Sep 2025 13:20:30 +0700 Subject: fix api --- indoteknik_api/controllers/api_v1/stock_picking.py | 1 - 1 file changed, 1 deletion(-) diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index 58d181e8..3cf42232 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -173,7 +173,6 @@ class StockPicking(controller.Controller): return self.response({'name': picking_data.name}) @http.route(prefix + 'webhook/biteship', type='json', auth='public', methods=['POST'], csrf=False) - def update_status_from_biteship(self, **kw): _logger.info("Biteship Webhook: Request received at controller start (type='json').") -- cgit v1.2.3 From 382e11297d9f3f05b654c5ebd30983b981b960e1 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Thu, 25 Sep 2025 09:01:25 +0700 Subject: dispatch it email --- indoteknik_api/controllers/api_v1/stock_picking.py | 1 + 1 file changed, 1 insertion(+) diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index 3cf42232..691d9fb7 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -136,6 +136,7 @@ class StockPicking(controller.Controller): } dispatch_emails = { 'rahmat.afiudin@gmail.com', + 'it@fixcomart.co.id' } login = (request.env.user.login or '').lower() -- cgit v1.2.3 From fabd151ff9a8b4c118062299653c77fd34ea89df Mon Sep 17 00:00:00 2001 From: HafidBuroiroh Date: Thu, 25 Sep 2025 11:22:26 +0700 Subject: add misc in refund --- indoteknik_custom/models/refund_sale_order.py | 33 ++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index 96082447..f4711faf 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -303,22 +303,35 @@ class RefundSaleOrder(models.Model): ('journal_id', '=', 7), ('state', '=', 'posted'), ]) + + misc = self.env['account.move'].search([ + ('ref', 'ilike', invoices.mapped('name')[0]), + ('journal_id', '=', 13), + ('state', '=', 'posted'), + ]) has_moves = bool(moves) has_piutangmdr = bool(piutangmdr) has_piutangbca = bool(piutangbca) + has_misc = bool(misc) ssos = self.env['sale.order'].browse(so_ids) has_settlement = any(so.payment_status == 'settlement' for so in ssos) sisa_uang_masuk = 0.0 if has_moves and has_settlement: sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(ssos.mapped('gross_amount')) + elif has_moves and has_misc: + sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) elif has_moves: sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) elif has_settlement: sisa_uang_masuk = sum(ssos.mapped('gross_amount')) + elif has_piutangbca and has_misc: + sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) elif has_piutangbca: sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + elif has_piutangmdr and has_misc: + sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) elif has_piutangmdr: sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) else: @@ -528,8 +541,14 @@ class RefundSaleOrder(models.Model): ('journal_id', '=', 7), ('state', '=', 'posted'), ]) + + misc = self.env['account.move'].search([ + ('ref', 'ilike', invoice_ids.mapped('name')[0]), + ('journal_id', '=', 13), + ('state', '=', 'posted'), + ]) - all_moves = moves | piutangbca | piutangmdr + all_moves = moves | piutangbca | piutangmdr | misc for move in all_moves: url = f"/web#id={move.id}&model=account.move&view_type=form" @@ -581,21 +600,33 @@ class RefundSaleOrder(models.Model): ('journal_id', '=', 7), ('state', '=', 'posted'), ]) + misc = self.env['account.move'].search([ + ('ref', 'ilike', all_invoices.mapped('name')[0]), + ('journal_id', '=', 13), + ('state', '=', 'posted'), + ]) has_moves = bool(moves) has_piutangmdr = bool(piutangmdr) has_piutangbca = bool(piutangbca) + has_misc = bool(misc) ssos = self.env['sale.order'].browse(so_ids) has_settlement = any(so.payment_status == 'settlement' for so in ssos) sisa_uang_masuk = 0.0 if has_moves and has_settlement: sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(ssos.mapped('gross_amount')) + if has_moves and has_misc: + sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) elif has_moves: sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) elif has_settlement: sisa_uang_masuk = sum(ssos.mapped('gross_amount')) + elif has_piutangbca and has_misc: + sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) elif has_piutangbca: sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + elif has_piutangmdr and has_misc: + sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) elif has_piutangmdr: sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) -- cgit v1.2.3 From 5a91286d678df3dc7e1ef1c0105211fb9f9425f2 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 25 Sep 2025 11:44:37 +0700 Subject: push --- indoteknik_custom/report/purchase_report.xml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/indoteknik_custom/report/purchase_report.xml b/indoteknik_custom/report/purchase_report.xml index 9ff7e718..e52ac848 100644 --- a/indoteknik_custom/report/purchase_report.xml +++ b/indoteknik_custom/report/purchase_report.xml @@ -61,9 +61,7 @@ Alamat Pengiriman
PT. Indoteknik Dotcom Gemilang
- Jl. Bandengan Utara Komp A 8 B - RT. Penjaringan, Kec. Penjaringan, Jakarta - (BELAKANG INDOMARET)
+Jl. Bandengan Utara Raya No.85A, RW.16, Penjaringan, Kecamatan Penjaringan, Jkt Utara
Daerah Khusus Ibukota Jakarta 14440 -- cgit v1.2.3 From d6c0d83b317aa89683e825f20c04842e532de4e1 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 25 Sep 2025 11:53:41 +0700 Subject: PUSH --- indoteknik_custom/report/purchase_report.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indoteknik_custom/report/purchase_report.xml b/indoteknik_custom/report/purchase_report.xml index e52ac848..11c36dc6 100644 --- a/indoteknik_custom/report/purchase_report.xml +++ b/indoteknik_custom/report/purchase_report.xml @@ -61,7 +61,7 @@ Alamat Pengiriman
PT. Indoteknik Dotcom Gemilang
-Jl. Bandengan Utara Raya No.85A, RW.16, Penjaringan, Kecamatan Penjaringan, Jkt Utara
+Jl. Bandengan Utara Raya No. 85A, 8-9 RT.3/RW.16, Penjaringan, Kecamatan Penjaringan, Jkt Utara
Daerah Khusus Ibukota Jakarta 14440 -- cgit v1.2.3 From 66222ebc7fa538749e8ac1377cde95950639dbd6 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 25 Sep 2025 11:54:44 +0700 Subject: push --- indoteknik_custom/report/purchase_report.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/indoteknik_custom/report/purchase_report.xml b/indoteknik_custom/report/purchase_report.xml index 11c36dc6..9ff7e718 100644 --- a/indoteknik_custom/report/purchase_report.xml +++ b/indoteknik_custom/report/purchase_report.xml @@ -61,7 +61,9 @@ Alamat Pengiriman
PT. Indoteknik Dotcom Gemilang
-Jl. Bandengan Utara Raya No. 85A, 8-9 RT.3/RW.16, Penjaringan, Kecamatan Penjaringan, Jkt Utara
+ Jl. Bandengan Utara Komp A 8 B + RT. Penjaringan, Kec. Penjaringan, Jakarta + (BELAKANG INDOMARET)
Daerah Khusus Ibukota Jakarta 14440 -- cgit v1.2.3 From 66d6b9ec9de0bd96363bffbbadb3043ee4873716 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 25 Sep 2025 13:13:50 +0700 Subject: push --- indoteknik_custom/report/purchase_report.xml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/indoteknik_custom/report/purchase_report.xml b/indoteknik_custom/report/purchase_report.xml index 9ff7e718..3521edb7 100644 --- a/indoteknik_custom/report/purchase_report.xml +++ b/indoteknik_custom/report/purchase_report.xml @@ -61,9 +61,7 @@ Alamat Pengiriman
PT. Indoteknik Dotcom Gemilang
- Jl. Bandengan Utara Komp A 8 B - RT. Penjaringan, Kec. Penjaringan, Jakarta - (BELAKANG INDOMARET)
+ Jl. Bandengan Utara Raya No. 85A, 8-9 RT.3/RW.16, Penjaringan, Kecamatan Penjaringan, Jkt Utara
Daerah Khusus Ibukota Jakarta 14440 -- cgit v1.2.3 From 49aac1b287d6aaa389d7b9c17f60841e2294f4dd Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 25 Sep 2025 13:15:02 +0700 Subject: push --- indoteknik_custom/report/purchase_report.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/indoteknik_custom/report/purchase_report.xml b/indoteknik_custom/report/purchase_report.xml index 3521edb7..9ff7e718 100644 --- a/indoteknik_custom/report/purchase_report.xml +++ b/indoteknik_custom/report/purchase_report.xml @@ -61,7 +61,9 @@ Alamat Pengiriman
PT. Indoteknik Dotcom Gemilang
- Jl. Bandengan Utara Raya No. 85A, 8-9 RT.3/RW.16, Penjaringan, Kecamatan Penjaringan, Jkt Utara
+ Jl. Bandengan Utara Komp A 8 B + RT. Penjaringan, Kec. Penjaringan, Jakarta + (BELAKANG INDOMARET)
Daerah Khusus Ibukota Jakarta 14440 -- cgit v1.2.3 From 88a5f39629ac6f5700af27a8144dd3a761e5aa41 Mon Sep 17 00:00:00 2001 From: HafidBuroiroh Date: Thu, 25 Sep 2025 13:31:45 +0700 Subject: refund --- indoteknik_custom/models/refund_sale_order.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index f4711faf..eca781e2 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -542,11 +542,14 @@ class RefundSaleOrder(models.Model): ('state', '=', 'posted'), ]) - misc = self.env['account.move'].search([ - ('ref', 'ilike', invoice_ids.mapped('name')[0]), - ('journal_id', '=', 13), - ('state', '=', 'posted'), - ]) + misc = self.env['account.move'] + if invoice_ids: + invoice_name = invoice_ids.mapped('name')[0] + misc = self.env['account.move'].search([ + ('ref', 'ilike', invoice_name), + ('journal_id', '=', 13), + ('state', '=', 'posted'), + ]) all_moves = moves | piutangbca | piutangmdr | misc -- cgit v1.2.3 From 07502e1f93e166abea766c8b4b50ed2e94639df8 Mon Sep 17 00:00:00 2001 From: HafidBuroiroh Date: Thu, 25 Sep 2025 13:44:25 +0700 Subject: refund --- indoteknik_custom/models/refund_sale_order.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index eca781e2..2a6a9d9b 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -306,6 +306,7 @@ class RefundSaleOrder(models.Model): misc = self.env['account.move'].search([ ('ref', 'ilike', invoices.mapped('name')[0]), + ('ref', 'not ilike', 'reklas'), ('journal_id', '=', 13), ('state', '=', 'posted'), ]) @@ -547,6 +548,7 @@ class RefundSaleOrder(models.Model): invoice_name = invoice_ids.mapped('name')[0] misc = self.env['account.move'].search([ ('ref', 'ilike', invoice_name), + ('ref', 'not ilike', 'reklas'), ('journal_id', '=', 13), ('state', '=', 'posted'), ]) @@ -605,6 +607,7 @@ class RefundSaleOrder(models.Model): ]) misc = self.env['account.move'].search([ ('ref', 'ilike', all_invoices.mapped('name')[0]), + ('ref', 'not ilike', 'reklas'), ('journal_id', '=', 13), ('state', '=', 'posted'), ]) -- cgit v1.2.3 From 49368fcb139eac9de0f1787fdd1477570ed9dbda Mon Sep 17 00:00:00 2001 From: Miqdad Date: Thu, 25 Sep 2025 16:03:29 +0700 Subject: global pj seen --- indoteknik_custom/models/purchasing_job.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/indoteknik_custom/models/purchasing_job.py b/indoteknik_custom/models/purchasing_job.py index db733b5a..d830bf60 100644 --- a/indoteknik_custom/models/purchasing_job.py +++ b/indoteknik_custom/models/purchasing_job.py @@ -29,20 +29,25 @@ class PurchasingJob(models.Model): so_number = fields.Text(string='SO Number', copy=False) check_pj = fields.Boolean(compute='_get_check_pj', string='Linked') + def action_open_job_detail(self): self.ensure_one() Seen = self.env['purchasing.job.seen'] + seen = Seen.search([ - ('user_id', '=', self.env.uid), ('product_id', '=', self.product_id.id) ], limit=1) if seen: - seen.so_snapshot = self.so_number - seen.seen_date = fields.Datetime.now() + # update snapshot & tanggal + (opsional) siapa yg terakhir lihat + seen.write({ + 'so_snapshot': self.so_number, + 'seen_date': fields.Datetime.now(), + 'user_id': self.env.user.id, # kalau user_id tetap dipakai sbg last_seen_by + }) else: Seen.create({ - 'user_id': self.env.uid, + 'user_id': self.env.user.id, # atau False kalau mau kosongkan 'product_id': self.product_id.id, 'so_snapshot': self.so_number, }) @@ -56,17 +61,13 @@ class PurchasingJob(models.Model): 'target': 'current', } - @api.depends('so_number') def _get_check_pj(self): + Seen = self.env['purchasing.job.seen'] for rec in self: - seen = self.env['purchasing.job.seen'].search([ - ('user_id', '=', self.env.uid), - ('product_id', '=', rec.product_id.id) - ], limit=1) + seen = Seen.search([('product_id', '=', rec.product_id.id)], limit=1) rec.check_pj = bool(seen and seen.so_snapshot == rec.so_number) - def unlink(self): # Example: Delete related records from the underlying model underlying_records = self.env['purchasing.job'].search([ -- cgit v1.2.3 From 1299851d0d6280d92ccc4123a82ea083a92bc7ec Mon Sep 17 00:00:00 2001 From: Miqdad Date: Thu, 25 Sep 2025 16:06:22 +0700 Subject: global pj seen --- indoteknik_custom/models/purchasing_job.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/indoteknik_custom/models/purchasing_job.py b/indoteknik_custom/models/purchasing_job.py index d830bf60..3151f0f6 100644 --- a/indoteknik_custom/models/purchasing_job.py +++ b/indoteknik_custom/models/purchasing_job.py @@ -39,15 +39,13 @@ class PurchasingJob(models.Model): ], limit=1) if seen: - # update snapshot & tanggal + (opsional) siapa yg terakhir lihat seen.write({ 'so_snapshot': self.so_number, 'seen_date': fields.Datetime.now(), - 'user_id': self.env.user.id, # kalau user_id tetap dipakai sbg last_seen_by - }) + 'user_id': self.env.user.id, }) else: Seen.create({ - 'user_id': self.env.user.id, # atau False kalau mau kosongkan + 'user_id': self.env.user.id, 'product_id': self.product_id.id, 'so_snapshot': self.so_number, }) -- cgit v1.2.3 From 7fed48782b6790be66cf8134eacc36881eeb29d4 Mon Sep 17 00:00:00 2001 From: HafidBuroiroh Date: Thu, 25 Sep 2025 16:11:07 +0700 Subject: refund --- indoteknik_custom/models/refund_sale_order.py | 86 ++++++++++++++++++++++++++- indoteknik_custom/models/sale_order.py | 17 ++++++ 2 files changed, 101 insertions(+), 2 deletions(-) diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index 2a6a9d9b..ae8df4ef 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -310,8 +310,22 @@ class RefundSaleOrder(models.Model): ('journal_id', '=', 13), ('state', '=', 'posted'), ]) + moves2 = self.env['account.move'] + if so_ids: + so_names = self.env['sale.order'].browse(so_ids).mapped('name') + domain = [ + ('journal_id', '=', 11), + ('state', '=', 'posted'), + ('ref', 'ilike', 'dp') + ] + if so_names: + domain += ['|'] * (len(so_names) - 1) + for n in so_names: + domain.append(('ref', 'ilike', n)) + moves2 = self.env['account.move'].search(domain) has_moves = bool(moves) + has_moves2 = bool(moves2) has_piutangmdr = bool(piutangmdr) has_piutangbca = bool(piutangbca) has_misc = bool(misc) @@ -319,20 +333,38 @@ class RefundSaleOrder(models.Model): has_settlement = any(so.payment_status == 'settlement' for so in ssos) sisa_uang_masuk = 0.0 + if has_moves and has_settlement: sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(ssos.mapped('gross_amount')) + elif has_moves2: + sisa_uang_masuk = sum(moves2.mapped('amount_total_signed')) elif has_moves and has_misc: sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + elif has_moves and has_misc and has_moves2: + sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) + elif has_moves and has_moves2: + sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) elif has_moves: sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + elif has_settlement: sisa_uang_masuk = sum(ssos.mapped('gross_amount')) + + elif has_piutangbca and has_misc and has_moves2: + sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) elif has_piutangbca and has_misc: sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + elif has_piutangbca and has_moves2: + sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) elif has_piutangbca: sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + + elif has_piutangmdr and has_misc and has_moves2: + sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) elif has_piutangmdr and has_misc: sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + elif has_piutangmdr and has_moves2: + sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) elif has_piutangmdr: sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) else: @@ -542,6 +574,21 @@ class RefundSaleOrder(models.Model): ('journal_id', '=', 7), ('state', '=', 'posted'), ]) + + moves2 = self.env['account.move'] + if rec.sale_order_ids: + so_names = rec.sale_order_ids.mapped('name') + + domain = [ + ('journal_id', '=', 11), + ('state', '=', 'posted'), + ('ref', 'ilike', 'dp') + ] + domain += ['|'] * (len(so_names) - 1) + for n in so_names: + domain.append(('ref', 'ilike', n)) + + moves2 = self.env['account.move'].search(domain) misc = self.env['account.move'] if invoice_ids: @@ -553,7 +600,7 @@ class RefundSaleOrder(models.Model): ('state', '=', 'posted'), ]) - all_moves = moves | piutangbca | piutangmdr | misc + all_moves = moves | piutangbca | piutangmdr | misc | moves2 for move in all_moves: url = f"/web#id={move.id}&model=account.move&view_type=form" @@ -611,7 +658,24 @@ class RefundSaleOrder(models.Model): ('journal_id', '=', 13), ('state', '=', 'posted'), ]) + moves2 = self.env['account.move'] + if so_ids: + so_records = self.env['sale.order'].browse(so_ids) + so_names = so_records.mapped('name') + + domain = [ + ('journal_id', '=', 11), + ('state', '=', 'posted'), + ('ref', 'ilike', 'dp') + ] + domain += ['|'] * (len(so_names) - 1) + for n in so_names: + domain.append(('ref', 'ilike', n)) + + moves2 = self.env['account.move'].search(domain) + has_moves = bool(moves) + has_moves2 = bool(moves2) has_piutangmdr = bool(piutangmdr) has_piutangbca = bool(piutangbca) has_misc = bool(misc) @@ -619,20 +683,38 @@ class RefundSaleOrder(models.Model): has_settlement = any(so.payment_status == 'settlement' for so in ssos) sisa_uang_masuk = 0.0 + if has_moves and has_settlement: sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(ssos.mapped('gross_amount')) - if has_moves and has_misc: + elif has_moves2: + sisa_uang_masuk = sum(moves2.mapped('amount_total_signed')) + elif has_moves and has_misc: sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + elif has_moves and has_misc and has_moves2: + sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) + elif has_moves and has_moves2: + sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) elif has_moves: sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + elif has_settlement: sisa_uang_masuk = sum(ssos.mapped('gross_amount')) + elif has_piutangbca and has_misc: sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + elif has_piutangbca and has_misc and has_moves2: + sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) + elif has_piutangbca and has_moves2: + sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) elif has_piutangbca: sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + + elif has_piutangmdr and has_misc and has_moves2: + sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) elif has_piutangmdr and has_misc: sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + elif has_piutangmdr and has_moves2: + sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) elif has_piutangmdr: sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 39830ffc..36dcbb4e 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -3278,10 +3278,17 @@ class SaleOrder(models.Model): ('state', '=', 'posted'), ]) + moves2 = self.env['account.move'].search([ + ('ref', 'ilike', self.name), + ('journal_id', '=', 11), + ('state', '=', 'posted'), + ]) + # Default 0 total_uang_muka = 0.0 has_moves = bool(moves) + has_moves2 = bool(moves2) has_piutangmdr = bool(piutangmdr) has_piutangbca = bool(piutangbca) has_settlement = self.payment_status == 'settlement' @@ -3290,6 +3297,8 @@ class SaleOrder(models.Model): total_uang_muka = sum(moves.mapped('amount_total_signed')) + self.gross_amount elif has_moves: total_uang_muka = sum(moves.mapped('amount_total_signed')) + elif has_moves2: + total_uang_muka = sum(moves2.mapped('amount_total_signed')) elif has_settlement: total_uang_muka = self.gross_amount elif has_piutangbca: @@ -3377,12 +3386,20 @@ class SaleOrder(models.Model): ('state', '=', 'posted'), ]) + moves2 = self.env['account.move'].search([ + ('ref', 'ilike', order.name), + ('journal_id', '=', 11), + ('state', '=', 'posted'), + ]) + total_uang_muka = 0.0 if moves and order.payment_status == 'settlement': total_uang_muka = order.gross_amount + sum(moves.mapped('amount_total_signed')) or 0.0 elif moves: total_uang_muka = sum(moves.mapped('amount_total_signed')) or 0.0 + elif moves2: + total_uang_muka = sum(moves2.mapped('amount_total_signed')) or 0.0 elif order.payment_status == 'settlement': total_uang_muka = order.gross_amount else: -- cgit v1.2.3 From b29805b2540c357f420580aa746b376f0b4c54bd Mon Sep 17 00:00:00 2001 From: HafidBuroiroh Date: Thu, 25 Sep 2025 17:04:52 +0700 Subject: refund --- indoteknik_custom/models/refund_sale_order.py | 102 ++++++++++---------------- 1 file changed, 37 insertions(+), 65 deletions(-) diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index ae8df4ef..820a58f7 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -333,41 +333,30 @@ class RefundSaleOrder(models.Model): has_settlement = any(so.payment_status == 'settlement' for so in ssos) sisa_uang_masuk = 0.0 + amounts = [] if has_moves and has_settlement: - sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(ssos.mapped('gross_amount')) - elif has_moves2: - sisa_uang_masuk = sum(moves2.mapped('amount_total_signed')) - elif has_moves and has_misc: - sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) - elif has_moves and has_misc and has_moves2: - sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) - elif has_moves and has_moves2: - sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) - elif has_moves: - sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) - - elif has_settlement: - sisa_uang_masuk = sum(ssos.mapped('gross_amount')) - - elif has_piutangbca and has_misc and has_moves2: - sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) - elif has_piutangbca and has_misc: - sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) - elif has_piutangbca and has_moves2: - sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) - elif has_piutangbca: - sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) - - elif has_piutangmdr and has_misc and has_moves2: - sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) - elif has_piutangmdr and has_misc: - sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) - elif has_piutangmdr and has_moves2: - sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) - elif has_piutangmdr: - sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + amounts.append(sum(moves.mapped('amount_total_signed'))) + amounts.append(sum(ssos.mapped('gross_amount'))) else: + if has_moves: + amounts.append(sum(moves.mapped('amount_total_signed'))) + if has_settlement: + amounts.append(sum(ssos.mapped('gross_amount'))) + + # sisanya bisa dijumlahkan tanpa konflik + if has_moves2: + amounts.append(sum(moves2.mapped('amount_total_signed'))) + if has_piutangbca: + amounts.append(sum(piutangbca.mapped('amount_total_signed'))) + if has_piutangmdr: + amounts.append(sum(piutangmdr.mapped('amount_total_signed'))) + if has_misc: + amounts.append(sum(misc.mapped('amount_total_signed'))) + + sisa_uang_masuk = sum(amounts) + + if not sisa_uang_masuk: raise UserError( "❌ Tidak bisa melakukan refund karena SO tidak memiliki Record Uang Masuk " "(Journal Uang Muka / Payment Invoices / Midtrans Payment)." @@ -684,39 +673,22 @@ class RefundSaleOrder(models.Model): sisa_uang_masuk = 0.0 - if has_moves and has_settlement: - sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(ssos.mapped('gross_amount')) - elif has_moves2: - sisa_uang_masuk = sum(moves2.mapped('amount_total_signed')) - elif has_moves and has_misc: - sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) - elif has_moves and has_misc and has_moves2: - sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) - elif has_moves and has_moves2: - sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) - elif has_moves: - sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) - - elif has_settlement: - sisa_uang_masuk = sum(ssos.mapped('gross_amount')) - - elif has_piutangbca and has_misc: - sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) - elif has_piutangbca and has_misc and has_moves2: - sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) - elif has_piutangbca and has_moves2: - sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) - elif has_piutangbca: - sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) - - elif has_piutangmdr and has_misc and has_moves2: - sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) - elif has_piutangmdr and has_misc: - sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) - elif has_piutangmdr and has_moves2: - sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) - elif has_piutangmdr: - sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + amounts = [] + + if has_moves: + amounts.append(sum(moves.mapped('amount_total_signed'))) + if has_moves2: + amounts.append(sum(moves2.mapped('amount_total_signed'))) + if has_piutangbca: + amounts.append(sum(piutangbca.mapped('amount_total_signed'))) + if has_piutangmdr: + amounts.append(sum(piutangmdr.mapped('amount_total_signed'))) + if has_misc: + amounts.append(sum(misc.mapped('amount_total_signed'))) + if has_settlement: + amounts.append(sum(ssos.mapped('gross_amount'))) + + sisa_uang_masuk = sum(amounts) self.uang_masuk = sisa_uang_masuk - amount_refund_before -- cgit v1.2.3 From 9e32342e44bc8b177118e99069466213201f3179 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 26 Sep 2025 09:33:44 +0700 Subject: push --- indoteknik_custom/report/purchase_report.xml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/indoteknik_custom/report/purchase_report.xml b/indoteknik_custom/report/purchase_report.xml index 9ff7e718..a475dd50 100644 --- a/indoteknik_custom/report/purchase_report.xml +++ b/indoteknik_custom/report/purchase_report.xml @@ -61,9 +61,7 @@ Alamat Pengiriman
PT. Indoteknik Dotcom Gemilang
- Jl. Bandengan Utara Komp A 8 B - RT. Penjaringan, Kec. Penjaringan, Jakarta - (BELAKANG INDOMARET)
+ Jl. Bandengan Utara Raya No. 85A, 8-9 RT.3/RW.16, Penjaringan, Kecamatan Penjaringan, Jkt Utara
Daerah Khusus Ibukota Jakarta 14440 @@ -97,7 +95,7 @@
- . + .
-- cgit v1.2.3 From 63d6df941bd969241adfac9297b158800acf2ec9 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 26 Sep 2025 09:50:44 +0700 Subject: push --- indoteknik_custom/report/purchase_report.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indoteknik_custom/report/purchase_report.xml b/indoteknik_custom/report/purchase_report.xml index a475dd50..79d25fc2 100644 --- a/indoteknik_custom/report/purchase_report.xml +++ b/indoteknik_custom/report/purchase_report.xml @@ -95,7 +95,7 @@
- . + .
-- cgit v1.2.3 From 55bcfcd6a154514641e86fee8aaba898d92aa206 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 26 Sep 2025 10:07:21 +0700 Subject: push --- indoteknik_custom/report/purchase_report.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indoteknik_custom/report/purchase_report.xml b/indoteknik_custom/report/purchase_report.xml index 79d25fc2..a475dd50 100644 --- a/indoteknik_custom/report/purchase_report.xml +++ b/indoteknik_custom/report/purchase_report.xml @@ -95,7 +95,7 @@
- . + .
-- cgit v1.2.3 From d8c8bf828ed1443a51476cf10a919218eadcb81c Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 26 Sep 2025 10:14:17 +0700 Subject: push --- indoteknik_custom/report/purchase_report.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indoteknik_custom/report/purchase_report.xml b/indoteknik_custom/report/purchase_report.xml index a475dd50..3521edb7 100644 --- a/indoteknik_custom/report/purchase_report.xml +++ b/indoteknik_custom/report/purchase_report.xml @@ -95,7 +95,7 @@
- . + .
-- cgit v1.2.3 From 1b1d71ef630d39df589e0d40b66ebf4c840d87e4 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 26 Sep 2025 10:20:35 +0700 Subject: push --- indoteknik_custom/report/purchase_report.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/indoteknik_custom/report/purchase_report.xml b/indoteknik_custom/report/purchase_report.xml index 3521edb7..23fa4d52 100644 --- a/indoteknik_custom/report/purchase_report.xml +++ b/indoteknik_custom/report/purchase_report.xml @@ -61,7 +61,9 @@ Alamat Pengiriman
PT. Indoteknik Dotcom Gemilang
- Jl. Bandengan Utara Raya No. 85A, 8-9 RT.3/RW.16, Penjaringan, Kecamatan Penjaringan, Jkt Utara
+ Jl. Bandengan Utara Komp A 8 B + RT. Penjaringan, Kec. Penjaringan, Jakarta + (BELAKANG INDOMARET)
Daerah Khusus Ibukota Jakarta 14440 @@ -95,7 +97,7 @@
- . + .
-- cgit v1.2.3 From d2f24e79d7655e3592e2084f4ead3d36206f610d Mon Sep 17 00:00:00 2001 From: Miqdad Date: Fri, 26 Sep 2025 11:18:10 +0700 Subject: fix eror deliv --- indoteknik_api/controllers/api_v1/stock_picking.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index 691d9fb7..a4a9cf80 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -147,8 +147,8 @@ class StockPicking(controller.Controller): if not sj_document or not paket_document: return self.response(code=400, description='dispatch_document wajib untuk role dispatch login= %s' % login) - if is_dispatch_user and not dispatch_document and not is_driver_user: - return self.response(code=400, description='dispatch_document wajib untuk role dispatch login= %s' % login) + # if is_dispatch_user and not dispatch_document and not is_driver_user: + # return self.response(code=400, description='dispatch_document wajib untuk role dispatch login= %s' % login) # ===== Cari picking by id / picking_code ===== picking_data = False @@ -161,7 +161,6 @@ class StockPicking(controller.Controller): if not picking_data: return self.response(code=403, description='picking not found') - # ===== Build params & write ===== params = { 'sj_documentation': sj_document, 'paket_documentation': paket_document, -- cgit v1.2.3 From be3147ec7145002858cb551a595f75568ba24fc1 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 26 Sep 2025 13:57:44 +0700 Subject: push --- indoteknik_custom/report/purchase_report.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indoteknik_custom/report/purchase_report.xml b/indoteknik_custom/report/purchase_report.xml index 23fa4d52..9ff7e718 100644 --- a/indoteknik_custom/report/purchase_report.xml +++ b/indoteknik_custom/report/purchase_report.xml @@ -97,7 +97,7 @@
- . + .
-- cgit v1.2.3 From e449c1310f8a1e5a97f84f461dcb813a3b67a2b6 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 26 Sep 2025 14:07:58 +0700 Subject: push --- indoteknik_custom/report/purchase_report.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indoteknik_custom/report/purchase_report.xml b/indoteknik_custom/report/purchase_report.xml index 9ff7e718..23fa4d52 100644 --- a/indoteknik_custom/report/purchase_report.xml +++ b/indoteknik_custom/report/purchase_report.xml @@ -97,7 +97,7 @@
- . + .
-- cgit v1.2.3 From 23b8dfa4a6bd56a80f13af700655166e6d7afce4 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 26 Sep 2025 14:26:46 +0700 Subject: push --- indoteknik_custom/report/purchase_report.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/indoteknik_custom/report/purchase_report.xml b/indoteknik_custom/report/purchase_report.xml index 23fa4d52..b29d87ba 100644 --- a/indoteknik_custom/report/purchase_report.xml +++ b/indoteknik_custom/report/purchase_report.xml @@ -99,6 +99,9 @@ . + + + -- cgit v1.2.3 From 51f50fd417b6745872724bcc98737ea1df2c413f Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 26 Sep 2025 14:38:11 +0700 Subject: push --- indoteknik_custom/report/purchase_report.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/indoteknik_custom/report/purchase_report.xml b/indoteknik_custom/report/purchase_report.xml index b29d87ba..23fa4d52 100644 --- a/indoteknik_custom/report/purchase_report.xml +++ b/indoteknik_custom/report/purchase_report.xml @@ -99,9 +99,6 @@ . - - - -- cgit v1.2.3 From 3de421c1b8b21c56399c46f85c9d395023c68617 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Fri, 26 Sep 2025 14:54:35 +0700 Subject: add payment term in Due extension --- indoteknik_custom/models/account_move_due_extension.py | 8 +++++++- indoteknik_custom/views/account_move_views.xml | 3 ++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/indoteknik_custom/models/account_move_due_extension.py b/indoteknik_custom/models/account_move_due_extension.py index 40059bd9..55fc6c65 100644 --- a/indoteknik_custom/models/account_move_due_extension.py +++ b/indoteknik_custom/models/account_move_due_extension.py @@ -13,6 +13,7 @@ class DueExtension(models.Model): number = fields.Char(string='Document No', index=True, copy=False, readonly=True, tracking=True) partner_id = fields.Many2one('res.partner', string="Customer", readonly=True) + payment_term = fields.Char(string="Payment Term", readonly=True, compute='_compute_payment_term') order_id = fields.Many2one('sale.order', string="SO", readonly=True) amount_total = fields.Monetary( string="Amount Total SO", @@ -43,7 +44,12 @@ class DueExtension(models.Model): counter = fields.Integer(string="Counter", compute='_compute_counter') approve_by = fields.Many2one('res.users', string="Approve By", readonly=True) date_approve = fields.Datetime(string="Date Approve", readonly=True) - + + @api.depends('partner_id') + def _compute_payment_term(self): + for rec in self: + rec.payment_term = rec.partner_id.property_payment_term_id.name + @api.depends('order_id') def _compute_amount_total(self): for rec in self: diff --git a/indoteknik_custom/views/account_move_views.xml b/indoteknik_custom/views/account_move_views.xml index 7c1f8913..08b93f1f 100644 --- a/indoteknik_custom/views/account_move_views.xml +++ b/indoteknik_custom/views/account_move_views.xml @@ -66,7 +66,8 @@ - + + -- cgit v1.2.3 From f714a29bc051d029d5ac34f46c3cabfcb64478e0 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Fri, 26 Sep 2025 16:56:13 +0700 Subject: add p stephan --- indoteknik_custom/models/refund_sale_order.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index 820a58f7..de9870f6 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -954,7 +954,7 @@ class RefundSaleOrder(models.Model): if not rec.status or rec.status == 'draft': rec.status = 'pengajuan1' - elif rec.status == 'pengajuan1' and self.env.user.id == 19: + elif rec.status == 'pengajuan1' and self.env.user.id in [19, 28]: rec.status = 'pengajuan2' rec.approved_by = f"{rec.approved_by}, {user_name}" if rec.approved_by else user_name rec.date_approved_sales = now -- cgit v1.2.3 From 5bdbd5b5d441aabf55d5e817fffd88328a532e28 Mon Sep 17 00:00:00 2001 From: HafidBuroiroh Date: Sat, 27 Sep 2025 09:21:25 +0700 Subject: push --- indoteknik_custom/report/purchase_report.xml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/indoteknik_custom/report/purchase_report.xml b/indoteknik_custom/report/purchase_report.xml index 23fa4d52..c93c9d3b 100644 --- a/indoteknik_custom/report/purchase_report.xml +++ b/indoteknik_custom/report/purchase_report.xml @@ -61,9 +61,8 @@ Alamat Pengiriman
PT. Indoteknik Dotcom Gemilang
- Jl. Bandengan Utara Komp A 8 B - RT. Penjaringan, Kec. Penjaringan, Jakarta - (BELAKANG INDOMARET)
+ Jl. Bandengan Utara 85A No.8-9, + RT.3/RW.16, Penjaringan, Kecamatan Penjaringan, Jakarta,
Daerah Khusus Ibukota Jakarta 14440 -- cgit v1.2.3 From 7727fe4bd298c407d0c8b2fc64e57b7f2abe885e Mon Sep 17 00:00:00 2001 From: HafidBuroiroh Date: Sat, 27 Sep 2025 09:25:45 +0700 Subject: push --- indoteknik_custom/report/purchase_report.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/indoteknik_custom/report/purchase_report.xml b/indoteknik_custom/report/purchase_report.xml index c93c9d3b..23fa4d52 100644 --- a/indoteknik_custom/report/purchase_report.xml +++ b/indoteknik_custom/report/purchase_report.xml @@ -61,8 +61,9 @@ Alamat Pengiriman
PT. Indoteknik Dotcom Gemilang
- Jl. Bandengan Utara 85A No.8-9, - RT.3/RW.16, Penjaringan, Kecamatan Penjaringan, Jakarta,
+ Jl. Bandengan Utara Komp A 8 B + RT. Penjaringan, Kec. Penjaringan, Jakarta + (BELAKANG INDOMARET)
Daerah Khusus Ibukota Jakarta 14440 -- cgit v1.2.3 From ec21c4721f35028fc9b2a61bd0dbc6e4bf600e74 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Sun, 28 Sep 2025 10:43:27 +0700 Subject: fix state retur ccm stuck at waiting for operation --- indoteknik_custom/models/tukar_guling.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/indoteknik_custom/models/tukar_guling.py b/indoteknik_custom/models/tukar_guling.py index c683f75a..cb630a04 100644 --- a/indoteknik_custom/models/tukar_guling.py +++ b/indoteknik_custom/models/tukar_guling.py @@ -538,6 +538,11 @@ class TukarGuling(models.Model): self.state = 'approval_sales' def update_doc_state(self): + bu_pick = self.env['stock.picking'].search([ + ('origin', '=', self.operations.origin), + ('name', 'ilike', 'BU/PICK'), + ]) + # OUT tukar guling if self.operations.picking_type_id.id == 29 and self.return_type == 'tukar_guling': total_out = self.env['stock.picking'].search_count([ @@ -552,7 +557,26 @@ class TukarGuling(models.Model): if self.state == 'approved' and total_out > 0 and done_out == total_out: self.state = 'done' - # OUT revisi SO + #SO Lama (gk ada bu pick) + elif self.operations.picking_type_id.id == 29 and self.return_type == 'retur_so' and not bu_pick: + # so_lama = self.env['sale.order'].search([ + # ('name', '=', self.operations.origin), + # ('state', '=', 'done'), + # ('group_id.name', '=', self.operations.origin) + # ]) + total_ort = self.env['stock.picking'].search_count([ + ('tukar_guling_id', '=', self.id), + ('picking_type_id', '=', 74), + ]) + done_srt = self.env['stock.picking'].search([ + ('tukar_guling_id', '=', self.id), + ('picking_type_id', '=', 73), + ('state', '=', 'done') + ]) + if self.state == 'approved' and total_ort == 0 and done_srt and not bu_pick: + self.state = 'done' + + # OUT retur SO elif self.operations.picking_type_id.id == 29 and self.return_type == 'retur_so': total_ort = self.env['stock.picking'].search_count([ ('tukar_guling_id', '=', self.id), -- cgit v1.2.3