summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models
diff options
context:
space:
mode:
authortrisusilo48 <tri.susilo@altama.co.id>2025-04-30 13:55:26 +0700
committertrisusilo48 <tri.susilo@altama.co.id>2025-04-30 13:55:26 +0700
commitc77d250353dbed0ba1ec5cd8abd940ba95a011fc (patch)
tree176ae9334bab1369e9c21e6b6230d59ab90f13b3 /indoteknik_custom/models
parent509eb9406e6c48caf3e6366c3d8ac60643b71546 (diff)
handle 15am dan holidays
Diffstat (limited to 'indoteknik_custom/models')
-rwxr-xr-xindoteknik_custom/models/sale_order.py45
1 files changed, 28 insertions, 17 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index 91905037..25c1b3a8 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -541,12 +541,13 @@ class SaleOrder(models.Model):
rec.eta_date_start = False
- def get_days_until_next_business_day(self, start_date=None, *args, **kwargs):
+ def handling_order_after_3pm(self, start_date=None, *args, **kwargs):
jakarta = pytz.timezone("Asia/Jakarta")
current = datetime.now(jakarta)
offset = 0
-
+
+
# Gunakan current time kalau start_date tidak diberikan
if start_date is None:
start_date = current
@@ -559,28 +560,31 @@ class SaleOrder(models.Model):
batas_waktu = datetime.strptime("15:00", "%H:%M").time()
if start_date.time() > batas_waktu:
offset += 1
+
+ return offset
+
+ def get_days_until_next_business_day(self, start_date=None, *args, **kwargs):
+ jakarta = pytz.timezone("Asia/Jakarta")
+ current = datetime.now(jakarta)
+
+ offset = 0
+ i = 0
current_day = start_date.date()
holiday = self.env['hr.public.holiday']
-
+
while True:
- # Tambah satu hari, cek apakah hari kerja
- current_day += timedelta(days=1)
-
+ # # Tambah satu hari, cek apakah hari kerja
+ current_day += timedelta(days=i)
+ i = 1
+
# Lewati weekend
is_weekend = current_day.weekday() >= 5
-
- if is_weekend:
- offset += 1
- continue
-
- # Lewati hari libur
is_holiday = holiday.search([("start_date", "=", current_day)])
-
- if is_holiday:
+ if is_weekend or is_holiday:
offset += 1
continue
-
+
break
return offset
@@ -633,8 +637,11 @@ class SaleOrder(models.Model):
max_slatime = 1 # Default SLA jika tidak ada
slatime = self.calculate_sla_by_vendor(rec.order_line)
max_slatime = max(max_slatime, slatime['slatime'])
+
+ days_after_3pm = self.handling_order_after_3pm(current_date)
+ date_after_3pm = current_date + timedelta(days=days_after_3pm)
- sum_days = max_slatime + self.get_days_until_next_business_day(current_date)
+ sum_days = max_slatime + self.get_days_until_next_business_day(date_after_3pm)
if not rec.estimated_arrival_days:
rec.estimated_arrival_days = sum_days
@@ -658,7 +665,11 @@ class SaleOrder(models.Model):
max_slatime = 1 # Default SLA jika tidak ada
slatime = self.calculate_sla_by_vendor(rec.order_line)
max_slatime = max(max_slatime, slatime['slatime'])
- sum_days = max_slatime + self.get_days_until_next_business_day(current_date)
+
+ days_after_3pm = self.handling_order_after_3pm(current_date)
+ date_after_3pm = current_date + timedelta(days=days_after_3pm)
+
+ sum_days = max_slatime + self.get_days_until_next_business_day(date_after_3pm)
eta_minimum = current_date + timedelta(days=sum_days)
if expected_date < eta_minimum.date():