コード例 #1
0
 def person_stats(self, jobnumber, month):
     """个人考勤统计"""
     ret = {}
     s = Schedule()
     now_year = datetime.date.today().strftime("%Y")
     record_dates = [d for d in s.iter_mothdays(int(now_year), int(month))]
     # 准备前置数据
     userobj = User.objects.get(jobnumber=jobnumber)
     attendence_records = AttendenceRecord.objects.record_query(attendence_id=userobj.attendence_id, record_dates=record_dates)
     approval_records = ApprovalRecord.objects.record_query(userid=userobj.userid, record_dates=record_dates)
     holiday_info = Holiday.objects.holiday_info(record_dates=record_dates)
     # 初始化
     unclockin_num = unclockout_num = worktime_lt_num = late_num = early_num = 0
     # 计算
     for attendence_record in attendence_records:
         record_date = attendence_record.record_date
         # 不统计节假日/请休假情况
         if not holiday_info.get(record_date, None) and len(approval_records.get(record_date, [])) == 0:
             if not attendence_record.clockin_time:
                 unclockin_num += 1
             if not attendence_record.clockout_time:
                 unclockout_num += 1
             if attendence_record.clockin_time_warning:
                 late_num += 1
             if attendence_record.clockout_time_warning:
                 early_num += 1
             if attendence_record.worktime_warning:
                 worktime_lt_num += 1
     # 组装
     ret.update(
         {  'name': userobj.name,
            'jobnumber': userobj.jobnumber,
            'deptname': Department.objects.query_mult_department(department_id=userobj.department_id).name,
            'month': '-'.join([now_year, month]),
            'unclockin_num': unclockin_num,
            'unclockout_num': unclockout_num,
            'worktime_lt_num': worktime_lt_num,
            'late_num': late_num,
            'early_num': early_num
          }
      )
     return ret
コード例 #2
0
 def person_approval_stats(self, jobnumber, month):
     """个人请休假信息统计"""
     ret = {}
     s = Schedule()
     now_year = datetime.date.today().strftime("%Y")
     record_dates = [d for d in s.iter_mothdays(int(now_year), int(month))]
     # 准备前置数据
     userobj = User.objects.get(jobnumber=jobnumber)
     attendence_records = AttendenceRecord.objects.record_query(attendence_id=userobj.attendence_id,
                                                                record_dates=record_dates)
     approval_records = ApprovalRecord.objects.record_query(userid=userobj.userid, record_dates=record_dates)
     holiday_info = Holiday.objects.holiday_info(record_dates=record_dates)
     # 初始化
     unclock_day = winter_leave = sick_leave = person_leave = fullpay_sick_leave = halfpay_sick_leave = marriage_leave = maternity_leave \
         = siling_leave = dead_leave = baby_leave = 0
     # stats
     for attendence_record in attendence_records:
         record_date = attendence_record.record_date
         # 不统计节假日/请休假情况
         if not holiday_info.get(record_date, None) and len(approval_records.get(record_date, [])) == 0:
             if not attendence_record.clockin_time or not attendence_record.clockout_time:
                 unclock_day += 1
     # 计算需要去重
     has_sum_list = []
     for day, approval_objs in approval_records.iteritems():
         if len(approval_objs) > 0:
             for approval_obj in approval_objs:
                 if approval_obj.instance_id not in has_sum_list:
                     if approval_obj.approval_type == u'请假':
                         if approval_obj.aproval_desc in [u'年假']:
                             winter_leave += s.count_diff_day(approval_obj.start_time, approval_obj.end_time, int(month))
                         if approval_obj.aproval_desc in [u'司龄假']:
                             siling_leave += s.count_diff_day(approval_obj.start_time, approval_obj.end_time, int(month))
                         if approval_obj.aproval_desc in [u'病假']:
                             sick_leave += s.count_diff_day(approval_obj.start_time, approval_obj.end_time, int(month))
                         if approval_obj.aproval_desc in [u'事假']:
                             person_leave += s.count_diff_day(approval_obj.start_time, approval_obj.end_time, int(month))
                         if approval_obj.aproval_desc in [u'全薪病假']:
                             fullpay_sick_leave += s.count_diff_day(approval_obj.start_time, approval_obj.end_time, int(month))
                         if approval_obj.aproval_desc in [u'半薪病假/事假']:
                             halfpay_sick_leave += s.count_diff_day(approval_obj.start_time, approval_obj.end_time, int(month))
                         if approval_obj.aproval_desc in [u'婚假']:
                             marriage_leave += s.count_diff_day(approval_obj.start_time, approval_obj.end_time, int(month))
                         if approval_obj.aproval_desc in [u'丧假']:
                             dead_leave += s.count_diff_day(approval_obj.start_time, approval_obj.end_time, int(month))
                         if approval_obj.aproval_desc in [u'产检假或陪产假']:
                             maternity_leave += s.count_diff_day(approval_obj.start_time, approval_obj.end_time, int(month))
                         if approval_obj.aproval_desc in [u'产假']:
                             baby_leave += s.count_diff_day(approval_obj.start_time, approval_obj.end_time, int(month))
                         has_sum_list.append(approval_obj.instance_id)
     # 组装
     ret.update(
         {
             'name': userobj.name,
             'jobnumber': userobj.jobnumber,
             'deptname': Department.objects.query_mult_department(department_id=userobj.department_id).name,
             'month': '-'.join([now_year, month]),
             'unclock_day': unclock_day,
             'winter_leave': winter_leave,
             'sick_leave': sick_leave,
             'person_leave': person_leave,
             'fullpay_sick_leave': fullpay_sick_leave,
             'halfpay_sick_leave': halfpay_sick_leave,
             'marriage_leave': marriage_leave,
             'maternity_leave': maternity_leave,
             'siling_leave': siling_leave,
             'dead_leave': dead_leave,
             'baby_leave': baby_leave
         }
     )
     return ret