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 | |
| parent | 0dd05f30c003ffa2ada402c9e882dfddb7ce4f44 (diff) | |
(andri) add cab reimburse + fix view realisasi
| -rw-r--r-- | indoteknik_custom/models/advance_payment_request.py | 143 | ||||
| -rwxr-xr-x | indoteknik_custom/security/ir.model.access.csv | 2 | ||||
| -rw-r--r-- | indoteknik_custom/views/advance_payment_request.xml | 37 | ||||
| -rw-r--r-- | indoteknik_custom/views/advance_payment_settlement.xml | 13 |
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 & 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 & 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 & 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" |
