summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMqdd <ahmadmiqdad27@gmail.com>2026-03-10 16:04:40 +0700
committerMqdd <ahmadmiqdad27@gmail.com>2026-03-10 16:04:40 +0700
commiteafc8ff73fbb61708039cfb044e760af014daa94 (patch)
tree8ba54424961291a0c73ebf859b661c6b1c14af1f
parenta5ff2e062aba7a7ad3a4abc997882c2e41285108 (diff)
<Miqdad> change field jam masuk and keluar to datetime
-rw-r--r--indoteknik_custom/models/upah_harian_office.py81
-rw-r--r--indoteknik_custom/views/users.xml1
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>