summaryrefslogtreecommitdiff
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
parent0dd05f30c003ffa2ada402c9e882dfddb7ce4f44 (diff)
(andri) add cab reimburse + fix view realisasi
-rw-r--r--indoteknik_custom/models/advance_payment_request.py143
-rwxr-xr-xindoteknik_custom/security/ir.model.access.csv2
-rw-r--r--indoteknik_custom/views/advance_payment_request.xml37
-rw-r--r--indoteknik_custom/views/advance_payment_settlement.xml13
4 files changed, 174 insertions, 21 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
diff --git a/indoteknik_custom/security/ir.model.access.csv b/indoteknik_custom/security/ir.model.access.csv
index 893d3110..86313ea5 100755
--- a/indoteknik_custom/security/ir.model.access.csv
+++ b/indoteknik_custom/security/ir.model.access.csv
@@ -197,7 +197,7 @@ access_advance_payment_settlement_line,access.advance.payment.settlement.line,mo
access_advance_payment_usage_line,access.advance.payment.usage.line,model_advance_payment_usage_line,,1,1,1,1
access_advance_payment_create_bill,access.advance.payment.create.bill,model_advance_payment_create_bill,,1,1,1,1
access_advance_payment_request_reject,access.advance.payment.request.reject,model_advance_payment_request_reject,,1,1,1,1
-
+access_create_reimburse_cab_wizard_user,create.reimburse.cab.wizard user,model_create_reimburse_cab_wizard,,1,1,1,1
access_purchasing_job_seen,purchasing.job.seen,model_purchasing_job_seen,,1,1,1,1
access_tukar_guling_all_users,tukar.guling.all.users,model_tukar_guling,base.group_user,1,1,1,1
diff --git a/indoteknik_custom/views/advance_payment_request.xml b/indoteknik_custom/views/advance_payment_request.xml
index 74ed296d..6b14e631 100644
--- a/indoteknik_custom/views/advance_payment_request.xml
+++ b/indoteknik_custom/views/advance_payment_request.xml
@@ -35,6 +35,11 @@
string="Make CAB"
class="btn-info"
attrs="{'invisible': ['|', ('status', 'not in', ['approved']), ('is_cab_visible', '=', True)]}"/>
+ <button name="action_open_create_reimburse_cab"
+ type="object"
+ string="Buat Jurnal Reimburse"
+ class="btn-info"
+ />
<field name="status" widget="statusbar"
statusbar_visible="draft,pengajuan1,pengajuan2,pengajuan3,approved"
statusbar_colors='{"reject":"red"}'
@@ -198,21 +203,21 @@
</record>
<record id="action_advance_payment_request" model="ir.actions.act_window">
- <field name="name">Advance Payment Request or Reimburse</field>
+ <field name="name">Pengajuan Uang Muka &amp; Reimburse</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">advance.payment.request</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem id="menu_advance_payment_request_acct"
- name="Advance Payment Request or Reimburse"
+ name="Pengajuan Uang Muka &amp; Reimburse"
parent="account.menu_finance_entries"
sequence="114"
action="action_advance_payment_request"
/>
<menuitem id="menu_advance_payment_request_sales"
- name="Advance Payment Request or Reimburse"
+ name="Pengajuan Uang Muka &amp; Reimburse"
parent="sale.product_menu_catalog"
sequence="101"
action="action_advance_payment_request"
@@ -266,4 +271,30 @@
<field name="target">new</field>
</record>
+ <record id="view_form_create_reimburse_cab_wizard" model="ir.ui.view">
+ <field name="name">create.reimburse.cab.wizard.form</field>
+ <field name="model">create.reimburse.cab.wizard</field>
+ <field name="arch" type="xml">
+ <form string="Buat Jurnal Reimburse">
+ <p>Pilih akun bank yang akan digunakan untuk jurnal kredit.</p>
+ <group>
+ <field name="total_reimburse"/>
+ <field name="account_id" options="{'no_create': True, 'no_open': True}"/>
+ <field name="currency_id" invisible="1"/>
+ </group>
+ <footer>
+ <button name="action_create_reimburse_cab" type="object" string="Buat Jurnal" class="btn-primary"/>
+ <button string="Batal" class="btn-secondary" special="cancel"/>
+ </footer>
+ </form>
+ </field>
+ </record>
+
+ <record id="action_create_reimburse_cab_wizard" model="ir.actions.act_window">
+ <field name="name">Buat Jurnal Reimburse</field>
+ <field name="res_model">create.reimburse.cab.wizard</field>
+ <field name="view_mode">form</field>
+ <field name="view_id" ref="view_form_create_reimburse_cab_wizard"/>
+ <field name="target">new</field>
+ </record>
</odoo> \ No newline at end of file
diff --git a/indoteknik_custom/views/advance_payment_settlement.xml b/indoteknik_custom/views/advance_payment_settlement.xml
index fb859e58..d928b701 100644
--- a/indoteknik_custom/views/advance_payment_settlement.xml
+++ b/indoteknik_custom/views/advance_payment_settlement.xml
@@ -26,6 +26,9 @@
readonly="1"/>
</header>
<sheet>
+ <widget name="web_ribbon" title="Remaining" bg_color="bg-danger" attrs="{'invisible': [('done_status', '!=', 'remaining')]}"/>
+ <widget name="web_ribbon" title="Done Not Realized" bg_color="bg-warning" attrs="{'invisible': [('done_status', '!=', 'done_not_realized')]}"/>
+ <widget name="web_ribbon" title="Realized" attrs="{'invisible': [('done_status', '!=', 'done_realized')]}"/>
<div class="oe_button_box" name="button_box">
<field name="is_cab_visible" invisible="1"/>
<button type="object"
@@ -57,7 +60,9 @@
<field name="done_status"
decoration-success="done_status == 'done_realized'"
decoration-danger="done_status == 'remaining'"
- widget="badge" readonly="1"/>
+ widget="badge" readonly="1" invisible="1"/>
+ <field name="applicant_name" readonly="1"/>
+ <field name="user_id" readonly="1"/>
</group>
<group attrs="{'invisible': [('lot_of_attachment', '!=', 'one_for_all_line')]}">
<field name="attachment_type" attrs="{'readonly': [('status', '=', 'approved')]}"/>
@@ -165,7 +170,7 @@
</record>
<record id="action_advance_payment_settlement" model="ir.actions.act_window">
- <field name="name">Advance Payment Settlement</field>
+ <field name="name">Realisasi Pengajuan Uang Muka</field>
<field name="res_model">advance.payment.settlement</field>
<field name="view_mode">tree,form</field>
</record>
@@ -187,14 +192,14 @@
</field>
</record>
- <menuitem id="menu_advance_payment_request_acct"
+ <menuitem id="menu_advance_payment_settlement_acct"
name="Realisasi PUM"
parent="account.menu_finance_entries"
sequence="114"
action="action_advance_payment_settlement"
/>
- <menuitem id="menu_advance_payment_request_sales"
+ <menuitem id="menu_advance_payment_settlement_sales"
name="Realisasi PUM"
parent="sale.product_menu_catalog"
sequence="101"