From 698650e73503d0b780694e150fb5cb3f8e91d83d Mon Sep 17 00:00:00 2001 From: FIN-IT_AndriFP Date: Mon, 13 Oct 2025 10:53:11 +0700 Subject: (andri) add seq reimburse, penyesuaian approve, & add diwakilkan --- .../models/advance_payment_request.py | 69 +++++++++++++++++----- .../views/advance_payment_request.xml | 3 +- indoteknik_custom/views/ir_sequence.xml | 10 ++++ 3 files changed, 66 insertions(+), 16 deletions(-) diff --git a/indoteknik_custom/models/advance_payment_request.py b/indoteknik_custom/models/advance_payment_request.py index fe82657b..dbf2e9ee 100644 --- a/indoteknik_custom/models/advance_payment_request.py +++ b/indoteknik_custom/models/advance_payment_request.py @@ -21,12 +21,12 @@ class AdvancePaymentRequest(models.Model): number = fields.Char(string='No. Dokumen', default='New Draft', tracking=3) - applicant_name = fields.Many2one('res.users', string='Nama Pemohon', required=True, tracking=3, domain="[('groups_id', 'in', [1])]") + applicant_name = fields.Many2one('res.users', string='Nama Pemohon', default=lambda self: self.env.user, required=True, tracking=3, domain="[('groups_id', 'in', [1])]") # applicant_name = fields.One2many(string='Nama Pemohon', related='res.users') nominal = fields.Float(string='Nominal', tracking=3, required=True) bank_name = fields.Char(string='Bank', tracking=3, required=True) - account_name = fields.Many2one('res.users', string='Nama Account', required=True, tracking=3, domain="[('groups_id', 'in', [1])]") + account_name = fields.Many2one('res.users', string='Nama Account', default=lambda self: self.env.user, required=True, tracking=3, domain="[('groups_id', 'in', [1])]") # account_name = fields.Char(string='Nama Account', tracking=3, required=True) bank_account = fields.Char(string='No. Rekening', tracking=3, required=True) detail_note = fields.Text(string='Keterangan Penggunaan Rinci', tracking=3) @@ -120,7 +120,7 @@ class AdvancePaymentRequest(models.Model): type_request = fields.Selection([ ('pum', 'PUM'), - ('reimburse', 'Reimburse')], string='Tipe Pengajuan', default='pum', tracking=3) + ('reimburse', 'Reimburse')], string='Tipe Pengajuan', tracking=3) position_type = fields.Selection([ ('staff', 'Staff'), @@ -132,9 +132,20 @@ class AdvancePaymentRequest(models.Model): ('settlement', 'Realisasi') ]) + is_represented = fields.Boolean(string='Nama Pemohon Berbeda?', default=False) + apr_perjalanan = fields.Boolean(string = "PUM Perjalanan?", default = False) reimburse_line_ids = fields.One2many('reimburse.line', 'request_id', string='Rincian Reimburse') + @api.onchange('is_represented') + def _onchange_is_represented(self): + if self.is_represented: + self.account_name = False + self.applicant_name = False + else: + self.account_name = self.env.user.id + self.applicant_name = self.env.user.id + @api.onchange('nominal') def _onchange_nominal_no_minus(self): if self.nominal and self.nominal < 0: @@ -473,7 +484,10 @@ class AdvancePaymentRequest(models.Model): rec.email_ap = self.env.user.email rec.date_approved_ap = now rec.position_ap = 'Finance AP' - rec.status = 'pengajuan3' + if rec.position_type == 'pimpinan': + rec.status = 'approved' + else: + rec.status = 'pengajuan3' rec.message_post( body=f"Approval AP oleh {self.env.user.name} " @@ -561,23 +575,29 @@ class AdvancePaymentRequest(models.Model): } - @api.depends('date_back_to_office', 'status') + @api.depends('date_back_to_office', 'status', 'apr_perjalanan', 'create_date') def _compute_days_remaining(self): today = date.today() for rec in self: if rec.status in ['approved', 'reject'] and rec.days_remaining: continue - if rec.date_back_to_office: - due_date = rec.date_back_to_office + timedelta(days=7) + if rec.apr_perjalanan: + if rec.date_back_to_office: + due_date = rec.date_back_to_office + timedelta(days=7) + rec.estimated_return_date = due_date + + # Jika hari ini sebelum tanggal kembali, maka anggap belum mulai dihitung + effective_today = max(today, rec.date_back_to_office) + rec.days_remaining = (due_date - effective_today).days + else: + rec.estimated_return_date = False + rec.days_remaining = 0 + else: + base_date = rec.create_date.date() if rec.create_date else today + due_date = base_date + timedelta(days=7) rec.estimated_return_date = due_date - - # Jika hari ini sebelum tanggal kembali, maka anggap belum mulai dihitung - effective_today = max(today, rec.date_back_to_office) - rec.days_remaining = (due_date - effective_today).days - else: - rec.estimated_return_date = False - rec.days_remaining = 0 + rec.days_remaining = (due_date - base_date).days @api.onchange('date_back_to_office') def _onchange_date_back_to_office(self): @@ -601,6 +621,8 @@ class AdvancePaymentRequest(models.Model): @api.onchange('user_id') def _onchange_user_id_limit_check(self): + if self.type_request != 'pum': + return if not self.user_id: return @@ -641,8 +663,25 @@ class AdvancePaymentRequest(models.Model): if active_pum_count >= 2: raise UserError("Anda hanya dapat mengajukan maksimal 2 PUM aktif. Silakan realisasikan salah satunya terlebih dahulu.") + if not vals.get('apr_perjalanan'): + if 'estimated_return_date' not in vals: + today = date.today() + due_date = today + timedelta(days=7) + vals['estimated_return_date'] = due_date + + initial_status = '' + position = vals.get('position_type') + if position == 'staff': + initial_status = 'pengajuan1' + elif position in ('manager', 'pimpinan'): + initial_status = 'pengajuan2' + vals['status'] = initial_status + if not vals.get('number') or vals['number'] == 'New Draft': - vals['number'] = self.env['ir.sequence'].next_by_code('advance.payment.request') or 'New Draft' + if vals.get('type_request') == 'reimburse': + vals['number'] = self.env['ir.sequence'].next_by_code('reimburse.request') or 'New Draft' + else: + vals['number'] = self.env['ir.sequence'].next_by_code('advance.payment.request') or 'New Draft' vals['status'] = 'pengajuan1' return super(AdvancePaymentRequest, self).create(vals) diff --git a/indoteknik_custom/views/advance_payment_request.xml b/indoteknik_custom/views/advance_payment_request.xml index 72948876..ba5462b1 100644 --- a/indoteknik_custom/views/advance_payment_request.xml +++ b/indoteknik_custom/views/advance_payment_request.xml @@ -65,6 +65,7 @@ + @@ -80,7 +81,7 @@

*Setelah tanggal kembali, pemohon diharapkan untuk segera memproses realisasi PUM

- + diff --git a/indoteknik_custom/views/ir_sequence.xml b/indoteknik_custom/views/ir_sequence.xml index 8fdfcbca..dbdbc3c0 100644 --- a/indoteknik_custom/views/ir_sequence.xml +++ b/indoteknik_custom/views/ir_sequence.xml @@ -229,6 +229,16 @@ True + + Reimburse Request Sequence + reimburse.request + RMK/%(year)s/%(month)s/ + 4 + 1 + 1 + True + + Refund Sales Order refund.sale.order -- cgit v1.2.3