summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIT Fixcomart <it@fixcomart.co.id>2026-01-07 05:46:16 +0000
committerIT Fixcomart <it@fixcomart.co.id>2026-01-07 05:46:16 +0000
commit33f7dd2834c7ec70ac927878bb12b104ddb232a2 (patch)
tree274e03ba64c09a8dd9c1483cb192b40c3be23c09
parent7b0a84a6e834fc20784812536e17adb5f7817cc4 (diff)
parent7b7e6e99fa88804a931125b500d02ac23082147c (diff)
Merged in pum-v4 (pull request #476)
(andri) add cancel PUM reimburse
-rw-r--r--indoteknik_custom/models/advance_payment_request.py46
-rwxr-xr-xindoteknik_custom/security/ir.model.access.csv1
-rw-r--r--indoteknik_custom/views/advance_payment_request.xml35
3 files changed, 82 insertions, 0 deletions
diff --git a/indoteknik_custom/models/advance_payment_request.py b/indoteknik_custom/models/advance_payment_request.py
index f973a9da..d0805598 100644
--- a/indoteknik_custom/models/advance_payment_request.py
+++ b/indoteknik_custom/models/advance_payment_request.py
@@ -55,6 +55,7 @@ class AdvancePaymentRequest(models.Model):
('pengajuan2', 'Menunggu Approval AP'),
('pengajuan3', 'Menunggu Approval Pimpinan'),
('approved', 'Approved'),
+ ('cancel','Cancel')
], string='Status', default='draft', tracking=3, index=True, track_visibility='onchange')
@@ -816,6 +817,51 @@ class AdvancePaymentRequest(models.Model):
rec._compute_grand_total_reimburse()
rec.nominal = rec.grand_total_reimburse
return rec
+
+ def action_open_cancel_wizard(self):
+ """Membuka Wizard Pop-up untuk Cancel PUM/Reimburse"""
+ self.ensure_one()
+
+ if self.move_id:
+ raise UserError(_("Pengajuan tidak dapat dibatalkan karena Journal sudah terbentuk."))
+
+ if self.settlement_ids and any(s.status != 'draft' for s in self.settlement_ids):
+ raise UserError(_("Pengajuan tidak dapat dibatalkan karena sudah ada proses realisasi."))
+
+ return {
+ 'name': _('Alasan Pembatalan'),
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'advance.payment.cancel.wizard',
+ 'view_mode': 'form',
+ 'target': 'new',
+ 'context': {
+ 'default_request_id': self.id,
+ }
+ }
+
+class AdvancePaymentCancelWizard(models.TransientModel):
+ _name = 'advance.payment.cancel.wizard'
+ _description = 'Wizard untuk Membatalkan PUM/Reimburse'
+
+ request_id = fields.Many2one('advance.payment.request', string='Dokumen', readonly=True)
+ reason = fields.Text(string='Alasan Pembatalan', required=True)
+
+ def action_confirm_cancel(self):
+ self.ensure_one()
+ request = self.request_id
+ if request.move_id:
+ raise UserError("Tidak bisa melakukan cancel karena Jurnal (Move ID) sudah terbentuk.")
+
+ request.write({'status': 'cancel'})
+
+ request.message_post(
+ body=f"Pengajuan telah <b>DIBATALKAN</b> oleh {self.env.user.name}.<br/>"
+ f"<b>Alasan:</b> {self.reason}",
+ message_type="comment",
+ subtype_xmlid="mail.mt_note",
+ )
+
+ return {'type': 'ir.actions.act_window_close'}
class AdvancePaymentUsageLine(models.Model):
diff --git a/indoteknik_custom/security/ir.model.access.csv b/indoteknik_custom/security/ir.model.access.csv
index bc8dc2a4..d501de1a 100755
--- a/indoteknik_custom/security/ir.model.access.csv
+++ b/indoteknik_custom/security/ir.model.access.csv
@@ -199,6 +199,7 @@ access_advance_payment_settlement,access.advance.payment.settlement,model_advanc
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_create_reimburse_cab_wizard_user,create.reimburse.cab.wizard user,model_create_reimburse_cab_wizard,,1,1,1,1
+access_advance_payment_cancel_wizard,advance.payment.cancel.wizard,model_advance_payment_cancel_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 dd6370c7..5abcf996 100644
--- a/indoteknik_custom/views/advance_payment_request.xml
+++ b/indoteknik_custom/views/advance_payment_request.xml
@@ -44,6 +44,11 @@
('is_cab_visible', '=', True),
('type_request', '!=', 'reimburse')
]}"/>
+ <button name="action_open_cancel_wizard"
+ string="Cancel"
+ type="object"
+ class="btn-danger"
+ attrs="{'invisible': [('status', 'in', ['draft', 'cancel'])]}"/>
<field name="status" widget="statusbar"
statusbar_visible="draft,pengajuan1,pengajuan2,pengajuan3,approved"
statusbar_colors='{"reject":"red"}'
@@ -316,4 +321,34 @@
<field name="view_id" ref="view_form_create_reimburse_cab_wizard"/>
<field name="target">new</field>
</record>
+
+ <record id="view_advance_payment_cancel_wizard_form" model="ir.ui.view">
+ <field name="name">advance.payment.cancel.wizard.form</field>
+ <field name="model">advance.payment.cancel.wizard</field>
+ <field name="arch" type="xml">
+ <form string="Batalkan Pengajuan">
+ <sheet>
+ <group>
+ <div class="alert alert-warning" role="alert" style="margin-bottom: 10px;">
+ Apakah Anda yakin ingin membatalkan pengajuan ini?
+ Silakan isi alasan pembatalan di bawah ini.
+ </div>
+ </group>
+ <group>
+ <field name="reason"/>
+ </group>
+ </sheet>
+ <footer>
+ <button name="action_confirm_cancel"
+ string="Konfirmasi Cancel"
+ type="object"
+ class="btn-danger"/>
+
+ <button string="Tutup"
+ class="btn-secondary"
+ special="cancel"/>
+ </footer>
+ </form>
+ </field>
+ </record>
</odoo> \ No newline at end of file