diff options
| author | FIN-IT_AndriFP <it@fixcomart.co.id> | 2025-10-13 10:53:11 +0700 |
|---|---|---|
| committer | FIN-IT_AndriFP <it@fixcomart.co.id> | 2025-10-13 10:53:11 +0700 |
| commit | 698650e73503d0b780694e150fb5cb3f8e91d83d (patch) | |
| tree | 25ac0d55048507d84509c0a3cfc6fdb5b0aefc4b | |
| parent | a9eac2968018d74c190ac376ce2b874e32ded3b6 (diff) | |
(andri) add seq reimburse, penyesuaian approve, & add diwakilkan
| -rw-r--r-- | indoteknik_custom/models/advance_payment_request.py | 69 | ||||
| -rw-r--r-- | indoteknik_custom/views/advance_payment_request.xml | 3 | ||||
| -rw-r--r-- | indoteknik_custom/views/ir_sequence.xml | 10 |
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> |
