denyAccessUnlessGranted('report.reject', null, 'No access.'); $params = $this->initParameters('outlet_list'); return $this->render('report/rejection/summary_form.html.twig', $params); } public function rejectSummarySubmit(Request $req) { $this->denyAccessUnlessGranted('report.reject', null, 'No access.'); // get query builder $qb = $this->getDoctrine() ->getRepository(JORejection::class) ->createQueryBuilder('r'); // get dates $raw_date_start = $req->request->get('date_start'); $raw_date_end = $req->request->get('date_end'); $date_start = DateTime::createFromFormat('m/d/Y', $raw_date_start); $date_end = DateTime::createFromFormat('m/d/Y', $raw_date_end); // build query $query = $qb->where('r.date_create >= :start') ->andWhere('r.date_create <= :end') ->setParameter('start', $date_start->format('Y-m-d') . ' 00:00:00') ->setParameter('end', $date_end->format('Y-m-d') . ' 23:59:59') ->getQuery(); // run query $jors = $query->getResult(); // initialize counter $counter = []; // get results $res = []; foreach ($jors as $jor) { $jo = $jor->getJobOrder(); $hub = $jor->getHub(); $hub_id = $hub->getID(); $hub_name = $hub->getName() . ' - ' . $hub->getBranch(); $reason = $jor->getReason(); if (!isset($counter[$hub_id])) $counter[$hub_id] = [ 'reasons' => [], 'name' => $hub_name, ]; if (!isset($counter[$hub_id][$reason])) { $counter[$hub_id]['reasons'][$reason]['name'] = JORejectionReason::getName($reason); $counter[$hub_id]['reasons'][$reason]['counter'] = 1; } else { $counter[$hub_id]['reasons'][$reason]['counter'] += 1; } $res[] = [ 'jo_id' => $jo->getID(), 'jo_date_time' => $jo->getDateSchedule(), 'jor_date_create' => $jo->getDateCreate(), 'hub' => $hub->getName() . ' - ' . $hub->getBranch(), 'reason' => JORejectionReason::getName($jor->getReason()), 'contact' => $jor->getContactPerson(), 'remarks' => $jor->getRemarks(), ]; } // response $resp = new StreamedResponse(); $resp->setCallback(function() use ($counter) { // csv output $csv_handle = fopen('php://output', 'w+'); fputcsv($csv_handle, ['Enrollee', 'Reason', 'Count']); foreach ($counter as $centry) { $first = true; foreach ($centry['reasons'] as $creason) { // first line has hub name if ($first) { fputcsv($csv_handle, [ $centry['name'], $creason['name'], $creason['counter'], ]); $first = false; } else { fputcsv($csv_handle, [ '', $creason['name'], $creason['counter'], ]); } } } fclose($csv_handle); }); $filename = 'reject_' . $date_start->format('Ymd') . '_' . $date_end->format('Ymd') . '.csv'; $resp->setStatusCode(200); $resp->headers->set('Content-Type', 'text/csv; charset=utf-8'); $resp->headers->set('Content-Disposition', 'attachment; filename="' . $filename . '"'); return $resp; /* return $this->json([ 'result' => $res, 'counter' => $counter, ]); */ } public function rejectDetailForm() { $this->denyAccessUnlessGranted('report.reject', null, 'No access.'); $params = $this->initParameters('outlet_list'); return $this->render('report/rejection/detail_form.html.twig', $params); } public function rejectDetailSubmit(Request $req) { $this->denyAccessUnlessGranted('report.reject', null, 'No access.'); // get query builder $qb = $this->getDoctrine() ->getRepository(JORejection::class) ->createQueryBuilder('r'); // get dates $raw_date_start = $req->request->get('date_start'); $raw_date_end = $req->request->get('date_end'); $date_start = DateTime::createFromFormat('m/d/Y', $raw_date_start); $date_end = DateTime::createFromFormat('m/d/Y', $raw_date_end); // build query $query = $qb->where('r.date_create >= :start') ->andWhere('r.date_create <= :end') ->setParameter('start', $date_start->format('Y-m-d') . ' 00:00:00') ->setParameter('end', $date_end->format('Y-m-d') . ' 23:59:59') ->getQuery(); // run query $jors = $query->getResult(); // initialize counter $counter = []; // get results $res = []; foreach ($jors as $jor) { $jo = $jor->getJobOrder(); $hub = $jor->getHub(); $hub_id = $hub->getID(); $hub_name = $hub->getName() . ' - ' . $hub->getBranch(); /* // check if created by app $create_user = $jo->getCreatedBy(); if ($create_user == null) $create_user_text = 'Application'; else $create_user_text = $create_user->getFullName(); */ $reason = $jor->getReason(); $res[] = [ $jo->getID(), $jo->getDateSchedule()->format('m/d/Y H:i'), $jor->getDateCreate()->format('m/d/Y H:i'), $hub->getName() . ' - ' . $hub->getBranch(), JORejectionReason::getName($jor->getReason()), $jor->getContactPerson(), $jor->getRemarks(), $jor->getUser()->getFullName(), ServiceType::getName($jo->getServiceType()), ]; } // response $resp = new StreamedResponse(); $resp->setCallback(function() use ($res) { // csv output $csv_handle = fopen('php://output', 'w+'); fputcsv($csv_handle, [ 'Order #', 'Order Date and Time', 'Date and Time Rejected', 'Enrollee', 'Reason', 'Contact Person', 'Remarks', 'Dispatched By', 'Type of Service', ]); foreach ($res as $row) { fputcsv($csv_handle, $row); } fclose($csv_handle); }); $filename = 'reject_' . $date_start->format('Ymd') . '_' . $date_end->format('Ymd') . '.csv'; $resp->setStatusCode(200); $resp->headers->set('Content-Type', 'text/csv; charset=utf-8'); $resp->headers->set('Content-Disposition', 'attachment; filename="' . $filename . '"'); return $resp; /* return $this->json([ 'result' => $res, 'counter' => $counter, ]); */ } }