diff options
| author | Mqdd <ahmadmiqdad27@gmail.com> | 2026-03-10 16:04:40 +0700 |
|---|---|---|
| committer | Mqdd <ahmadmiqdad27@gmail.com> | 2026-03-10 16:04:40 +0700 |
| commit | eafc8ff73fbb61708039cfb044e760af014daa94 (patch) | |
| tree | 8ba54424961291a0c73ebf859b661c6b1c14af1f | |
| parent | a5ff2e062aba7a7ad3a4abc997882c2e41285108 (diff) | |
<Miqdad> change field jam masuk and keluar to datetime
| -rw-r--r-- | indoteknik_custom/models/upah_harian_office.py | 81 | ||||
| -rw-r--r-- | indoteknik_custom/views/users.xml | 1 |
2 files changed, 50 insertions, 32 deletions
diff --git a/indoteknik_custom/models/upah_harian_office.py b/indoteknik_custom/models/upah_harian_office.py index 0e91a402..68c0b8d0 100644 --- a/indoteknik_custom/models/upah_harian_office.py +++ b/indoteknik_custom/models/upah_harian_office.py @@ -1,7 +1,7 @@ from odoo import models, fields, api from odoo.exceptions import UserError, ValidationError -class UpahHarianOffice(models.Model): +class UpahHarian(models.Model): _name = 'upah.harian' _description = 'Upah Harian' _inherit = ['mail.thread', 'mail.activity.mixin'] @@ -162,7 +162,7 @@ class UpahHarianOffice(models.Model): return -class UpahHarianOfficeLine(models.Model): +class UpahHarianLine(models.Model): _name = 'upah.harian.line' _description = 'Upah Harian Line' _order = 'tanggal_line asc' @@ -181,12 +181,12 @@ class UpahHarianOfficeLine(models.Model): hari = fields.Char('Hari') - jam_masuk = fields.Float( + jam_masuk = fields.Datetime( 'Jam Masuk', required=True ) - jam_keluar = fields.Float( + jam_keluar = fields.Datetime( 'Jam Keluar', required=True ) @@ -216,36 +216,53 @@ class UpahHarianOfficeLine(models.Model): # ========================================================= # COMPUTE # ========================================================= - - @api.depends('jam_masuk', 'jam_keluar', 'is_ganti_jam') + @api.depends( + 'jam_masuk', + 'jam_keluar', + 'is_ganti_jam', + 'upah_harian_id.upah_harian_line.jam_masuk', + 'upah_harian_id.upah_harian_line.jam_keluar' + ) def _compute_total_jam_kerja(self): - for rec in self: - if not rec.jam_masuk or not rec.jam_keluar: - rec.total_jam_kerja = 0 - continue + MAX = 7.5 - masuk = rec.jam_masuk - keluar = rec.jam_keluar + for doc in self.mapped('upah_harian_id'): - if rec.is_ganti_jam: - rec.total_jam_kerja = keluar - masuk - else: - normal_start = 8.5 - normal_end = 16.5 + lines = doc.upah_harian_line.filtered(lambda l: l.tanggal_line).sorted('tanggal_line') - start = max(masuk, normal_start) - end = min(keluar, normal_end) + excess_pool = 0 - total = end - start + for line in lines: - if total < 0: - total = 0 + if not line.jam_masuk or not line.jam_keluar: + line.total_jam_kerja = 0 + continue - if total > 7.5: - total = 7.5 + jam = max(line.jam_keluar - line.jam_masuk, 0) - rec.total_jam_kerja = total + if line.is_ganti_jam and jam > MAX: + line.total_jam_kerja = MAX + excess_pool += jam - MAX + else: + line.total_jam_kerja = min(jam, MAX) + + if excess_pool > 0: + + for line in lines: + + if excess_pool <= 0: + break + + if line.total_jam_kerja < MAX: + + need = MAX - line.total_jam_kerja + + tambahan = min(need, excess_pool) + + line.total_jam_kerja += tambahan + + excess_pool -= tambahan @api.depends( 'jam_masuk', @@ -273,15 +290,15 @@ class UpahHarianOfficeLine(models.Model): # VALIDATION # ========================================================= - @api.constrains('jam_masuk', 'jam_keluar') - def _check_jam_valid(self): + # @api.constrains('jam_masuk', 'jam_keluar') + # def _check_jam_valid(self): - for line in self: + # for line in self: - if line.jam_keluar <= line.jam_masuk: - raise ValidationError( - "Jam keluar harus lebih besar dari jam masuk." - ) + # if line.jam_keluar <= line.jam_masuk: + # raise ValidationError( + # "Jam keluar harus lebih besar dari jam masuk." + # ) # ========================================================= # ONCHANGE diff --git a/indoteknik_custom/views/users.xml b/indoteknik_custom/views/users.xml index 6519aeaa..2e464458 100644 --- a/indoteknik_custom/views/users.xml +++ b/indoteknik_custom/views/users.xml @@ -16,6 +16,7 @@ <field name="is_admin_reconcile"/> <field name="is_outbound"/> <field name="is_inbound"/> + <field name="pic"/> </field> </field> </record> |
