summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indoteknik_custom/models/advance_payment_request.py60
-rw-r--r--indoteknik_custom/views/advance_payment_settlement.xml3
2 files changed, 62 insertions, 1 deletions
diff --git a/indoteknik_custom/models/advance_payment_request.py b/indoteknik_custom/models/advance_payment_request.py
index 18953c7c..ac9d7c2d 100644
--- a/indoteknik_custom/models/advance_payment_request.py
+++ b/indoteknik_custom/models/advance_payment_request.py
@@ -921,6 +921,35 @@ class AdvancePaymentUsageLine(models.Model):
compute='_compute_is_current_user_ap'
)
+ category_usage = fields.Selection([
+ ('parkir', 'Parkir'),
+ ('tol', 'Tol'),
+ ('bbm', 'BBM'),
+ ('kuli', 'Kuli'),
+ ('konsumsi', 'Konsumsi'),
+ ('lain_lain', 'Lain-lain'),
+ ], string='Kategori System', compute='_compute_category_usage')
+
+ @api.depends('account_id')
+ def _compute_category_usage(self):
+ for rec in self:
+ if not rec.account_id:
+ rec.category_usage = False
+ continue
+ name = rec.account_id.name.lower()
+ if 'bbm' in name or 'bahan bakar' in name:
+ rec.category_usage = 'bbm'
+ elif 'tol' in name:
+ rec.category_usage = 'tol'
+ elif 'parkir' in name:
+ rec.category_usage = 'parkir'
+ elif 'kuli' in name or 'bongkar' in name:
+ rec.category_usage = 'kuli'
+ elif 'konsumsi' in name or 'makan' in name or 'minum' in name:
+ rec.category_usage = 'konsumsi'
+ else:
+ rec.category_usage = 'lain_lain'
+
def _compute_is_current_user_ap(self):
ap_user_ids = [23, 9468, 16729]
is_ap = self.env.user.id in ap_user_ids
@@ -1642,6 +1671,35 @@ class AdvancePaymentRequestEstimateLine(models.Model):
('konsumsi', 'Konsumsi'),
('lain_lain', 'Lain-lain'),
], string='Kategori Estimasi', required=True)
- description = fields.Text(string='keTambahan', help='Deskripsi tambahan untuk estimasi, misalnya tujuan parkir atau rute tol.')
+ description = fields.Text(string='Description', help='Deskripsi tambahan untuk estimasi biaya yang diperlukan.')
nominal = fields.Float(string='Nominal Estimasi', required=True, help='Masukkan nominal estimasi untuk kategori ini (tidak mesti akurat, hanya untuk gambaran umum).')
currency_id = fields.Many2one(related='request_id.currency_id')
+
+ total_actual = fields.Float(string='Nominal Realisasi', compute='_compute_actual_data')
+ frequency = fields.Integer(string='Qty Realisasi', compute='_compute_actual_data')
+
+ @api.depends('request_id.settlement_ids.penggunaan_line_ids.nominal',
+ 'request_id.settlement_ids.penggunaan_line_ids.account_id')
+ def _compute_actual_data(self):
+ for rec in self:
+ total_act = 0
+ freq = 0
+ if rec.request_id and rec.request_id.settlement_ids:
+ all_usage_lines = rec.request_id.settlement_ids.mapped('penggunaan_line_ids')
+ valid_lines = all_usage_lines.filtered(lambda l: l.account_id and l.category_usage)
+ planned_category = rec.request_id.estimate_line_ids.mapped('category_estimate')
+ if rec.category_estimate == 'lain_lain':
+ matched_lines = valid_lines.filtered(
+ lambda l: l.category_usage == 'lain_lain' or \
+ l.category_usage not in planned_category
+ )
+ else:
+ matched_lines = valid_lines.filtered(
+ lambda l: l.category_usage == rec.category_estimate
+ )
+
+ total_act = sum(matched_lines.mapped('nominal'))
+ freq = len(matched_lines)
+ rec.total_actual = total_act
+ rec.frequency = freq
+
diff --git a/indoteknik_custom/views/advance_payment_settlement.xml b/indoteknik_custom/views/advance_payment_settlement.xml
index 258f469f..352c5b96 100644
--- a/indoteknik_custom/views/advance_payment_settlement.xml
+++ b/indoteknik_custom/views/advance_payment_settlement.xml
@@ -118,6 +118,7 @@
<group string="Finance">
<field name="is_current_user_ap" invisible="1"/>
<field name="account_id" attrs="{'readonly': [('is_current_user_ap', '=', False)]}"/>
+ <field name="category_usage" invisible="1"/>
<field name="done_attachment" attrs="{'readonly': [('is_current_user_ap', '=', False)]}"/>
</group>
</group>
@@ -131,6 +132,8 @@
<field name="category_estimate"/>
<field name="description"/>
<field name="nominal" sum="Total Estimasi"/>
+ <field name="frequency"/>
+ <field name="total_actual" sum="Total Actual"/>
<field name="currency_id" invisible="1"/>
</tree>
</field>