summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models
diff options
context:
space:
mode:
Diffstat (limited to 'indoteknik_custom/models')
-rw-r--r--indoteknik_custom/models/down_payment.py138
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
+