<?php
namespace App\Controller\Backend;
use App\Controller\Base\BaseController;
use App\Repository\THeaderRepository;
use App\Repository\TPostingLaporanRepository;
use Doctrine\Persistence\ManagerRegistry;
use Dompdf\Dompdf;
use Dompdf\Options;
use Symfony\Component\Routing\Annotation\Route;
use Kematjaya\Breadcrumb\Lib\Builder as BreacrumbBuilder;
use Kematjaya\Export\Manager\ManagerInterface;
use Kematjaya\Export\Processor\Excel\SpreadsheetFromArrayProcessor;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Security;
class LaporanController extends BaseController
{
private $pageName = 'laporan';
/**
* @Route("/laporan",name="laporan", methods={"GET", "POST"})
*/
public function index(Request $request, BreacrumbBuilder $builder, Security $security, THeaderRepository $tHeaderRepo)
{
$builder->add('Dashboard ', "dashboard", array(), " <i class='fa fa-home'></i>");
$builder->add('Laporan');
$group = ($request->get('group')) ? $request->get('group') : 'kategori_plant';
$tanggal_awal = ($request->get('tanggal_awal')) ? $request->get('tanggal_awal') : date("Y") . "-01-01";
$tanggal_akhir = ($request->get('tanggal_akhir')) ? $request->get('tanggal_akhir') : date("Y-m-d");
$tahun = ($request->get('tahun')) ? $request->get('tahun') : date("Y");
$tipe_tahun = ($request->get('tipe_tahun')) ? $request->get('tipe_tahun') : 1;
$sumber_dana = ($request->get('sumber_dana')) ? $request->get('sumber_dana') : null;
// print_r($group); exit;
$last_update = $tHeaderRepo->findOneBy(['id' => '4']);
$user = $security->getUser()->getRoles();
// $data = $this->getTabelReport($group);
$data = $this->getTabelLaporan('v_cleansing_pk_vendor', $group, 'tgl_verifikasi_pr', $tanggal_awal, $tanggal_akhir, $tipe_tahun, $tahun, $sumber_dana);
$result = [];
foreach ($data as $key => $value) {
$result[$value['sumber_dana']][$key] = $value;
}
$result = array_reverse($result);
// print_r($result); exit;
// print_r($result); exit;
// print_r($this->getCardDashboard('dalam_proses',true)); exit;
return $this->render('backend/laporan/index.html.twig', [
'page_name' => $this->pageName,
'user' => $user,
'group' => $group,
'tanggal_awal' => $tanggal_awal,
'tanggal_akhir' => $tanggal_akhir,
'tipe_tahun' => $tipe_tahun,
'tahun' => $tahun,
'result' => $result,
'last_update' => ($last_update) ? $last_update->getUpdatedAt()->format("Y-m-d") : null
]);
}
/**
* @Route("/laporan/comparasi",name="laporan_comparasi")
*/
public function comparasi(Request $request, BreacrumbBuilder $builder, TPostingLaporanRepository $tPostingLaporanRepo, Security $security)
{
$builder->add('Dashboard ', "dashboard", array(), " <i class='fa fa-home'></i>");
$builder->add('Comparasi Posting Sebelumnya');
$tanggal1 = ($request->get('tanggal1')) ? new \DateTimeImmutable($request->get('tanggal1')) : null;
$tanggal2 = ($request->get('tanggal2')) ? new \DateTimeImmutable($request->get('tanggal2')) : null;
// print_r($tanggal2); exit;
$tahun = ($request->get('tahun')) ? $request->get('tahun') : date("Y");
$group = ($request->get('group')) ? $request->get('group') : 'kategori_plant';
// print_r($group); exit;
$user = $security->getUser()->getRoles();
$result1 = $tPostingLaporanRepo->findOneBy(['tahun_anggaran' => $tahun, 'tanggal' => $tanggal1]);
$result2 = $tPostingLaporanRepo->findOneBy(['tahun_anggaran' => $tahun, 'tanggal' => $tanggal2]);
$result1 = ($result1) ? json_decode($result1->getData(), true) : [];
$result2 = ($result2) ? json_decode($result2->getData(), true) : [];
$res1 = [];
foreach ($result1 as $key => $value) {
$res1[$value['sumber_dana']][$key] = $value;
}
$res1 = array_reverse($res1);
$res2 = [];
foreach ($result2 as $key => $value) {
$res2[$value['sumber_dana']][$key] = $value;
}
$res2 = array_reverse($res2);
// $res1 = ($result1) ? json_decode($result1->getData(),true) : null;
// $res2 = ($result2) ? json_decode($result2->getData(),true) : null;
// print_r($res2); exit;
//
$qb = $tPostingLaporanRepo->createQueryBuilder('t')
->select('t.tanggal, COUNT(t.id) as total')
->groupBy('t.tanggal')
->orderBy('t.tanggal', 'ASC');
$result_periode_posting = $qb->getQuery()->getResult();
return $this->render('backend/laporan/comparasi.html.twig', [
'page_name' => $this->pageName,
'user' => $user,
'tanggal1' => $tanggal1,
'tanggal2' => $tanggal2,
'group' => $group,
'tahun' => $tahun,
'result1' => $res1,
'result2' => $res2,
'result_periode_posting' => $result_periode_posting
]);
}
/**
* @Route("/dashboard/download_pengunjung",name="dashboard_download_pengunjung")
*/
public function downloadPengunjung(Request $request, ManagerInterface $managerInterface)
{
if ($request->get('download')) {
$start_date = $request->get('start_date');
$end_date = $request->get('end_date');
$conn = $this->getDoctrine()->getConnection();
$sql = "SELECT deskripsi, created_at FROM t_log WHERE reff_name = 'homepage'";
if ($start_date) {
$sql .= " and created_at >= '$start_date'";
}
if ($end_date) {
$sql .= " and created_at <= '$end_date'";
}
$sql .= "ORDER BY id desc;";
$stmt = $conn->query($sql);
$result = $stmt->fetchAllAssociative();
$data = [["Deskripsi", "Tanggal"]];
foreach ($result as $log) {
$data[] = array_values($log);
}
$arrayToExcel = $managerInterface->render($data, new SpreadsheetFromArrayProcessor('rekap pengunjung.xlsx'));
return $arrayToExcel;
}
return $this->render('backend/dashboard/download_pengunjung.html.twig');
}
/**
* @Route("/laporan/laporanDetail",name="laporan_detail")
*/
public function laporanDetail(Request $request, ManagerInterface $managerInterface)
{
$group = ($request->get('group')) ? $request->get('group') : 'kategori_plant';
$tanggal_awal = ($request->get('tanggal_awal')) ? $request->get('tanggal_awal') : date("Y") . "-01-01";
$tanggal_akhir = ($request->get('tanggal_akhir')) ? $request->get('tanggal_akhir') : date("Y-m-d");
$tahun = ($request->get('tahun')) ? $request->get('tahun') : date("Y");
$tipe_tahun = ($request->get('tipe_tahun')) ? $request->get('tipe_tahun') : 1;
$tahap = $request->get('tahap');
$nama = $request->get('nama');
$sumber_dana = $request->get('sumber_dana');
if ($request->get('download')) {
if ($tahap == 'tahap_pemilihan_penyedia') {
$data = [["no" => "NO", "no_pr" => "NO PR", "plant" => "PLAN", "sumber_dana" => "SUMEBR DANA", 'tahun_anggaran' => "Tahun Anggaran", "anggaran" => "NILAI ANGGARAN", "no_pk" => "NO PK", "no_pp" => "NO PP"]];
} else {
$data = [["no" => "NO", "no_pr" => "NO PR", "plant" => "PLAN", "sumber_dana" => "SUMEBR DANA", 'tahun_anggaran' => "TAHUN ANGGARAN", "anggaran" => "NILAI ANGGARAN", "no_pk" => "NO PK"]];
}
$table = 'v_cleansing_pk_vendor';
$kolom_periode = 'tgl_verifikasi_pr';
$result = $this->getDataTableDetail(null, null, $_POST, $group, $nama, $tahap, $sumber_dana, $table, $kolom_periode, $tanggal_awal, $tanggal_akhir, $tipe_tahun, $tahun);
foreach ($result as $value) {
$data[] = array_values($value);
}
$arrayToExcel = $managerInterface->render($data, new SpreadsheetFromArrayProcessor('download_' . $tahap . '.xlsx'));
return $arrayToExcel;
} else {
return $this->render('backend/laporan/laporan_detail.html.twig', [
'group' => $group,
'tahap' => $tahap,
'nama' => $nama,
'sumber_dana' => $sumber_dana,
'tanggal_awal' => $tanggal_awal,
'tanggal_akhir' => $tanggal_akhir,
'tipe_tahun' => $tipe_tahun,
'tahun' => $tahun,
]);
}
}
/**
* @Route("/laporan/detail_data_table", name="laporan_detail_datatable", methods={"GET", "POST"})
*/
public function dataset_table(Request $request)
{
$item_per_page = $_POST['length'];
$page = ($_POST['start'] / $item_per_page) + 1;
$page = ($page - 1) * 10;
$group = ($request->get('group')) ? $request->get('group') : 'kategori';
$tanggal_awal = ($request->get('tanggal_awal')) ? $request->get('tanggal_awal') : date("Y") . "-01-01";
$tanggal_akhir = ($request->get('tanggal_akhir')) ? $request->get('tanggal_akhir') : date("Y-m-d");
$tahap = $request->get('tahap');
$nama = $request->get('nama');
$sumber_dana = $request->get('sumber_dana');
$tahun = ($request->get('tahun')) ? $request->get('tahun') : date("Y");
$tipe_tahun = ($request->get('tipe_tahun')) ? $request->get('tipe_tahun') : 1;
$table = 'v_cleansing_pk_vendor';
$kolom_periode = 'tgl_verifikasi_pr';
$detail = $this->getDataTableDetail(10, $page, $_POST, $group, $nama, $tahap, $sumber_dana, $table, $kolom_periode, $tanggal_awal, $tanggal_akhir, $tipe_tahun, $tahun);
$jumlah = count($this->getDataTableDetail(null, null, $_POST, $group, $nama, $tahap, $sumber_dana, $table, $kolom_periode, $tanggal_awal, $tanggal_akhir, $tipe_tahun, $tahun));
$arrJson['aaData'] = $detail;
$arrJson['iTotalRecords'] = $jumlah;
$arrJson['iTotalDisplayRecords'] = $jumlah;
return new JsonResponse($arrJson);
}
/**
* @Route("/laporan/export_pdf",name="laporan_export_pdf", methods={"GET", "POST"})
*/
public function export_pdf(Request $request, BreacrumbBuilder $builder, Security $security, THeaderRepository $tHeaderRepo)
{
$last_update = $tHeaderRepo->findOneBy(['id' => '4']);
$data = json_decode($request->getContent(), true);
$group = ($data['group']) ? $data['group'] : 'kategori_plant';
$tanggal_awal = ($data['tanggal_awal']) ? $data['tanggal_awal'] : date("Y") . "-01-01";
$tanggal_akhir = ($data['tanggal_akhir']) ? $data['tanggal_akhir'] : date("Y-m-d");
$tahun = ($data['tahun']) ? $data['tahun'] : date("Y");
$tipe_tahun = ($data['tipe_tahun']) ? $data['tipe_tahun'] : 1;
$sumber_dana = null;
// print_r($group); exit;
$user = $security->getUser()->getRoles();
// $data = $this->getTabelReport($group);
$data = $this->getTabelLaporan('v_cleansing_pk_vendor', $group, 'tgl_verifikasi_pr', $tanggal_awal, $tanggal_akhir, $tipe_tahun, $tahun, $sumber_dana);
$result = [];
foreach ($data as $key => $value) {
$result[$value['sumber_dana']][$key] = $value;
}
$result = array_reverse($result);
$html = $this->renderView('backend/laporan/export_pdf.html.twig', [
'page_name' => $this->pageName,
'user' => $user,
'group' => $group,
'tanggal_awal' => $tanggal_awal,
'tanggal_akhir' => $tanggal_akhir,
'tipe_tahun' => $tipe_tahun,
'tahun' => $tahun,
'result' => $result,
'last_update' => ($last_update) ? $last_update->getUpdatedAt()->format("Y-m-d") : null
]);
$options = new Options();
$options->set('isRemoteEnabled', true); // supaya bisa load css/js external
$dompdf = new Dompdf($options);
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'landscape');
$dompdf->render();
return new Response(
$dompdf->stream('laporan.pdf', ["Attachment" => false]),
200,
['Content-Type' => 'application/pdf']
);
}
// public function exportPdfDompdf(): Response
// {
// $html = $this->renderView('report/export.html.twig', [
// 'judul' => 'Laporan PDF dengan Dompdf',
// ]);
// $options = new Options();
// $options->set('isRemoteEnabled', true); // supaya bisa load css/js external
// $dompdf = new Dompdf($options);
// $dompdf->loadHtml($html);
// $dompdf->setPaper('A4', 'portrait');
// $dompdf->render();
// return new Response(
// $dompdf->stream('laporan.pdf', ["Attachment" => false]),
// 200,
// ['Content-Type' => 'application/pdf']
// );
// }
}