diff options
Diffstat (limited to 'indoteknik_custom/models')
| -rw-r--r-- | indoteknik_custom/models/down_payment.py | 138 |
1 files changed, 109 insertions, 29 deletions
diff --git a/indoteknik_custom/models/down_payment.py b/indoteknik_custom/models/down_payment.py index 7a3a39f1..14f0b171 100644 --- a/indoteknik_custom/models/down_payment.py +++ b/indoteknik_custom/models/down_payment.py @@ -3,6 +3,7 @@ from odoo.exceptions import UserError from datetime import datetime # import datetime import logging +_logger = logging.getLogger(__name__) from terbilang import Terbilang import pytz from pytz import timezone @@ -12,6 +13,7 @@ class DownPayment(models.Model): _name = 'down.payment' _description = 'Down Payment Management' _rec_name = 'number' + _inherit = ['mail.thread'] user_id = fields.Many2one('res.users', string='Diajukan Oleh', default=lambda self: self.env.user, tracking=3) @@ -34,6 +36,15 @@ class DownPayment(models.Model): ('reject', 'Rejected') ], string='Status', default='draft', tracking=3, index=True, track_visibility='onchange') + last_status = fields.Selection([ + ('draft', 'Draft'), + ('pengajuan1', 'Menunggu Approval Departement'), + ('pengajuan2', 'Menunggu Pengecekan AP'), + ('pengajuan3', 'Menunggu Approval Pimpinan'), + ('approved', 'Approved'), + ('reject', 'Rejected') + ], string='Status') + status_pay_down_payment = fields.Selection([ ('pending', 'Pending'), ('payment', 'Payment'), @@ -57,25 +68,56 @@ class DownPayment(models.Model): # --------------------------------------- # AP : Manzila (Finance) ID 23 + def _get_departement_approver(self): + mapping = { + 'sales': 19, + 'merchandiser': 19, + 'marketing': 216, + 'logistic': 21, + 'procurement': 21, + 'fat': 28, + 'hr_ga': 7, + } + return mapping.get(self.departement_type) + def action_realisasi_pum(self): - self.ensure_one() - # Logic untuk realisasi PUM - return + return { + 'type': 'ir.actions.act_window', + 'name': 'Realisasi PUM', + 'res_model': 'realization.down.payment', + 'view_mode': 'form', + 'target': 'current', + 'context': { + 'default_pum_id': self.id, + 'default_value_down_payment': self.nominal, + } + } + def action_confirm_payment(self): - self.ensure_one() # Logic untuk konfirmasi pembayaran return - def action_reject(self): - self.ensure_one() - # Logic untuk konfirmasi pembayaran + def action_approval_check(self): + for record in self: + # user = record.user_id + user = self.env['res.users'].browse(3401) + roles = sorted(set( + f"{group.name} (Category: {group.category_id.name})" + for group in user.groups_id + if group.category_id.name == 'Roles' + )) + _logger.info(f"[ROLE CHECK] User: {user.name} (Login: {user.login}) Roles: {roles}") return - def action_approval_check(self): - self.ensure_one() + def action_reject(self): # Logic untuk konfirmasi pembayaran - return + return + + def action_draft(self): + for record in self: + record.status = record.last_status if record.last_status else 'draft' + return @api.model def create(self, vals): @@ -84,33 +126,71 @@ class DownPayment(models.Model): return super(DownPayment, self).create(vals) +class RealizationDownPaymentLine(models.Model): + _name = 'realization.down.payment.line' + _description = 'Rincian Pemberian PUM' + + realization_id = fields.Many2one('realization.down.payment', string='Realization') + date = fields.Date(string='Tanggal', required=True, default=fields.Date.today) + description = fields.Char(string='Description', required=True) + value = fields.Float(string='Nilai', required=True) + + +class RealizationDownPaymentUseLine(models.Model): + _name = 'realization.down.payment.use.line' + _description = 'Rincian Penggunaan PUM' + + realization_id = fields.Many2one('realization.down.payment', string='Realization') + date = fields.Date(string='Tanggal', required=True, default=fields.Date.today) + description = fields.Char(string='Description', required=True) + nominal = fields.Float(string='Nominal', required=True) + attachment = fields.Boolean(string='Lampiran', default=False) + class RealizationDownPayment(models.Model): _name = 'realization.down.payment' _description = 'Realization Down Payment Management' + _inherit = ['mail.thread'] - # number = fields.Char(string='No. Dokumen', tracking=3) - title = fields.Char(string='Judul', required=True, tracking=3) - goals = fields.Text(string='Tujuan', tracking=3, required=True) - related = fields.Char(string='Terkait', tracking=3, required=True) - - # Page Rincian Pemberian PUM - date_line = fields.Date(string='Tanggal', required=True, tracking=3, default=lambda self: fields.Date.today()) - info_line = fields.Char(string='Description', required=True, tracking=3) - value_line = fields.Float(string='Nilai', required=True, tracking=3) - grand_total = fields.Float(string='Grand Total', tracking=3) - - # Page Rincian Penggunaan PUM - date_line_use = fields.Date(string='Tanggal', required=True, tracking=3, default=lambda self: fields.Date.today()) - info_line_use = fields.Char(string='Description', required=True, tracking=3) - value_line_use = fields.Float(string='Nominal', required=True, tracking=3) - attachment = fields.Boolean(string='Attachment', tracking=3, default=False) - grand_total_use = fields.Float(string='Grand Total', tracking=3) - value_down_payment = fields.Float(string='PUM', required=True, tracking=3) - remaining_value = fields.Float(string='Sisa Uang PUM', tracking=3) + pum_id = fields.Many2one('down.payment', string='No PUM') + title = fields.Char(string='Judul', tracking=3) + goals = fields.Text(string='Tujuan', tracking=3) + related = fields.Char(string='Terkait', tracking=3,) + + pemberian_line_ids = fields.One2many( + 'realization.down.payment.line', 'realization_id', string='Rincian Pemberian' + ) + penggunaan_line_ids = fields.One2many( + 'realization.down.payment.use.line', 'realization_id', string='Rincian Penggunaan' + ) + + grand_total = fields.Float(string='Grand Total Pemberian', tracking=3, compute='_compute_grand_total') + grand_total_use = fields.Float(string='Grand Total Penggunaan', tracking=3, compute='_compute_grand_total_use') + value_down_payment = fields.Float(string='PUM', tracking=3) + remaining_value = fields.Float(string='Sisa Uang PUM', tracking=3, compute='_compute_remaining_value') note_approval = fields.Text(string='Note Persetujuan', tracking=3) + currency_id = fields.Many2one( + 'res.currency', string='Currency', + default=lambda self: self.env.company.currency_id + ) + + @api.depends('pemberian_line_ids.value') + def _compute_grand_total(self): + for rec in self: + rec.grand_total = sum(line.value for line in rec.pemberian_line_ids) + + @api.depends('penggunaan_line_ids.nominal') + def _compute_grand_total_use(self): + for rec in self: + rec.grand_total_use = sum(line.nominal for line in rec.penggunaan_line_ids) + + @api.depends('grand_total', 'grand_total_use') + def _compute_remaining_value(self): + for rec in self: + rec.remaining_value = rec.value_down_payment - rec.grand_total_use + |
