diff options
| -rw-r--r-- | indoteknik_custom/models/upah_harian_office.py | 109 |
1 files changed, 51 insertions, 58 deletions
diff --git a/indoteknik_custom/models/upah_harian_office.py b/indoteknik_custom/models/upah_harian_office.py index 68c0b8d0..e2f87242 100644 --- a/indoteknik_custom/models/upah_harian_office.py +++ b/indoteknik_custom/models/upah_harian_office.py @@ -100,7 +100,11 @@ class UpahHarian(models.Model): for line in rec.upah_harian_line: - jam = max(line.jam_keluar - line.jam_masuk, 0) + if not line.jam_masuk or not line.jam_keluar: + continue + + delta = line.jam_keluar - line.jam_masuk + jam = max(delta.total_seconds() / 3600, 0) if jam < MAX: total_kurang += (MAX - jam) @@ -179,16 +183,16 @@ class UpahHarianLine(models.Model): required=True ) - hari = fields.Char('Hari') + hari = fields.Char('Hari', compute='_compute_hari') jam_masuk = fields.Datetime( 'Jam Masuk', - required=True + required=True, ) jam_keluar = fields.Datetime( 'Jam Keluar', - required=True + required=True, ) kegiatan = fields.Text( @@ -216,20 +220,37 @@ class UpahHarianLine(models.Model): # ========================================================= # COMPUTE # ========================================================= - @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' - ) + + @api.depends('tanggal_line') + def _compute_hari(self): + + mapping = { + 'Monday': 'Senin', + 'Tuesday': 'Selasa', + 'Wednesday': 'Rabu', + 'Thursday': 'Kamis', + 'Friday': 'Jumat', + 'Saturday': 'Sabtu', + 'Sunday': 'Minggu', + } + + for rec in self: + if rec.tanggal_line: + day = rec.tanggal_line.strftime('%A') + rec.hari = mapping.get(day) + else: + rec.hari = False + + @api.depends('jam_masuk', 'jam_keluar', 'is_ganti_jam') def _compute_total_jam_kerja(self): MAX = 7.5 for doc in self.mapped('upah_harian_id'): - lines = doc.upah_harian_line.filtered(lambda l: l.tanggal_line).sorted('tanggal_line') + lines = doc.upah_harian_line.filtered( + lambda l: l.tanggal_line + ).sorted('tanggal_line') excess_pool = 0 @@ -239,7 +260,8 @@ class UpahHarianLine(models.Model): line.total_jam_kerja = 0 continue - jam = max(line.jam_keluar - line.jam_masuk, 0) + delta = line.jam_keluar - line.jam_masuk + jam = max(delta.total_seconds() / 3600, 0) if line.is_ganti_jam and jam > MAX: line.total_jam_kerja = MAX @@ -257,68 +279,39 @@ class UpahHarianLine(models.Model): 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', - 'jam_keluar', - 'is_ganti_jam', - 'upah_harian_id.upah_harian' - ) + @api.depends('total_jam_kerja', 'upah_harian_id.upah_harian') def _compute_upah_harian(self): MAX = self.MAX_WORKING_HOUR for line in self: - jam = max(line.jam_keluar - line.jam_masuk, 0) - - jam_final = min(jam, MAX) - - if line.upah_harian_id.upah_harian: - rate = line.upah_harian_id.upah_harian / MAX - line.upah_harian_compute = jam_final * rate - else: + if not line.upah_harian_id.upah_harian: line.upah_harian_compute = 0 + continue - # ========================================================= - # VALIDATION - # ========================================================= - - # @api.constrains('jam_masuk', 'jam_keluar') - # def _check_jam_valid(self): - - # for line in self: - - # if line.jam_keluar <= line.jam_masuk: - # raise ValidationError( - # "Jam keluar harus lebih besar dari jam masuk." - # ) + rate = line.upah_harian_id.upah_harian / MAX + line.upah_harian_compute = line.total_jam_kerja * rate # ========================================================= - # ONCHANGE + # VALIDATION # ========================================================= - @api.onchange('tanggal_line') - def _onchange_tanggal(self): + @api.constrains('jam_masuk', 'jam_keluar') + def _check_jam_valid(self): - if self.tanggal_line: + for line in self: - day = self.tanggal_line.strftime('%A') + if not line.jam_masuk or not line.jam_keluar: + continue - mapping = { - 'Monday': 'Senin', - 'Tuesday': 'Selasa', - 'Wednesday': 'Rabu', - 'Thursday': 'Kamis', - 'Friday': 'Jumat', - 'Saturday': 'Sabtu', - 'Sunday': 'Minggu', - } + delta = line.jam_keluar - line.jam_masuk - self.hari = mapping.get(day)
\ No newline at end of file + if delta.total_seconds() <= 0: + raise ValidationError( + "Jam keluar harus lebih besar dari jam masuk." + )
\ No newline at end of file |
