PageRenderTime 61ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 1ms

/app/Controller/WorksController.php

https://bitbucket.org/dosm123/crm
PHP | 710 lines | 652 code | 33 blank | 25 comment | 211 complexity | fac5ebc2e67fe5af17badd78b275e90a MD5 | raw file
Possible License(s): LGPL-3.0, GPL-3.0, LGPL-2.1
  1. <?php
  2. class WorksController extends AppController{
  3. public $paginate = array(
  4. 'limit' => 25,
  5. 'order' => array(
  6. 'Complain.reg_date' => 'desc'
  7. ),
  8. 'recursive' => 2,
  9. );
  10. public $name = 'Works';
  11. public function index(){
  12. $this->loadModel('Board');
  13. $this->loadModel('Life');
  14. $this->loadmodel('User');
  15. $this->loadmodel('UserInfo');
  16. $this->loadmodel('Complex');
  17. $this->loadmodel('Complain');
  18. $this->loadModel('TopCategory');
  19. $this->loadModel('MidCategory');
  20. $this->loadModel('BottomCategory');
  21. $this->set('tops', $this->TopCategory->find('all'));
  22. $this->set('mids', $this->TopCategory->MidCategory->find('all'));
  23. $data = null;
  24. $conditions = array();
  25. $conditions['not'] = array('Complain.status' => 0);
  26. if($this->request->query){
  27. $data = $this->request->query['data'];
  28. $type = $data['Search']['type'];
  29. $input = $data['Search']['keyword'];
  30. if($type == "name"){
  31. $complex = array_keys($this->Complex->find('list', array('conditions' => array('Complex.name LIKE' => "%$input%"))));
  32. $conditions = array('or'=> array('Board.complex_id' => $complex,
  33. 'Life.complex_id' => $complex));
  34. }
  35. else if($type == "serial" || $type == "mac") {
  36. $conditions = array("or" => array("Board.$type LIKE" => "%$input%",
  37. "Life.$type LIKE" => "%$input%"));
  38. }
  39. else if($type == "engineer") {
  40. $userinfo = array_keys($this->UserInfo->find('list', array('conditions' => array('UserInfo.name LIKE' => "%$input%"))));
  41. $conditions = array("Complain.engineer_id" => $userinfo);
  42. }
  43. else {
  44. $conditions = array("Complain.$type LIKE" => "%$input%");
  45. }
  46. if(!isset($data['Filter'])){
  47. $data['Filter'] = array('midcategory' => 'default', 'topcategory' => 'default', 'status' => 'default', 'method' => 'default', 'region_name' => 'default', 'media' => 'default');
  48. }
  49. foreach ( array_keys($data['Filter']) as $key) {
  50. if($data['Filter'][$key] != "default"){
  51. // need a special process for foreignKeys
  52. if($key == 'method'){
  53. $conditions['or'] = array('Board.method' => $data['Filter'][$key],
  54. 'Life.method' => $data['Filter'][$key]);
  55. }
  56. else if($key == 'region_name'){
  57. $ids = array_keys($this->Complex->find('list', array('conditions'=>array('region_name'=>$data['Filter']['region_name']))));
  58. $conditions['or']['Board.complex_id'] = $ids;
  59. $conditions['or']['Life.complex_id'] = $ids;
  60. }
  61. else if($key == 'topcategory' || $key == 'midcategory'){
  62. $tmp_cond = null;
  63. if($data['Filter']['topcategory'] != 'default' and $data['Filter']['midcategory'] != 'default'){
  64. $top_ids = array_keys($this->BottomCategory->TopCategory->find('list', array('conditions' => array('category' => $data['Filter']['topcategory']))));
  65. $mid_ids = array_keys($this->BottomCategory->MidCategory->find('list', array('conditions' => array('category' => $data['Filter']['midcategory']))));
  66. $tmp_cond = array('top_category_id' => $top_ids,
  67. 'mid_category_id' => $mid_ids);
  68. }
  69. else if($data['Filter']['topcategory'] != 'default'){
  70. $top_ids = array_keys($this->BottomCategory->TopCategory->find('list', array('conditions' => array('category' => $data['Filter']['topcategory']))));
  71. $tmp_cond = array('top_category_id' => $top_ids);
  72. }
  73. else if($data['Filter']['midcategory'] != 'default'){
  74. $mid_ids = array_keys($this->BottomCategory->MidCategory->find('list', array('conditions' => array('category' => $data['Filter']['midcategory']))));
  75. $tmp_cond = array('mid_category_id' => $mid_ids);
  76. }
  77. $bottoms = array_keys($this->BottomCategory->find('list', array('conditions'=>$tmp_cond)));
  78. $conditions['Complain.cs_bottom_category_id'] = $bottoms;
  79. }
  80. else if($key == 'media'){
  81. if($data['Filter']['media'] == '보드'){
  82. $conditions['Complain.board_id <>'] = NULL;
  83. }
  84. else if ($data['Filter']['media'] == '라이프'){
  85. $conditions['Complain.life_id <>'] = NULL;
  86. }
  87. }
  88. else if($key == 'status'){
  89. if($data['Filter']['status'] == '0'){
  90. $conditions['Complain.status'] = 0;
  91. }
  92. else if ($data['Filter']['status'] == '1'){
  93. $conditions['Complain.status'] = 1;
  94. }
  95. else if ($data['Filter']['status'] == '2'){
  96. $conditions['Complain.status'] = 2;
  97. }
  98. else if ($data['Filter']['status'] == '3'){
  99. $conditions['Complain.status'] = 3;
  100. }
  101. }
  102. else if($key == 'start_date'){
  103. if($data['Filter'][$key]){
  104. $date = date('Y-m-d', strtotime($data['Filter'][$key]));
  105. $conditions['Complain.end_date >='] = $date;
  106. }
  107. }
  108. else if($key == 'end_date'){
  109. if($data['Filter'][$key]){
  110. $date = date('Y-m-d', strtotime($data['Filter'][$key]) + 86400);
  111. $conditions['Complain.end_date <='] = $date;
  112. }
  113. }
  114. }
  115. }
  116. // 검색 혹은 필터 내용 있으면 검색 처리
  117. }
  118. $conditions['not'] = array('Complain.status' => 0);
  119. $this->paginate['conditions'] = $conditions;
  120. /* paginate 때문에 붙인거 */
  121. $this->Complain->unbindModel(array('hasMany' => array('Cs')));
  122. $this->Complain->EngineerInfo->unbindModel(array('hasOne'=> array('User'), 'hasMany' => array('Complex', 'Complain')));
  123. $this->Complain->ReceiverInfo->unbindModel(array('hasOne'=> array('User'), 'hasMany' => array('Complex', 'Complain')));
  124. $this->Board->unbindModel(array('hasMany' => array('Complain')));
  125. $this->Life->unbindModel(array('hasMany' => array('Complain')));
  126. $this->set('complains', $this->paginate('Complain'));
  127. $this->set('medias', array('보드', '라이프'));
  128. $this->set('methods', Set::extract('/boards/method', $this->Board->query('select distinct method from boards')));
  129. $this->set('regions' , Set::extract('/complexes/region_name', $this->Complex->query('select distinct region_name from complexes')));
  130. $this->set('topcategories' , Set::extract('/top_categories/category', $this->TopCategory->query('select distinct category from top_categories')));
  131. $this->set('midcategories', Set::extract('/mid_categories/category', $this->MidCategory->query('select distinct category from mid_categories')));
  132. /* $this->set('methods', array_unique( */
  133. /* array_merge(Set::extract('/Board/method', $complains), */
  134. /* Set::extract('/Life/method', $complains)) */
  135. /* ) */
  136. /* ); */
  137. /* $this->set('regions', array_unique( */
  138. /* array_merge(Set::extract('/Board/Complex/region_name', $complains), */
  139. /* Set::extract('/Life/Complex/region_name', $complains)) */
  140. /* )); */
  141. /* $this->set('topcategories', array_unique(Set::extract('/CsBottomCategory/TopCategory/category', $complains))); */
  142. /* $this->set('midcategories', array_unique(Set::extract('/CsBottomCategory/MidCategory/category', $complains))); */
  143. $this->set('searchinfo', $data);
  144. }
  145. public function add($media, $media_id, $complain_id){
  146. $this->loadModel('Cs');
  147. $this->loadModel('Life');
  148. $this->loadModel('Board');
  149. $this->loadModel('TopCategory');
  150. $this->loadModel('Complain');
  151. $this->set('tops', $this->TopCategory->find('all'));
  152. $this->set('mids', $this->TopCategory->MidCategory->find('all'));
  153. $this->set('bottoms', $this->TopCategory->MidCategory->BottomCategory->find('all'));
  154. $this->set('media', $media);
  155. $this->set('media_id', $media_id);
  156. if($media == 'life'){
  157. $life = $this->Life->findById($media_id);
  158. $complex_id = $life['Life']['complex_id'];
  159. }
  160. else if($media == 'board'){
  161. $board = $this->Board->findById($media_id);
  162. $complex_id = $board['Board']['complex_id'];
  163. }
  164. $this->set('complex_id', $complex_id);
  165. $this->set('complain', $this->Complain->findById($complain_id, array('recursive' => 0)));
  166. $this->set('complain_id', $complain_id);
  167. }
  168. public function edit($media, $media_id, $complain_id, $cs_id){
  169. $this->loadModel('Cs');
  170. $this->loadModel('Life');
  171. $this->loadModel('Board');
  172. $this->loadModel('TopCategory');
  173. $this->loadModel('CsMaterial');
  174. $this->loadModel('CsAdditionalInfo');
  175. $this->loadModel('Complain');
  176. $this->loadModel('User');
  177. $this->set('users', $this->User->find('all'));
  178. $this->set('media', $media);
  179. $this->set('media_id', $media_id);
  180. if($media == 'life'){
  181. $life = $this->Life->findById($media_id);
  182. $complex_id = $life['Life']['complex_id'];
  183. }
  184. else if($media == 'board'){
  185. $board = $this->Board->findById($media_id);
  186. $complex_id = $board['Board']['complex_id'];
  187. }
  188. $this->set('complex_id', $complex_id);
  189. $cs = $this->Cs->findById($cs_id);
  190. $this->set('complain_id', $cs['Complain']['id']);
  191. $this->set('tops', $this->TopCategory->find('all' , array('conditions' => array('TopCategory.deleted' => 0))));
  192. $this->set('mids', $this->TopCategory->MidCategory->find('all', array('conditions' => array('MidCategory.deleted' => 0))));
  193. $this->set('bottoms', $this->TopCategory->MidCategory->BottomCategory->find('all', array('conditions' => array('BottomCategory.deleted' => 0))));
  194. $this->set('cs', $cs);
  195. $this->set('cs_id', $cs_id);
  196. $this->set('csMaterials', $this->CsMaterial->find('all', array('conditions' =>array('CsMaterial.cs_id' => $cs_id) )));
  197. $this->set('csAdditions', $this->CsAdditionalInfo->find('all', array('conditions' =>array('CsAdditionalInfo.cs_id' => $cs_id))));
  198. if($this->request->is('post')){
  199. $this->Cs->id = $cs_id;
  200. $cs['Cs']['comment'] = parent::eucconv($cs['Cs']['comment']);
  201. if($cs['Cs']['bottom_category_id'] == "default"){
  202. $cs['Cs']['bottom_category_id'] = 1;
  203. }
  204. if($this->Cs->save($this->request->data['Cs'])){
  205. if(!parent::array_empty($this->request->data['CsMaterial'])){
  206. foreach( $this->request->data['CsMaterial'] as $csMaterial):
  207. if(!parent::array_empty($csMaterial)){
  208. if($csMaterial['cs_id'] == null){
  209. $csMaterial['cs_id'] = $cs_id;
  210. }
  211. $this->CsMaterial->saveAll($csMaterial);
  212. }
  213. endforeach;
  214. }
  215. if(!parent::array_empty($this->request->data['CsAdditionalInfo'])){
  216. foreach( $this->request->data['CsAdditionalInfo'] as $csAddition):
  217. if(!parent::array_empty($csAddition)){
  218. if($csAddition['cs_id'] == null){
  219. $csAddition['cs_id'] = $cs_id;
  220. }
  221. $this->CsAdditionalInfo->saveAll($csAddition);
  222. }
  223. endforeach;
  224. }
  225. $thisComplain = $this->Complain->findById($this->request->data['Complain']['id']);
  226. $thisComplain['Complain']['cs_bottom_category_id'] = $this->request->data['Cs']['bottom_category_id'];
  227. if($this->request->data['Complain']['status'] == 2){
  228. $thisComplain['Complain']['status'] = $complain['status'];
  229. $thisComplain['Complain']['engineer_id'] = $this->request->data['Complain']['engineer_id'];
  230. }
  231. $this->Complain->save($thisComplain);
  232. $this->redirect('/complains/view/'.$media.'/'.$media_id.'/'.$complain_id);
  233. }
  234. }
  235. }
  236. public function ajaxMod($complain_id){
  237. $this->loadModel('Compain');
  238. $this->loadModel('Cs');
  239. $this->loadModel('CsMaterial');
  240. $this->loadModel('CsAdditionalInfo');
  241. if($this->request->is('post')){
  242. $deleted_materials = $this->request->data['deleted_material_id'];
  243. $deleted_additions = $this->request->data['deleted_addition_id'];
  244. if($deleted_materials){
  245. $materials = split(',', $deleted_materials);
  246. for($i = 0; $i < count($materials) - 1; $i++){
  247. $this->CsMaterial->delete($materials[$i]);
  248. }
  249. }
  250. if($deleted_additions){
  251. $additions = split(',', $deleted_additions);
  252. for($i = 0; $i < count($additions) - 1; $i++){
  253. $this->CsAdditionalInfo->delete($additions[$i]);
  254. }
  255. }
  256. $cs = $this->request->data['Cs'];
  257. $thisCs = $this->Cs->findById($cs['id']);
  258. $thisCs['Cs']['comment'] = parent::eucconv($cs['comment']);
  259. $thisCs['Cs']['oil'] = $cs['oil'];
  260. $thisCs['Cs']['time'] = $cs['time'];
  261. $thisCs['Cs']['bottom_category_id'] = $cs['bottom_category_id'];
  262. if($cs['bottom_category_id'] == "default"){
  263. $thisCs['Cs']['bottom_category_id'] = 1;
  264. }
  265. if($this->Cs->save($thisCs)){
  266. if(!parent::array_empty($this->request->data['CsMaterial'])){
  267. foreach( $this->request->data['CsMaterial'] as $csMaterial):
  268. if(!parent::array_empty($csMaterial)){
  269. $csMaterial['cs_id'] = $cs['id'];
  270. $this->CsMaterial->saveAll($csMaterial);
  271. }
  272. endforeach;
  273. }
  274. if(!parent::array_empty($this->request->data['CsAdditionalInfo'])){
  275. foreach( $this->request->data['CsAdditionalInfo'] as $csAddition):
  276. if(!parent::array_empty($csAddition)){
  277. $csAddition['cs_id'] = $cs['id'];
  278. $csAddition['name'] = parent::eucconv($csAddition['name']);
  279. $this->CsAdditionalInfo->saveAll($csAddition);
  280. }
  281. endforeach;
  282. }
  283. $complain = $this->request->data['Complain'];
  284. if($this->request->data['Cs']['bottom_category_id'] == 'default'){
  285. $this->request->data['Cs']['bottom_category_id'] = 1;
  286. }
  287. $thisComplain = $this->Complain->findById($complain_id);
  288. if($complain['status'] == 2){
  289. $thisComplain['Complain']['engineer_id'] = $complain['0']['engineer_id'];
  290. }
  291. else if($complain['status'] == 3){
  292. $thisComplain['Complain']['end_date'] = date('Y-m-d H:i', strtotime('now'));
  293. }
  294. $thisComplain['Complain']['status'] = $complain['status'];
  295. $thisComplain['Complain']['cs_bottom_category_id'] = $thisCs['Cs']['bottom_category_id'];
  296. $this->Complain->save($thisComplain);
  297. echo 'good';
  298. }
  299. else{
  300. echo 'bad';
  301. }
  302. }
  303. $this->render('/works/ajaxMod', 'ajax');
  304. }
  305. public function ajaxAdd($complain_id){
  306. $this->loadModel('Compain');
  307. $this->loadModel('Cs');
  308. $this->loadModel('CsMaterial');
  309. $this->loadModel('CsAdditionalInfo');
  310. if($this->request->is('post')){
  311. foreach($this->request->data['Complain'] as $complain){
  312. $thisComplain = $this->Complain->findById($complain_id);
  313. $thisComplain['Complain']['status'] = $complain['status'];
  314. if($this->request->data['Cs']['0']['bottom_category_id'] == 'default'){
  315. $this->request->data['Cs']['0']['bottom_category_id'] = 1;
  316. }
  317. $thisComplain['Complain']['cs_bottom_category_id'] = $this->request->data['Cs']['0']['bottom_category_id'];
  318. if($complain['status'] == 2){
  319. $thisComplain['Complain']['engineer_id'] = $complain['engineer_id'];
  320. }
  321. else if($complain['status'] == 3){
  322. $thisComplain['Complain']['end_date'] = date('Y-m-d H:i', strtotime('now'));
  323. }
  324. $this->Complain->save($thisComplain);
  325. }
  326. foreach( $this->request->data['Cs'] as $cs) :
  327. $cs['comment'] = parent::eucconv($cs['comment']);
  328. if($cs['bottom_category_id'] == "default"){
  329. $cs['bottom_category_id'] = 1;
  330. }
  331. if($this->Cs->save($cs)){
  332. if(!parent::array_empty($this->request->data['CsMaterial'])){
  333. foreach( $this->request->data['CsMaterial'] as $csMaterial):
  334. if(!parent::array_empty($csMaterial)){
  335. $csMaterial['cs_id'] = $this->Cs->getLastInsertId();
  336. $this->CsMaterial->saveAll($csMaterial);
  337. }
  338. endforeach;
  339. }
  340. if(!parent::array_empty($this->request->data['CsAdditionalInfo'])){
  341. foreach( $this->request->data['CsAdditionalInfo'] as $csAddition):
  342. if(!parent::array_empty($csAddition)){
  343. $csAddition['cs_id'] = $this->Cs->getLastInsertId();
  344. $csAddition['name'] = parent::eucconv($csAddition['name']);
  345. $this->CsAdditionalInfo->saveAll($csAddition);
  346. }
  347. endforeach;
  348. }
  349. echo 'good';
  350. }
  351. else{
  352. echo 'bad';
  353. }
  354. endforeach;
  355. }
  356. $this->render('/works/ajaxAdd', 'ajax');
  357. }
  358. public function delete($cs_id ){
  359. $this->loadModel('Complain');
  360. $this->loadModel('Cs');
  361. $this->loadModel('Life');
  362. $this->loadModel('Board');
  363. $cs = $this->Cs->findById($cs_id);
  364. $complain = $this->Complain->findById($cs['Cs']['complain_id']);
  365. if(!parent::array_empty($complain['Life'])){
  366. $boardlife = $this->Life->findById($complain['Complain']['life_id']);
  367. $boardlife['style'] = 'life';
  368. $boardlife_id = $boardlife['Life']['id'];
  369. }
  370. else if(!parent::array_empty($complain['Board'])){
  371. $boardlife = $this->Board->findById($complain['Complain']['board_id']);
  372. $boardlife['style'] = 'board';
  373. $boardlife_id = $boardlife['Board']['id'];
  374. }
  375. $this->Cs->id = $cs['Cs']['id'];
  376. if($this->Cs->delete()){
  377. $this->redirect('/complains/view/'.$boardlife['style'].'/'.$boardlife_id.'/'.$complain['Complain']['id']);
  378. }
  379. }
  380. public function ajaxAdd2(){
  381. $this->loadModel('Complain');
  382. $this->loadModel('Cs');
  383. $this->loadModel('CsMaterial');
  384. $this->loadModel('CsAdditionalInfo');
  385. if($this->request->is('post')){
  386. foreach( $this->request->data['Complain'] as $complain):
  387. if($complain['media'] == 'board'){
  388. $complain['board_id'] = $complain['device_id'];
  389. }
  390. else if($complain['media'] == 'life'){
  391. $complain['life_id'] = $complain['device_id'];
  392. }
  393. $complain['title'] = parent::eucconv($complain['title']);
  394. $complain['name'] = parent::eucconv($complain['name']);
  395. $complain['comment'] = parent::eucconv($complain['comment']);
  396. $complain['bottom_category_id'] = 1;
  397. if($complain['status'] == 3)
  398. $complain['end_date'] = date('Y-m-d H:i:s');
  399. if($this->Complain->save($complain)){
  400. foreach($this->request->data['Cs'] as $cs):
  401. if($cs['bottom_category_id'] == 'default'){
  402. $cs['bottom_category_id'] = 1;
  403. }
  404. $cs['complain_id'] = $this->Complain->getLastInsertId();
  405. $cs['user_info_id'] = $complain['engineer_id'];
  406. $cs['created'] = $complain['reg_date'];
  407. $cs['comment'] = $complain['comment'];
  408. $nComplain = $this->Complain->findById($this->Complain->getLastInsertId());
  409. $nComplain['Complain']['cs_bottom_category_id'] = $cs['bottom_category_id'];
  410. $this->Complain->save($nComplain);
  411. if($this->Cs->save($cs)){
  412. if(!parent::array_empty($this->request->data['CsMaterial'])){
  413. foreach( $this->request->data['CsMaterial'] as $csMaterial):
  414. $csMaterial['cs_id'] = $this->Cs->getLastInsertId();
  415. $this->CsMaterial->saveAll($csMaterial);
  416. endforeach;
  417. }
  418. if(!parent::array_empty($this->request->data['CsAdditionalInfo'])){
  419. foreach( $this->request->data['CsAdditionalInfo'] as $csAddition):
  420. $csAddition['cs_id'] = $this->Cs->getLastInsertId();
  421. $csAddition['name'] = parent::eucconv($csAddition['name']);
  422. $this->CsAdditionalInfo->saveAll($csAddition);
  423. endforeach;
  424. }
  425. echo 'good';
  426. }
  427. else{
  428. echo 'bad';
  429. }
  430. endforeach;
  431. }
  432. endforeach;
  433. }
  434. $this->render('/works/ajaxAdd2', 'ajax');
  435. }
  436. public function removeMaterial(){
  437. $this->loadModel('CsMaterial');
  438. if($this->request->is('post')){
  439. foreach($this->request->data['CsMaterial'] as $csMaterial):
  440. $this->CsMaterial->id = $csMaterial['id'];
  441. if($this->CsMaterial->delete()){
  442. echo 'good';
  443. }
  444. else{
  445. echo 'bad';
  446. }
  447. endforeach;
  448. }
  449. $this->render('/works/removeMaterial', 'ajax');
  450. }
  451. public function removeAddition(){
  452. $this->loadModel('CsAdditionalInfo');
  453. if($this->request->is('post')){
  454. foreach($this->request->data['CsAdditionalInfo'] as $csAddition):
  455. $this->CsAdditionalInfo->id = $csAddition['id'];
  456. if($this->CsAdditionalInfo->delete()){
  457. echo 'good';
  458. }
  459. else{
  460. echo 'bad';
  461. }
  462. endforeach;
  463. }
  464. $this->render('/works/removeAddition', 'ajax');
  465. }
  466. public function excelOut(){
  467. $this->loadModel('Complex');
  468. $this->loadModel('Board');
  469. $this->loadModel('BottomCategory');
  470. $this->loadModel('CsBottomCategory');
  471. $this->loadModel('EngineerInfo');
  472. $this->loadModel('ReceiverInfo');
  473. $this->loadModel('Life');
  474. $this->loadModel('UserInfo');
  475. $currentTime = date("Y-m-d H:i:s");
  476. date_default_timezone_set('Asia/Seoul');
  477. $users = $this->UserInfo->find('list', array('fields'=> array('UserInfo.name')));
  478. $conditions = array();
  479. $conditions['not'] = array('Complain.status' => 0);
  480. if($this->request->query){
  481. $data = $this->request->query['data'];
  482. $type = $data['Search']['type'];
  483. $input = $data['Search']['keyword'];
  484. if($type == "name"){
  485. $complex = array_keys($this->Complex->find('list', array('conditions' => array('Complex.name LIKE' => "%$input%"))));
  486. $conditions = array('or'=> array('Board.complex_id' => $complex,
  487. 'Life.complex_id' => $complex));
  488. }
  489. else if($type == "serial" || $type == "mac") {
  490. $conditions = array("or" => array("Board.$type LIKE" => "%$input%",
  491. "Life.$type LIKE" => "%$input%"));
  492. }
  493. else if($type == "engineer") {
  494. $userinfo = array_keys($this->UserInfo->find('list', array('conditions' => array('UserInfo.name LIKE' => "%$input%"))));
  495. $conditions = array("Complain.engineer_id" => $userinfo);
  496. }
  497. else {
  498. $conditions = array("Complain.$type LIKE" => "%$input%");
  499. }
  500. if(!isset($data['Filter'])){
  501. $data['Filter'] = array('midcategory' => 'default', 'topcategory' => 'default', 'status' => 'default', 'method' => 'default', 'region_name' => 'default', 'media' => 'default');
  502. }
  503. foreach ( array_keys($data['Filter']) as $key) {
  504. if($data['Filter'][$key] != "default"){
  505. // need a special process for foreignKeys
  506. if($key == 'method'){
  507. $conditions['or'] = array('Board.method' => $data['Filter'][$key],
  508. 'Life.method' => $data['Filter'][$key]);
  509. }
  510. else if($key == 'region_name'){
  511. $ids = array_keys($this->Complex->find('list', array('conditions'=>array('region_name'=>$data['Filter']['region_name']))));
  512. $conditions['or']['Board.complex_id'] = $ids;
  513. $conditions['or']['Life.complex_id'] = $ids;
  514. }
  515. else if($key == 'topcategory' || $key == 'midcategory'){
  516. $tmp_cond = null;
  517. if($data['Filter']['topcategory'] != 'default' and $data['Filter']['midcategory'] != 'default'){
  518. $top_ids = array_keys($this->BottomCategory->TopCategory->find('list', array('conditions' => array('category' => $data['Filter']['topcategory']))));
  519. $mid_ids = array_keys($this->BottomCategory->MidCategory->find('list', array('conditions' => array('category' => $data['Filter']['midcategory']))));
  520. $tmp_cond = array('top_category_id' => $top_ids,
  521. 'mid_category_id' => $mid_ids);
  522. }
  523. else if($data['Filter']['topcategory'] != 'default'){
  524. $top_ids = array_keys($this->BottomCategory->TopCategory->find('list', array('conditions' => array('category' => $data['Filter']['topcategory']))));
  525. $tmp_cond = array('top_category_id' => $top_ids);
  526. }
  527. else if($data['Filter']['midcategory'] != 'default'){
  528. $mid_ids = array_keys($this->BottomCategory->MidCategory->find('list', array('conditions' => array('category' => $data['Filter']['midcategory']))));
  529. $tmp_cond = array('mid_category_id' => $mid_ids);
  530. }
  531. $bottoms = array_keys($this->BottomCategory->find('list', array('conditions'=>$tmp_cond)));
  532. $conditions['Complain.cs_bottom_category_id'] = $bottoms;
  533. }
  534. else if($key == 'media'){
  535. if($data['Filter']['media'] == '보드'){
  536. $conditions['Complain.board_id <>'] = NULL;
  537. }
  538. else if ($data['Filter']['media'] == '라이프'){
  539. $conditions['Complain.life_id <>'] = NULL;
  540. }
  541. }
  542. else if($key == 'status'){
  543. if($data['Filter']['status'] == '0'){
  544. $conditions['Complain.status'] = 0;
  545. }
  546. else if ($data['Filter']['status'] == '1'){
  547. $conditions['Complain.status'] = 1;
  548. }
  549. else if ($data['Filter']['status'] == '2'){
  550. $conditions['Complain.status'] = 2;
  551. }
  552. else if ($data['Filter']['status'] == '3'){
  553. $conditions['Complain.status'] = 3;
  554. }
  555. }
  556. else if($key == 'start_date'){
  557. if($data['Filter'][$key]){
  558. $date = date('Y-m-d', strtotime($data['Filter'][$key]));
  559. $conditions['Complain.end_date >='] = $date;
  560. }
  561. }
  562. else if($key == 'end_date'){
  563. if($data['Filter'][$key]){
  564. $date = date('Y-m-d', strtotime($data['Filter'][$key]) + 86400);
  565. $conditions['Complain.end_date <='] = $date;
  566. }
  567. }
  568. }
  569. }
  570. // 검색 혹은 필터 내용 있으면 검색 처리
  571. }
  572. $conditions['not'] = array('Complain.status' => 0);
  573. ///////////////////////////////
  574. $this->Complain->unbindModel(array('hasMany' => array('Cs'), 'belongsTo' => array('BottomCategory')));
  575. $this->Board->unbindModel(array('hasMany' => array('Complain')));
  576. $this->Life->unbindModel(array('hasMany' => array('Complain')));
  577. $this->EngineerInfo->unbindModel(array('hasOne' => array('User'), 'hasMany' => array('Complex', 'Complain')));
  578. $this->ReceiverInfo->unbindModel(array('hasOne' => array('User'), 'hasMany' => array('Complex', 'Complain')));
  579. $complainInfos = $this->Complain->find('all', array('recursive' => 2,'conditions' => $conditions));
  580. error_reporting(E_ALL);
  581. date_default_timezone_set('Europe/London');
  582. /** PHPExcel */
  583. require_once './Classes/PHPExcel.php';
  584. // Create new PHPExcel object
  585. $objPHPExcel = new PHPExcel();
  586. // Set properties
  587. $objPHPExcel->getProperties()->setCreator("CRM System")
  588. ->setLastModifiedBy("CRM System")
  589. ->setTitle("CRM System Complain report")
  590. ->setSubject("CRM System Complain report")
  591. ->setDescription("CRM System Complain report on {$currentTime}")
  592. ->setKeywords("Complain")
  593. ->setCategory("Complain result");
  594. // Add header
  595. $objPHPExcel->setActiveSheetIndex(0)
  596. ->setCellValue('A1', parent::utf8conv('등록일자'))
  597. ->setCellValue('B1', parent::utf8conv('대분류'))
  598. ->setCellValue('C1', parent::utf8conv('중분류'))
  599. ->setCellValue('D1', parent::utf8conv('소분류'))
  600. ->setCellValue('E1', parent::utf8conv('서버정보'))
  601. ->setCellValue('F1', parent::utf8conv('통신방식'))
  602. ->setCellValue('G1', parent::utf8conv('주소'))
  603. ->setCellValue('H1', parent::utf8conv('단지명'))
  604. ->setCellValue('I1', parent::utf8conv('위치정보'))
  605. ->setCellValue('J1', parent::utf8conv('매체'))
  606. ->setCellValue('K1', parent::utf8conv('시리얼'))
  607. ->setCellValue('L1', parent::utf8conv('제목'))
  608. ->setCellValue('M1', parent::utf8conv('내용'))
  609. ->setCellValue('N1', parent::utf8conv('요청자'))
  610. ->setCellValue('O1', parent::utf8conv('요청자 연락처'))
  611. ->setCellValue('P1', parent::utf8conv('접수자'))
  612. ->setCellValue('Q1', parent::utf8conv('처리자'))
  613. ->setCellValue('R1', parent::utf8conv('처리일자'));
  614. // Add some data
  615. $index = 2;
  616. foreach($complainInfos as $complainInfo){
  617. $objPHPExcel->setActiveSheetIndex(0)
  618. ->setCellValue("A{$index}", parent::utf8conv($complainInfo['Complain']['reg_date']))
  619. ->setCellValue("B{$index}", parent::utf8conv($complainInfo['CsBottomCategory']['TopCategory']['category']))
  620. ->setCellValue("C{$index}", parent::utf8conv($complainInfo['CsBottomCategory']['MidCategory']['category']))
  621. ->setCellValue("D{$index}", parent::utf8conv($complainInfo['CsBottomCategory']['category']));
  622. $serverInfo = NULL;
  623. $method = NULL;
  624. $addr = NULL;
  625. $complex_name = NULL;
  626. $location = NULL;
  627. $media = NULL;
  628. $serial = NULL;
  629. if(!parent::array_empty($complainInfo['Board'])){
  630. $serverInfo = $complainInfo['Board']['server_name'];
  631. $method = $complainInfo['Board']['method'];
  632. $addr = $complainInfo['Board']['Complex']['first_addr'].' '.$complainInfo['Board']['Complex']['mid_addr'].' '.$complainInfo['Board']['Complex']['last_addr'].' '.$complainInfo['Board']['Complex']['addr'];
  633. $complex_name = $complainInfo['Board']['Complex']['name'];
  634. $location = $complainInfo['Board']['location'];
  635. $media = '보드';
  636. $serial = $complainInfo['Board']['serial'];
  637. }
  638. else if(!parent::array_empty($complainInfo['Life'])){
  639. $serverInfo = $complainInfo['Life']['aed_name'];
  640. $method = $complainInfo['Life']['method'];
  641. $addr = $complainInfo['Life']['Complex']['first_addr'].' '.$complainInfo['Life']['Complex']['mid_addr'].' '.$complainInfo['Life']['Complex']['last_addr'].' '.$complainInfo['Life']['Complex']['addr'];
  642. $complex_name = $complainInfo['Life']['Complex']['name'];
  643. $location = $complainInfo['Life']['location'];
  644. $media = '라이프';
  645. $serial = $complainInfo['Life']['serial'];
  646. }
  647. $objPHPExcel->setActiveSheetIndex(0)
  648. ->setCellValue("E{$index}", parent::utf8conv($serverInfo))
  649. ->setCellValue("F{$index}", parent::utf8conv($method))
  650. ->setCellValue("G{$index}", parent::utf8conv($addr))
  651. ->setCellValue("H{$index}", parent::utf8conv($complex_name))
  652. ->setCellValue("I{$index}", parent::utf8conv($location))
  653. ->setCellValue("J{$index}", parent::utf8conv($media))
  654. ->setCellValue("K{$index}", parent::utf8conv($serial))
  655. ->setCellValue("L{$index}", parent::utf8conv($complainInfo['Complain']['title']))
  656. ->setCellValue("M{$index}", parent::utf8conv($complainInfo['Complain']['comment']))
  657. ->setCellValue("N{$index}", parent::utf8conv($complainInfo['Complain']['name']))
  658. ->setCellValue("O{$index}", parent::utf8conv($complainInfo['Complain']['phone']))
  659. ->setCellValue("P{$index}", parent::utf8conv($users[$complainInfo['Complain']['receiver_id']]))
  660. ->setCellValue("Q{$index}", parent::utf8conv($users[$complainInfo['Complain']['engineer_id']]))
  661. ->setCellValue("R{$index}", parent::utf8conv($complainInfo['Complain']['end_date']));
  662. $index++;
  663. }
  664. // Rename sheet
  665. $objPHPExcel->getActiveSheet()->setTitle(parent::utf8conv('처리정보'));
  666. // Set active sheet index to the first sheet, so Excel opens this as the first sheet
  667. $objPHPExcel->setActiveSheetIndex(0);
  668. // Redirect output to a client’s web browser (Excel2007)
  669. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  670. header('Content-Disposition: attachment;filename="처리정보'.$currentTime.'.xlsx"');
  671. header('Cache-Control: max-age=0');
  672. $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
  673. $objWriter->save('php://output');
  674. exit;
  675. }
  676. }
  677. ?>