我正在使用python 2.7,龙卷风网络服务,peewee for database。
场景要获得每个月26到下个月25的休假报告。
所以我在下面的示例场景中做了这个(但从逻辑上讲,我坚持了下来)
我从用户界面获取 from_date , to_date (选择26-04-2016至25-05-2016的报告)
Leavetable 是一个表名(它有员工ID,从日期开始,到目前为止,work_days)
working_days 只是每次休假的计数(29-04-2016 - 02-05-2016)= 2(星期六和星期日已被排除)
单个员工在特定月份的总假期 样本叶是
24-04-16 - 26-04-16,
28-04-16 - 29-04-16,
15-05-2016至29-05-2016
我的代码(帮我改变)
fresh_when
对于
以上的相同假,它的值= 324-04-16 - 26-04-16(必须花一天时间,但不能用完 这段代码)
28-04-16 - 29-04-16(需要(2天)
15-05-2016至29-05-2016(26,27,28,29必须排除这4天)
指导我将这个逻辑解决的最简单的解决方案是做必要的。
根据solarflare指南,我添加了以下代码。
但即使在逻辑上它也不合适。上述情景假期15-05-2016至29-05-2016这也是我在接受2016年4月15日至2016年5月15日的报告
value=0
for report in Leavetable.select().where(Leavetable.Employee_ID==employees_id):
db_from_date = report.From_Date
if (from_date<=db_from_date and to_date>=db_from_date):
workingday=float(report.Working_Days)+value
value= workingday
print value
答案 0 :(得分:1)
我用基本的if逻辑改变了上面的代码并且上面的场景得到了满足我下面列出的代码可能是一些变量名称,如果有任何评论可能很难理解:
if (db_from_date>= prev_month and db_to_date<=this_month):
counting = float(working_day)
leave_availed=value+counting
value=leave_availed
elif(db_from_date >= prev_month and db_from_date <= this_month and db_to_date > this_month):
counting = float(working_day)
check_point =counting + 0.5
extra_days = workdays.networkdays(this_month_date,db_to_date,holidays)
if int(check_point)==check_point:
extra_days=extra_days - 0.5
count=counting-extra_days
leave_availed=value+count
value=leave_availed
elif(db_from_date < prev_month and db_to_date>=prev_month and db_to_date <= this_month):
counting = float(working_day)
extra_days = workdays.networkdays(db_from_date,prev_month_date,holidays)
count = counting - extra_days
leave_availed=value+count
value=leave_availed
elif(db_from_date < prev_month and db_to_date > this_month):
count = workdays.networkdays(prev_month,this_month,holidays)
leave_availed=value+count
value=leave_availed
else:
leave_availed=0