summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/advance_payment_request.py
diff options
context:
space:
mode:
authorFIN-IT_AndriFP <it@fixcomart.co.id>2025-10-14 15:22:46 +0700
committerFIN-IT_AndriFP <it@fixcomart.co.id>2025-10-14 15:22:46 +0700
commitb0bde0e002f5321f7462f520d545876cdc14fd2e (patch)
treea41ddac5f5e92efce6672bb2d8d891cd3a909e67 /indoteknik_custom/models/advance_payment_request.py
parent0dd05f30c003ffa2ada402c9e882dfddb7ce4f44 (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.py143
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