Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 31 additions & 53 deletions beams/beams/doctype/batta_claim/batta_claim.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import frappe
import json
import re
from frappe.utils import getdate, get_datetime, date_diff
from frappe.utils import getdate, get_datetime, date_diff, add_days
from frappe.model.document import Document


Expand Down Expand Up @@ -208,66 +208,44 @@ def get_batta_for_food_allowance(designation, from_date_time, to_date_time, tota
'''
Method to get Batta for Food
'''
values = { 'break_fast':0, 'lunch':0, 'dinner':0 }
batta_policy = frappe.db.exists('Batta Policy', { 'designation':designation })
values = { 'break_fast': 0, 'lunch': 0, 'dinner': 0 }
batta_policy = frappe.db.exists('Batta Policy', { 'designation': designation })
from_date_time = get_datetime(from_date_time)
to_date_time = get_datetime(to_date_time)
required_hours = 4 if is_delhi_bureau else 6
if batta_policy and float(total_hrs)>required_hours:

if batta_policy and float(total_hrs) > required_hours:
is_actual = frappe.db.get_value('Batta Policy', batta_policy, 'is_actual___')
if is_actual:
return values

break_fast, lunch, dinner = frappe.db.get_value('Batta Policy', batta_policy, ['break_fast', 'lunch', 'dinner'])
same_date = False
if getdate(from_date_time) == getdate(to_date_time):
same_date = True
#Breakfast check
if same_date:
date_threshold = getdate(from_date_time)
break_fast_start_time = get_datetime('{0} {1}'.format(date_threshold, '04:00'))
break_fast_end_time = get_datetime('{0} {1}'.format(date_threshold, '09:00'))
if (from_date_time <= break_fast_start_time <= to_date_time) or (from_date_time <= break_fast_end_time <= to_date_time):
values['break_fast'] = break_fast
lunch_start_time = get_datetime('{0} {1}'.format(date_threshold, '12:30'))
lunch_end_time = get_datetime('{0} {1}'.format(date_threshold, '14:00'))
if (from_date_time <= lunch_start_time <= to_date_time) or (from_date_time <= lunch_end_time <= to_date_time):
values['lunch'] = lunch
dinner_start_time = get_datetime('{0} {1}'.format(date_threshold, '18:00'))
dinner_end_time = get_datetime('{0} {1}'.format(date_threshold, '21:00'))
if (from_date_time <= dinner_start_time <= to_date_time) or (from_date_time <= dinner_end_time <= to_date_time):
values['dinner'] = dinner
else:
#Breakfast check
date_threshold = getdate(from_date_time) #Check with Start Date
break_fast_start_time = get_datetime('{0} {1}'.format(date_threshold, '04:00'))
break_fast_end_time = get_datetime('{0} {1}'.format(date_threshold, '09:00'))
if (from_date_time <= break_fast_start_time <= to_date_time) or (from_date_time <= break_fast_end_time <= to_date_time):
values['break_fast'] = break_fast
date_threshold = getdate(to_date_time) #Check with End Date
break_fast_start_time = get_datetime('{0} {1}'.format(date_threshold, '04:00'))
break_fast_end_time = get_datetime('{0} {1}'.format(date_threshold, '09:00'))

current_date = getdate(from_date_time)
end_date = getdate(to_date_time)

while current_date <= end_date:
# Define meal timings for the current day
break_fast_start_time = get_datetime(f'{current_date} 04:00')
break_fast_end_time = get_datetime(f'{current_date} 09:00')
lunch_start_time = get_datetime(f'{current_date} 12:30')
lunch_end_time = get_datetime(f'{current_date} 14:00')
dinner_start_time = get_datetime(f'{current_date} 18:00')
dinner_end_time = get_datetime(f'{current_date} 21:00')

# Check Breakfast
if (from_date_time <= break_fast_start_time <= to_date_time) or (from_date_time <= break_fast_end_time <= to_date_time):
values['break_fast'] = values.get('break_fast', 0) + break_fast
#Lunch Check
date_threshold = getdate(from_date_time) #Check with Start Date
lunch_start_time = get_datetime('{0} {1}'.format(date_threshold, '12:30'))
lunch_end_time = get_datetime('{0} {1}'.format(date_threshold, '14:00'))
if (from_date_time <= lunch_start_time <= to_date_time) or (from_date_time <= lunch_end_time <= to_date_time):
values['lunch'] = lunch
date_threshold = getdate(to_date_time) #Check with End Date
lunch_start_time = get_datetime('{0} {1}'.format(date_threshold, '12:30'))
lunch_end_time = get_datetime('{0} {1}'.format(date_threshold, '14:00'))
values['break_fast'] += break_fast

# Check Lunch
if (from_date_time <= lunch_start_time <= to_date_time) or (from_date_time <= lunch_end_time <= to_date_time):
values['lunch'] = values.get('lunch', 0) + lunch
#Dinner Check
date_threshold = getdate(from_date_time) #Check with Start Date
dinner_start_time = get_datetime('{0} {1}'.format(date_threshold, '18:00'))
dinner_end_time = get_datetime('{0} {1}'.format(date_threshold, '21:00'))
if (from_date_time <= dinner_start_time <= to_date_time) or (from_date_time <= dinner_end_time <= to_date_time):
values['dinner'] = dinner
date_threshold = getdate(to_date_time) #Check with End Date
dinner_start_time = get_datetime('{0} {1}'.format(date_threshold, '18:00'))
dinner_end_time = get_datetime('{0} {1}'.format(date_threshold, '21:00'))
values['lunch'] += lunch

# Check Dinner
if (from_date_time <= dinner_start_time <= to_date_time) or (from_date_time <= dinner_end_time <= to_date_time):
values['dinner'] = values.get('dinner', 0) + dinner
values['dinner'] += dinner

# Move to the next day
current_date = add_days(current_date, 1)

return values