1 int init_win()
2 {
3 return 1;
4 };
5
6 int load_ext()
7 {
8 //显示记录时执行
9 //
10 return 1;
11 };
12
13 int show_row_ext()
14 {
15 dbg('------------------------------------------');
16 dbg('开始: ' + emp_name + ' 的 ' + class_date_fmt + ' 的考勤检查');
17
18 //如果是请假的话,设置统计天数为1
19 if (process_result == 'E') {
20 n2 = 1;
21 return 1;
22 }
23
24 //如果是出差的话,设置统计天数为1
25 if (process_result == 'F') {
26 n2 = 1;
27 return 1;
28 }
29
30 if (note_info != '') {
31 dbg('当天已处理过 | 当天由系统自动处理,停止检查');
32 dbg('备注信息:' + note_info + ' . 打卡记录:' + on_time + '. 出勤天数: ' + n2);
33 return 1;
34 }
35
36 string ss1;
37 int not_find;
38 not_find = -1;
39
40 //显示每一条记录时执行
41 //一共10个刷卡点,其中0为后勤点,1、3、9为午班刷卡点,2、4、5、6、7、8为野外刷卡点
42 //考勤地点:A、后勤区 | B 午班区 | C 野外区
43 //n1 打卡地点-打卡班次 n2 打卡天数
44 //得到员工当天的打卡记录
45
46 //提前和推迟的小时数
47 int time_dq_hour,time_tc_hour;
48 time_dq_hour = 0; //不得大于野外标准开始小时数
49 time_tc_hour = 0; //标准小时数 + 推迟 不得大于24
50
51 num rec_day; //打卡天数
52 rec_day = 0;
53
54 //野外的开始和结束标准时间
55 int time_yw_beg,time_yw_end;
56 time_yw_beg = 7 - time_dq_hour;
57 time_yw_end = 19 + time_tc_hour;
58
59 //后勤上午开始结束时间
60 int time_hq_s_beg,time_hq_s_end;
61 time_hq_s_beg = 8 - time_dq_hour;
62 time_hq_s_end = 9 + time_tc_hour;
63
64 //后勤下午开始结束时间
65 int time_hq_x_beg,time_hq_x_end;
66 time_hq_x_beg = 14 - time_dq_hour;
67 time_hq_x_end = 15 + time_tc_hour;
68
69 //午班上午开始结束时间
70 int time_jd_s_beg,time_jd_s_end;
71 time_jd_s_beg = 8 - time_dq_hour;
72 time_jd_s_end = 9 + time_tc_hour;
73
74 //午班下午开始结束时间
75 int time_jd_x_beg,time_jd_x_end;
76 time_jd_x_beg = 14 - time_dq_hour;
77 time_jd_x_end = 15 + time_tc_hour;
78
79 //周几 周1-周7
80 int week_day;
81 week_day = get_week_id(class_date);
82
83 string sql;
84 sql = "select card_no,mark_date,mark_time,add_cause from timer_original_rec where mark_date ='" + class_date + "' and card_no = '" + card_no +"' order by mark_date,mark_time";
85
86 db_run(sql);
87 int row_count;
88 row_count = db_row_count();
89
90 if (row_count > 0) {
91 //db_show();
92 dbg('当天共有' + row_count + '条打卡记录');
93
94 int s_finish;//检测完成
95 s_finish = 0;
96
97 int mark_time_hour;
98 mark_time_hour = 0;
99
100 int i;
101 for (i = 0; i < row_count; i++) {
102 dbg('第' + (i + 1) + '条记录');
103 //dbg('检测提前中止:' + s_finish);
104
105 mark_time_hour = str_get_sub(db_res(2),0,2);
106 dbg('打卡小时' + mark_time_hour);
107
108 if(s_finish == 1){
109 break;
110 }
111
112 switch(db_res(3)){
113 //野外优先 07-19
114 //最小计数1天
115 case '2':
116 case '4':
117 case '5':
118 case '6':
119 case '7':
120 case '8':
121 dbg('当前出勤IP:' + db_res(3) + ' - 野外');
122 note_info += '野外班次 |';
123 //得到时间,判断考勤时间是否在有效时间段内
124 if (mark_time_hour >= time_yw_beg && mark_time_hour <= time_yw_end) {
125 rec_day = 1;
126 ss1 = '野外';
127 //中止继续检测
128 s_finish = 1;
129 }else{
130 dbg('不在有效的打卡时间段内');
131 }
132 break;
133 //午班 08-09 14-15
134 case '1':
135 case '3':
136 case '9':
137 dbg('当前出勤IP:' + db_res(3) + ' - 午班');
138 note_info += '午班班次 | ';
139
140 if (!(week_day == 2 || week_day == 4)) {
141 //得到时间,判断考勤时间是否在有效时间段内
142 //最小计数0.5,上午一次,下午一次
143 if ((mark_time_hour >= time_jd_s_beg && mark_time_hour <= time_jd_s_end) || (mark_time_hour >= time_jd_x_beg && mark_time_hour <= time_jd_x_end)) {
144 rec_day += 0.5;
145 }else{
146 dbg('不在有效的打卡时间段内');
147 }
148 }else{
149 //周2周4,只需要打卡1次
150 if ((mark_time_hour >= time_jd_s_beg && mark_time_hour <= time_jd_s_end) || (mark_time_hour >= time_jd_x_beg && mark_time_hour <= time_jd_x_end)) {
151 rec_day = 1;
152 ss1 = '午班';
153 }else{
154 dbg('不在有效的打卡时间段内');
155 }
156 }
157
158 //午班优先-补贴
159 dbg('找寻午班的位置:' + str_pos(note_info,'午班'));
160 if (str_pos(note_info,'午班') != not_find) {
161 ss1 = '午班';
162 }
163
164 if (rec_day == 1) {
165 s_finish = 1;
166 }
167
168 break;
169 //后勤 08-09 14-15
170 case '0':
171 dbg('当前出勤IP:' + db_res(3) + ' - 后勤');
172 note_info += '后勤班次 |';
173 //是否周2|周4
174 if (!(week_day == 2 || week_day == 4)) {
175 //得到时间,判断考勤时间是否在有效时间段内
176 //最小计数0.5,上午一次,下午一次
177 if ((mark_time_hour >= time_hq_s_beg && mark_time_hour <= time_hq_s_end) || (mark_time_hour >= time_hq_x_beg && mark_time_hour <= time_hq_x_end)) {
178 rec_day += 0.5;
179 }else{
180 dbg('不在有效的打卡时间段内');
181 }
182 }else{
183 //周2周4,只需要打卡1次
184 if ((mark_time_hour >= time_hq_s_beg && mark_time_hour <= time_hq_s_end) || (mark_time_hour >= time_hq_x_beg && mark_time_hour <= time_hq_x_end)) {
185 rec_day = 1;
186 ss1 = '后勤';
187 }else{
188 dbg('不在有效的打卡时间段内');
189 }
190 }
191
192 //午班优先-补贴
193 if (str_pos(note_info,'午班') != not_find) {
194 ss1 = '午班';
195 }
196
197 if (rec_day == 1) {
198 s_finish = 1;
199 }
200 break;
201 }
202 db_next();
203 }
204 s1 = ss1;
205 //结果
206 switch(rec_day){
207 case 0.5:
208 n2 = rec_day;
209 break;
210 case 1:
211 process_result = '';
212 process_result_name = '';
213 n2 = rec_day;
214 break;
215 }
216
217 dbg('------------------------------------------');
218 }else{
219 dbg('没有打卡记录');
220 dbg('------------------------------------------');
221 }
222
223 return 1;
224 };
225
226 int row_change_ext()
227 {
228 return 1;
229 };
230
231 int show_detail_row_ext()
232 {
233 return 1;
234 };
235
236 int main()
237 {
238 return 1;
239 };