summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indoteknik_custom/models/upah_harian_office.py109
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