src/Controller/Parcels/TransactionController.php line 54

Open in your IDE?
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: parcel
  5. * Date: 10/25/18
  6. * Time: 7:58 AM
  7. */
  8. namespace App\Controller\Parcels;
  9. use App\Entity\DailyAccount;
  10. use App\Entity\Parcel;
  11. use App\Entity\Station;
  12. use App\Entity\Transaction;
  13. use App\Entity\WayBill;
  14. use DateTime;
  15. use JMS\Serializer\SerializationContext;
  16. use JMS\Serializer\SerializerBuilder;
  17. use PhpOffice\PhpSpreadsheet\Exception;
  18. use PhpOffice\PhpSpreadsheet\Style\Fill;
  19. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  20. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  21. use Psr\Log\LoggerInterface;
  22. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  23. use Symfony\Component\Config\Resource\ResourceInterface;
  24. use Symfony\Component\HttpFoundation\File\File;
  25. use Symfony\Component\HttpFoundation\JsonResponse;
  26. use Symfony\Component\HttpFoundation\Request;
  27. use Symfony\Component\HttpFoundation\Response;
  28. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  29. use Symfony\Component\Routing\Annotation\Route;
  30. use Symfony\Component\Serializer\Encoder\CsvEncoder;
  31. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  32. use Symfony\Component\Serializer\Serializer;
  33. class TransactionController extends AbstractController {
  34. /**
  35. * @Route("/transactions", name="bos_all_transactions")
  36. */
  37. public function transactionAction() {
  38. // replace this example code with whatever you need
  39. return $this->render('parcels/transactions.html.twig',[]);
  40. }
  41. /**
  42. * @Route("/transactions/transaction-list",methods={"POST"}, name="bos_get_all_transactions")
  43. */
  44. public function dailyTransactions(Request $request) {
  45. $em = $this->getDoctrine()->getManager();
  46. $context = new SerializationContext();
  47. $context->setSerializeNull(true);
  48. $fromDate = $request->request->get("from_date");
  49. $toDate = $request->request->get("to_date");
  50. // dump($fromDate);
  51. $fDate = null;
  52. $date = new \DateTime('+1 day');
  53. $tDate = null;
  54. $fromDate = empty($fromDate) ? $fDate: $fromDate;
  55. $toDate = empty($toDate) ? $tDate: $toDate;
  56. // dump($fromDate);
  57. // dump($toDate); die;
  58. $serializer = SerializerBuilder::create()->build();
  59. $page = $request->request->get('page') > 1 ? $request->request->get('page'): 1;
  60. $rows = $request->request->get('rows') > 1 ? $request->request->get('rows'): 20;
  61. $offset = ($page - 1)*$rows;
  62. $filterRules = $request->request->get('filterRules');
  63. if($fromDate && $toDate){
  64. $filterRules = json_decode($filterRules, true);
  65. $dates = [
  66. 'field'=> 'd.account_date',
  67. 'op'=> 'between',
  68. 'value' => [
  69. 'from' => str_replace(" ","", $fromDate),
  70. 'to' => str_replace(" ","", $toDate)
  71. ],
  72. ];
  73. array_push($filterRules, $dates);
  74. $filterRules = json_encode($filterRules);
  75. }
  76. // $endDate = [
  77. // 'field' => 't.createdAt',
  78. // 'op' => 'equal',
  79. // 'value' => $toDate
  80. // ];
  81. // dump(json_decode($filterRules, false)); die;
  82. // array_push($filterRules, $endDate);
  83. // [{"field":"w.fromStation","op":"equal","value":1},
  84. // {"field":"w.toStation","op":"equal","value":14},
  85. // {"from_date":"2019-08-01","to_date":"2019-08-24"}]
  86. // dump(json_encode($filterRules)); die;
  87. $parcels = $em->getRepository(Transaction::class)->getAllTransactions($filterRules,$offset,$rows);
  88. // dump($parcels);die;
  89. /** @var integer $total */
  90. $total = $em->getRepository(Transaction::class)->findBosParcelsTotalTransactions($filterRules);
  91. // dump($total);
  92. // $transactionDetails = $em->getRepository(Transaction::class)->totals($filterRules);
  93. $transaction = new Transaction();
  94. $dailyAccount = new DailyAccount();
  95. $dailyAccount->setAccountDate(NULL);
  96. // $transaction->setAmount(number_format($transactionDetails[0]['amount']));
  97. // $transaction->setTaxAmount(number_format($transactionDetails[0]['tax_amount']));
  98. // $transaction->setExpenses(number_format($transactionDetails[0]['expenses']));
  99. // $transaction->setBalance(number_format($transactionDetails[0]['balance']));
  100. $wayBill = new WayBill();
  101. $station = new Station();
  102. $station->setStationName("TOTAL");
  103. $wayBill->setToStation($station);
  104. // $wayBill->setPercelCount(number_format($transactionDetails[0]['parcel_count']));
  105. $transaction->setDailyAccount($dailyAccount);
  106. $wayBill->setFromStation(new Station());
  107. $transaction->setWayBill($wayBill);
  108. // array_push($parcels, $transaction);
  109. // dump($total);
  110. $footerTotals = array();
  111. array_push($footerTotals, $transaction);
  112. $data = [
  113. 'total' => $total[0]['count_t'],
  114. 'rows' => $parcels,
  115. // 'footer' => $footerTotals
  116. ];
  117. $data = $serializer->serialize($data,'json', $context);
  118. return new Response($data, Response::HTTP_OK);
  119. }
  120. /**
  121. * @Route("/transactions/transaction-list/excel/{fromDate}/{toDate}", name="bos_get_all_transactions_excel")
  122. */
  123. public function durationExcel(Request $request, $fromDate, $toDate, LoggerInterface $logger): Response
  124. {
  125. @ini_set("memory_limit",-1);
  126. $em = $this->getDoctrine()->getManager();
  127. $context = new SerializationContext();
  128. $context->setSerializeNull(true);
  129. // dump($request);die;
  130. // $fromDate = $request->request->get("fromDate");
  131. // $toDate = $request->request->get("toDate");
  132. $fDate = null;
  133. $date = new \DateTime('+1 day');
  134. $tDate = null;
  135. // dump($fromDate);
  136. // dump($toDate); die;
  137. $fromDate = $fromDate == 0 ? $fDate: $fromDate;
  138. $toDate = $toDate == 0 ? $tDate: $toDate;
  139. $serializer = SerializerBuilder::create()->build();
  140. // $page = $request->request->get('page') > 1 ? $request->request->get('page'): 1;
  141. // $rows = $request->request->get('rows') > 1 ? $request->request->get('rows'): 20;
  142. // $offset = ($page - 1)*$rows;
  143. $filterRules = $request->request->get('filterRules');
  144. // dump($request->request); die;
  145. if(!$filterRules) {
  146. $filterRules = "[]";
  147. }
  148. if($fromDate && $toDate){
  149. $filterRules = json_decode($filterRules, true);
  150. $dates = [
  151. 'field'=> 'd.accountDate',
  152. 'op'=> 'between',
  153. 'value' => [
  154. 'from' => str_replace(" ","", $fromDate),
  155. 'to' => str_replace(" ","", $toDate)
  156. ],
  157. ];
  158. array_push($filterRules, $dates);
  159. $filterRules = json_encode($filterRules);
  160. }
  161. // dump($filterRules);
  162. $parcels = $em->getRepository(Transaction::class)->getDatedTransactions($filterRules);
  163. $logger->debug("creating beginning file awesome vv");
  164. // $phpExcelObject = $this->get('phpexcel')->createPHPExcelObject();
  165. $phpExcelObject = new Spreadsheet();
  166. // $phpExcelObject->getProperties()->setCategory($this->getUser())
  167. // ->setLastModifiedBy($this->getUser())
  168. // ->setTitle("Transactions report")
  169. // ->setSubject("Transactions report")
  170. // ->setDescription("Transactions report")
  171. // ->setKeywords("Transactions report");
  172. $columns = str_split('ABCDEFGHIJKLMNOPUVWXYZ');
  173. $logger->debug("creating file awesome vv");
  174. // dump("creating a file"); die;
  175. $cancelStyleArray = [
  176. 'fill' => [
  177. 'fillType' => Fill::FILL_SOLID,
  178. 'color' => [
  179. 'rgb' => 'FF0000'
  180. ]
  181. ],
  182. 'font' => [
  183. 'bold' => true,
  184. 'color' => ['rgb' => 'FFFFFFFF'],
  185. 'name' => 'Calibri'
  186. ]
  187. ];
  188. $headerStyleArray = [
  189. 'font' => [
  190. 'bold' => true,
  191. 'color' => ['rgb' => '000000'],
  192. 'size' => 12,
  193. 'name' => 'Cambria'
  194. ]
  195. ];
  196. $phpExcelObject->getActiveSheet()
  197. ->setCellValue('A1', '#')
  198. ->setCellValue('B1', 'WAYBILL')
  199. ->setCellValue('C1', 'TIME')
  200. ->setCellValue('D1', 'FROM')
  201. ->setCellValue('E1', 'TO')
  202. ->setCellValue('F1', 'SENDER')
  203. ->setCellValue('G1', 'SENDER PHONE')
  204. ->setCellValue('H1', 'RECEIVER')
  205. ->setCellValue('I1', 'RECEIVER PHONE')
  206. ->setCellValue('J1', 'DESCRIPTION')
  207. ->setCellValue('K1', 'MAINTENANCE')
  208. ->setCellValue('L1', 'AMOUNT')
  209. ->setCellValue('M1', 'TAX')
  210. ->setCellValue('N1', 'CU INVOICE NUMBER')
  211. ->setCellValue('O1', 'MPESA')
  212. ->setCellValue('P1', 'MPESA AMOUNT')
  213. ->setCellValue('Q1', 'CLERK')
  214. ->setCellValue('R1', 'BUYERS PIN')
  215. ->getStyle("A1:R1")
  216. ->applyFromArray($headerStyleArray);
  217. foreach ($parcels as $count => $parcel) {
  218. $index = $count + 2;
  219. /** @var Parcel[] $p */
  220. $p = $em->getRepository(Parcel::class)->findBy([
  221. 'waybill' => $parcel['waybill']
  222. ]);
  223. $description = '';
  224. foreach ($p as $i => $pa){
  225. $description .= $pa->getDescription();
  226. if(count($p) != ($i+1)){
  227. $description .= ',';
  228. }
  229. }
  230. $date = new DateTime($parcel['created_at']);
  231. $date->format('Y-m-d H:i:s');
  232. $parcel['expenses'] = 3;
  233. $pinNumber = $parcel['pin_number'] ?: 'NA';
  234. if($parcel['is_cancelled']){
  235. // $parcel['expenses'] = -3;
  236. // $parcel['amount'] = -$parcel['amount'];
  237. $parcel['expenses'] = 0;
  238. $parcel['amount'] = -0;
  239. $phpExcelObject->getActiveSheet()
  240. ->setCellValue('A'.$index, $index)
  241. ->setCellValue('B'.$index, $parcel['waybill'])
  242. ->setCellValue('C'.$index, $date)
  243. ->setCellValue('D'.$index, $parcel['from_station'])
  244. ->setCellValue('E'.$index, $parcel['to_station'])
  245. ->setCellValue('F'.$index, $parcel['sender_name'])
  246. ->setCellValue('G'.$index, $parcel['sender_phone_number'])
  247. ->setCellValue('H'.$index, $parcel['receiver_name'])
  248. ->setCellValue('I'.$index, $parcel['receiver_phone_number'])
  249. ->setCellValue('J'.$index, $description)
  250. // ->setCellValue('J'.$index, "-")
  251. ->setCellValue('K'.$index, $parcel['expenses'])
  252. ->setCellValue('L'.$index, $parcel['amount'])
  253. ->setCellValue('M'.$index, $parcel['cu_invoice_number']?$parcel['tax_amount']:0)
  254. ->setCellValue('N'.$index, $parcel['cu_invoice_number'])
  255. ->setCellValue('O'.$index, 'NA')
  256. ->setCellValue('P'.$index, $parcel['mpesa_amount'])
  257. ->setCellValue('Q'.$index, strtoupper($parcel['clerk']))
  258. ->setCellValue('R'.$index, $pinNumber)
  259. ->getStyle("A{$index}:R{$index}")
  260. ->applyFromArray($cancelStyleArray);
  261. // $phpExcelObject->getActiveSheet()
  262. // ->getStyle("A{$index}:G{$index}")
  263. // ->applyFromArray($cancelStyleArray);
  264. }else {
  265. $phpExcelObject->getActiveSheet()
  266. ->setCellValue('A'.$index, $index)
  267. ->setCellValue('B'.$index, $parcel['waybill'])
  268. ->setCellValue('C'.$index, $date)
  269. ->setCellValue('D'.$index, $parcel['from_station'])
  270. ->setCellValue('E'.$index, $parcel['to_station'])
  271. ->setCellValue('F'.$index, $parcel['sender_name'])
  272. ->setCellValue('G'.$index, $parcel['sender_phone_number'])
  273. ->setCellValue('H'.$index, $parcel['receiver_name'])
  274. ->setCellValue('I'.$index, $parcel['receiver_phone_number'])
  275. ->setCellValue('J'.$index, $description)
  276. // ->setCellValue('J'.$index, "-")
  277. ->setCellValue('K'.$index, $parcel['expenses'])
  278. ->setCellValue('L'.$index, $parcel['amount'])
  279. ->setCellValue('M'.$index, $parcel['cu_invoice_number']?$parcel['tax_amount']:0)
  280. ->setCellValue('N'.$index, $parcel['cu_invoice_number'])
  281. ->setCellValue('O'.$index, $parcel['transaction_code'])
  282. ->setCellValue('P'.$index, $parcel['mpesa_amount'])
  283. ->setCellValue('Q'.$index, strtoupper($parcel['clerk']))
  284. ->setCellValue('R'.$index, $pinNumber)
  285. ->getStyle("A{$index}:R{$index}")
  286. ->applyFromArray([
  287. 'font' => [
  288. 'bold' => false,
  289. 'color' => ['rgb' => '000000'],
  290. 'name' => 'Calibri'
  291. ],
  292. ]);
  293. }
  294. // dump("Entering data");
  295. }
  296. // $phpExcelObject->getActiveSheet()->setTitle("Transactions");
  297. // $phpExcelObject->setActiveSheetIndex(0)->setTitle('Transactions');
  298. $phpExcelObject->getActiveSheet()->setTitle('Transactions');
  299. /** create the writer
  300. $writer = $this->get('phpexcel')->createWriter($phpExcelObject, 'Excel2007');
  301. // create the response
  302. $response = $this->get('phpexcel')->createStreamedResponse($writer);
  303. // adding headers
  304. $dispositionHeader = $response->headers->makeDisposition(
  305. ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  306. 'awesome.xlsx'
  307. );
  308. $response->headers->set('Content-Type', 'text/vnd.ms-excel; charset=utf-8');
  309. $response->headers->set('Pragma', 'public');
  310. $response->headers->set('Cache-Control', 'maxage=1');
  311. $response->headers->set('Content-Disposition', $dispositionHeader);
  312. // $response = new Response();
  313. // $response->headers->set('Content-type', 'text');
  314. // $response->setContent('awesome.xlsx');
  315. $writer
  316. return $response; */
  317. $logger->debug("saving file awesome vv");
  318. // $writer = $this->get('phpexcel')->createWriter($phpExcelObject,'Excel2007');
  319. $phpExcelObject->getActiveSheet()->setAutoFilter(
  320. $phpExcelObject->getActiveSheet()
  321. ->calculateWorksheetDimension()
  322. );
  323. $writer = new Xlsx($phpExcelObject);
  324. $md5 = md5("{$fromDate}{$toDate}");
  325. $fileName = "transaction_report_{$md5}.xlsx";
  326. try {
  327. $logger->debug("saving file awesome");
  328. $writer->save("reports/{$fileName}");
  329. } catch (Exception $e) {
  330. $logger->debug($e->getMessage());
  331. }
  332. $response = new Response();
  333. $response->headers->set('Content-type', 'text');
  334. $response->setContent($fileName);
  335. // $response->headers->set('Cache-Control', 'private');
  336. // $response->headers->set('Content-length', $attachmentSize);
  337. // $response->headers->set('Content-Disposition', 'attachment; filename="' . $fileName . '";');
  338. return $response;
  339. //
  340. // foreach ($parcels as $index => $parcel) {
  341. //// $row['valdate']->format('d/m/Y');
  342. // $date = $parcel['account_date']->format('d/m/y');
  343. // $waybill = $parcel['waybill'];
  344. //
  345. // dump($index.': '.$date.'-'.$waybill);
  346. // }
  347. //
  348. // die;
  349. $fileName = "report_".rand(1,20).".csv";
  350. $fp = fopen($fileName, 'w');
  351. // $fp = fopen('php://output', 'w');
  352. $s = [
  353. 'n',
  354. 'WAYBILL',
  355. 'DATE',
  356. 'FROM',
  357. 'TO',
  358. 'MAINTENANCE',
  359. 'AMOUNT'
  360. ];
  361. // fputcsv(
  362. // $fp, // The file pointer
  363. // $s, // The fields
  364. // ',' // The delimiter
  365. // );
  366. // foreach ($parcels as $index => $parcel) {
  367. // $date = $parcel['account_date']->format('Y-m-d H:i:s');
  368. //// $stringDate = $date->format('Y-m-d H:i:s');
  369. //
  370. // if($parcel['is_cancelled']){
  371. // $parcel['amount'] = 0;
  372. // }
  373. //
  374. // $s = [
  375. // 'n' => $index,
  376. // 'waybill' => $parcel['waybill'],
  377. // 'date'=> $date,
  378. // 'from'=> $parcel['from_station'],
  379. // 'to'=> $parcel['to_station'],
  380. // 'cost'=> $parcel['expenses'],
  381. // 'amount'=> $parcel['amount']
  382. // ];
  383. // fputcsv(
  384. // $fp, // The file pointer
  385. // $s, // The fields
  386. // ',' // The delimiter
  387. // );
  388. // }
  389. $response = new Response();
  390. $response->headers->set('Content-type', 'text');
  391. $response->setContent($fileName);
  392. // $response->headers->set('Cache-Control', 'private');
  393. // $response->headers->set('Content-length', $attachmentSize);
  394. // $response->headers->set('Content-Disposition', 'attachment; filename="' . $fileName . '";');
  395. return $response;
  396. }
  397. /**
  398. * @Route("/transactions/transaction-list/maintenance/excel/{fromDate}/{toDate}", name="bos_get_all_transactions_maintenance_excel")
  399. */
  400. public function maintenanceExcel(Request $request, $fromDate, $toDate, LoggerInterface $logger){
  401. $em = $this->getDoctrine()->getManager();
  402. $context = new SerializationContext();
  403. $context->setSerializeNull(true);
  404. // dump($request);die;
  405. // $fromDate = $request->request->get("fromDate");
  406. // $toDate = $request->request->get("toDate");
  407. $fDate = null;
  408. $date = new \DateTime('+1 day');
  409. $tDate = null;
  410. // dump($fromDate);
  411. // dump($toDate); die;
  412. $fromDate = $fromDate == 0 ? $fDate: $fromDate;
  413. $toDate = $toDate == 0 ? $tDate: $toDate;
  414. $serializer = SerializerBuilder::create()->build();
  415. // $page = $request->request->get('page') > 1 ? $request->request->get('page'): 1;
  416. // $rows = $request->request->get('rows') > 1 ? $request->request->get('rows'): 20;
  417. // $offset = ($page - 1)*$rows;
  418. $filterRules = $request->request->get('filterRules');
  419. // dump($request->request); die;
  420. if(!$filterRules) {
  421. $filterRules = "[]";
  422. }
  423. if($fromDate && $toDate){
  424. $filterRules = json_decode($filterRules, true);
  425. $dates = [
  426. 'field'=> 'd.accountDate',
  427. 'op'=> 'between',
  428. 'value' => [
  429. 'from' => str_replace(" ","", $fromDate),
  430. 'to' => str_replace(" ","", $toDate)
  431. ],
  432. ];
  433. array_push($filterRules, $dates);
  434. // dump($filterRules); die;
  435. $filterRules = json_encode($filterRules);
  436. }
  437. /** @var Transaction[] $parcels */
  438. $parcels = $em->getRepository(Transaction::class)->getDatedTransactions($filterRules);
  439. $logger->debug("creating beginning file awesome vv");
  440. $phpExcelObject = $this->get('phpexcel')->createPHPExcelObject();
  441. $phpExcelObject->getProperties()->setCategory($this->getUser())
  442. ->setLastModifiedBy($this->getUser())
  443. ->setTitle("Transactions report")
  444. ->setSubject("Transactions report")
  445. ->setDescription("Transactions report")
  446. ->setKeywords("Transactions report");
  447. $columns = str_split('ABCDEFGHIJKLMNOPUVWXYZ');
  448. $logger->debug("creating file awesome vv");
  449. // dump("creating a file"); die;
  450. $cancelStyleArray = [
  451. 'fill' => [
  452. // 'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_GRADIENT_LINEAR,
  453. 'type' => PHPExcel_Style_Fill::FILL_SOLID,
  454. 'color' => [
  455. 'rgb' => 'FF0000'
  456. ]
  457. ],
  458. 'font' => [
  459. 'bold' => true,
  460. 'color' => ['rgb' => 'FFFFFF'],
  461. // 'size' => 12,
  462. 'name' => 'Courier 10 Pitch'
  463. ]
  464. ];
  465. $headerStyleArray = [
  466. 'font' => [
  467. 'bold' => true,
  468. 'color' => ['rgb' => '000000'],
  469. 'size' => 12,
  470. 'name' => 'Bell MT'
  471. ]
  472. ];
  473. $phpExcelObject->setActiveSheetIndex(0)
  474. ->setCellValue('A1', '#')
  475. ->setCellValue('B1', 'TIME')
  476. ->setCellValue('C1', 'WAYBILL')
  477. ->setCellValue('D1', 'FROM')
  478. ->setCellValue('E1', 'TO')
  479. ->setCellValue('F1', 'MAINTENANCE')
  480. ->setCellValue('G1', 'AMOUNT')
  481. ->getStyle("A1:G1")
  482. ->applyFromArray($headerStyleArray);
  483. foreach ($parcels as $count => $parcel) {
  484. $index = $count + 2;
  485. /** @var Parcel[] $p */
  486. $p = $em->getRepository("App:Parcel")->findBy([
  487. 'waybill' => $parcel['waybill']
  488. ]);
  489. $description = '';
  490. foreach ($p as $i => $pa){
  491. $description .= $pa->getDescription();
  492. if(count($p) != ($i+1)){
  493. $description .= ',';
  494. }
  495. }
  496. $date = $parcel['created_at']->format('Y-m-d H:i:s');
  497. $parcel['expenses'] = 3;
  498. if($parcel['is_cancelled']){
  499. // $parcel['expenses'] = -3;
  500. // $parcel['amount'] = -$parcel['amount'];
  501. $parcel['expenses'] = 0;
  502. $parcel['amount'] = -0;
  503. $phpExcelObject->setActiveSheetIndex(0)
  504. ->setCellValue('A'.$index, $index)
  505. ->setCellValue('B'.$index, $parcel['waybill'])
  506. ->setCellValue('C'.$index, $date)
  507. ->setCellValue('D'.$index, $parcel['from_station'])
  508. ->setCellValue('E'.$index, $parcel['to_station'])
  509. ->setCellValue('F'.$index, $parcel['expenses'])
  510. ->setCellValue('G'.$index, $parcel['amount'])
  511. ->getStyle("A{$index}:G{$index}")
  512. ->applyFromArray($cancelStyleArray);
  513. // $phpExcelObject->getActiveSheet()
  514. // ->getStyle("A{$index}:G{$index}")
  515. // ->applyFromArray($cancelStyleArray);
  516. }else {
  517. $phpExcelObject->setActiveSheetIndex(0)
  518. ->setCellValue('A'.$index, $index)
  519. ->setCellValue('B'.$index, $parcel['waybill'])
  520. ->setCellValue('C'.$index, $date)
  521. ->setCellValue('D'.$index, $parcel['from_station'])
  522. ->setCellValue('E'.$index, $parcel['to_station'])
  523. ->setCellValue('F'.$index, $parcel['expenses'])
  524. ->setCellValue('G'.$index, $parcel['amount'])
  525. ->getStyle("A{$index}:G{$index}")
  526. ->applyFromArray([
  527. 'font' => [
  528. 'bold' => true,
  529. 'color' => ['rgb' => '000000'],
  530. 'name' => 'Courier 10 Pitch'
  531. ],
  532. ]);
  533. // $phpExcelObject->getActiveSheet()
  534. // ->getStyle("A{$index}:G{$index}")
  535. // ->applyFromArray($cancelStyleArray);
  536. }
  537. // dump("Entering data");
  538. }
  539. // $phpExcelObject->getActiveSheet()->setTitle("Transactions");
  540. $phpExcelObject->setActiveSheetIndex(0)->setTitle('Transactions');
  541. /** create the writer
  542. $writer = $this->get('phpexcel')->createWriter($phpExcelObject, 'Excel2007');
  543. // create the response
  544. $response = $this->get('phpexcel')->createStreamedResponse($writer);
  545. // adding headers
  546. $dispositionHeader = $response->headers->makeDisposition(
  547. ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  548. 'awesome.xlsx'
  549. );
  550. $response->headers->set('Content-Type', 'text/vnd.ms-excel; charset=utf-8');
  551. $response->headers->set('Pragma', 'public');
  552. $response->headers->set('Cache-Control', 'maxage=1');
  553. $response->headers->set('Content-Disposition', $dispositionHeader);
  554. // $response = new Response();
  555. // $response->headers->set('Content-type', 'text');
  556. // $response->setContent('awesome.xlsx');
  557. $writer
  558. return $response; */
  559. $logger->debug("saving file awesome vv");
  560. $writer = $this->get('phpexcel')->createWriter($phpExcelObject,'Excel2007');
  561. $md5 = md5(rand());
  562. $fileName = "transaction_report_{$fromDate}-{$toDate}-{$md5}.xlsx";
  563. try {
  564. $logger->debug("saving file awesome");
  565. $writer->save("reports/{$fileName}");
  566. } catch (\PHPExcel_Writer_Exception $e) {
  567. $logger->debug($e->getMessage());
  568. }
  569. $response = new Response();
  570. $response->headers->set('Content-type', 'text');
  571. $response->setContent($fileName);
  572. // $response->headers->set('Cache-Control', 'private');
  573. // $response->headers->set('Content-length', $attachmentSize);
  574. // $response->headers->set('Content-Disposition', 'attachment; filename="' . $fileName . '";');
  575. return $response;
  576. //
  577. // foreach ($parcels as $index => $parcel) {
  578. //// $row['valdate']->format('d/m/Y');
  579. // $date = $parcel['account_date']->format('d/m/y');
  580. // $waybill = $parcel['waybill'];
  581. //
  582. // dump($index.': '.$date.'-'.$waybill);
  583. // }
  584. //
  585. // die;
  586. $fileName = "report_".rand(1,20).".csv";
  587. $fp = fopen($fileName, 'w');
  588. // $fp = fopen('php://output', 'w');
  589. $s = [
  590. 'n',
  591. 'WAYBILL',
  592. 'DATE',
  593. 'FROM',
  594. 'TO',
  595. 'MAINTENANCE',
  596. 'AMOUNT'
  597. ];
  598. // fputcsv(
  599. // $fp, // The file pointer
  600. // $s, // The fields
  601. // ',' // The delimiter
  602. // );
  603. // foreach ($parcels as $index => $parcel) {
  604. // $date = $parcel['account_date']->format('Y-m-d H:i:s');
  605. //// $stringDate = $date->format('Y-m-d H:i:s');
  606. //
  607. // if($parcel['is_cancelled']){
  608. // $parcel['amount'] = 0;
  609. // }
  610. //
  611. // $s = [
  612. // 'n' => $index,
  613. // 'waybill' => $parcel['waybill'],
  614. // 'date'=> $date,
  615. // 'from'=> $parcel['from_station'],
  616. // 'to'=> $parcel['to_station'],
  617. // 'cost'=> $parcel['expenses'],
  618. // 'amount'=> $parcel['amount']
  619. // ];
  620. // fputcsv(
  621. // $fp, // The file pointer
  622. // $s, // The fields
  623. // ',' // The delimiter
  624. // );
  625. // }
  626. $response = new Response();
  627. $response->headers->set('Content-type', 'text');
  628. $response->setContent($fileName);
  629. // $response->headers->set('Cache-Control', 'private');
  630. // $response->headers->set('Content-length', $attachmentSize);
  631. // $response->headers->set('Content-Disposition', 'attachment; filename="' . $fileName . '";');
  632. return $response;
  633. }
  634. /**
  635. * @Route("/transactions/{id}", methods={"GET"}, name="one_transaction")
  636. */
  637. public function getOneWayBill($id){
  638. $em = $this->getDoctrine()->getManager();
  639. /** @var Transaction $transaction */
  640. $transaction = $em->getRepository(Transaction::class)->findOneBy([
  641. 'id' => $id
  642. ]);
  643. $parcels = $em->getRepository(Parcel::class)->findBy([
  644. 'waybill' => $transaction->getWayBill()
  645. ]);
  646. return $this->render('parcels/view_transaction.html.twig',[
  647. 'transaction' => $transaction,
  648. 'parcels' => $parcels
  649. ]);
  650. }
  651. /**
  652. * @Route("/transactions/details/{id}", methods={"GET"}, name="one_bos_transaction_detail_parcel")
  653. */
  654. public function getDetailParcel($id){
  655. $em = $this->getDoctrine()->getManager();
  656. $transaction = $em->getRepository(Transaction::class)->findOneBy([
  657. 'id' => $id
  658. ]);
  659. return $this->render('parcels/transaction_detail.html.twig',[
  660. 'transaction' => $transaction
  661. ]);
  662. }
  663. /**
  664. * @Route("/cancelled_transactions", name="bos_all_cancelled_transactions")
  665. */
  666. public function cancelledTransactionAction() {
  667. // replace this example code with whatever you need
  668. return $this->render('parcels/transactions_cancelled.html.twig',[]);
  669. }
  670. /**
  671. * @Route("/cancelled_list",methods={"post"}, name="bos_json_all_cancelled_transactions")
  672. * @param Request $request
  673. * @return Response
  674. */
  675. public function cancelledParcels(Request $request) {
  676. $em = $this->getDoctrine()->getManager();
  677. $context = new SerializationContext();
  678. $context->setSerializeNull(true);
  679. $page = $request->request->get('page') > 1 ? $request->request->get('page'): 1;
  680. $rows = $request->request->get('rows') > 1 ? $request->request->get('rows'): 20;
  681. $offset = ($page - 1)*$rows;
  682. $serializer = SerializerBuilder::create()->build();
  683. $filterRules = $request->request->get('filterRules');
  684. $parcels = $em->getRepository( WayBill::class)->findAllCancelledParcels($filterRules,$offset,$rows);
  685. $totals = $em->getRepository(WayBill::class)->findTotalCancelledParcels($filterRules);
  686. // dump($parcels); die;
  687. $data = [
  688. 'total' => $totals[0]['count'],
  689. 'rows' => $parcels
  690. ];
  691. // dump($data);
  692. $data = $serializer->serialize($data,'json', $context);
  693. return Response($data, Response::HTTP_OK);
  694. }
  695. }