kaoqinAction.php 25 KB

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