This commit is contained in:
izuddin
2024-09-23 17:22:15 +07:00
parent 1e4155ff8a
commit d5212f1f89
6 changed files with 489 additions and 1 deletions
@@ -0,0 +1,119 @@
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
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\DataUploadBosOmspan;
use App\Models\UploadData;
use App\Imports\ImportDataBos;
use Illuminate\Support\Facades\URL;
class UploadDataController extends Controller
{
public function __construct(){
$this->siteTitle = "Upload Data";
parent::__construct();
$this->setIconTitle("fa fa-share");
}
public function index(Request $request)
{
$method = $request->method();
$this->setTitle("Upload Data");
$this->setSubtitle("Upload File");
$this->setIconTitle("fas fa-upload");
if ($request->isMethod('post')) {
$req = $request->all();
try{
$this->validate($request, [
'file' => 'required|mimes:xls,xlsx',
]);
$file = $request->file('file');
$subJenisDana = $request->optJenisDana;
$ta = $request->ta;
$tujuan_upload = 'uploadFiles';
$file->move($tujuan_upload,$file->getClientOriginalName());
DB::beginTransaction();
// DataUploadBosOmspan::truncate();
Excel::import(new ImportDataBos($ta), $tujuan_upload."/".$file->getClientOriginalName());
DB::commit();
return redirect(URL::to("/admin/upload-data/"))->with('success','Data berhasil diupload, Silahkan validasi data terlebih dahulu!');
}
catch(\Exception $e)
{
// throw new \Exception($e->getMessage());
DB::rollBack();
abort(500, $e->getMessage());
// return redirect(URL::to("/upload-data/".$typeDana))->with('error',$e->getMessage());
}
}
$this->siteTitle = "Upload Data";
return view('admin.upload_data.index');
}
public function uploadDatatable(Request $request)
{
$post = $request->all();
$offset = $post["start"];
$limit = $post["length"];
$src = isset($post["search"])?$post["search"]["value"]:"";
$dataFilter=0;
$data = DataUploadBosOmspan::orderBy("created_at","ASC");
if (!empty($src)){
// $data->whereRaw("(LOWER(kode_skpd) LIKE '%".strtolower($src)."%'
// OR LOWER(nama_skpd) LIKE '%".strtolower($src)."%'
// OR LOWER(kode_rekening) LIKE '%".strtolower($src)."%'
// OR LOWER(nama_rekening) LIKE '%".strtolower($src)."%')");
}
$dataFilter = $data->count();
$dataTotal = DataUploadBosOmspan::count();
return response()->json([
"recordsTotal" => $dataTotal,
"recordsFiltered" => $dataFilter,
"data"=> $data->skip($offset)->take($limit)->get()
]);
}
public function uploadValidate(Request $request)
{
try{
DB::beginTransaction();
UploadData::where("tahun",getTA())->delete();
DB::statement("INSERT INTO upload_data(tahun,kode_skpd,kode_rekening,total_lra)
SELECT tahun,kode_skpd,kode_rekening,total_lra FROM tmp_upload_data ");
$skpds = DB::table('tmp_upload_data')->distinct()->select('kode_skpd')->get();
foreach($skpds as $skpd){
// CEK MAIN INDIKATOR
$txIndikator = TxIndikator::firstOrCreate(["tahun"=>getTA(),"kode_skpd"=>$skpd->kode_skpd],[
"status_approval"=>3, // Operator
]);
$calculation = new CalculationIndikator($txIndikator->id);
$calculation->rasio();
$calculation->summary();
}
TempUploadData::truncate();
DB::commit();
return redirect(URL::to("/admin/upload-data"))->with('success','Data Realisasi belanja berhasil diupload.');
}catch(\Exception $e){
throw new \Exception($e->getMessage());
DB::rollBack();
return redirect(URL::to("/admin/upload-data"))->with('error',$e->getMessage());
}
}
}
+69
View File
@@ -0,0 +1,69 @@
<?php
namespace App\Imports;
use App\Models\DataUploadBosOmspan;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\Importable;
use Maatwebsite\Excel\Concerns\WithStartRow;
use Maatwebsite\Excel\Concerns\WithSkipDuplicates;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
use Illuminate\Support\Facades\Auth;
class ImportDataBos implements WithColumnFormatting, ToModel, WithStartRow
{
use Importable;
protected $ta;
public function __construct($ta){
$this->ta = $ta;
}
public function startRow(): int
{
return 2;
}
public function model(array $row)
{
// if (!isset($row[0])) {
// return null;
// }
var_dump($row); exit;
$data = [
"no"=>$row[0],
"kanwil"=>$row[1],
"kppn"=>$row[2],
"lokasi_kewenangan"=>$row[3],
"lokasi_sekolah"=>$row[4],
"no_tgl_sk"=>$row[5],
"jenis_bos"=>$row[6],
"tahap"=>$row[7],
"gelombang"=>$row[8],
"npsn_nama_sekolah"=>$row[9],
"jenis_satuan_pendidikan"=>$row[10],
"status_sekolah"=>$row[11],
"bank"=>$row[12],
"no_rekening_nama_rekening"=>$row[13],
"npsn"=>$row[14],
"rekening"=>$row[15],
"nama"=>$row[16],
"jenjang_sekolah"=>$row[17],
"no_tgl_sp2d_detail"=>$row[18],
"no_sp2d"=>$row[19],
"tgl_sp2d"=>$row[20],
"status"=>$row[21],
"nilai"=>$row[22],
"pagu"=>$row[23],
"jmlh_siswa"=>$row[24],
"ket_retur"=>$row[25]
];
return new DataUploadBosOmspan($data);
}
public function columnFormats(): array
{
return [
'Tgl' => NumberFormat::FORMAT_DATE_DDMMYYYY,
];
}
}
+17
View File
@@ -0,0 +1,17 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Yajra\Oci8\Eloquent\OracleEloquent as Eloquent;
use Illuminate\Support\Facades\Auth;
class DataUploadBosOmspan extends Eloquent
{
use HasFactory;
protected $connection = 'Samasa';
protected $table = 'SAMASA.DATA_UPLOAD_BOS_OMSPAN';
protected $guarded = [];
public $timestamps = false;
}
@@ -0,0 +1,59 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateImportBosTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('data_upload_bos_omspan', function (Blueprint $table) {
$table->id();
$table->smallInteger("no")->nullable();
$table->string("kanwil",100);
$table->string('kppn',50);
$table->string('lokasi_kewenangan',50);
$table->string('lokasi_sekolah',20);
$table->string('no_tgl_sk',50);
$table->string('jenis_bos',20);
$table->smallInteger('tahap');
$table->smallInteger('gelombang');
$table->string('npsn_nama_sekolah',100);
$table->string('jenis_satuan_pendidikan',10);
$table->string('status_sekolah',30);
$table->string('bank',30);
$table->string('no_rekening_nama_rekening',150);
$table->string('npsn',30);
$table->string('rekening',30);
$table->string('nama',10);
$table->string('jenjang_sekolah',10);
$table->string('no_tgl_sp2d_detail',100);
$table->string('no_sp2d',50);
$table->date('tgl_sp2d');
$table->string('status',50);
$table->decimal('nilai',18,2);
$table->decimal('pagu',18,2);
$table->integer('jmlh_siswa',50);
$table->string('ket_retur',100)->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('data_upload_bos_omspan');
}
}
@@ -0,0 +1,216 @@
@php
$siteBreadcumb = [
["url"=>"/realisasi-belanja","label"=>$siteTitle],
["url"=>"/realisasi-belanja/create","label"=>$sitesubTitle]
];
$jenisDana = ["All","CHT"];
@endphp
@extends('layouts.empty')
@section('styles')
<!-- DataTables -->
<link rel="stylesheet" href="{{ $baseUrl }}/AdminLTE-3.2.0/plugins/datatables-bs4/css/dataTables.bootstrap4.min.css">
<link rel="stylesheet" href="{{ $baseUrl }}/AdminLTE-3.2.0/plugins/datatables-responsive/css/responsive.bootstrap4.min.css">
<link rel="stylesheet" href="{{ $baseUrl }}/AdminLTE-3.2.0/plugins/datatables-buttons/css/buttons.bootstrap4.min.css">
<link rel="stylesheet" href="{{ $baseUrl }}/AdminLTE-3.2.0/plugins/datatables-fixedcolumns/css/fixedColumns.bootstrap4.min.css">
@endsection
@section('content')
<div class="card card-default">
<div class="card-header">
<h2 class="card-title"><i class="fa fa-th-list mr-2"></i> {{ $sitesubTitle }}</h2>
<div class="card-tools">
<button type="button" class="btn btn-tool" data-card-widget="collapse" title="Collapse">
<i class="fas fa-minus"></i>
</button>
</div>
</div>
<div class="card-body">
<form id="uploadData" action="{{ url("/admin/upload-data") }}" method="POST" autocomplete="off" enctype="multipart/form-data">
@csrf
<div class="form-group">
<label>Tahun</label>
<input class="form-control form-control-sm" id="srcTA" name="ta" value="{{ getTA() }}" readonly>
</div>
<div class="form-group">
<label>File</label>
<input class="form-control" type="file" name="file" required>
</div>
<div class="form-group"><button type="submit" class="btn btn-sm btn-success"><i class="fas fa-file-excel"></i> Upload File</button></div>
<p>
<strong>Format:xlsx | Columns:</strong>
"no",
"kanwil",
"kppn",
"lokasi_kewenangan",
"lokasi_sekolah",
"no_tgl_sk",
"jenis_bos",
"tahap",
"gelombang",
"npsn_nama_sekolah",
"jenis_satuan_pendidikan",
"status_sekolah",
"bank",
"no_rekening_nama_rekening",
"npsn",
"rekening",
"nama",
"jenjang_sekolah",
"no_tgl_sp2d_detail",
"no_sp2d",
"tgl_sp2d",
"status",
"nilai",
"pagu",
"jmlh_siswa",
"ket_retur"
</p>
</form>
</div>
</div>
<div class="card card-default">
<div class="card-header">
<h2 class="card-title"><i class="fa fa-check mr-2"></i> Validasi Data</h2>
<div class="card-tools">
{{-- @if(auth()->user()->can('Tambah SKPP')) --}}
<button id="upload_validated" class="btn btn-tool btn-warning"><i class="fa fa-save"></i> Upload Data</button>
{{-- @endif --}}
</div>
</div>
<div class="card-body">
<table id="tempUploadRealisasi" class="table table-striped jambo_table tblClickRow" style="width:100%">
<thead>
<tr class="headings">
<th>No</th>
<?php
$arrCol = array("Tahun", "Kode SKPD", "Nama SKPD", "Kode Rekening","Nama Rekening", "LRA");
foreach($arrCol as $rowCol){
echo "<th>$rowCol</th>";
}
?>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
@endsection
@section('scripts')
<script src="{{ $baseUrl }}/AdminLTE-3.2.0/plugins/datatables/jquery.dataTables.min.js"></script>
<script src="{{ $baseUrl }}/AdminLTE-3.2.0/plugins/datatables-bs4/js/dataTables.bootstrap4.min.js"></script>
<script src="{{ $baseUrl }}/AdminLTE-3.2.0/plugins/datatables-responsive/js/dataTables.responsive.min.js"></script>
<script src="{{ $baseUrl }}/AdminLTE-3.2.0/plugins/datatables-responsive/js/responsive.bootstrap4.min.js"></script>
<script src="{{ $baseUrl }}/AdminLTE-3.2.0/plugins/datatables-buttons/js/dataTables.buttons.min.js"></script>
<script src="{{ $baseUrl }}/AdminLTE-3.2.0/plugins/datatables-buttons/js/buttons.bootstrap4.min.js"></script>
<script src="{{ $baseUrl }}/AdminLTE-3.2.0/plugins/jszip/jszip.min.js"></script>
<script src="{{ $baseUrl }}/AdminLTE-3.2.0/plugins/pdfmake/pdfmake.min.js"></script>
<script src="{{ $baseUrl }}/AdminLTE-3.2.0/plugins/pdfmake/vfs_fonts.js"></script>
<script src="{{ $baseUrl }}/AdminLTE-3.2.0/plugins/datatables-buttons/js/buttons.html5.min.js"></script>
<script src="{{ $baseUrl }}/AdminLTE-3.2.0/plugins/datatables-buttons/js/buttons.print.min.js"></script>
<script src="{{ $baseUrl }}/AdminLTE-3.2.0/plugins/datatables-buttons/js/buttons.colVis.min.js"></script>
<script src="{{ $baseUrl }}/AdminLTE-3.2.0/plugins/datatables-fixedcolumns/js/dataTables.fixedColumns.min.js"></script>
<script src="{{ $baseUrl }}/AdminLTE-3.2.0/plugins/datatables-fixedcolumns/js/fixedColumns.bootstrap4.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#uploadData").on("submit",function(e){
e.preventDefault();
$("body").append("<div class='loading'></div>");
return e.currentTarget.submit();
});
$(document).on("click","#upload_validated",function (e){
e.preventDefault();
let test = Swal.fire({
title: 'Data akan diUpload?',
showDenyButton: true,
showCancelButton: false,
confirmButtonText: 'Ya',
denyButtonText: "Tidak",
icon: "warning",
}).then((result) => {
/* Read more about isConfirmed, isDenied below */
if (result.isConfirmed) {
$("body").append("<div class='loading'></div>");
location.href='{{ url('/admin/upload-data/proses') }}';
}
})
});
$('#tblJenisBelanja').DataTable( {
"processing": true,
"serverSide": false,
"ordering": false,
"autoWidth": false,
"lengthMenu": [
[ 10, 25, 50 ],
[ "10", "25", "50" ]
],
"paging": true, // Table pagination
})
var dtTable = $('#tempUploadRealisasi').DataTable( {
"processing": true,
"serverSide": true,
"ordering": false,
"autoWidth": false,
"ajax": {
url: "{{ $baseUrl }}/admin/upload-data/datatable",
type: "POST",
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
data: function (d) {
}
},
"columnDefs": [
//{ className: "td-nowrap", "targets": [ 1 ] }
],
"lengthMenu": [
[ 10, 25, 50 ],
[ "10", "25", "50" ]
],
"paging": true, // Table pagination
"columns": [
{ "data": null},
{ "data": "tahun", "width": "50px" },
{ "data": "kode_skpd", "className":"text-center", "defaultContent":"-" },
{ "data": "nama_skpd", "className":"text-left", "defaultContent":"-" },
{ "data": "kode_rekening", "className":"text-center", "defaultContent":"-" },
{ "data": "nama_rekening", "className":"text-left", "defaultContent":"-" },
{ "data": "total_lra", "className":"text-right", "defaultContent":"0" },
],
"rowCallback": function(nRow, aData, iDisplayIndex, iDisplayIndexFull, oSettings) {
let info = dtTable.page.info();
let numStart = info.page;
let index = (numStart * dtTable.page.len()) + iDisplayIndex + 1;
$("td:eq(0)", nRow).html(index);
$("td:eq(6)", nRow).html(separateNumberIndo(aData["total_lra"]));
return nRow;
},
"drawCallback": function( settings ) {
if (dtTable.page.info().recordsTotal == 0){
$("#upload_validated").prop("disabled", true)
}
},
"language": {
"lengthMenu": "Tampil _MENU_ data per Halaman",
"zeroRecords": "Data tidak ditemukan!",
"info": "Halaman _PAGE_ dari _PAGES_ Halaman ( _TOTAL_ Data )",
"infoEmpty": "Data tidak tersedia",
"infoFiltered": "(Disaring dari _MAX_ Data)",
"paginate": {
"previous": "<i class='fas fa-angle-double-left'></i>",
"next": "<i class='fas fa-angle-double-right'></i>",
},
"processing": "<div class='loading'></div>",
},
scrollX:true,
});
});
</script>
@endsection
+8
View File
@@ -21,6 +21,7 @@ use App\Http\Controllers\Admin\MstJenisBelanjaController;
use App\Http\Controllers\Admin\MstSubJenisBelanjaController; use App\Http\Controllers\Admin\MstSubJenisBelanjaController;
use App\Http\Controllers\Admin\MstSatuanController; use App\Http\Controllers\Admin\MstSatuanController;
use App\Http\Controllers\Admin\PengaturanController; use App\Http\Controllers\Admin\PengaturanController;
use App\Http\Controllers\Admin\UploadDataController;
use App\Http\Controllers\NotifikasiController; use App\Http\Controllers\NotifikasiController;
Route::get('/', [AuthController::class, 'showFormLogin']); Route::get('/', [AuthController::class, 'showFormLogin']);
@@ -73,6 +74,13 @@ Route::group(['middleware' => 'auth'], function () {
Route::post('Pengaturan/adjust-anggaran', [PengaturanController::class,'rekonAnggaran']); Route::post('Pengaturan/adjust-anggaran', [PengaturanController::class,'rekonAnggaran']);
Route::post('Pengaturan/adjust-akb-pendapatan', [PengaturanController::class,'adjustAKBPendapatan']); Route::post('Pengaturan/adjust-akb-pendapatan', [PengaturanController::class,'adjustAKBPendapatan']);
Route::group(['prefix' => 'upload-data'], function () {
Route::get('/', [UploadDataController::class,'index']);
Route::post('/', [UploadDataController::class,'index']);
Route::post('/datatable', [UploadDataController::class,'uploadDatatable']);
Route::get('/proses', [UploadDataController::class,'uploadValidate']);
});
}); });
Route::get('users/change-password/{userId}', [MstPenggunaController::class,'changePass'])->name("users.changepass"); Route::get('users/change-password/{userId}', [MstPenggunaController::class,'changePass'])->name("users.changepass");