summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFIN-IT_AndriFP <it@fixcomart.co.id>2025-10-13 10:53:11 +0700
committerFIN-IT_AndriFP <it@fixcomart.co.id>2025-10-13 10:53:11 +0700
commit698650e73503d0b780694e150fb5cb3f8e91d83d (patch)
tree25ac0d55048507d84509c0a3cfc6fdb5b0aefc4b
parenta9eac2968018d74c190ac376ce2b874e32ded3b6 (diff)
(andri) add seq reimburse, penyesuaian approve, & add diwakilkan
-rw-r--r--indoteknik_custom/models/advance_payment_request.py69
-rw-r--r--indoteknik_custom/views/advance_payment_request.xml3
-rw-r--r--indoteknik_custom/views/ir_sequence.xml10
3 files changed, 66 insertions, 16 deletions
diff --git a/indoteknik_custom/models/advance_payment_request.py b/indoteknik_custom/models/advance_payment_request.py
index fe82657b..dbf2e9ee 100644
--- a/indoteknik_custom/models/advance_payment_request.py
+++ b/indoteknik_custom/models/advance_payment_request.py
@@ -21,12 +21,12 @@ class AdvancePaymentRequest(models.Model):
number = fields.Char(string='No. Dokumen', default='New Draft', tracking=3)
- applicant_name = fields.Many2one('res.users', string='Nama Pemohon', required=True, tracking=3, domain="[('groups_id', 'in', [1])]")
+ applicant_name = fields.Many2one('res.users', string='Nama Pemohon', default=lambda self: self.env.user, required=True, tracking=3, domain="[('groups_id', 'in', [1])]")
# applicant_name = fields.One2many(string='Nama Pemohon', related='res.users')
nominal = fields.Float(string='Nominal', tracking=3, required=True)
bank_name = fields.Char(string='Bank', tracking=3, required=True)
- account_name = fields.Many2one('res.users', string='Nama Account', required=True, tracking=3, domain="[('groups_id', 'in', [1])]")
+ account_name = fields.Many2one('res.users', string='Nama Account', default=lambda self: self.env.user, required=True, tracking=3, domain="[('groups_id', 'in', [1])]")
# account_name = fields.Char(string='Nama Account', tracking=3, required=True)
bank_account = fields.Char(string='No. Rekening', tracking=3, required=True)
detail_note = fields.Text(string='Keterangan Penggunaan Rinci', tracking=3)
@@ -120,7 +120,7 @@ class AdvancePaymentRequest(models.Model):
type_request = fields.Selection([
('pum', 'PUM'),
- ('reimburse', 'Reimburse')], string='Tipe Pengajuan', default='pum', tracking=3)
+ ('reimburse', 'Reimburse')], string='Tipe Pengajuan', tracking=3)
position_type = fields.Selection([
('staff', 'Staff'),
@@ -132,9 +132,20 @@ class AdvancePaymentRequest(models.Model):
('settlement', 'Realisasi')
])
+ is_represented = fields.Boolean(string='Nama Pemohon Berbeda?', default=False)
+
apr_perjalanan = fields.Boolean(string = "PUM Perjalanan?", default = False)
reimburse_line_ids = fields.One2many('reimburse.line', 'request_id', string='Rincian Reimburse')
+ @api.onchange('is_represented')
+ def _onchange_is_represented(self):
+ if self.is_represented:
+ self.account_name = False
+ self.applicant_name = False
+ else:
+ self.account_name = self.env.user.id
+ self.applicant_name = self.env.user.id
+
@api.onchange('nominal')
def _onchange_nominal_no_minus(self):
if self.nominal and self.nominal < 0:
@@ -473,7 +484,10 @@ class AdvancePaymentRequest(models.Model):
rec.email_ap = self.env.user.email
rec.date_approved_ap = now
rec.position_ap = 'Finance AP'
- rec.status = 'pengajuan3'
+ if rec.position_type == 'pimpinan':
+ rec.status = 'approved'
+ else:
+ rec.status = 'pengajuan3'
rec.message_post(
body=f"Approval <b>AP</b> oleh <b>{self.env.user.name}</b> "
@@ -561,23 +575,29 @@ class AdvancePaymentRequest(models.Model):
}
- @api.depends('date_back_to_office', 'status')
+ @api.depends('date_back_to_office', 'status', 'apr_perjalanan', 'create_date')
def _compute_days_remaining(self):
today = date.today()
for rec in self:
if rec.status in ['approved', 'reject'] and rec.days_remaining:
continue
- if rec.date_back_to_office:
- due_date = rec.date_back_to_office + timedelta(days=7)
+ if rec.apr_perjalanan:
+ if rec.date_back_to_office:
+ due_date = rec.date_back_to_office + timedelta(days=7)
+ rec.estimated_return_date = due_date
+
+ # Jika hari ini sebelum tanggal kembali, maka anggap belum mulai dihitung
+ effective_today = max(today, rec.date_back_to_office)
+ rec.days_remaining = (due_date - effective_today).days
+ else:
+ rec.estimated_return_date = False
+ rec.days_remaining = 0
+ else:
+ base_date = rec.create_date.date() if rec.create_date else today
+ due_date = base_date + timedelta(days=7)
rec.estimated_return_date = due_date
-
- # Jika hari ini sebelum tanggal kembali, maka anggap belum mulai dihitung
- effective_today = max(today, rec.date_back_to_office)
- rec.days_remaining = (due_date - effective_today).days
- else:
- rec.estimated_return_date = False
- rec.days_remaining = 0
+ rec.days_remaining = (due_date - base_date).days
@api.onchange('date_back_to_office')
def _onchange_date_back_to_office(self):
@@ -601,6 +621,8 @@ class AdvancePaymentRequest(models.Model):
@api.onchange('user_id')
def _onchange_user_id_limit_check(self):
+ if self.type_request != 'pum':
+ return
if not self.user_id:
return
@@ -641,8 +663,25 @@ class AdvancePaymentRequest(models.Model):
if active_pum_count >= 2:
raise UserError("Anda hanya dapat mengajukan maksimal 2 PUM aktif. Silakan realisasikan salah satunya terlebih dahulu.")
+ if not vals.get('apr_perjalanan'):
+ if 'estimated_return_date' not in vals:
+ today = date.today()
+ due_date = today + timedelta(days=7)
+ vals['estimated_return_date'] = due_date
+
+ initial_status = ''
+ position = vals.get('position_type')
+ if position == 'staff':
+ initial_status = 'pengajuan1'
+ elif position in ('manager', 'pimpinan'):
+ initial_status = 'pengajuan2'
+ vals['status'] = initial_status
+
if not vals.get('number') or vals['number'] == 'New Draft':
- vals['number'] = self.env['ir.sequence'].next_by_code('advance.payment.request') or 'New Draft'
+ if vals.get('type_request') == 'reimburse':
+ vals['number'] = self.env['ir.sequence'].next_by_code('reimburse.request') or 'New Draft'
+ else:
+ vals['number'] = self.env['ir.sequence'].next_by_code('advance.payment.request') or 'New Draft'
vals['status'] = 'pengajuan1'
return super(AdvancePaymentRequest, self).create(vals)
diff --git a/indoteknik_custom/views/advance_payment_request.xml b/indoteknik_custom/views/advance_payment_request.xml
index 72948876..ba5462b1 100644
--- a/indoteknik_custom/views/advance_payment_request.xml
+++ b/indoteknik_custom/views/advance_payment_request.xml
@@ -65,6 +65,7 @@
<group col="2">
<group string=" ">
<field name="type_request" attrs="{'readonly': [('status', '=', 'approved')]}"/>
+ <field name="is_represented" attrs="{'readonly': [('status', '=', 'approved')]}"/>
<field name="applicant_name" colspan="2" attrs="{'readonly': [('status', '=', 'approved')]}"/>
<field name="position_type" readonly="1"/>
<field name="nominal" colspan="2" attrs="{'readonly': [('status', '=', 'approved')]}"/>
@@ -80,7 +81,7 @@
<field name="apr_perjalanan" attrs="{'invisible': [('type_request', '=', 'reimburse')]}"/>
<field name="date_back_to_office" attrs="{'invisible': [('apr_perjalanan', '=', False)]}"/>
<p style="font-size: 10px; color: grey; font-style: italic" attrs="{'invisible': [('apr_perjalanan', '=', False)]}">*Setelah tanggal kembali, pemohon diharapkan untuk segera memproses realisasi PUM</p>
- <field name="estimated_return_date" readonly="1" widget="badge" attrs="{'invisible': [('apr_perjalanan', '=', False)]}"/>
+ <field name="estimated_return_date" readonly="1" widget="badge"/>
<field name="days_remaining" readonly="1" widget="badge"/>
<field name="approved_by" readonly="1"/>
<field name="create_date" readonly="1"/>
diff --git a/indoteknik_custom/views/ir_sequence.xml b/indoteknik_custom/views/ir_sequence.xml
index 8fdfcbca..dbdbc3c0 100644
--- a/indoteknik_custom/views/ir_sequence.xml
+++ b/indoteknik_custom/views/ir_sequence.xml
@@ -229,6 +229,16 @@
<field name="active">True</field>
</record>
+ <record id="sequence_reimburse_request" model="ir.sequence">
+ <field name="name">Reimburse Request Sequence</field>
+ <field name="code">reimburse.request</field>
+ <field name="prefix">RMK/%(year)s/%(month)s/</field>
+ <field name="padding">4</field>
+ <field name="number_next">1</field>
+ <field name="number_increment">1</field>
+ <field name="active">True</field>
+ </record>
+
<record id="seq_refund_sale_order" model="ir.sequence">
<field name="name">Refund Sales Order</field>
<field name="code">refund.sale.order</field>