332 lines
12 KiB
PHP
332 lines
12 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Http;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Maatwebsite\Excel\Facades\Excel;
|
|
use App\Models\Sps_pendapatan;
|
|
use App\Models\Tropd;
|
|
use App\Models\BelanjaRealisasi;
|
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
|
|
|
class JadwalSalurdanaController extends Controller
|
|
{
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->setTitle("Jadwal Salur Dana");
|
|
$this->setIconTitle("fa fa-calendar-alt");
|
|
}
|
|
|
|
/*
|
|
public function index()
|
|
{
|
|
return view('jadwal_salurdana.index');
|
|
}
|
|
*/
|
|
|
|
protected function filterJadwalSalur($request)
|
|
{
|
|
$ta = getTA();
|
|
|
|
$post = $request->all();
|
|
$typeDana = isset($post["jenis_dana"]) ? strtoupper($post["jenis_dana"]) : "";
|
|
$idSPS = isset($post["id_sps"]) ? $post["id_sps"] : "";
|
|
$sqlstr = Sps_pendapatan::queryJadwalSalurDana($ta);
|
|
|
|
if (!empty($idSPS)) {
|
|
$sqlstr .= " AND x.KODE_REKENING='$idSPS'";
|
|
}
|
|
|
|
if (!empty($typeDana)) {
|
|
$kodeRekening = "'" . implode("','", getKodeRekInduk($typeDana)) . "'";
|
|
$sqlstr .= " AND SUBSTR(x.kode_rekening,1,12) IN ($kodeRekening)";
|
|
}
|
|
|
|
return $sqlstr;
|
|
}
|
|
|
|
protected function filterBelanja($request, $typeDana)
|
|
{
|
|
$ta = getTA();
|
|
|
|
$post = $request->all();
|
|
$src = isset($post["src"]) ? $post["src"] : "";
|
|
$idSPS = isset($post["id_sps"]) ? $post["id_sps"] : "";
|
|
$skpd = isset($post["skpd"]) ? $post["skpd"] : "";
|
|
|
|
$where = "";
|
|
if (!empty($typeDana)) {
|
|
$where = $typeDana == "cht" ? " AND x.jenis_dana = 'DBH' AND lower(x.NAMA_SUBJENIS_DANA) = 'cht' " : " AND x.jenis_dana = '$typeDana'";
|
|
}
|
|
$where .= !empty($idSPS) ? " AND x.kode_rekening='$idSPS' " : "";
|
|
|
|
$sqlstr = 'SELECT x.kode_skpd, x.nama_skpd, x.kode_rsk, x.nama_rsk, x.kode_rekening, x.nama_rekening, x.jumlah_anggaran, y.*
|
|
FROM VW_BELANJA_REALISASI x
|
|
LEFT JOIN MV_ASYNC_AKB_REALISASI y
|
|
ON x.KODE_RSK = y.I_IDRSK AND x.TAHUN_ANGGARAN = y.C_ANGG_TAHUN
|
|
WHERE x.TAHUN_ANGGARAN = \'' . $ta . '\'' . $where;
|
|
|
|
if (getRole() == "skpd") {
|
|
$sqlstr .= " AND KODE_SKPD='" . Auth::user()->nrk . "'";
|
|
} elseif (getRole() == "walikota") {
|
|
$id = Tropd::where("C_OPD", Auth::user()->nrk)->first()["i_id"];
|
|
$sqlstr .= " AND KODE_SKPD IN (SELECT C_OPD FROM NEWSIPKD.TROPD WHERE I_IDINDUK=" . $id . ")";
|
|
} else {
|
|
if ($skpd) {
|
|
$sqlstr .= " AND KODE_SKPD='$skpd'";
|
|
}
|
|
}
|
|
|
|
return $sqlstr;
|
|
}
|
|
|
|
public function datatableSalur(Request $request)
|
|
{
|
|
$post = $request->all();
|
|
$offset = $post["start"];
|
|
$limit = $post["length"];
|
|
|
|
$sqlstr = $this->filterJadwalSalur($request);
|
|
$dataTotal = count(DB::select(DB::raw($sqlstr)));
|
|
|
|
$sqlLimit = $limit > 0 ? " OFFSET " . $offset . " ROWS FETCH NEXT " . $limit . " ROWS ONLY " : "";
|
|
$data = DB::select(DB::raw($sqlstr . 'ORDER BY x.kode_rekening ' . $sqlLimit));
|
|
$dataFilter = count(DB::select(DB::raw($sqlstr)));
|
|
|
|
return response()->json([
|
|
"recordsTotal" => $dataTotal,
|
|
"recordsFiltered" => $dataFilter,
|
|
"data" => $data
|
|
]);
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
return view("jadwal_salurdana.index");
|
|
}
|
|
|
|
public function datatableBelanja(Request $request)
|
|
{
|
|
$post = $request->all();
|
|
$offset = $post["start"];
|
|
$limit = $post["length"];
|
|
$typeDana = $post["jenis_dana"];
|
|
|
|
$sqlstr = $this->filterBelanja($request, $typeDana);
|
|
|
|
$sqlLimit = $limit > 0 ? " OFFSET " . $offset . " ROWS FETCH NEXT " . $limit . " ROWS ONLY " : "";
|
|
$data = DB::select(DB::raw($sqlstr . ' ORDER BY x.kode_skpd,x.kode_rsk ' . $sqlLimit));
|
|
$dataTotal = count(DB::select(DB::raw($sqlstr)));
|
|
$dataFilter = count(DB::select(DB::raw($sqlstr)));
|
|
|
|
return response()->json([
|
|
"recordsTotal" => $dataTotal,
|
|
"recordsFiltered" => $dataFilter,
|
|
"data" => $data
|
|
]);
|
|
}
|
|
|
|
protected function exportJadwalSalur($request)
|
|
{
|
|
$sqlstr = $this->filterJadwalSalur($request);
|
|
$sqlstr .= " ORDER BY kode_rekening";
|
|
|
|
$data = DB::select(DB::raw($sqlstr));
|
|
$data = json_decode(json_encode($data), true);
|
|
|
|
$spreadsheet = new Spreadsheet();
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
$sheet->setTitle('Jadwal Salur');
|
|
|
|
$sheet->setCellValue('A1', 'Kode Rekening');
|
|
$sheet->setCellValue('B1', 'Nama Rekening');
|
|
$alpha = range("A", "Z");
|
|
$colIndex = 2;
|
|
// Nama Kolom bulan
|
|
$bulans = GetBulan();
|
|
foreach ($bulans as $bulan) {
|
|
$sheet->setCellValue($alpha[$colIndex] . '1', $bulan);
|
|
$colIndex++;
|
|
$sheet->mergeCells($alpha[$colIndex] . '1' . ':' . $alpha[$colIndex] . '1');
|
|
$colIndex++;
|
|
}
|
|
$sheet->setCellValue(getAlphabetCell($colIndex) . '1', "Total");
|
|
$sheet->mergeCells(getAlphabetCell($colIndex) . '1' . ':' . getAlphabetCell($colIndex + 1) . '1');
|
|
$sheet->mergeCells('A1:A2');
|
|
$sheet->mergeCells('B1:B2');
|
|
$colIndex++;
|
|
|
|
// Nama Kolom Jadwal dan Realisasi
|
|
$colName = "Realisasi";
|
|
for ($i = 2; $i <= $colIndex; $i++) {
|
|
$colName = $colName == "Jadwal" ? "Realisasi" : "Jadwal";
|
|
$sheet->setCellValue(getAlphabetCell($i) . '2', $colName);
|
|
}
|
|
|
|
// Data Kolom Bulan dan Realisasi
|
|
$rows = 3;
|
|
foreach ($data as $val) {
|
|
$sheet->setCellValue('A' . $rows, $val["kode_rekening"]);
|
|
$sheet->setCellValue('B' . $rows, $val["nama_rekening"]);
|
|
$totalJadwalSalur = 0;
|
|
$totalRealisasi = 0;
|
|
$currIndex = 2;
|
|
for ($i = 1; $i <= 12; $i++) {
|
|
$sheet->setCellValue(getAlphabetCell($currIndex) . $rows, $val["spsbulan" . $i]);
|
|
$totalJadwalSalur += $val["spsbulan" . $i];
|
|
$currIndex++;
|
|
$sheet->setCellValue(getAlphabetCell($currIndex) . $rows, $val["real" . $i]);
|
|
$totalRealisasi += $val["real" . $i];
|
|
$currIndex++;
|
|
}
|
|
$sheet->setCellValue(getAlphabetCell($currIndex) . $rows, $totalJadwalSalur);
|
|
$sheet->setCellValue(getAlphabetCell($currIndex + 1) . $rows, $totalRealisasi);
|
|
|
|
$rows++;
|
|
}
|
|
|
|
// TOTAL BAWAH
|
|
$sheet->setCellValue("A" . $rows, "TOTAL");
|
|
$sheet->mergeCells('A' . $rows . ':' . 'B' . $rows);
|
|
for ($x = 2; $x <= $colIndex; $x++) {
|
|
$strAlpha = getAlphabetCell($x);
|
|
$SUMRANGE = $strAlpha . "3:" . $strAlpha . ($rows - 1);
|
|
$sheet->setCellValue($strAlpha . $rows, "=SUM($SUMRANGE)");
|
|
}
|
|
|
|
return $spreadsheet;
|
|
}
|
|
|
|
public function download(Request $request)
|
|
{
|
|
$spreadsheet = $this->exportJadwalSalur($request);
|
|
|
|
$fileName = 'Jadwal-salur-dana.xlsx';
|
|
$writer = new Xlsx($spreadsheet);
|
|
$writer->save("downloadFiles/" . $fileName);
|
|
$headers = [
|
|
'Content-Type' => 'application/vnd.ms-excel',
|
|
'Content-Disposition' => 'attachment;filename=' . $fileName
|
|
];
|
|
|
|
return response()->download("downloadFiles/" . $fileName, $fileName, $headers);
|
|
}
|
|
|
|
|
|
public function downloadAll(Request $request)
|
|
{
|
|
$post = $request->all();
|
|
|
|
$fileName = 'Jadwal-salur-belanja-' . date("Ymd") . '.xlsx';
|
|
|
|
$spreadsheet = $this->exportJadwalSalur($request);
|
|
$spreadsheet->createSheet();
|
|
$spreadsheet->setActiveSheetIndex(1);
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
|
|
$sheet->setTitle('Akb dan Realisasi');
|
|
$sheet->setCellValue('A1', 'KODE SKPD');
|
|
$sheet->setCellValue('B1', 'NAMA SKPD');
|
|
$sheet->setCellValue('C1', 'KODE RSK');
|
|
$sheet->setCellValue('D1', 'NAMA RSK');
|
|
$sheet->setCellValue('E1', 'KODE REKENING');
|
|
$sheet->setCellValue('F1', 'NAMA REKENING');
|
|
|
|
$alpha = range("A", "Z");
|
|
$jmlAlpha = count($alpha);
|
|
for ($i = 0; $i < $jmlAlpha; $i++) {
|
|
$alpha[] = "A" . $alpha[$i];
|
|
}
|
|
|
|
$colIndex = 6;
|
|
// Nama Kolom bulan
|
|
$bulans = GetBulan();
|
|
foreach ($bulans as $bulan) {
|
|
$sheet->setCellValue($alpha[$colIndex] . '1', $bulan);
|
|
$colIndex++;
|
|
$sheet->mergeCells($alpha[$colIndex] . '1' . ':' . $alpha[$colIndex] . '1');
|
|
$colIndex++;
|
|
}
|
|
$sheet->setCellValue(getAlphabetCell($colIndex) . '1', "Total");
|
|
$sheet->mergeCells(getAlphabetCell($colIndex) . '1' . ':' . getAlphabetCell($colIndex + 1) . '1');
|
|
$sheet->mergeCells('A1:A2');
|
|
$sheet->mergeCells('B1:B2');
|
|
$sheet->mergeCells('C1:C2');
|
|
$sheet->mergeCells('D1:D2');
|
|
$sheet->mergeCells('E1:E2');
|
|
$sheet->mergeCells('F1:F2');
|
|
$colIndex++;
|
|
|
|
// Nama Kolom Jadwal dan Realisasi
|
|
$colName = "Realisasi";
|
|
for ($i = 2; $i <= $colIndex; $i++) {
|
|
$colName = $colName == "AKB" ? "Realisasi" : "AKB";
|
|
$sheet->setCellValue(getAlphabetCell($i) . '2', $colName);
|
|
}
|
|
|
|
|
|
$sqlstr = $this->filterBelanja($request, $post["jenis_dana"]);
|
|
|
|
$data = DB::select(DB::raw($sqlstr));
|
|
$data = json_decode(json_encode($data), true);
|
|
|
|
// Data Kolom Bulan dan Realisasi
|
|
$rows = 3;
|
|
foreach ($data as $val) {
|
|
$currIndex = 0;
|
|
$sheet->setCellValue(getAlphabetCell($currIndex) . $rows, $val["kode_skpd"]);
|
|
$currIndex++;
|
|
$sheet->setCellValue(getAlphabetCell($currIndex) . $rows, $val["nama_skpd"]);
|
|
$currIndex++;
|
|
$sheet->setCellValue(getAlphabetCell($currIndex) . $rows, $val["kode_rsk"]);
|
|
$currIndex++;
|
|
$sheet->setCellValue(getAlphabetCell($currIndex) . $rows, $val["nama_rsk"]);
|
|
$currIndex++;
|
|
$sheet->setCellValue(getAlphabetCell($currIndex) . $rows, $val["kode_rekening"]);
|
|
$currIndex++;
|
|
$sheet->setCellValue(getAlphabetCell($currIndex) . $rows, $val["nama_rekening"]);
|
|
$currIndex++;
|
|
|
|
$totalJadwalSalur = 0;
|
|
$totalRealisasi = 0;
|
|
|
|
for ($i = 1; $i <= 12; $i++) {
|
|
$sheet->setCellValue(getAlphabetCell($currIndex) . $rows, $val["v_akb_" . substr("00" . $i, -2)]);
|
|
$totalJadwalSalur += $val["v_akb_" . substr("00" . $i, -2)];
|
|
$currIndex++;
|
|
$sheet->setCellValue(getAlphabetCell($currIndex) . $rows, $val["v_bku_" . substr("00" . $i, -2)]);
|
|
$totalRealisasi += $val["v_bku_" . substr("00" . $i, -2)];
|
|
$currIndex++;
|
|
}
|
|
$sheet->setCellValue(getAlphabetCell($currIndex) . $rows, $totalJadwalSalur);
|
|
$sheet->setCellValue(getAlphabetCell($currIndex + 1) . $rows, $totalRealisasi);
|
|
|
|
$rows++;
|
|
}
|
|
|
|
// TOTAL BAWAH
|
|
$sheet->setCellValue("A" . $rows, "TOTAL");
|
|
$sheet->mergeCells('A' . $rows . ':' . 'B' . $rows);
|
|
for ($x = 2; $x <= $colIndex; $x++) {
|
|
$strAlpha = getAlphabetCell($x);
|
|
$SUMRANGE = $strAlpha . "3:" . $strAlpha . ($rows - 1);
|
|
$sheet->setCellValue($strAlpha . $rows, "=SUM($SUMRANGE)");
|
|
}
|
|
|
|
$spreadsheet->setActiveSheetIndex(0);
|
|
|
|
$writer = new Xlsx($spreadsheet);
|
|
$writer->save("downloadFiles/" . $fileName);
|
|
$headers = [
|
|
'Content-Type' => 'application/vnd.ms-excel',
|
|
'Content-Disposition' => 'attachment;filename=' . $fileName
|
|
];
|
|
return response()->download("downloadFiles/" . $fileName, $fileName, $headers);
|
|
}
|
|
}
|