kaoqinAction.php 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928
  1. <?php
  2. class kaoqinClassAction extends Action
  3. {
  4. public function kqdkjlaftershow($table, $rows)
  5. {
  6. $reimbo = m('reim');
  7. return array(
  8. 'rows' => $rows,
  9. 'qybo' => $reimbo->installwx(1),
  10. 'ddbo' => $reimbo->installwx(2),
  11. );
  12. }
  13. //获取打卡记录
  14. public function getdkjlAjax()
  15. {
  16. $reimbo = m('reim');
  17. $uids = $this->adminid;
  18. if($this->post('atype')=='all')$uids = '';//全部
  19. $dt1 = $this->post('dt1');
  20. $dt2 = $this->post('dt2');
  21. $msg = '获取成功';
  22. if($reimbo->installwx(1)){
  23. $barr = m('weixinqy:daka')->getrecord($uids, $dt1, $dt2, 1);
  24. //加入异步
  25. $send = 0;
  26. if($uids=='' && $barr['errcode']==0 && $barr['maxpage']>1){
  27. for($i=1;$i<=$barr['maxpage'];$i++){
  28. if($i>1)$reimbo->asynurl('asynrun','wxdkjl', array(
  29. 'dt1' => $dt1,
  30. 'dt2' => $dt2,
  31. 'page' => $i
  32. ));
  33. }
  34. $send++;
  35. }
  36. if($barr['errcode']!=0){
  37. $msg .= ',企业微信('.$barr['msg'].')';
  38. }else{
  39. if(isset($barr['zongts']))$msg .= ',微信打卡(共'.$barr['zongts'].'条,新增'.$barr['okload'].'条)';
  40. if($send>0)$msg .= ',并发送异步请求'.$send.'条';
  41. }
  42. }
  43. //钉钉
  44. if($reimbo->installwx(2)){
  45. $barr = m('dingding:daka')->getrecord($uids, $dt1, $dt2);
  46. if($barr['errcode']!=0)$msg .= ',钉钉('.$barr['msg'].')';
  47. }
  48. return returnsuccess($msg);
  49. }
  50. public function kqdwbefore($table)
  51. {
  52. $key = $this->post('key');
  53. $where = '';
  54. if(!isempt($key))$where=" and (`name` like '%$key%' or `address` like '%$key%')";
  55. return $where;
  56. }
  57. //考勤信息
  58. public function kqinfobeforeshow($table)
  59. {
  60. $dt1 = $this->post('dt1');
  61. $dt2 = $this->post('dt2');
  62. $atype = $this->post('atype');
  63. $key = $this->post('key');
  64. $keys = $this->post('keys');
  65. $uid = $this->adminid;
  66. $s = '';
  67. if($atype=='all'){
  68. $s = m('admin')->getcompanywhere(4);
  69. }
  70. if($atype=='my'){
  71. $s = 'and uid='.$uid.'';
  72. }
  73. if($atype=='down'){
  74. $s = 'and '.m('admin')->getdownwheres('a.uid', $uid, 0);
  75. }
  76. if(!isempt($dt1))$s.=" and a.`stime` >= '$dt1'";
  77. if(!isempt($dt2))$s.=" and a.`stime` <= '$dt2 23:59:59'";
  78. if(!isempt($key))$s.=" and (b.`name` like '%$key%' or b.`deptname` like '%$key%')";
  79. if(!isempt($keys))$s.=" and (a.`kind`='$keys' or a.`qjkind`='$keys')";
  80. $fields = 'a.*,b.name,b.deptname';
  81. $table = '[Q]'.$table.' a left join `[Q]admin` b on a.uid=b.id';
  82. return array('where'=>$s,'table'=>$table, 'fields'=>$fields,'order'=>'a.stime desc');
  83. }
  84. public function kqinfoaftershow($table, $rows)
  85. {
  86. $uid = $this->adminid;
  87. $types = explode(',','<font color=blue>待审核</font>,<font color=green>已审核</font>,<font color=red>未通过</font>,,,<font color=#888888>已作废</font>');
  88. foreach($rows as $k=>$rs){
  89. $rows[$k]['status'] = $this->rock->arrvalue($types, $rs['status']);
  90. $modenum = 'leavehr';
  91. $modename = '考勤信息';
  92. if($rs['kind']=='请假'){
  93. $modenum = 'leave';
  94. $modename = '请假条';
  95. }
  96. $jiatype = '';
  97. if($rs['kind']=='加班'){
  98. $modenum = 'jiaban';
  99. $modename = '加班单';
  100. $jiatype = '调休';
  101. if($rs['jiatype']=='1')$jiatype='加班费'.$rs['jiafee'].'';
  102. }
  103. $rows[$k]['modenum'] = $modenum;
  104. $rows[$k]['modename'] = $modename;
  105. if($rs['status']==5)$rows[$k]['ishui'] = 1;
  106. $totday = floatval(arrvalue($rs,'totday','0'));
  107. if($totday>0)$rows[$k]['totals'].='('.$totday.'天)';
  108. $rows[$k]['jiatype'] = $jiatype;
  109. if(!isempt($rs['enddt'])){
  110. $rows[$k]['etime'] = $rs['enddt']; //截止时间
  111. if($rs['enddt']<$this->rock->now)$rows[$k]['ishui'] = 1;
  112. }
  113. }
  114. $month = $this->post('dt1', date('Y-m'));
  115. $str = '';
  116. if($this->post('atype')=='my'){
  117. $kqm = m('kaoqin');
  118. $jiafee = $kqm->getjiafee($uid, $month);
  119. $str = ''.$kqm->getqjsytimestr($uid).'';
  120. if($jiafee>0)$str.=','.substr($month,0,7).'加班费('.$jiafee.'元)';
  121. }
  122. return array('rows'=>$rows,'totalstr'=> $str);
  123. }
  124. public function kqsjgzdataAjax()
  125. {
  126. $this->rows = array();
  127. $this->getkqdat(0, 1);
  128. $this->returnjson(array(
  129. 'rows' => $this->rows
  130. ));
  131. }
  132. private function getkqdat($pid, $oi)
  133. {
  134. $db = m('kqsjgz');
  135. $menu = $db->getall("`pid`='$pid' order by `sort`",'*');
  136. foreach($menu as $k=>$rs){
  137. $sid = $rs['id'];
  138. $rs['level'] = $oi;
  139. $rs['stotal'] = $db->rows("`pid`='$sid'");
  140. $this->rows[] = $rs;
  141. $this->getkqdat($sid, $oi+1);
  142. }
  143. }
  144. public function kqsjgzdatadelAjax()
  145. {
  146. $type = (int)$this->post('type','0');
  147. $id = (int)$this->post('id');
  148. if($id==1 && $type!=3)showreturn('','此记录不能删除',201);
  149. if($type==0)m('kqsjgz')->delete("`id`='$id' or pid='$id'");
  150. if($type==1)m('kqdist')->delete("`id`='$id'"); //分配的
  151. if($type==2)m('kqxxsj')->delete("`id`='$id' or pid='$id'");
  152. if($type==3){
  153. $ida = c('check')->onlynumber($this->post('id'));
  154. m('kqxxsj')->delete("`id` in($ida)");
  155. }
  156. showreturn();
  157. }
  158. public function kqdwdkdatadelAjax()
  159. {
  160. $id = (int)$this->post('id');
  161. m('kqdw')->delete("`id`='$id'");
  162. showreturn();
  163. }
  164. //考勤时间分配
  165. public function kqdistbefore($table)
  166. {
  167. $type = (int)$this->post('type','0');
  168. $gzid = (int)$this->post('gzid','0');
  169. $key = $this->post('key');
  170. $where = 'and `type`='.$type.'';
  171. if($gzid!=0)$where.=" and `mid` ='$gzid'";
  172. if(!isempt($key))$where.=" and `recename` like '%$key%'";
  173. return array(
  174. 'where' => $where,
  175. 'order' => 'id desc'
  176. );
  177. }
  178. public function kqdistafter($table, $rows)
  179. {
  180. $type = (int)$this->post('type','0');
  181. $db = m('kqsjgz');
  182. if($type==1)$db = m('kqxxsj');
  183. if($type==2)$db = m('kqdw');
  184. foreach($rows as $k=>$rs){
  185. $rows[$k]['mid'] = $db->getmou('name', $rs['mid']);
  186. $rows[$k]['mids'] = $rs['mid'];
  187. }
  188. $gzdata = array();
  189. if($type==0){
  190. $gzdata = $db->getall('pid=0','id,name','`sort`');
  191. }else if($type==1){
  192. $gzdata = $db->getall('pid=0','id,name','`id`');
  193. }else if($type==2){
  194. $gzdata = $db->getall('1=1','id,name','`id`');
  195. }
  196. return array(
  197. 'rows' => $rows,
  198. 'gzdata' => $gzdata
  199. );
  200. }
  201. public function kqxxsjdtbefore($table)
  202. {
  203. $pid = (int)$this->post('pid','0');
  204. $month = $this->post('month');
  205. $s = 'and `pid`='.$pid.'';
  206. if(!isempt($month))$s.=" and `dt` like '$month%'";
  207. return array(
  208. 'where' => $s,
  209. 'order' => 'dt desc'
  210. );
  211. }
  212. public function kqxxsjdtafter($table, $rows)
  213. {
  214. $dtobj = c('date');
  215. foreach($rows as $k=>$rs){
  216. $w = $dtobj->cnweek($rs['dt']);
  217. $rows[$k]['week'] = $w;
  218. if($w=='六' || $w=='日')$rows[$k]['ishui'] = 1;
  219. }
  220. return array('rows'=>$rows);
  221. }
  222. public function setxiugdateAjax()
  223. {
  224. $month = $this->post('month');
  225. $pid = (int)$this->post('pid','0');
  226. if(isempt($month) || $pid==0)return;
  227. $dtobj = c('date');
  228. $max = $dtobj->getmaxdt($month);
  229. $db = m('kqxxsj');
  230. for($i=1; $i<=$max; $i++){
  231. $oi = $i;if($oi<10)$oi='0'.$i.'';
  232. $dt = ''.$month.'-'.$oi.'';
  233. $we = $dtobj->cnweek($dt);
  234. if($we=='六' || $we=='日'){
  235. $where = "pid='$pid' and `dt`='$dt'";
  236. if($db->rows($where)==0)$db->insert("pid='$pid',`dt`='$dt'");
  237. }
  238. }
  239. }
  240. //一键添加节假日
  241. public function setjiedateAjax()
  242. {
  243. $month = $this->post('month');
  244. $pid = (int)$this->post('pid','0');
  245. if(isempt($month) || $pid==0)return;
  246. $dtobj = c('date');
  247. $year = substr($month,0,4);
  248. $dt = ''.$year.'-01-01';
  249. $db = m('kqxxsj');
  250. //从官网读取节假日日期
  251. $barr = c('xinhuapi')->getjiari();
  252. if(!$barr['success'])return $barr;
  253. $jierixiuxi = $barr['data']['jierixiuxi']; //休息日
  254. $jierishangban = $barr['data']['jierishangban']; //上班日
  255. for($i=0;$i<366;$i++){
  256. if($i>0)$dt = $dtobj->adddate($dt,'d', 1);
  257. $we = $dtobj->cnweek($dt);
  258. $isxiu = 0;
  259. if($we=='六' || $we=='日'){
  260. $isxiu = 1;
  261. }
  262. if(contain($jierixiuxi, $dt))$isxiu = 1;
  263. if(contain($jierishangban, $dt))$isxiu = 0;//上班
  264. $where = "pid='$pid' and `dt`='$dt'";
  265. if($isxiu==1){
  266. if($db->rows($where)==0)$db->insert("pid='$pid',`dt`='$dt'");
  267. }else{
  268. $db->delete($where);
  269. }
  270. if($dt==''.$year.'-12-31')break;
  271. }
  272. return returnsuccess();
  273. }
  274. //考勤分析
  275. public function kqanaybeforeshow($table)
  276. {
  277. $dt1 = $this->post('dt1');
  278. $dt2 = $this->post('dt2');
  279. $key = $this->post('key');
  280. $iswork = $this->post('iswork','1');
  281. $iskq = $this->post('iskq','1');
  282. $s = '';
  283. if($iswork=='1')$s.=" and a.`iswork`=$iswork";
  284. if($iskq=='1')$s.=" and b.`iskq`=$iskq";
  285. if(!isempt($dt1))$s.=" and a.`dt` >= '$dt1'";
  286. if(!isempt($dt2))$s.=" and a.`dt` <= '$dt2'";
  287. if(!isempt($key))$s.=" and (b.`name` like '%$key%' or b.`deptname` like '%$key%')";
  288. $fields = 'a.*,b.name,b.deptname';
  289. if(ISMORECOM && $this->adminid>1)$s.=' and b.`companyid`='.m('admin')->getcompanyid().'';
  290. $table = '[Q]'.$table.' a left join `[Q]userinfo` b on a.uid=b.id';
  291. return array('where'=>$s,'table'=>$table, 'fields'=>$fields,'order'=>'a.`dt` desc,a.`uid`,`sort`');
  292. }
  293. public function kqanayaftershow($table, $rows)
  294. {
  295. $dtobj = c('date');
  296. $ustie = '';
  297. $iswordk = array('否','是');
  298. $kq = m('kaoqin');
  299. foreach($rows as $k=>$rs){
  300. $rows[$k]['status'] = $rs['iswork'];
  301. $rows[$k]['week'] = $dtobj->cnweek($rs['dt']);
  302. $keys= ''.$rs['dt'].''.$rs['uid'].'';
  303. $rows[$k]['iswork'] = arrvalue($iswordk, $rs['iswork']);
  304. $rows[$k]['state'] = $kq->getkqstate($rs);
  305. if($ustie!='' && $ustie==$keys){
  306. $rows[$k]['deptname'] = '';
  307. $rows[$k]['name'] = '';
  308. $rows[$k]['dt'] = '';
  309. $rows[$k]['iswork'] = '';
  310. $rows[$k]['week'] = '';
  311. }
  312. $ustie= $keys;
  313. }
  314. return array('rows'=>$rows);
  315. }
  316. public function kqanayallAjax()
  317. {
  318. $dt = $this->post('dt');
  319. $atype = $this->post('atype');
  320. $whe = '';
  321. if($atype=='my')$whe=' and id='.$this->adminid.'';
  322. m('kaoqin')->kqanayall($dt, $whe);
  323. }
  324. public function kqanayallinitAjax()
  325. {
  326. $dt = $this->post('dt');
  327. $atype = $this->post('atype');
  328. if($atype=='my'){
  329. $this->kqanayallAjax();
  330. return '{"zong":"ok"}';
  331. }
  332. return m('kaoqin')->kqanayallfirst($dt, 1);
  333. }
  334. public function kqanayallpageAjax()
  335. {
  336. $dt = $this->post('dt');
  337. $page = (int)$this->post('page');
  338. m('kaoqin')->kqanayall($dt, '', $page);
  339. echo 'ok';
  340. }
  341. //考勤分析总表
  342. public function kqanayallbeforeshow($table)
  343. {
  344. $this->month = substr($this->post('dt1',date('Y-m')),0,7);
  345. $key = $this->post('key');
  346. $iskq = $this->post('iskq','1');
  347. $s = m('admin')->monthuwhere($this->month, 'b.');
  348. if($iskq=='1')$s.=" and b.`iskq`=$iskq";
  349. if(!isempt($key))$s.=" and (b.`name` like '%$key%' or b.`deptname` like '%$key%')";
  350. $fields = 'b.name,b.deptname,b.ranking';
  351. $table = '`[Q]userinfo` b';
  352. return array('where'=>$s,'table'=>$table, 'fields'=>$fields);
  353. }
  354. public function kqanayallaftershow($table, $rows)
  355. {
  356. $barr = array();
  357. $kq = m('kaoqin');
  358. $dtobj = c('date');
  359. $barr[] = array(
  360. 'dt1_0' => '上班',
  361. 'dt1_1' => '下班',
  362. 'dt2_0' => '上班',
  363. 'dt2_1' => '下班',
  364. );
  365. foreach($rows as $k=>&$rs){
  366. $rs['dt1_0'] = '正常';
  367. $rs['dt1_1'] = '正常';
  368. $rs['dt2_0'] = '未打卡';
  369. $rs['dt2_1'] = '未打卡';
  370. $barr[] = $rs;
  371. }
  372. return array('rows'=>$barr);
  373. }
  374. //个人考勤数据库
  375. public function getmyanaykqAjax()
  376. {
  377. $uid = (int)$this->post('uid', $this->adminid);
  378. $month = $this->post('month');
  379. $kq = m('kaoqin');
  380. $barr = $kq->getanay($uid, $month);
  381. $barrs = $toarr = array();
  382. foreach($barr as $dt=>$dtrows){
  383. $str = '';
  384. foreach($dtrows as $k=>$rs){
  385. $iswork = $rs['iswork'];
  386. $state = $rs['state'];
  387. if($iswork==1 && isempt($rs['states'])){
  388. if(!isset($toarr[$state]))$toarr[$state]=0;
  389. $toarr[$state]++;
  390. }
  391. $s = $kq->getkqstate($rs);
  392. $str.= ''.$rs['ztname'].':'.$s.'';
  393. $str.= '<br>';
  394. if($iswork==0)$str='<font color="#aaaaaa">'.$str.'</font>';
  395. }
  396. $barrs[$dt] = $str;
  397. }
  398. $barrs['total'] = $toarr;
  399. $this->returnjson($barrs);
  400. }
  401. public function reladanaymyAjax()
  402. {
  403. $uid = (int)$this->post('uid', $this->adminid);
  404. $month = $this->post('month');
  405. m('kaoqin')->kqanaymonth($uid, $month);
  406. }
  407. //考勤统计
  408. public function kqtotalbeforeshow($table)
  409. {
  410. $dt1 = $this->post('month', date('Y-m'));
  411. $iskq = $this->post('iskq','1');
  412. $iskq = $this->post('iskq','1');
  413. $this->months = $dt1;
  414. $key = $this->post('key');
  415. $atype = $this->post('atype');
  416. $receid = $this->post('receid');
  417. $s = m('admin')->monthuwhere($dt1);
  418. //下属,userinfo下的
  419. if($atype=='down'){
  420. $s .= 'and '.m('admin')->getdownwheres('id', $this->adminid, 0);
  421. }
  422. if($atype=='my'){
  423. $s = 'and id='.$this->adminid.'';
  424. }else{
  425. if($iskq=='1')$s.=" and `iskq`=$iskq";
  426. if(ISMORECOM)$s.=" and `companyid`=".m('admin')->getcompanyid()."";
  427. }
  428. if(isempt($receid)){
  429. if(!isempt($key))$s.=" and (`name` like '%$key%' or `ranking` like '%$key%' or `deptallname` like '%$key%')";
  430. }else{
  431. $ofval = m('admin')->gjoin($receid,'', 'all');
  432. if(!$ofval)$ofval='0';
  433. $s .= ' and `id` in ('.$ofval.')';
  434. }
  435. $fields = 'id,name,deptname,ranking,workdate,state';
  436. return array('where'=>$s,'fields'=>$fields,'order'=>'`id`');
  437. }
  438. public function kqtotalaftershow($table, $rows)
  439. {
  440. $zta = m('flow:userinfo');
  441. $pnum = $this->post('pnum');
  442. $colalls= array();
  443. foreach($rows as $k=>$rs){
  444. if($rs['state']==5)$rows[$k]['ishui']=1;
  445. $rows[$k]['state'] = $zta->getuserstate($rs['state']);
  446. }
  447. $kqobj = m('kaoqin');
  448. $barr = $kqobj->alltotalrows($this->months, $rows);
  449. $rows = $barr['rows'];
  450. $darr = array();
  451. //读取表头
  452. if($pnum=='all'){
  453. $dt = $this->months.'-01';
  454. //获取每天考勤几个状态
  455. $nuuid = $this->adminid;
  456. if($rows)$nuuid = $rows[0]['id'];
  457. $sbarr = $kqobj->getsbarr($nuuid, $dt);
  458. $lenz = count($sbarr); //每天考勤几个状态
  459. $touar = array();
  460. $max = $kqobj->dtobj->getmaxdt($this->months);
  461. for($i=1;$i<=$max;$i++){
  462. $xq = $kqobj->dtobj->cnweek($this->months.'-'.$i.'');
  463. for($j=0;$j<$lenz;$j++){
  464. $dataIndex = 'dt'.$i.'_'.$j.'';
  465. $colalls[] = array(
  466. 'text' => ''.$i.'('.$xq.')',
  467. 'dataIndex' => $dataIndex, //字段名
  468. 'colspan' => $lenz
  469. );
  470. $touar[$dataIndex] = $sbarr[$j]['name'];
  471. }
  472. }
  473. $darr[] = $touar;
  474. //读取人员考勤状态
  475. foreach($rows as $k=>$rs){
  476. $uid = $rs['id'];
  477. $kqarr = $kqobj->getanay($uid, $this->months);
  478. for($i=1;$i<=$max;$i++){
  479. $oi = $i<10?'0'.$i.'':$i;
  480. $dt = $this->months.'-'.$oi.'';
  481. if(isset($kqarr[$dt]))foreach($kqarr[$dt] as $j=>$rs1){
  482. $dataIndex = 'dt'.$i.'_'.$j.'';
  483. $rs[$dataIndex] = $kqobj->getkqstate($rs1); //考勤状态
  484. }
  485. }
  486. $darr[] = $rs;
  487. }
  488. }else{
  489. $darr = $rows;
  490. }
  491. $barr['colalls'] = $colalls;
  492. $barr['rows'] = $darr;
  493. return $barr;
  494. }
  495. /**
  496. * 批量导入打卡记录(2017-08-22)弃用
  497. */
  498. public function addpldkjlAjax()
  499. {
  500. $val = $this->post('val');
  501. if(isempt($val))backmsg('error');
  502. $arrs = explode("\n", $val);
  503. $oi = 0;$uarr = array();
  504. $dtobj = c('date');$adb = m('admin');$db = m('kqdkjl');
  505. foreach($arrs as $valss){
  506. $name = '';
  507. $dkdt = '';
  508. $uid = 0;
  509. if(!isempt($valss)){
  510. $a = $this->adtewe(explode(' ', $valss),2);
  511. $name = $a[0];
  512. $dkdt = $a[1];
  513. }
  514. if(!isempt($name) && !isempt($dkdt)){
  515. $dkdt = str_replace('/','-', $dkdt);
  516. if(!$dtobj->isdate($dkdt))continue;
  517. if(isset($uarr[$name])){
  518. $uid = $uarr[$name];
  519. }else{
  520. $usar = $adb->getrows("`name`='$name'",'id');
  521. if($this->db->count!=1)continue;
  522. $uid = $usar[0]['id'];
  523. $uarr[$name] = $uid;
  524. }
  525. if($db->rows("`uid`='$uid' and `dkdt`='$dkdt'")>0)continue;
  526. $oi++;
  527. $db->insert(array(
  528. 'uid' => $uid,
  529. 'dkdt' => $dkdt,
  530. 'optdt' => $this->now,
  531. 'type' => 5
  532. ));
  533. }
  534. }
  535. backmsg('','成功导入'.$oi.'条数据');
  536. }
  537. private function adtewe($a, $len){
  538. for($i=0;$i<$len;$i++){
  539. if(!isset($a[$i]))$a[$i] = '';
  540. }
  541. return $a;
  542. }
  543. public function savaweizzAjax()
  544. {
  545. $id = (int)$this->post('id');
  546. $uarr['location_x'] = $this->post('x');
  547. $uarr['location_y'] = $this->post('y');
  548. $uarr['scale'] = $this->post('zoom');
  549. m('kqdw')->update($uarr, $id);
  550. }
  551. public function locationAction()
  552. {
  553. $id = (int)$this->get('id');
  554. if($id>0){
  555. $rs = m('location')->getone($id);
  556. if(!$rs)exit('not found record');
  557. if($rs['scale']<=0)$rs['scale']=12;
  558. $rs['content'] = '地址:'.$rs['label'].'<br>定位时间:'.$rs['optdt'].'';
  559. $rs['type'] = 0;
  560. }else{
  561. $info = $this->get('info');
  562. if(!$info)exit('not found info');
  563. $arr = explode(',', $this->jm->base64decode($info));
  564. $rs['precision'] = 0;
  565. $rs['location_x'] = $arr[0];
  566. $rs['location_y'] = $arr[1];
  567. $rs['scale'] = $arr[2];
  568. $rs['type'] = 1;
  569. $rs['content'] = arrvalue($arr,3);
  570. }
  571. if($this->rock->ismobile())$rs['type'] = 1;
  572. $this->smartydata['rs'] = $rs;
  573. $this->smartydata['qqmapkey'] = getconfig('qqmapkey','55QBZ-JGYLO-BALWX-SZE4H-5SV5K-JCFV7');
  574. }
  575. public function locationchangeAction()
  576. {
  577. $callback = $this->get('callback');
  578. $location_x = $this->get('location_x','24.528153');
  579. $location_y = $this->get('location_y','118.167806');
  580. $scale = $this->get('scale',12);
  581. $this->assign('callback', $callback);
  582. $this->assign('location_x', $location_x);
  583. $this->assign('location_y', $location_y);
  584. $this->assign('scale', $scale);
  585. $this->smartydata['qqmapkey'] = getconfig('qqmapkey','55QBZ-JGYLO-BALWX-SZE4H-5SV5K-JCFV7');
  586. }
  587. //删除打卡记录
  588. public function deldkjlAjax()
  589. {
  590. $sid = $this->post('id');
  591. //m('kqdkjl')->delete('id in('.$sid.')');
  592. $this->showreturn('');
  593. }
  594. //排班读取人员
  595. public function pbkqdistbefore($table)
  596. {
  597. $pblx = (int)$this->post('pblx',0);//0查看,1组,2人员
  598. $dt1 = $this->post('dt1', date('Y-m'));
  599. $this->months = $dt1;
  600. //根据组
  601. if($pblx==1){
  602. $where1 = '';
  603. if(ISMORECOM)$where1='and `companyid` in(0,'.m('admin')->getcompanyid().')';
  604. return array(
  605. 'table' => '`[Q]group`',
  606. 'where' => $where1
  607. );
  608. }
  609. $key = $this->post('key');
  610. $atype = $this->post('atype');
  611. $s = m('admin')->monthuwhere($dt1,'a.');
  612. if($atype=='my'){
  613. $s = 'and a.`id`='.$this->adminid.'';
  614. }else{
  615. if(ISMORECOM)$s.='and a.`companyid`='.m('admin')->getcompanyid().'';
  616. }
  617. if(!isempt($key))$s.=" and (a.`name` like '%$key%' or a.`ranking` like '%$key%' or a.`deptname` like '%$key%')";
  618. $table = "[Q]userinfo a left join `[Q]admin` b on a.id=b.id";
  619. $fields = 'a.id,a.name,a.deptname,a.ranking,a.workdate,a.state';
  620. return array(
  621. 'where' =>$s,
  622. 'fields'=>$fields,
  623. 'order'=>'b.`sort`,a.`id`',
  624. 'table'=> $table
  625. );
  626. }
  627. public function pbkqdistafter($table, $rows)
  628. {
  629. $zta = m('flow:userinfo');
  630. $maxjg = c('date')->getmaxdt($this->months);
  631. $kqobj = m('kaoqin');
  632. $pblx = $this->post('pblx','0');
  633. //人员的
  634. if($pblx=='0'){
  635. foreach($rows as $k=>$rs){
  636. if($rs['state']==5)$rows[$k]['ishui']=1;
  637. $rows[$k]['state'] = $zta->getuserstate($rs['state']);
  638. $uid = $rs['id'];
  639. for($i=1;$i<=$maxjg;$i++){
  640. $oi = ($i<10) ? '0'.$i.'' : $i;
  641. $dt = $this->months.'-'.$oi;
  642. $zt = '';
  643. $iswork = $kqobj->isworkdt($uid, $dt);
  644. if($iswork==1){
  645. $zt = $kqobj->getdistid($uid, $dt);
  646. }
  647. $rows[$k]['day'.$i.''] = $zt;
  648. }
  649. }
  650. }
  651. //组的
  652. if($pblx=='1' || $pblx=='2'){
  653. $gset = $this->db->getall("select * from `[Q]kqdisv` where `dt` like '".$this->months."%' and `plx`=".$pblx." order by `type`");
  654. $setar= array();
  655. foreach($gset as $k=>$rs){
  656. $key = 'a'.$rs['dt'].'_'.$rs['receid'].'_'.$rs['type'].'';
  657. $setar[$key] = $rs['mid'];
  658. }
  659. foreach($rows as $k=>$rs){
  660. if($pblx=='1')$rows[$k]['deptname']='组';
  661. for($i=1;$i<=$maxjg;$i++){
  662. $oi = ($i<10) ? '0'.$i.'' : $i;
  663. $dt = $this->months.'-'.$oi;
  664. $key1 = 'a'.$dt.'_'.$rs['id'].'_1';//休息
  665. $key2 = 'a'.$dt.'_'.$rs['id'].'_2';//工作日
  666. $key0 = 'a'.$dt.'_'.$rs['id'].'_0'; //考勤
  667. $iswork = 1;
  668. $zt = '';
  669. if(isset($setar[$key1]))$iswork=0;
  670. if(isset($setar[$key2]))$iswork=1;//有设置工作日就是工作日
  671. if($iswork==1){
  672. $zt = arrvalue($setar, $key0,'0');
  673. }
  674. $rows[$k]['day'.$i.''] = $zt;
  675. }
  676. }
  677. }
  678. //读取考勤时间规则
  679. $gzrows = m('kqsjgz')->getall('pid=0','`id`,`name`','`sort`');
  680. return array(
  681. 'rows' => $rows,
  682. 'maxjg'=> $maxjg,
  683. 'week' => date('w', strtotime($this->months.'-01')),
  684. 'gzrows'=> $gzrows
  685. );
  686. }
  687. //排班标识保存
  688. public function setpaibanAjax()
  689. {
  690. $len = (int)$this->post('len','0');
  691. $db = m('kqdisv');
  692. for($i=0;$i<$len;$i++){
  693. $dt = date('Y-m-d',strtotime($this->post('dt_'.$i.'')));
  694. $mid = $this->post('mid_'.$i.'');
  695. $plx = $this->post('plx_'.$i.'');//1组,2人员
  696. $receid = $this->post('receid_'.$i.'');
  697. $lx = (int)$this->post('type_'.$i.'','0');
  698. $type = 0;//考勤规则
  699. //设置休息日 取消休息日
  700. if($lx==0 || $lx==1){
  701. $type = 1;
  702. }
  703. //设置工作日 取消工作日
  704. if($lx==2 || $lx==3){
  705. $type = 2;
  706. }
  707. $where = "`plx`='$plx' and `receid`='$receid' and `dt`='$dt'";
  708. if($type==0)$where.=" and `type`='$type'";
  709. if($lx==1 || $lx==3 || $lx==5){
  710. $db->delete($where);
  711. }else{
  712. if($db->rows($where)==0){
  713. $db->insert(array(
  714. 'plx' => $plx,
  715. 'receid' => $receid,
  716. 'dt' => $dt,
  717. 'type' => $type,
  718. 'mid' => $mid,
  719. ));
  720. }else{
  721. $db->update('`mid`='.$mid.',`type`='.$type.'', $where);
  722. }
  723. }
  724. }
  725. }
  726. //自动添加年假
  727. public function addnianjiaAjax()
  728. {
  729. $dt = $this->get('dt');
  730. $barr = m('flow:leave')->autoaddleave($dt);
  731. return '共添加'.count($barr).'人';
  732. }
  733. //剩余假期统计
  734. public function kqtotalafterjiashow($table, $rows)
  735. {
  736. $zta = m('flow:userinfo');
  737. $dt = $this->post('month');
  738. $kqkind = $this->option->getdata('kqkind', "and `name`<>'增加调休'");
  739. $kq = m('kaoqin');
  740. foreach($rows as $k=>$rs){
  741. if($rs['state']==5)$rows[$k]['ishui']=1;
  742. $rows[$k]['state'] = $zta->getuserstate($rs['state']);
  743. foreach($kqkind as $k1=>$rs1){
  744. $tosss = $kq->getqjsytime($rs['id'], str_replace('增加','', $rs1['name']), $dt);
  745. if($tosss==0)$tosss='';
  746. $rows[$k]['total'.$k1.''] = $tosss;
  747. }
  748. $tosss = $kq->getqjsytime($rs['id'], '调休', $dt);
  749. if($tosss==0)$tosss='';
  750. $rows[$k]['tiaoxiu'] = $tosss;
  751. }
  752. return array(
  753. 'rows'=> $rows,
  754. 'kqkind'=> $kqkind,
  755. );
  756. }
  757. public function updateenddtAjax()
  758. {
  759. $to = m('flow:leave')->updateenddt();
  760. return '更新成功';
  761. }
  762. public function kqtotalmxbefore($table)
  763. {
  764. $uid = (int)$this->post('uid');
  765. $qjkind = $this->post('qjkind');
  766. $this->optuid = $uid;
  767. $this->optqjkind = $qjkind;
  768. $where = 'and `uid`='.$uid.'';
  769. $this->optkind = '';
  770. $this->optkinds = '增加'.$qjkind.'';
  771. if($qjkind=='调休'){
  772. $this->optkind = '加班';
  773. $whera = "((`kind`='$this->optkind' and `jiatype`=0) or (`kind`='$this->optkinds'))";
  774. $where .= " and ((`qjkind`='$qjkind' and `status` in(0,1)) or (`status`=1 and $whera))";
  775. }else{
  776. $this->optkind = $this->optkinds;
  777. $where .= " and ((`qjkind`='$qjkind' and `status` in(0,1)) or (`kind`='$this->optkind' and `status`=1))";
  778. }
  779. return array(
  780. 'where' => $where,
  781. 'order' => '`stime`'
  782. );
  783. }
  784. public function kqtotalmxafter($table, $rows)
  785. {
  786. $urs = m('userinfo')->getone($this->optuid);
  787. foreach($rows as $k=>$rs){
  788. if($urs){
  789. $rows[$k]['uname'] = $urs['name'];
  790. $rows[$k]['deptname'] = $urs['deptname'];
  791. }
  792. if(!isempt($rs['enddt'])){
  793. $rows[$k]['etime'] = $rs['enddt']; //截止时间
  794. if($rs['enddt']<$this->rock->now)$rows[$k]['ishui'] = 1;
  795. }else{
  796. if($rs['kind']==$this->optkind || $rs['kind']==$this->optkinds)$rows[$k]['etime'] = '';
  797. }
  798. }
  799. $kqkind = $this->option->getdata('kqkind',"and `name`<>'增加调休'");
  800. if($rows){
  801. $rows[] = array(
  802. 'deptname' => '合计',
  803. 'totals1' => m('kaoqin')->getqjsytime($this->optuid, $this->optqjkind)
  804. );
  805. }
  806. return array(
  807. 'rows' => $rows,
  808. 'kqkind' => $kqkind,
  809. );
  810. }
  811. }
粤ICP备19079148号