HolidayController.php 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800
  1. <?php
  2. /**
  3. * @author darkredz
  4. */
  5. class HolidayController extends DooController {
  6. public $staff;
  7. function __construct() {
  8. if(isset($_COOKIE["staff"])){
  9. if(!empty($_COOKIE["staff"])){
  10. Doo::loadModel ( 'staff' );
  11. $staff = new staff ();
  12. $this->staff=$staff->getUserByIdList($_COOKIE["staff"]);
  13. return "/";
  14. }
  15. }
  16. Doo::loadCore ( 'uri/DooUriRouter' );
  17. $router = new DooUriRouter ();
  18. $routeRs = $router->execute ( Doo::app ()->route, Doo::conf ()->SUBFOLDER );
  19. if($routeRs['1']!="login"){
  20. header ( 'Content-Type:text/html;charset=utf-8' );
  21. @header ( "Location: /login" );
  22. }
  23. }
  24. public function myList(){
  25. Doo::loadModel('holidayday');
  26. Doo::loadModel('holiday');
  27. Doo::loadModel('holidaystaff');
  28. $hday = new HDay();
  29. $holiday = new Holiday();
  30. $hstaff = new HStaff();
  31. $thisyear = date('Y',time());
  32. // $thisyear = date('Y',1546358400);
  33. $num = intval($thisyear)-2017;
  34. $html = '';
  35. $yearnum = isset($this->params['yearnum']) && is_numeric($this->params['yearnum']) ? $this->params['yearnum'] : '';
  36. for($i = $num; $i >= 0; $i--){
  37. if($yearnum == (2017+$i)){
  38. $html .= '<option value="'.(2017+$i).'" selected>'.(2017+$i).'</option>';
  39. }else{
  40. $html .= '<option value="'.(2017+$i).'">'.(2017+$i).'</option>';
  41. }
  42. }
  43. $data['option'] = $html;
  44. $yeartime = isset($this->params['yearnum']) && is_numeric($this->params['yearnum']) ? $this->getYearMonthTime($this->params['yearnum']) : $this->getYearMonthTime($thisyear);
  45. //记录事,病,旷,加,值,补,调的信息
  46. $holidaymsg = array('1'=> array(), '2' => array(), '3' => array(), '4' => array(), '5' => array(), '10' => array(), '11' => array());
  47. foreach(array(1,2,3,4,5,10,11) as $k => $v){
  48. $all = 0;
  49. for($i = 0; $i < 12; $i++){
  50. if($v == 11){
  51. $typeholiday = $holiday->find(array('where' => 'status=1 and type='.$v.' and uid='.$this->staff[0]['sid'].' and addtime between '.$yeartime[$i]['starttime'].' and '.$yeartime[$i]['endtime'],'asArray' => TRUE));
  52. $holidaymsg[$v][$i+1] = 0;
  53. if(!empty($typeholiday)){
  54. foreach($typeholiday as $tk => $tv){
  55. $holidaymsg[$v][$i+1] += floatval($tv['daynum']);
  56. $all += floatval($tv['daynum']);
  57. }
  58. }
  59. $holidaymsg[$v][$i+1] = $holidaymsg[$v][$i+1] != 0 ? $holidaymsg[$v][$i+1] : '';
  60. }else{
  61. $typeholiday = $hday->find(array('where' => 'type='.$v.' and uid='.$this->staff[0]['sid'].' and UNIX_TIMESTAMP(daytime) between '.$yeartime[$i]['starttime'].' and '.$yeartime[$i]['endtime'],'asArray' => TRUE));
  62. $holidaymsg[$v][$i+1] = 0;
  63. if(!empty($typeholiday)){
  64. foreach($typeholiday as $tk => $tv){
  65. $holidaymsg[$v][$i+1] += floatval($tv['daymsg']);
  66. $all += floatval($tv['daymsg']);
  67. }
  68. }
  69. $holidaymsg[$v][$i+1] = $holidaymsg[$v][$i+1] != 0 ? $holidaymsg[$v][$i+1] : '';
  70. }
  71. }
  72. $holidaymsg[$v]['all'] = $all != 0 ? $all : '';
  73. }
  74. $hstaffmsg = $hstaff->getOne(array('where' => 'uid='.$this->staff[0]['sid'], 'asArray' => TRUE));
  75. $data['yearnum'] = floatval($hstaffmsg['yearnum']);
  76. $data['overtimetnum'] = floatval($holidaymsg[4]['all'])+floatval($holidaymsg[5]['all']);
  77. $data['addnum'] = floatval($hstaffmsg['addnum']);
  78. $data['hunjianum'] = floatval($hstaffmsg['hunjianum']);
  79. $data['chanjianum'] = floatval($hstaffmsg['chanjianum']);
  80. $data['sangjianum'] = floatval($hstaffmsg['sangjianum']);
  81. $data['gongjianum'] = floatval($hstaffmsg['gongjianum']);
  82. $data['yearround'] = $this->getYearRoundtime($hstaffmsg['hadyear'],$this->staff[0]['hiredate']);
  83. // var_dump($holidaymsg);
  84. // exit;
  85. $data['holidaymsg'] = $holidaymsg;
  86. $data ['memu'] = 'holiday';
  87. $data ['holidaymenu'] = 'mylist';
  88. $data ['staff'] = $this->staff;
  89. $this->render ( "/holiday-myList", $data );
  90. }
  91. public function holidayBorad(){
  92. Doo::loadModel('holiday');
  93. Doo::loadModel('holidayday');
  94. Doo::loadModel('holidaystaff');
  95. Doo::loadModel('holidaytype');
  96. $thismonth = $this->getMonthTime(date('Y-m-d',time()));
  97. $data['countmonth'] = date("Y年m月",time());
  98. $holiday = new Holiday();
  99. $hday = new HDay();
  100. $hstaff = new HStaff();
  101. $type = new HType();
  102. $holidaycount =array();
  103. foreach(array(1,2,3,4,5) as $k => $v){
  104. $typeholiday = $hday->find(array('where' => 'type='.$v.' and uid='.$this->staff[0]['sid'].' and UNIX_TIMESTAMP(daytime) between '.$thismonth['start'].' and '.$thismonth['end'],'asArray' => TRUE));
  105. $holidaycount[$k] = 0;
  106. if(!empty($typeholiday)){
  107. foreach($typeholiday as $tk => $tv){
  108. $holidaycount[$k] += floatval($tv['daymsg']);
  109. }
  110. }
  111. }
  112. $hstaffmsg = $hstaff->getOne(array('where' => 'uid='.$this->staff[0]['sid'], 'asArray' => TRUE));
  113. $holidaycount[5] = floatval($hstaffmsg['yearnum']);
  114. $holidaycount[6] = floatval($hstaffmsg['addnum']);
  115. $data['holidaycount'] = $holidaycount;
  116. $holidaymsg = $holiday->find(array('where' => 'uid='.$this->staff[0]['sid'], 'limit' => 3, 'desc' => 'id', 'asArray' => TRUE));
  117. if(!empty($holidaymsg)){
  118. foreach($holidaymsg as $k => $v){
  119. $holidaymsg[$k]['typename'] = $type->getTypeNamebyid($v['type']);
  120. $holidaymsg[$k]['daynum'] = floatval($v['daynum']);
  121. $holidaymsg[$k]['approvetime'] = !empty($v['approvetime']) ? date('Y-m-d H:i:s',$v['approvetime']) : '';
  122. $msg = '';
  123. if(in_array($v['type'],array(1,2,3,4,5,10,11,12))){
  124. $dayjson = json_decode($v['dayjson']);
  125. if($v['type'] != 11){
  126. $holidaydays = $this->geyDayMsg($dayjson->holiday);
  127. foreach($holidaydays as $hk => $hv){
  128. $msg .= $hv['daytime'].' '.$hv['daymsg'].',';
  129. }
  130. $msg = substr($msg,0,strlen($msg)-1);
  131. }else{
  132. $msg .= '休假时间:';
  133. $holidaydays = $this->geyDayMsg($dayjson->holiday);
  134. foreach($holidaydays as $hk => $hv){
  135. $msg .= $hv['daytime'].' '.$hv['daymsg'].',';
  136. }
  137. $msg = substr($msg,0,strlen($msg)-1);
  138. $msg .= '
  139. 加班时间:';
  140. $overtimedays = $this->geyDayMsg($dayjson->overtime);
  141. foreach($overtimedays as $ok => $ov){
  142. $msg .= $ov['daytime'].' '.$ov['daymsg'].',';
  143. }
  144. $msg = substr($msg,0,strlen($msg)-1);
  145. }
  146. }else{
  147. $msg .= $v['starttime']. ' 至 '.$v['endtime'];
  148. }
  149. $holidaymsg[$k]['daymsg'] = $msg;
  150. }
  151. $data['holidaylist'] = $holidaymsg;
  152. }
  153. $data ['memu'] = 'holiday';
  154. $data ['holidaymenu'] = 'borad';
  155. $data ['staff'] = $this->staff;
  156. $this->render ( "/holiday-borad", $data );
  157. }
  158. public function allList(){
  159. Doo::loadModel('holiday');
  160. Doo::loadModel('holidaytype');
  161. $holiday = new Holiday();
  162. $type = new HType();
  163. if(isset($this->params['type'])){
  164. if($this->params['type'] == 4 ){//加班、值班
  165. $sql = ' and (type=4 or type=5)';
  166. }elseif($this->params['type'] == 6){//其他长假
  167. $sql = ' and type in(3,6,7,8,9,12,13)';
  168. }else{
  169. $sql = ' and type='.$this->params['type'];
  170. }
  171. $pagemsg = '/type/'.$this->params['type'];
  172. $data['thistype'] = $this->params['type'];
  173. }else{
  174. $sql = '';
  175. $pagemsg = '';
  176. $data['thistype'] = '';
  177. }
  178. Doo::loadHelper('DooPager');
  179. $totalArchive = $holiday->count(array('where' => 'uid='.$this->staff[0]['sid'].$sql, 'asArray' => TRUE));
  180. $pager = new DooPager(Doo::conf()->APP_URL . "holidayallList".$pagemsg."/page", $totalArchive, 10, 10);
  181. if (isset($this->params['pindex']))
  182. $pager->paginate(intval($this->params['pindex']));
  183. else
  184. $pager->paginate(1);
  185. if ($pager->limit != ' -10,10')
  186. $holidaymsg = $holiday->find(array('where' => 'uid='.$this->staff[0]['sid'].$sql, 'limit' => $pager->limit, 'desc' => 'id', 'asArray' => TRUE));
  187. if(isset($holidaymsg) && !empty($holidaymsg)){
  188. foreach($holidaymsg as $k => $v){
  189. $holidaymsg[$k]['typename'] = $type->getTypeNamebyid($v['type']);
  190. $holidaymsg[$k]['daynum'] = floatval($v['daynum']);
  191. $holidaymsg[$k]['approvetime'] = !empty($v['approvetime']) ? date('Y-m-d H:i:s',$v['approvetime']) : '';
  192. $msg = '';
  193. if(in_array($v['type'],array(1,2,3,4,5,10,11,12))){
  194. $dayjson = json_decode($v['dayjson']);
  195. if($v['type'] != 11){
  196. $holidaydays = $this->geyDayMsg($dayjson->holiday);
  197. foreach($holidaydays as $hk => $hv){
  198. $msg .= $hv['daytime'].' '.$hv['daymsg'].',';
  199. }
  200. $msg = substr($msg,0,strlen($msg)-1);
  201. }else{
  202. $msg .= '休假时间:';
  203. $holidaydays = $this->geyDayMsg($dayjson->holiday);
  204. foreach($holidaydays as $hk => $hv){
  205. $msg .= $hv['daytime'].' '.$hv['daymsg'].',';
  206. }
  207. $msg = substr($msg,0,strlen($msg)-1);
  208. $msg .= '<br>加班时间:';
  209. $overtimedays = $this->geyDayMsg($dayjson->overtime);
  210. foreach($overtimedays as $ok => $ov){
  211. $msg .= $ov['daytime'].' '.$ov['daymsg'].',';
  212. }
  213. $msg = substr($msg,0,strlen($msg)-1);
  214. }
  215. }elseif(in_array($v['type'],array(6,7,8,9))){
  216. $msg .= $v['starttime']. ' 至 '.$v['endtime'];
  217. }elseif(in_array($v['type'],array(13,14))){
  218. $msg .= date('Y-m-d H:i:s',$v['addtime']);
  219. }
  220. $holidaymsg[$k]['daymsg'] = $msg;
  221. }
  222. $data['holidaylist'] = $holidaymsg;
  223. }
  224. $data['pager'] = $pager->output;
  225. $data ['memu'] = 'holiday';
  226. $data ['holidaymenu'] = 'borad';
  227. $data ['staff'] = $this->staff;
  228. $this->render ( "/holiday-allList", $data );
  229. }
  230. public function holidayClose(){
  231. //获取办事处列表
  232. Doo::loadModel('staff');
  233. Doo::loadModel('holidaystaff');
  234. Doo::loadModel('holidayday');
  235. Doo::loadModel('holiday');
  236. $staff = new staff();
  237. $hstaff = new HStaff();
  238. $hday = new HDay();
  239. $holiday = new Holiday();
  240. $sql = 'SELECT `CLD_L_category`.cid,`CLD_L_category`.title,count(`CLD_staff`.sid) as count FROM `CLD_L_category` left join `CLD_staff` on `CLD_L_category`.cid=`CLD_staff`.cid where `CLD_staff`.nature=1 group by `CLD_staff`.cid HAVING count(`CLD_staff`.sid)>0 order by count(`CLD_staff`.sid) desc';
  241. $query = Doo::db ()->query ( $sql );
  242. $result = $query->fetchAll ();
  243. $data['category'] = $result;
  244. $thisyear = date('Y',time());
  245. // $thisyear = date('Y',1546358400);
  246. $data['thismonth'] = intval(date('m',time()));
  247. $num = intval($thisyear)-2017;
  248. $html = '';
  249. $yearnum = isset($this->params['year']) && is_numeric($this->params['year']) ? $this->params['year'] : '';
  250. for($i = $num; $i >= 0; $i--){
  251. if($yearnum == (2017+$i)){
  252. $html .= '<option value="'.(2017+$i).'" selected>'.(2017+$i).'</option>';
  253. }else{
  254. $html .= '<option value="'.(2017+$i).'">'.(2017+$i).'</option>';
  255. }
  256. }
  257. $data['option'] = $html;
  258. if(isset($this->params['year']) && isset($this->params['month'])){
  259. $month = intval($this->params['month']) < 10 ? '0'.$this->params['month'] : $this->params['month'];
  260. $date = $this->params['year'].'-'.$month.'-01';
  261. $thismonth = $this->getMonthTime($date);
  262. $data['thismonth'] = $this->params['month'];
  263. }else{
  264. $thismonth = $this->getMonthTime(date('Y-m-d',time()));
  265. }
  266. foreach($result as $k => $v){
  267. $stafflist[$k]['categoryname'] = $v['title'];
  268. $stafflist[$k]['count'] = $v['count'];
  269. $cidstafflist = $staff->find(array('where' => 'cid='.$v['cid'].' and nature=1', 'asArray' => TRUE));
  270. foreach($cidstafflist as $ck => $cv) {
  271. foreach (array(1, 2, 3) as $tk => $tv) {
  272. $typeholiday = $hday->find(array('where' => 'type=' . $tv . ' and uid=' . $cv['sid'] . ' and UNIX_TIMESTAMP(daytime) between ' . $thismonth['start'] . ' and ' . $thismonth['end'], 'asArray' => TRUE));
  273. $cidstafflist[$ck][$tv] = 0;
  274. if (!empty($typeholiday)) {
  275. foreach ($typeholiday as $thk => $thv) {
  276. $cidstafflist[$ck][$tv] += floatval($thv['daymsg']);
  277. }
  278. }
  279. $cidstafflist[$ck][$tv] = $cidstafflist[$ck][$tv] != 0 ? $cidstafflist[$ck][$tv] : '';
  280. }
  281. $cidstafflist[$ck]['first'] = $ck == 0 ? 1 : ''; // 是否第一个
  282. }
  283. $stafflist[$k]['cidstafflist'] = $cidstafflist;
  284. }
  285. $data['stafflist'] = $stafflist;
  286. $zongbu = $staff->find(array('where' => 'cid=12 and nature=1', 'asArray' => TRUE));
  287. $data['zongbu'] = $zongbu;
  288. $data ['memu'] = 'holiday';
  289. $data ['holidaymenu'] = 'close';
  290. $data ['staff'] = $this->staff;
  291. $this->render ( "/holiday-close", $data );
  292. }
  293. public function holidayClose2(){
  294. //获取办事处列表
  295. Doo::loadModel('staff');
  296. Doo::loadModel('holidaystaff');
  297. Doo::loadModel('holidayday');
  298. Doo::loadModel('holiday');
  299. $staff = new staff();
  300. $hstaff = new HStaff();
  301. $hday = new HDay();
  302. $holiday = new Holiday();
  303. $sql = 'SELECT `CLD_L_category`.cid,`CLD_L_category`.title,count(`CLD_staff`.sid) as count FROM `CLD_L_category` left join `CLD_staff` on `CLD_L_category`.cid=`CLD_staff`.cid where `CLD_staff`.nature=2 group by `CLD_staff`.cid HAVING count(`CLD_staff`.sid)>0 order by count(`CLD_staff`.sid) desc';
  304. $query = Doo::db ()->query ( $sql );
  305. $result = $query->fetchAll ();
  306. $data['category'] = $result;
  307. $thisyear = date('Y',time());
  308. // $thisyear = date('Y',1546358400);
  309. $data['thismonth'] = intval(date('m',time()));
  310. $num = intval($thisyear)-2017;
  311. $html = '';
  312. $yearnum = isset($this->params['year']) && is_numeric($this->params['year']) ? $this->params['year'] : '';
  313. for($i = $num; $i >= 0; $i--){
  314. if($yearnum == (2017+$i)){
  315. $html .= '<option value="'.(2017+$i).'" selected>'.(2017+$i).'</option>';
  316. }else{
  317. $html .= '<option value="'.(2017+$i).'">'.(2017+$i).'</option>';
  318. }
  319. }
  320. $data['option'] = $html;
  321. if(isset($this->params['year']) && isset($this->params['month'])){
  322. $month = intval($this->params['month']) < 10 ? '0'.$this->params['month'] : $this->params['month'];
  323. $date = $this->params['year'].'-'.$month.'-01';
  324. $thismonth = $this->getMonthTime($date);
  325. $data['thismonth'] = $this->params['month'];
  326. }else{
  327. $thismonth = $this->getMonthTime(date('Y-m-d',time()));
  328. }
  329. $stafflist = array();
  330. foreach($result as $k => $v){
  331. $stafflist[$k]['categoryname'] = $v['title'];
  332. $stafflist[$k]['count'] = $v['count'];
  333. $cidstafflist = $staff->find(array('where' => 'cid='.$v['cid'].' and nature=2', 'asArray' => TRUE));
  334. foreach($cidstafflist as $ck => $cv) {
  335. foreach (array(1, 2, 3, 14) as $tk => $tv) {
  336. if($tv == 14){
  337. $typeholiday = $holiday->getOne(array('where' => 'status=1 and type='.$tv.' and uid='.$cv['sid'].' and starttime="'.$thismonth['start'].'" and endtime="'.$thismonth['end'].'"', 'desc' => 'id', 'asArray' => TRUE));
  338. $cidstafflist[$ck][$tv] = $typeholiday['daynum'] != 0 ? floatval($typeholiday['daynum']) : '';
  339. }else{
  340. $typeholiday = $hday->find(array('where' => 'type=' . $tv . ' and uid=' . $cv['sid'] . ' and UNIX_TIMESTAMP(daytime) between ' . $thismonth['start'] . ' and ' . $thismonth['end'], 'asArray' => TRUE));
  341. $cidstafflist[$ck][$tv] = 0;
  342. if (!empty($typeholiday)) {
  343. foreach ($typeholiday as $thk => $thv) {
  344. $cidstafflist[$ck][$tv] += floatval($thv['daymsg']);
  345. }
  346. }
  347. $cidstafflist[$ck][$tv] = $cidstafflist[$ck][$tv] != 0 ? $cidstafflist[$ck][$tv] : '';
  348. }
  349. }
  350. $cidstafflist[$ck]['first'] = $ck == 0 ? 1 : ''; // 是否第一个
  351. }
  352. $stafflist[$k]['cidstafflist'] = $cidstafflist;
  353. }
  354. $data['stafflist'] = $stafflist;
  355. $data['internstafflist'] = $staff->find(array('where' => 'nature=2', 'asArray' => TRUE));
  356. $data ['memu'] = 'holiday';
  357. $data ['holidaymenu'] = 'close';
  358. $data ['staff'] = $this->staff;
  359. $this->render ( "/holiday-close2", $data );
  360. }
  361. public function addHoliday2(){
  362. if(isset($_POST['uid']) && is_numeric($_POST['uid']) && isset($_POST['type']) && is_numeric($_POST['type'])){
  363. Doo::loadModel('holiday');
  364. $holiday = new Holiday();
  365. if(in_array($_POST['type'],array(1,2,3))){
  366. $day = $_POST['day'];
  367. $dayjson = array('holiday' => [$day.'_1']);
  368. $holiday->uid = $_POST['uid'];
  369. $holiday->type = $_POST['type'];
  370. $holiday->dayjson = json_encode($dayjson);
  371. $holiday->daynum = 1.0;
  372. $holiday->status = 1;
  373. $holiday->addtime = time();
  374. $holiday->approvetime = time();
  375. $holiday->description = $_POST['description'];
  376. $id = $holiday->insert();
  377. Doo::loadModel('holidayday');
  378. $hday = new HDay();
  379. $hday->hid = $id;
  380. $hday->uid = $_POST['uid'];
  381. $hday->type = $_POST['type'];
  382. $hday->daytime = $day;
  383. $hday->daymsg = 1.0;
  384. $hday->insert();
  385. if(isset($_POST['close2'])){
  386. return '/holidayclose2';
  387. }else{
  388. return '/holidayclose';
  389. }
  390. }elseif($_POST['type'] == 14){
  391. $thismonth = $this->getMonthTime(date('Y-m-d',time()));
  392. $holiday->uid = $_POST['uid'];
  393. $holiday->type = $_POST['type'];
  394. $holiday->starttime = $thismonth['start'];
  395. $holiday->endtime = $thismonth['end'];
  396. $holiday->daynum = $_POST['daynum'];
  397. $holiday->status = 1;
  398. $holiday->addtime = time();
  399. $holiday->approvetime = time();
  400. $holiday->description = $_POST['description'];
  401. $holiday->insert();
  402. return '/holidayclose2';
  403. }
  404. }
  405. exit('添加事病假、旷工出错');
  406. }
  407. public function holidayOvertime(){
  408. //获取办事处列表
  409. Doo::loadModel('staff');
  410. Doo::loadModel('holidaystaff');
  411. Doo::loadModel('holidayday');
  412. Doo::loadModel('holiday');
  413. $staff = new staff();
  414. $hstaff = new HStaff();
  415. $hday = new HDay();
  416. $holiday = new Holiday();
  417. $sql = 'SELECT `CLD_L_category`.cid,`CLD_L_category`.title,count(`CLD_staff`.sid) as count FROM `CLD_L_category` left join `CLD_staff` on `CLD_L_category`.cid=`CLD_staff`.cid group by `CLD_staff`.cid HAVING count(`CLD_staff`.sid)>0 order by count(`CLD_staff`.sid) desc';
  418. $query = Doo::db ()->query ( $sql );
  419. $result = $query->fetchAll ();
  420. $data['category'] = $result;
  421. $thisyear = date('Y',time());
  422. // $thisyear = date('Y',1546358400);
  423. $data['thismonth'] = intval(date('m',time()));
  424. $num = intval($thisyear)-2017;
  425. $html = '';
  426. $yearnum = isset($this->params['year']) && is_numeric($this->params['year']) ? $this->params['year'] : '';
  427. for($i = $num; $i >= 0; $i--){
  428. if($yearnum == (2017+$i)){
  429. $html .= '<option value="'.(2017+$i).'" selected>'.(2017+$i).'</option>';
  430. }else{
  431. $html .= '<option value="'.(2017+$i).'">'.(2017+$i).'</option>';
  432. }
  433. }
  434. $data['option'] = $html;
  435. if(isset($this->params['year']) && isset($this->params['month'])){
  436. $month = intval($this->params['month']) < 10 ? '0'.$this->params['month'] : $this->params['month'];
  437. $date = $this->params['year'].'-'.$month.'-01';
  438. $thismonth = $this->getMonthTime($date);
  439. $data['thismonth'] = $this->params['month'];
  440. }else{
  441. $thismonth = $this->getMonthTime(date('Y-m-d',time()));
  442. }
  443. $stafflist = array();
  444. if(isset($this->params['cid']) && is_numeric($this->params['cid'])){
  445. $data['thiscid'] = $this->params['cid'];
  446. foreach($result as $k => $v){
  447. if($this->params['cid'] == $v['cid']){
  448. $stafflist[0]['categoryname'] = $v['title'];
  449. $stafflist[0]['count'] = $v['count'];
  450. $cidstafflist = $staff->getStaffByCid($v['cid']);
  451. foreach($cidstafflist as $ck => $cv){
  452. $hstaffmsg = $hstaff->getOne(array('where' => 'uid='.$cv['sid'], 'asArray' => TRUE));
  453. $cidstafflist[$ck]['addnum'] = $hstaffmsg['addnum'] != 0.0 ? floatval($hstaffmsg['addnum']) : '';
  454. foreach(array(4,5,10,11) as $tk => $tv){
  455. if($tv == 11){
  456. $typeholiday = $holiday->find(array('where' => 'status=1 and type='.$tv.' and uid='.$cv['sid'].' and addtime between '.$thismonth['start'].' and '.$thismonth['end'],'asArray' => TRUE));
  457. $cidstafflist[$ck][$tv] = 0;
  458. if(!empty($typeholiday)){
  459. foreach($typeholiday as $thk => $thv){
  460. $cidstafflist[$ck][$tv] += floatval($thv['daynum']);
  461. }
  462. }
  463. $cidstafflist[$ck][$tv] = $cidstafflist[$ck][$tv] != 0 ? $cidstafflist[$ck][$tv] : '';
  464. }else{
  465. $typeholiday = $hday->find(array('where' => 'type='.$tv.' and uid='.$cv['sid'].' and UNIX_TIMESTAMP(daytime) between '.$thismonth['start'].' and '.$thismonth['end'],'asArray' => TRUE));
  466. $cidstafflist[$ck][$tv] = 0;
  467. if(!empty($typeholiday)){
  468. foreach($typeholiday as $thk => $thv){
  469. $cidstafflist[$ck][$tv] += floatval($thv['daymsg']);
  470. }
  471. }
  472. $cidstafflist[$ck][$tv] = $cidstafflist[$ck][$tv] != 0 ? $cidstafflist[$ck][$tv] : '';
  473. }
  474. }
  475. $cidstafflist[$ck]['countnum'] = floatval($cidstafflist[$ck][4])+floatval($cidstafflist[$ck][5]) != 0 ? floatval($cidstafflist[$ck][4]) + floatval($cidstafflist[$ck][5]) : '';
  476. $cidstafflist[$ck]['first'] = $ck == 0 ? 1 : ''; // 是否第一个
  477. }
  478. $stafflist[0]['cidstafflist'] = $cidstafflist;
  479. break;
  480. }
  481. }
  482. }else{
  483. foreach($result as $k => $v){
  484. $stafflist[$k]['categoryname'] = $v['title'];
  485. $stafflist[$k]['count'] = $v['count'];
  486. $cidstafflist = $staff->getStaffByCid($v['cid']);
  487. foreach($cidstafflist as $ck => $cv) {
  488. $hstaffmsg = $hstaff->getOne(array('where' => 'uid=' . $cv['sid'], 'asArray' => TRUE));
  489. $cidstafflist[$ck]['addnum'] = $hstaffmsg['addnum'] != 0.0 ? floatval($hstaffmsg['addnum']) : '';
  490. foreach (array(4, 5, 10, 11) as $tk => $tv) {
  491. if ($tv == 11) {
  492. $typeholiday = $holiday->find(array('where' => 'status=1 and type=' . $tv . ' and uid=' . $cv['sid'] . ' and addtime between ' . $thismonth['start'] . ' and ' . $thismonth['end'], 'asArray' => TRUE));
  493. $cidstafflist[$ck][$tv] = 0;
  494. if (!empty($typeholiday)) {
  495. foreach ($typeholiday as $thk => $thv) {
  496. $cidstafflist[$ck][$tv] += floatval($thv['daynum']);
  497. }
  498. }
  499. $cidstafflist[$ck][$tv] = $cidstafflist[$ck][$tv] != 0 ? $cidstafflist[$ck][$tv] : '';
  500. } else {
  501. $typeholiday = $hday->find(array('where' => 'type=' . $tv . ' and uid=' . $cv['sid'] . ' and UNIX_TIMESTAMP(daytime) between ' . $thismonth['start'] . ' and ' . $thismonth['end'], 'asArray' => TRUE));
  502. $cidstafflist[$ck][$tv] = 0;
  503. if (!empty($typeholiday)) {
  504. foreach ($typeholiday as $thk => $thv) {
  505. $cidstafflist[$ck][$tv] += floatval($thv['daymsg']);
  506. }
  507. }
  508. $cidstafflist[$ck][$tv] = $cidstafflist[$ck][$tv] != 0 ? $cidstafflist[$ck][$tv] : '';
  509. }
  510. }
  511. $cidstafflist[$ck]['countnum'] = floatval($cidstafflist[$ck][4])+floatval($cidstafflist[$ck][5]) != 0 ? floatval($cidstafflist[$ck][4]) + floatval($cidstafflist[$ck][5]) : '';
  512. $cidstafflist[$ck]['first'] = $ck == 0 ? 1 : ''; // 是否第一个
  513. }
  514. $stafflist[$k]['cidstafflist'] = $cidstafflist;
  515. }
  516. }
  517. $data['stafflist'] = $stafflist;
  518. $zongbu = $staff->getStaffByCid(12);
  519. $data['zongbu'] = $zongbu;
  520. $data ['memu'] = 'holiday';
  521. $data ['holidaymenu'] = 'overtime';
  522. $data ['staff'] = $this->staff;
  523. $this->render ( "/holiday-overtime", $data );
  524. }
  525. public function addHoliday(){
  526. if(isset($_POST['uid']) && is_numeric($_POST['uid']) && isset($_POST['type']) && is_numeric($_POST['type'])){
  527. Doo::loadModel('holidaystaff');
  528. Doo::loadModel('holiday');
  529. $holiday = new Holiday();
  530. $hstaff = new HStaff();
  531. $hstaffmsg = $hstaff->getOne(array('where' => 'uid='.$_POST['uid'], 'asArray' => TRUE));
  532. if($_POST['type'] == 4 || $_POST['type'] == 5){
  533. $day = $_POST['day'];
  534. $hstaff->uid = $_POST['uid'];
  535. $hstaff->addnum = floatval($hstaffmsg['addnum'])+1;
  536. $result = $hstaff->update();
  537. if($result){
  538. $dayjson = array('holiday' => [$day.'_1']);
  539. $holiday->uid = $_POST['uid'];
  540. $holiday->type = $_POST['type'];
  541. $holiday->dayjson = json_encode($dayjson);
  542. $holiday->daynum = 1.0;
  543. $holiday->status = 1;
  544. $holiday->addtime = time();
  545. $holiday->approvetime = time();
  546. $holiday->description = $_POST['description'];
  547. $id = $holiday->insert();
  548. Doo::loadModel('holidayday');
  549. $hday = new HDay();
  550. $hday->hid = $id;
  551. $hday->uid = $_POST['uid'];
  552. $hday->type = $_POST['type'];
  553. $hday->daytime = $day;
  554. $hday->daymsg = 1.0;
  555. $hday->insert();
  556. return '/holidayovertime';
  557. }else{
  558. exit('添加到holidaystaff出错');
  559. }
  560. }elseif($_POST['type'] == 13){
  561. $daynum = $_POST['tixian'];
  562. if($daynum > $hstaffmsg['addnum']){
  563. exit('提现天数超过存假天数了');
  564. }else{
  565. $hstaff->uid = $_POST['uid'];
  566. $hstaff->addnum = $hstaffmsg['addnum']-$daynum;
  567. $result = $hstaff->update();
  568. if($result){
  569. $holiday->uid = $_POST['uid'];
  570. $holiday->type = 13;
  571. $holiday->daynum = $daynum;
  572. $holiday->status = 1;
  573. $holiday->addtime = time();
  574. $holiday->approvetime = 1;
  575. $holiday->description = $_POST['description'];
  576. $holiday->insert();
  577. return '/holidayovertime';
  578. }else{
  579. exit('添加到holidaystaff出错');
  580. }
  581. }
  582. }
  583. }
  584. exit('添加加值班或提现出错');
  585. }
  586. public function holidayVacation(){
  587. //获取办事处列表
  588. Doo::loadModel('staff');
  589. Doo::loadModel('holidaystaff');
  590. $staff = new staff();
  591. $hstaff = new HStaff();
  592. $sql = 'SELECT `CLD_L_category`.cid,`CLD_L_category`.title,count(`CLD_staff`.sid) as count FROM `CLD_L_category` left join `CLD_staff` on `CLD_L_category`.cid=`CLD_staff`.cid group by `CLD_staff`.cid HAVING count(`CLD_staff`.sid)>0 order by count(`CLD_staff`.sid) desc';
  593. $query = Doo::db ()->query ( $sql );
  594. $result = $query->fetchAll ();
  595. $data['category'] = $result;
  596. $stafflist = array();
  597. if(isset($this->params['cid']) && is_numeric($this->params['cid'])){
  598. $data['thiscid'] = $this->params['cid'];
  599. foreach($result as $k => $v){
  600. if($this->params['cid'] == $v['cid']){
  601. $stafflist[0]['categoryname'] = $v['title'];
  602. $stafflist[0]['count'] = $v['count'];
  603. $cidstafflist = $staff->getStaffByCid($v['cid']);
  604. foreach($cidstafflist as $ck => $cv){
  605. $hstaffmsg = $hstaff->getOne(array('where' => 'uid='.$cv['sid'], 'asArray' => TRUE));
  606. $cidstafflist[$ck]['yearnum'] = $hstaffmsg['yearnum'] != 0.0 ? floatval($hstaffmsg['yearnum']) : '';
  607. $cidstafflist[$ck]['addnum'] = $hstaffmsg['addnum'] != 0.0 ? floatval($hstaffmsg['addnum']) : '';
  608. $cidstafflist[$ck]['hunjianum'] = $hstaffmsg['hunjianum'] != 0.0 ? floatval($hstaffmsg['hunjianum']) : '';
  609. $cidstafflist[$ck]['chanjianum'] = $hstaffmsg['chanjianum'] != 0.0 ? floatval($hstaffmsg['chanjianum']) : '';
  610. $cidstafflist[$ck]['sangjianum'] = $hstaffmsg['sangjianum'] != 0.0 ? floatval($hstaffmsg['sangjianum']) : '';
  611. $cidstafflist[$ck]['gongjianum'] = $hstaffmsg['gongjianum'] != 0.0 ? floatval($hstaffmsg['gongjianum']) : '';
  612. $cidstafflist[$ck]['yearround'] = $this->getYearRoundtime($hstaffmsg['hadyear'],$cv['hiredate']);
  613. $cidstafflist[$ck]['first'] = $ck == 0 ? 1 : ''; // 是否第一个
  614. }
  615. $stafflist[0]['cidstafflist'] = $cidstafflist;
  616. break;
  617. }
  618. }
  619. }else{
  620. foreach($result as $k => $v){
  621. $stafflist[$k]['categoryname'] = $v['title'];
  622. $stafflist[$k]['count'] = $v['count'];
  623. $cidstafflist = $staff->getStaffByCid($v['cid']);
  624. foreach($cidstafflist as $ck => $cv){
  625. $hstaffmsg = $hstaff->getOne(array('where' => 'uid='.$cv['sid'], 'asArray' => TRUE));
  626. $cidstafflist[$ck]['yearnum'] = $hstaffmsg['yearnum'] != 0.0 ? floatval($hstaffmsg['yearnum']) : '';
  627. $cidstafflist[$ck]['addnum'] = $hstaffmsg['addnum'] != 0.0 ? floatval($hstaffmsg['addnum']) : '';
  628. $cidstafflist[$ck]['hunjianum'] = $hstaffmsg['hunjianum'] != 0.0 ? floatval($hstaffmsg['hunjianum']) : '';
  629. $cidstafflist[$ck]['chanjianum'] = $hstaffmsg['chanjianum'] != 0.0 ? floatval($hstaffmsg['chanjianum']) : '';
  630. $cidstafflist[$ck]['sangjianum'] = $hstaffmsg['sangjianum'] != 0.0 ? floatval($hstaffmsg['sangjianum']) : '';
  631. $cidstafflist[$ck]['gongjianum'] = $hstaffmsg['gongjianum'] != 0.0 ? floatval($hstaffmsg['gongjianum']) : '';
  632. $cidstafflist[$ck]['yearround'] = $this->getYearRoundtime($hstaffmsg['hadyear'],$cv['hiredate']);
  633. $cidstafflist[$ck]['first'] = $ck == 0 ? 1 : ''; // 是否第一个
  634. }
  635. $stafflist[$k]['cidstafflist'] = $cidstafflist;
  636. }
  637. }
  638. $zongbu = $staff->getStaffByCid(12);
  639. $data['zongbu'] = $zongbu;
  640. $hstaff2 = new HStaff();
  641. $hstaffmsg2 = $hstaff2->getOne(array('select' => 'yearnum', 'where' => 'uid='.$zongbu[0]['sid'], 'asArray' => TRUE));
  642. $data['thisnum'] = floatval($hstaffmsg2['yearnum']);
  643. $data['stafflist'] = $stafflist;
  644. $data ['memu'] = 'holiday';
  645. $data ['holidaymenu'] = 'vacation';
  646. $data ['staff'] = $this->staff;
  647. $this->render ( "/holiday-vacation", $data );
  648. }
  649. public function setStaffHoliday(){
  650. if(isset($_POST['uid']) && is_numeric($_POST['uid']) && isset($_POST['typeholiday']) && isset($_POST['addnum'])){
  651. Doo::loadModel('holidaystaff');
  652. $hstaff = new HStaff();
  653. $hstaffmsg = $hstaff->getOne(array('where' => 'uid='.$_POST['uid'], 'asArray' => TRUE));
  654. $hstaff->uid = $_POST['uid'];
  655. $hstaff->$_POST['typeholiday'] = $hstaffmsg[$_POST['typeholiday']]+$_POST['addnum'];
  656. $hstaff->update();
  657. return '/holidayvacation';
  658. }else{
  659. exit('增加出错');
  660. }
  661. }
  662. public function getStaffCategory(){
  663. if(isset($_POST['cid']) && is_numeric($_POST['cid'])){
  664. Doo::loadModel('staff');
  665. $staff = new staff();
  666. $stafflist = $staff->getStaffByCid($_POST['cid']);
  667. Doo::loadModel('holidaystaff');
  668. $hstaff = new HStaff();
  669. $hstaffmsg = $hstaff->getOne(array('select' => 'yearnum', 'where' => 'uid='.$stafflist[0]['sid'], 'asArray' => TRUE));
  670. exit(json_encode(array('code' => 200, 'stafflist' => $stafflist, 'thisnum' => floatval($hstaffmsg['yearnum']))));
  671. }
  672. exit(json_encode(array('code' => 400)));
  673. }
  674. public function getHolidayStaff(){
  675. if(isset($_POST['uid']) && is_numeric($_POST['uid']) && isset($_POST['type'])){
  676. Doo::loadModel('holidaystaff');
  677. $hstaff = new HStaff();
  678. $staffmsg = $hstaff->getOne(array('select' => $_POST['type'], 'where' => 'uid='.$_POST['uid'], 'asArray' => TRUE));
  679. exit(json_encode(array('code' => 200, 'thisnum' => floatval($staffmsg[$_POST['type']]))));
  680. }
  681. exit(json_encode(array('code' => 400)));
  682. }
  683. private function geyDayMsg($dayjson){
  684. $holidayday = array();
  685. foreach($dayjson as $dk => $dv){
  686. $oneday = explode('_',$dv);
  687. if($oneday[1] != 0){
  688. $holidayday[$dk]['daytime'] = $oneday[0];
  689. $holidayday[$dk]['daymsg'] = $oneday[1] == 1 ? '' : ($oneday[1] == 2 ? '上午' : '下午');
  690. }
  691. }
  692. return $holidayday;
  693. }
  694. //获取某日期的月初月末时间戳
  695. private function getMonthTime($time){
  696. $starttime = strtotime(date('Y-m-01',strtotime($time)));
  697. $endtime = strtotime("+1 months", strtotime(date('Y-m-01',strtotime($time))))-1;
  698. return array('start' => $starttime, 'end' => $endtime);
  699. }
  700. //获取本年的每个月的时间戳
  701. private function getYearMonthTime($thisyear){
  702. $monthdata = array();
  703. for($i = 0; $i < 12; $i++){
  704. $j = $i+1;
  705. $j = $j < 10 ? '0'.$j : $j;
  706. $nowmonth = $thisyear.'-'.$j.'-01';
  707. $monthdata[$i]['starttime'] = strtotime($nowmonth);
  708. $monthdata[$i]['endtime'] = strtotime("+1 months", strtotime($nowmonth))-1;
  709. }
  710. return $monthdata;
  711. }
  712. //获取本年当事人的年假周期
  713. private function getYearRoundtime($hadyear,$hiredate){
  714. $month = date('m', strtotime($hiredate));
  715. $date = date('d', strtotime($hiredate));
  716. $monthday = intval($month).'月'.intval($date).'日';
  717. $year = date('Y',time());
  718. if(strtotime($hiredate)+(86400*365*$hadyear) < time()){
  719. $lastyear = intval($year)-1;
  720. return intval($lastyear).'年'.$monthday.'~'.intval($year).'年'.$monthday;
  721. }else{
  722. $nextyear = intval($year)+1;
  723. return intval($year).'年'.$monthday.'~'.intval($nextyear).'年'.$monthday;
  724. }
  725. }
  726. }
  727. ?>