createAnalyticsXml.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. <?php
  2. defined('YII_DEBUG') or define('YII_DEBUG', true);
  3. defined('YII_ENV') or define('YII_ENV', 'dev');
  4. require __DIR__ . '/api/vendor/autoload.php';
  5. require __DIR__ . '/api/vendor/yiisoft/yii2/Yii.php';
  6. $config = require __DIR__ . '/api/config/web.php';
  7. (new yii\web\Application($config));
  8. $res = new \app\models\AnalyticsModel();
  9. $arrTasks = $res->getTasks();
  10. $arrProjecttypes = $res->getProjecttypes();
  11. $arrTaskstypes = $res->getTaskstypes();
  12. $arrAccounts = $res->getAccounts();
  13. $arrJobtypes = $res->getJobtypes();
  14. $arrJobtypesAccounts = $res->getJobtypesAccounts();
  15. $arrSections = $res->getSections();
  16. /*
  17. foreach($arrTasks as $ar){
  18. var_dump($ar->project->id); echo "<br>";
  19. var_dump($ar->accounts->name); echo "<br>";
  20. }
  21. exit;
  22. */
  23. require_once('PHPExcel-1.8.2/Classes/PHPExcel.php');
  24. // Подключаем класс для вывода данных в формате excel
  25. require_once('PHPExcel-1.8.2/Classes/PHPExcel/Writer/Excel5.php');
  26. // Создаем объект класса PHPExcel
  27. $xls = new PHPExcel();
  28. // Устанавливаем индекс активного листа
  29. $xls->setActiveSheetIndex(0);
  30. // Получаем активный лист
  31. $sheet = $xls->getActiveSheet();
  32. // Подписываем лист
  33. $sheet->setTitle('Команды');
  34. // Вставляем текст в ячейку A1
  35. $sheet->setCellValue("A1", 'action');
  36. $sheet->setCellValue("B1", 'loco_type');
  37. $sheet->setCellValue("C1", 'status');
  38. $sheet->setCellValue("D1", 'loco_number');
  39. $sheet->setCellValue("E1", 'depo');
  40. $sheet->setCellValue("F1", 'depo_service');
  41. $sheet->setCellValue("G1", 'created');
  42. $sheet->setCellValue("H1", 'section_id');
  43. $sheet->setCellValue("I1", 'id_project');
  44. $sheet->setCellValue("J1", 'task_created');
  45. $sheet->setCellValue("K1", 'finished_time');
  46. $sheet->setCellValue("L1", 'accepted_time');
  47. $sheet->setCellValue("M1", 'expires');
  48. $sheet->setCellValue("N1", 'type');
  49. $sheet->setCellValue("O1", 'account_id');
  50. $sheet->setCellValue("P1", 'account_name');
  51. $sheet->setCellValue("Q1", 'task_status');
  52. $sheet->setCellValue("R1", 'task_id');
  53. //$sheet->setCellValue("O1", 'input_id');
  54. $sheet->getStyle('A1')->getFill()->setFillType(
  55. PHPExcel_Style_Fill::FILL_SOLID);
  56. $sheet->getStyle('A1')->getFill()->getStartColor()->setRGB('EEEEEE');
  57. // Объединяем ячейки
  58. //$sheet->mergeCells('A1:H1');
  59. // Выравнивание текста
  60. $sheet->getStyle('A1')->getAlignment()->setHorizontal(
  61. PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  62. for ($i = 2; $i < 20; $i++) {
  63. $j = 2;
  64. foreach($arrTasks as $task){
  65. switch ($i) {
  66. case 2:
  67. $value = $task->project->action;
  68. break;
  69. case 3:
  70. $value = $task->project->loco_type;
  71. break;
  72. case 4:
  73. $value = $task->project->status;
  74. break;
  75. case 5:
  76. $value = $task->project->loco_number;
  77. break;
  78. case 6:
  79. $value = $task->project->depo;
  80. break;
  81. case 7:
  82. $value = $task->project->depo_service;
  83. break;
  84. case 8:
  85. $value = $task->project->created;
  86. break;
  87. case 9:
  88. $value = $task->project->section_id;
  89. break;
  90. case 10:
  91. $value = $task->project->id;
  92. break;
  93. case 11:
  94. $value = $task->created;
  95. break;
  96. case 12:
  97. $value = $task->finished_time;
  98. break;
  99. case 13:
  100. $value = $task->accepted_time;
  101. break;
  102. case 14:
  103. $value = $task->expires;
  104. break;
  105. case 15:
  106. $value = $task->type;
  107. break;
  108. case 16:
  109. $value = $task->accounts->id;
  110. break;
  111. case 17:
  112. $value = $task->accounts->name;
  113. break;
  114. case 18:
  115. $value = $task->status;
  116. break;
  117. case 19:
  118. $value = $task->id;
  119. break;
  120. case 20:
  121. $value = '';
  122. break;
  123. }
  124. $sheet->setCellValueByColumnAndRow(
  125. $i - 2,
  126. $j,
  127. ($value));
  128. // Применяем выравнивание
  129. $sheet->getStyleByColumnAndRow($i - 2, $j)->getAlignment()->
  130. setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  131. $j++;
  132. }
  133. }
  134. $xls->createSheet();
  135. $xls->setActiveSheetIndex(1);
  136. // Получаем активный лист
  137. $sheet = $xls->getActiveSheet();
  138. // Подписываем лист
  139. $sheet->setTitle('Типы проектов');
  140. $sheet->setCellValue("A1", 'id');
  141. $sheet->setCellValue("B1", 'name');
  142. $sheet->setCellValue("C1", 'company');
  143. for ($i = 2; $i < 5; $i++) {
  144. $j = 2;
  145. foreach($arrProjecttypes as $projecttype){
  146. switch ($i) {
  147. case 2:
  148. $value = $projecttype->id;
  149. break;
  150. case 3:
  151. $value = $projecttype->name;
  152. break;
  153. case 4:
  154. $value = $projecttype->company;
  155. break;
  156. }
  157. $sheet->setCellValueByColumnAndRow(
  158. $i - 2,
  159. $j,
  160. ($value));
  161. // Применяем выравнивание
  162. $sheet->getStyleByColumnAndRow($i - 2, $j)->getAlignment()->
  163. setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  164. $j++;
  165. }
  166. }
  167. $xls->createSheet();
  168. $xls->setActiveSheetIndex(2);
  169. // Получаем активный лист
  170. $sheet = $xls->getActiveSheet();
  171. // Подписываем лист
  172. $sheet->setTitle('Типы задач');
  173. $sheet->setCellValue("A1", 'id');
  174. $sheet->setCellValue("B1", 'name');
  175. $sheet->setCellValue("C1", 'company');
  176. $sheet->setCellValue("D1", 'main_task');
  177. $sheet->setCellValue("E1", 'time_to_complete_minutes');
  178. $sheet->setCellValue("F1", 'object_name');
  179. for ($i = 2; $i < 8; $i++) {
  180. $j = 2;
  181. foreach($arrTaskstypes as $taskstype){
  182. switch ($i) {
  183. case 2:
  184. $value = $taskstype->id;
  185. break;
  186. case 3:
  187. $value = $taskstype->name;
  188. break;
  189. case 4:
  190. $value = $taskstype->company;
  191. break;
  192. case 5:
  193. $value = $taskstype->main_task;
  194. break;
  195. case 6:
  196. $value = $taskstype->time_to_complete_minutes;
  197. break;
  198. case 7:
  199. $value = $taskstype->object_name;
  200. break;
  201. }
  202. $sheet->setCellValueByColumnAndRow(
  203. $i - 2,
  204. $j,
  205. ($value));
  206. // Применяем выравнивание
  207. $sheet->getStyleByColumnAndRow($i - 2, $j)->getAlignment()->
  208. setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  209. $j++;
  210. }
  211. }
  212. $xls->createSheet();
  213. $xls->setActiveSheetIndex(3);
  214. // Получаем активный лист
  215. $sheet = $xls->getActiveSheet();
  216. // Подписываем лист
  217. $sheet->setTitle('Аккаунты');
  218. $sheet->setCellValue("A1", 'id');
  219. $sheet->setCellValue("B1", 'name');
  220. $sheet->setCellValue("C1", 'company');
  221. $sheet->setCellValue("D1", 'position');
  222. $sheet->setCellValue("E1", 'repair_site');
  223. for ($i = 2; $i < 7; $i++) {
  224. $j = 2;
  225. foreach($arrAccounts as $accounts){
  226. switch ($i) {
  227. case 2:
  228. $value = $accounts->id;
  229. break;
  230. case 3:
  231. $value = $accounts->name;
  232. break;
  233. case 4:
  234. $value = $accounts->company;
  235. break;
  236. case 5:
  237. $value = $accounts->position;
  238. break;
  239. case 6:
  240. $value = $accounts->repair_site;
  241. break;
  242. }
  243. $sheet->setCellValueByColumnAndRow(
  244. $i - 2,
  245. $j,
  246. ($value));
  247. // Применяем выравнивание
  248. $sheet->getStyleByColumnAndRow($i - 2, $j)->getAlignment()->
  249. setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  250. $j++;
  251. }
  252. }
  253. $xls->createSheet();
  254. $xls->setActiveSheetIndex(4);
  255. // Получаем активный лист
  256. $sheet = $xls->getActiveSheet();
  257. // Подписываем лист
  258. $sheet->setTitle('Должности');
  259. $sheet->setCellValue("A1", 'id');
  260. $sheet->setCellValue("B1", 'name');
  261. $sheet->setCellValue("C1", 'company');
  262. for ($i = 2; $i < 5; $i++) {
  263. $j = 2;
  264. foreach($arrJobtypes as $jobtype){
  265. switch ($i) {
  266. case 2:
  267. $value = $jobtype->id;
  268. break;
  269. case 3:
  270. $value = $jobtype->name;
  271. break;
  272. case 4:
  273. $value = $jobtype->company;
  274. break;
  275. }
  276. $sheet->setCellValueByColumnAndRow(
  277. $i - 2,
  278. $j,
  279. ($value));
  280. // Применяем выравнивание
  281. $sheet->getStyleByColumnAndRow($i - 2, $j)->getAlignment()->
  282. setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  283. $j++;
  284. }
  285. }
  286. $xls->createSheet();
  287. $xls->setActiveSheetIndex(5);
  288. // Получаем активный лист
  289. $sheet = $xls->getActiveSheet();
  290. // Подписываем лист
  291. $sheet->setTitle('Промежуточная таблица');
  292. $sheet->setCellValue("A1", 'account_id');
  293. $sheet->setCellValue("B1", 'jobtype_id');
  294. for ($i = 2; $i < 4; $i++) {
  295. $j = 2;
  296. foreach($arrJobtypesAccounts as $jobtypeAccount){
  297. switch ($i) {
  298. case 2:
  299. $value = $jobtypeAccount->account_id;
  300. break;
  301. case 3:
  302. $value = $jobtypeAccount->jobtype_id;
  303. break;
  304. }
  305. $sheet->setCellValueByColumnAndRow(
  306. $i - 2,
  307. $j,
  308. ($value));
  309. // Применяем выравнивание
  310. $sheet->getStyleByColumnAndRow($i - 2, $j)->getAlignment()->
  311. setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  312. $j++;
  313. }
  314. }
  315. $xls->createSheet();
  316. $xls->setActiveSheetIndex(6);
  317. // Получаем активный лист
  318. $sheet = $xls->getActiveSheet();
  319. // Подписываем лист
  320. $sheet->setTitle('Секции');
  321. $sheet->setCellValue("A1", 'id');
  322. $sheet->setCellValue("B1", 'locomotive_series');
  323. $sheet->setCellValue("C1", 'section_number');
  324. $sheet->setCellValue("D1", 'section_subnumber');
  325. for ($i = 2; $i < 6; $i++) {
  326. $j = 2;
  327. foreach($arrSections as $section){
  328. switch ($i) {
  329. case 2:
  330. $value = $section->id;
  331. break;
  332. case 3:
  333. $value = $section->locomotive_series;
  334. break;
  335. case 4:
  336. $value = $section->section_number;
  337. break;
  338. case 5:
  339. $value = $section->section_subnumber;
  340. break;
  341. }
  342. $sheet->setCellValueByColumnAndRow(
  343. $i - 2,
  344. $j,
  345. ($value));
  346. // Применяем выравнивание
  347. $sheet->getStyleByColumnAndRow($i - 2, $j)->getAlignment()->
  348. setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  349. $j++;
  350. }
  351. }
  352. $xls->setActiveSheetIndex(0);
  353. // Выводим HTTP-заголовки
  354. header ( "Expires: Mon, 1 Apr 1974 05:00:00 GMT" );
  355. header ( "Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT" );
  356. header ( "Cache-Control: no-cache, must-revalidate" );
  357. header ( "Pragma: no-cache" );
  358. header ( "Content-type: application/vnd.ms-excel" );
  359. header ( "Content-Disposition: attachment; filename=smopp.xls" );
  360. // Выводим содержимое файла
  361. $objWriter = new PHPExcel_Writer_Excel5($xls);
  362. $objWriter->save('php://output');