From 3adf59be44e8c338cd9e59f6037fc84aa07f1f22 Mon Sep 17 00:00:00 2001 From: Afila Date: Tue, 17 May 2022 09:13:57 +0700 Subject: [PATCH] #333 Sinkronisasi Data Pembangunan OpenSID ke OpenDK. Co-authored-by: Andi Fahruddin Akas --- .../Controllers/Api/PembangunanController.php | 99 +++++++++++++++++++ .../Data/DataPembangunanController.php | 94 ++++++++++++++++++ .../PembangunanDokumentasiRequest.php | 59 +++++++++++ app/Http/Requests/PembangunanRequest.php | 61 ++++++++++++ app/Imports/SinkronPembangunan.php | 89 +++++++++++++++++ app/Imports/SinkronPembangunanDokumentasi.php | 78 +++++++++++++++ app/Models/Pembangunan.php | 46 +++++++++ app/Models/PembangunanDokumentasi.php | 41 ++++++++ catatan_rilis.md | 1 + ...17_225617_create_table_das_pembangunan.php | 81 +++++++++++++++ ...eate_table_das_pembangunan_dokumentasi.php | 66 +++++++++++++ .../views/data/pembangunan/index.blade.php | 94 ++++++++++++++++++ .../views/data/pembangunan/rincian.blade.php | 91 +++++++++++++++++ .../views/layouts/fragments/sidebar.blade.php | 5 + routes/api.php | 12 ++- routes/web.php | 9 ++ 16 files changed, 924 insertions(+), 2 deletions(-) create mode 100644 app/Http/Controllers/Api/PembangunanController.php create mode 100644 app/Http/Controllers/Data/DataPembangunanController.php create mode 100644 app/Http/Requests/PembangunanDokumentasiRequest.php create mode 100644 app/Http/Requests/PembangunanRequest.php create mode 100644 app/Imports/SinkronPembangunan.php create mode 100644 app/Imports/SinkronPembangunanDokumentasi.php create mode 100644 app/Models/Pembangunan.php create mode 100644 app/Models/PembangunanDokumentasi.php create mode 100644 database/migrations/2022_04_17_225617_create_table_das_pembangunan.php create mode 100644 database/migrations/2022_04_18_070823_create_table_das_pembangunan_dokumentasi.php create mode 100644 resources/views/data/pembangunan/index.blade.php create mode 100644 resources/views/data/pembangunan/rincian.blade.php diff --git a/app/Http/Controllers/Api/PembangunanController.php b/app/Http/Controllers/Api/PembangunanController.php new file mode 100644 index 000000000..9ec7d9e2a --- /dev/null +++ b/app/Http/Controllers/Api/PembangunanController.php @@ -0,0 +1,99 @@ +middleware('auth:api'); + } + + /** + * Tambah Data Pembangunan Sesuai OpenSID + * + * @param PendudukRequest $request + * @return \Illuminate\Http\JsonResponse + */ + public function store(PembangunanRequest $request) + { + try { + // Upload file zip temporary. + $file = $request->file('file'); + $file->storeAs('temp', $name = $file->getClientOriginalName()); + + // Temporary path file + $path = storage_path("app/temp/{$name}"); + $extract = storage_path('app/public/pembangunan/'); + + // Ekstrak file + $zip = new ZipArchive(); + $zip->open($path); + $zip->extractTo($extract); + $zip->close(); + + // Proses impor data pembangunan + (new SinkronPembangunan()) + ->queue($extract . $filecsv = Str::replaceLast('zip', 'csv', $name)); + + // Proses impor data dokumentasi pembangunan + (new SinkronPembangunanDokumentasi()) + ->queue($extract . $filecsv = Str::replaceLast('zip', 'csv', 'dokumentasi+'.$name)); + } catch (\Exception $e) { + report($e); + return back()->with('error', 'Import data gagal.'); + } + + // Hapus folder temp ketika sudah selesai + Storage::deleteDirectory('temp'); + // Hapus file excell temp ketika sudah selesai + Storage::disk('public')->delete('pembangunan/' . $filecsv); + + return response()->json([ + "message" => "Proses Sinkronisasi Data Pembangunan OpenSID sedang berjalan", + "status" => "success" + ]); + } +} diff --git a/app/Http/Controllers/Data/DataPembangunanController.php b/app/Http/Controllers/Data/DataPembangunanController.php new file mode 100644 index 000000000..1357c5bf5 --- /dev/null +++ b/app/Http/Controllers/Data/DataPembangunanController.php @@ -0,0 +1,94 @@ +ajax()) { + $desa = $request->input('desa'); + + $pembangunan = Pembangunan::when($desa, function ($q) use ($desa) { + return $desa === 'Semua' + ? $q : $q->where('kode_desa', $desa); + }) + ->with('dokumentasi'); + + return DataTables::of($pembangunan) + ->addColumn('aksi', function ($row) { + $data['detail_url'] = route('data.pembangunan.rincian', ['id' => $row->id,'kode_desa' => $row->kode_desa]); + return view('forms.aksi', $data); + })->make(); + } + } + + public function show($id) + { + # code... + } + + public function rincian($id, $kode_desa) + { + $page_title = 'Pembangunan'; + $page_description = 'Rincian Pembangunan'; + $pembangunan = Pembangunan::where('id', $id)->where('kode_desa', $kode_desa)->first(); + + return view('data.pembangunan.rincian', compact('page_title', 'page_description', 'pembangunan')); + } + + public function getrinciandata($id, $kode_desa) + { + if (request()->ajax()) { + $pembangunanDokumentasi = PembangunanDokumentasi::where('kode_desa', $kode_desa)->where('id_pembangunan', $id)->get(); + return DataTables::of($pembangunanDokumentasi) + ->addIndexColumn() + ->make(); + } + } +} diff --git a/app/Http/Requests/PembangunanDokumentasiRequest.php b/app/Http/Requests/PembangunanDokumentasiRequest.php new file mode 100644 index 000000000..f4acd838c --- /dev/null +++ b/app/Http/Requests/PembangunanDokumentasiRequest.php @@ -0,0 +1,59 @@ + 'file|mimes:zip|max:5120', + "desa_id" => ['required', 'string', new CekDesa()], + ]; + } +} diff --git a/app/Imports/SinkronPembangunan.php b/app/Imports/SinkronPembangunan.php new file mode 100644 index 000000000..364f32457 --- /dev/null +++ b/app/Imports/SinkronPembangunan.php @@ -0,0 +1,89 @@ + $value['id'], + "sumber_dana" => $value['sumber_dana'], + "lokasi" => $value['lokasi'], + "keterangan" => $value['keterangan'], + "judul" => $value['judul'], + "volume" => $value['volume'], + "tahun_anggaran" => $value['tahun_anggaran'], + "pelaksana_kegiatan" => $value['pelaksana_kegiatan'], + "status" => $value['status'], + "anggaran" => $value['anggaran'], + "perubahan_anggaran" => $value['perubahan_anggaran'], + "sumber_biaya_pemerintah" => $value['sumber_biaya_pemerintah'], + "sumber_biaya_provinsi" => $value['sumber_biaya_provinsi'], + "sumber_biaya_kab_kota" => $value['sumber_biaya_kab_kota'], + "sumber_biaya_swadaya" => $value['sumber_biaya_swadaya'], + "sumber_biaya_jumlah" => $value['sumber_biaya_jumlah'], + "manfaat" => $value['manfaat'], + "waktu" => $value['waktu'], + "foto" => $value['foto'], + "kode_desa" => (string) $value['desa_id'], + ]; + + Pembangunan::updateOrCreate([ + 'kode_desa' => $insert['kode_desa'], + 'id' => $insert['id'] + ], $insert); + } + } +} diff --git a/app/Imports/SinkronPembangunanDokumentasi.php b/app/Imports/SinkronPembangunanDokumentasi.php new file mode 100644 index 000000000..a4df5f52f --- /dev/null +++ b/app/Imports/SinkronPembangunanDokumentasi.php @@ -0,0 +1,78 @@ + $value['id'], + "id_pembangunan" => $value['id_pembangunan'], + "gambar" => $value['gambar'], + "persentase" => $value['persentase'], + "keterangan" => $value['keterangan'], + "created_at" => $value['created_at'], + "updated_at" => $value['updated_at'], + "kode_desa" => (string) $value['desa_id'], + ]; + + PembangunanDokumentasi::updateOrCreate([ + 'kode_desa' => $insert['kode_desa'], + 'id' => $insert['id'], + 'id_pembangunan' => $insert['id_pembangunan'] + ], $insert); + } + } +} diff --git a/app/Models/Pembangunan.php b/app/Models/Pembangunan.php new file mode 100644 index 000000000..15225b106 --- /dev/null +++ b/app/Models/Pembangunan.php @@ -0,0 +1,46 @@ +hasOne(PembangunanDokumentasi::class, 'id', 'id_pembangunan'); + } +} diff --git a/app/Models/PembangunanDokumentasi.php b/app/Models/PembangunanDokumentasi.php new file mode 100644 index 000000000..12f626b70 --- /dev/null +++ b/app/Models/PembangunanDokumentasi.php @@ -0,0 +1,41 @@ +integer('id', false); + $table->char('kode_desa', 13); + $table->string('lokasi', 255)->nullable(); + $table->string('sumber_dana', 255)->nullable(); + $table->string('judul', 255)->nullable(); + $table->string('slug', 255)->nullable(); + $table->string('keterangan', 255)->nullable(); + $table->string('volume', 255)->nullable(); + $table->year('tahun_anggaran')->nullable(); + $table->string('pelaksana_kegiatan', 255)->nullable(); + $table->tinyInteger('status')->nullable(); + $table->string('foto', 255)->nullable(); + $table->float('anggaran', 65, 2)->nullable(); + $table->float('perubahan_anggaran', 65, 2)->nullable(); + $table->float('sumber_biaya_pemerintah', 65, 2)->nullable(); + $table->float('sumber_biaya_provinsi', 65, 2)->nullable(); + $table->float('sumber_biaya_kab_kota', 65, 2)->nullable(); + $table->float('sumber_biaya_swadaya', 65, 2)->nullable(); + $table->float('sumber_biaya_jumlah', 65, 2)->nullable(); + $table->string('manfaat', 100)->nullable(); + $table->integer('waktu')->nullable(); + $table->timestamps(); + $table->unique(['id', 'kode_desa']); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('das_pembangunan'); + } +} diff --git a/database/migrations/2022_04_18_070823_create_table_das_pembangunan_dokumentasi.php b/database/migrations/2022_04_18_070823_create_table_das_pembangunan_dokumentasi.php new file mode 100644 index 000000000..8e86f5b64 --- /dev/null +++ b/database/migrations/2022_04_18_070823_create_table_das_pembangunan_dokumentasi.php @@ -0,0 +1,66 @@ +integer('id'); + $table->integer('id_pembangunan'); + $table->char('kode_desa', 13); + $table->string('gambar', 255)->nullable(); + $table->string('persentase', 255)->nullable(); + $table->string('keterangan', 255)->nullable(); + $table->timestamps(); + $table->unique(['id', 'kode_desa', 'id_pembangunan']); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('table_das_pembangunan_dokumentasi'); + } +} diff --git a/resources/views/data/pembangunan/index.blade.php b/resources/views/data/pembangunan/index.blade.php new file mode 100644 index 000000000..12a7892ba --- /dev/null +++ b/resources/views/data/pembangunan/index.blade.php @@ -0,0 +1,94 @@ +@extends('layouts.dashboard_template') + +@section('content') +
+

+ {{ $page_title ?? "Page Title" }} + {{ $page_description ?? '' }} +

+ +
+ +
+ + @include('partials.flash_message') + +
+
+
+
+
+ + +
+
+
+
+
+ + + + + + + + + + + + + +
AksiNama KegiatanSumber DanaAnggaranVolumeTahunPelaksanaLokasi
+
+
+
+
+@endsection +@include('partials.asset_select2') +@include('partials.asset_datatables') + +@push('scripts') + +@include('forms.datatable-vertical') +@include('forms.delete-modal') + +@endpush diff --git a/resources/views/data/pembangunan/rincian.blade.php b/resources/views/data/pembangunan/rincian.blade.php new file mode 100644 index 000000000..1e3296844 --- /dev/null +++ b/resources/views/data/pembangunan/rincian.blade.php @@ -0,0 +1,91 @@ +@extends('layouts.dashboard_template') + +@section('content') +
+

+ {{ $page_title ?? "Page Title" }} + {{ $page_description ?? '' }} +

+ +
+ +
+ + @include('partials.flash_message') + +
+
+
Rincian Dokumentasi Pembangunan
+
+ + + + + + + + + + + + + + + + + + + + + + + +
Nama Kegiatan:{{ $pembangunan->judul }}
Sumber Dana : {{ $pembangunan->sumber_dana }}
Lokasi Pembangunan : {{ $pembangunan->lokasi }}
Keterangan : {{ $pembangunan->keterangan }}
+
+ +
+
+ + + + + + + + + +
NomorPresentaseKeteranganTanggal Rekam
+
+
+
+
+@endsection +@include('partials.asset_datatables') + +@push('scripts') + +@include('forms.datatable-vertical') +@include('forms.delete-modal') + +@endpush diff --git a/resources/views/layouts/fragments/sidebar.blade.php b/resources/views/layouts/fragments/sidebar.blade.php index e7e0b9356..3bfc09607 100644 --- a/resources/views/layouts/fragments/sidebar.blade.php +++ b/resources/views/layouts/fragments/sidebar.blade.php @@ -191,6 +191,11 @@ @endif + + @if($user->hasrole(['super-admin', 'admin-desa', 'admin-kecamatan','administrator-website'])) +
  • + Pembangunan
  • + @endif @endif diff --git a/routes/api.php b/routes/api.php index 58f58eddc..7fd3c63dc 100644 --- a/routes/api.php +++ b/routes/api.php @@ -87,8 +87,16 @@ }); /** - * Identitas Desa - */ + * Pembangunan + */ + Route::group(['prefix' => 'pembangunan'], function () { + Route::post('/', 'Api\PembangunanController@store'); + Route::post('dokumentasi', 'Api\PembangunanController@storeDokumentasi'); + }); + + /** + * Identitas Desa + */ Route::group(['prefix' => 'identitas-desa'], function () { Route::post('/', 'Api\ProfilDesaController@store'); }); diff --git a/routes/web.php b/routes/web.php index 0746d8824..2f9f7e1e0 100644 --- a/routes/web.php +++ b/routes/web.php @@ -441,6 +441,15 @@ Route::post('do_import', ['as' => 'data.laporan-apbdes.do_import', 'uses' => 'LaporanApbdesController@do_import']); Route::get('download/{id}', ['as' => 'data.laporan-apbdes.download', 'uses' => 'LaporanApbdesController@download']); }); + + // Pembangunan + Route::group(['prefix' => 'pembangunan', 'middleware' => ['role:super-admin|administrator-website|admin-desa']], function () { + Route::get('/', ['as' => 'data.pembangunan.index', 'uses' => 'DataPembangunanController@index']); + Route::get('getdata', ['as' => 'data.pembangunan.getdata', 'uses' => 'DataPembangunanController@getPembangunan']); + Route::get('show/{id}', ['as' => 'data.pembangunan.show', 'uses' => 'DataPembangunanController@show']); + Route::get('rincian/{id}/{kode_desa}', ['as' => 'data.pembangunan.rincian', 'uses' => 'DataPembangunanController@rincian']); + Route::get('getrinciandata/{id}/{kode_desa}', ['as' => 'data.pembangunan.getrinciandata', 'uses' => 'DataPembangunanController@getrinciandata']); + }); }); // Admin SIKEMA