diff options
| author | FIN-IT_AndriFP <it@fixcomart.co.id> | 2025-10-14 15:22:46 +0700 |
|---|---|---|
| committer | FIN-IT_AndriFP <it@fixcomart.co.id> | 2025-10-14 15:22:46 +0700 |
| commit | b0bde0e002f5321f7462f520d545876cdc14fd2e (patch) | |
| tree | a41ddac5f5e92efce6672bb2d8d891cd3a909e67 /indoteknik_custom/models/advance_payment_request.py | |
| parent | 0dd05f30c003ffa2ada402c9e882dfddb7ce4f44 (diff) | |
(andri) add cab reimburse + fix view realisasi
Diffstat (limited to 'indoteknik_custom/models/advance_payment_request.py')
| -rw-r--r-- | indoteknik_custom/models/advance_payment_request.py | 143 |
1 files changed, 130 insertions, 13 deletions
diff --git a/indoteknik_custom/models/advance_payment_request.py b/indoteknik_custom/models/advance_payment_request.py index c511f2e7..5c6d59c4 100644 --- a/indoteknik_custom/models/advance_payment_request.py +++ b/indoteknik_custom/models/advance_payment_request.py @@ -72,18 +72,18 @@ class AdvancePaymentRequest(models.Model): ('payment', 'Payment'), ], string='Status Pembayaran', default='pending', tracking=3) - name_approval_departement = fields.Char(string='Approval Departement', tracking=True) - name_approval_ap = fields.Char(string='Approval AP', tracking=True) + name_approval_departement = fields.Char(string='Approval Departement') + name_approval_ap = fields.Char(string='Approval AP') email_ap = fields.Char(string = 'Email AP') - name_approval_pimpinan = fields.Char(string='Approval Pimpinan', tracking=True) + name_approval_pimpinan = fields.Char(string='Approval Pimpinan') date_approved_department = fields.Datetime(string="Date Approved Department") date_approved_ap = fields.Datetime(string="Date Approved AP") date_approved_pimpinan = fields.Datetime(string="Date Approved Pimpinan") - position_department = fields.Char(string='Position Departement', tracking=True) - position_ap = fields.Char(string='Position AP', tracking=True) - position_pimpinan = fields.Char(string='Position Pimpinan', tracking=True) + position_department = fields.Char(string='Position Departement') + position_ap = fields.Char(string='Position AP') + position_pimpinan = fields.Char(string='Position Pimpinan') approved_by = fields.Char(string='Approved By', tracking=True, track_visibility='always') @@ -151,6 +151,29 @@ class AdvancePaymentRequest(models.Model): compute='_compute_settlement_name' ) + total_reimburse = fields.Monetary( + string='Total Reimburse', + compute='_compute_total_reimburse' + ) + + @api.depends('reimburse_line_ids.total') + def _compute_total_reimburse(self): + for request in self: + request.total_reimburse = sum(request.reimburse_line_ids.mapped('total')) + + def action_open_create_reimburse_cab(self): + self.ensure_one() + return { + 'type': 'ir.actions.act_window', + 'name': 'Buat Jurnal Reimburse', + 'res_model': 'create.reimburse.cab.wizard', + 'view_mode': 'form', + 'target': 'new', + 'context': { + 'default_request_id': self.id, + } + } + @api.depends('settlement_ids') def _compute_has_settlement(self): for rec in self: @@ -903,19 +926,19 @@ class AdvancePaymentSettlement(models.Model): note_approval = fields.Text(string='Note Persetujuan', tracking=3) - name_approval_departement = fields.Char(string='Approval Departement', tracking=True) - name_approval_ap = fields.Char(string='Approval AP', tracking=True) - name_approval_pimpinan = fields.Char(string='Approval Pimpinan', tracking=True) + name_approval_departement = fields.Char(string='Approval Departement') + name_approval_ap = fields.Char(string='Approval AP') + name_approval_pimpinan = fields.Char(string='Approval Pimpinan') date_approved_department = fields.Datetime(string="Date Approved Department") date_approved_ap = fields.Datetime(string="Date Approved AP") date_approved_pimpinan = fields.Datetime(string="Date Approved Pimpinan") - position_department = fields.Char(string='Position Departement', tracking=True) - position_ap = fields.Char(string='Position AP', tracking=True) - position_pimpinan = fields.Char(string='Position Pimpinan', tracking=True) + position_department = fields.Char(string='Position Departement') + position_ap = fields.Char(string='Position AP') + position_pimpinan = fields.Char(string='Position Pimpinan') - approved_by = fields.Char(string='Approved By', tracking=True, track_visibility='always') + approved_by = fields.Char(string='Approved By', track_visibility='always') status = fields.Selection([ ('pengajuan1', 'Menunggu Approval Departement'), @@ -955,6 +978,19 @@ class AdvancePaymentSettlement(models.Model): move_id = fields.Many2one('account.move', string='Journal Entries', domain=[('move_type', '=', 'entry')]) is_cab_visible = fields.Boolean(string='Is Journal Uang Muka Visible', compute='_compute_is_cab_visible') + user_id = fields.Many2one( + 'res.users', + string='Diajukan Oleh', + related='pum_id.user_id', + readonly=True + ) + applicant_name = fields.Many2one( + 'res.users', + string='Nama Pemohon', + related='pum_id.applicant_name', + readonly=True + ) + def action_toggle_check_attachment(self): ap_user_ids = [23, 9468] if self.env.user.id not in ap_user_ids: @@ -1305,4 +1341,85 @@ class AdvancePaymentCreateBill(models.TransientModel): 'type': 'ir.actions.act_window', 'res_id': move.id, 'target': 'current', + } + +class CreateReimburseCabWizard(models.TransientModel): + _name = 'create.reimburse.cab.wizard' + _description = 'Wizard untuk Membuat Jurnal Reimburse' + + # Field untuk menampung ID request yang sedang diproses + request_id = fields.Many2one('advance.payment.request', string='Pengajuan', readonly=True) + + # Field untuk memilih salah satu dari dua bank Anda + account_id = fields.Many2one( + 'account.account', + string='Bank Intransit (Credit)', + required=True, + # Domain untuk membatasi pilihan hanya pada ID 573 dan 389 + domain="[('id', 'in', [573, 389])]" + ) + + # Field untuk menampilkan total agar pengguna bisa konfirmasi + total_reimburse = fields.Monetary( + string='Total Reimburse', + related='request_id.total_reimburse', + readonly=True + ) + currency_id = fields.Many2one(related='request_id.currency_id', readonly=True) + + def action_create_reimburse_cab(self): + """Metode ini yang akan membuat Journal Entry (CAB).""" + self.ensure_one() + request = self.request_id + + # --- Validasi --- + if request.move_id: + raise UserError("Jurnal sudah pernah dibuat untuk pengajuan ini.") + if not request.reimburse_line_ids: + raise UserError("Tidak ada rincian reimburse yang bisa dijurnalkan.") + + lines = [] + partner_id = request.user_id.partner_id.id + + # 1. Buat Jurnal DEBIT dari setiap baris reimburse + for line in request.reimburse_line_ids: + if not line.account_id: + raise UserError(f"Jenis Biaya pada baris '{line.description}' belum diisi oleh AP.") + + lines.append((0, 0, { + 'account_id': line.account_id.id, + 'partner_id': partner_id, + 'name': line.description, + 'debit': line.total, + 'credit': 0, + })) + + # 2. Buat satu Jurnal CREDIT ke bank yang dipilih di wizard + lines.append((0, 0, { + 'account_id': self.account_id.id, + 'partner_id': partner_id, + 'name': f'Reimburse {request.number}', + 'debit': 0, + 'credit': request.total_reimburse, + })) + + # 3. Buat Journal Entry + move = self.env['account.move'].create({ + 'ref': request.number, + 'date': fields.Date.context_today(self), + 'journal_id': 11, # PENTING: Ganti 11 dengan ID Journal "Miscellaneous" Anda + 'line_ids': lines, + }) + + # 4. Tautkan journal yang baru dibuat ke request + request.move_id = move.id + + # 5. Buka tampilan form journal yang baru dibuat + return { + 'name': _('Journal Entry'), + 'view_mode': 'form', + 'res_model': 'account.move', + 'type': 'ir.actions.act_window', + 'res_id': move.id, + 'target': 'current', }
\ No newline at end of file |
