1 #coding:utf-8
2 '''
3 Created on 2012-12-27
4
5 @author: hhhyde
6 '''
7 def exec123(filepath, place, name):
8 '''
9 filepath:待处理xls绝对路径
10 palce:办公场地
11 name:待处理对象的姓名
12 '''
13 from pyExcelerator import parse_xls
14 #打开xls
15 a=parse_xls(filepath)
16 from datetime import timedelta
17 worktime=timedelta(hours = int(0))
18 stand_worktime=9.5
19 for temp_sheet in a:
20 if place==temp_sheet[0]:
21 palce_sheet=temp_sheet
22 palce_data=palce_sheet[1]
23 pps={}#{日期:记录}
24 #整理有效数据,取出日期和打卡记录
25 for k, v in palce_data.items():
26 if name==v:
27 #取出每条打卡记录的日期
28 sign_date=palce_data[(k[0], k[1]+2)]
29 #取出每条打卡记录
30 sign_sign=palce_data[(k[0], k[1]+3)]
31 #过滤掉无效数据(入周末加班不计入工时)
32 if NoWeekend(sign_date):
33 pps[sign_date]=sign_sign
34 #处理数据
35 for curdate, sign in pps.items():
36 print('%s\n%s'%(curdate, sign))
37 #sign_points=[8:01,8:04,9:22,18:22]类似这样的记录
38 sign_points=sign.split(' ')
39 #max='18:22',取最后一条记录
40 max=sign_points[len(sign_points)-1]
41 #max=(18,22),小时和分钟分离
42 max=max.split(':')
43 #min='8:01'
44 min=sign_points[0]
45 #min=(8,01)
46 min=min.split(':')
47 print('工时%s'%Exec_worktime(min, max))
48 worktime+=Exec_worktime(min, max)
49 print('-----------------')
50 #根据打卡记录条数来决定工作天数
51 onworkdays=len(pps)
52 #正常工时(工时最低标准,必须达到)
53 onworkdays=timedelta(hours = onworkdays*stand_worktime)
54 #判断是否欠工时
55 if onworkdays>worktime:
56 return '欠工时--->%s'%(onworkdays-worktime)
57 else:
58 return '剩余工时--->%s'%(worktime-onworkdays)
59
60 def Exec_worktime(min = None, max = None):
61 '''
62 min:第一次打卡记录
63 max:最后一次打卡记录
64 '''
65 from datetime import timedelta
66 max=timedelta(hours = int(max[0]), minutes = int(max[1]))#最后打卡时间
67 min=timedelta(hours = int(min[0]), minutes = int(min[1]))#第一次打卡时间
68 eight=timedelta(hours = 8)#上班时间
69 off=timedelta(hours = int(18))#18点
70 nine=timedelta(hours = int(9))#9点
71 workout=timedelta(hours = int(17), minutes = 30)#17:30
72 worktime=timedelta(hours = int(0))#默认
73 minus_wt=timedelta(hours = int(0))#负工时,默认
74 positive_wt=timedelta(hours = 9, minutes = 30)#正工时,默认
75
76 #第一次打卡在8:00后超出时间计入负工时,9点后不计,使用忘打卡
77 if min>eight and min<nine:
78 minus_wt=min-eight
79 #第一次打卡在8:00前,0工时
80 else:
81 pass
82 #最后打卡时间在18点后剩余时间计入正工时
83 if max>off:
84 positive_wt+=max-off
85 #否则不计入正工时
86 else:
87 pass
88 # print(minus_wt)
89 # print(positive_wt)
90 worktime=positive_wt-minus_wt
91 return worktime
92
93 def NoWeekend(date):
94 '''
95 date:传入时间,格式类似'2013-02-22'
96 '''
97 import datetime
98 a=date.split('-')
99 weekday=datetime.date(int(a[0]), int(a[1]), int(a[2]))
100 # if weekday.isoweekday()<=5:
101 # return True
102 # else:
103 # return False
104 #
105 return True if weekday.isoweekday()<=5 else False
106
107 if __name__=='__main__':
108 # print(NoWeekend('2013-03-02'))