Skip to content

Commit

Permalink
#416 Sinkronisasi Data Program Bantuan OpenSID ke OpenDK.
Browse files Browse the repository at this point in the history
Sesuaikan tampilan, perbaiki data yang tidak tampil
  • Loading branch information
apidong authored and andifahruddinakas committed May 26, 2022
1 parent d830509 commit f0ea366
Show file tree
Hide file tree
Showing 14 changed files with 711 additions and 116 deletions.
125 changes: 125 additions & 0 deletions app/Http/Controllers/Api/ProgamBantuanController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
<?php

/*
* File ini bagian dari:
*
* OpenDK
*
* Aplikasi dan source code ini dirilis berdasarkan lisensi GPL V3
*
* Hak Cipta 2017 - 2022 Perkumpulan Desa Digital Terbuka (https://opendesa.id)
*
* Dengan ini diberikan izin, secara gratis, kepada siapa pun yang mendapatkan salinan
* dari perangkat lunak ini dan file dokumentasi terkait ("Aplikasi Ini"), untuk diperlakukan
* tanpa batasan, termasuk hak untuk menggunakan, menyalin, mengubah dan/atau mendistribusikan,
* asal tunduk pada syarat berikut:
*
* Pemberitahuan hak cipta di atas dan pemberitahuan izin ini harus disertakan dalam
* setiap salinan atau bagian penting Aplikasi Ini. Barang siapa yang menghapus atau menghilangkan
* pemberitahuan ini melanggar ketentuan lisensi Aplikasi Ini.
*
* PERANGKAT LUNAK INI DISEDIAKAN "SEBAGAIMANA ADANYA", TANPA JAMINAN APA PUN, BAIK TERSURAT MAUPUN
* TERSIRAT. PENULIS ATAU PEMEGANG HAK CIPTA SAMA SEKALI TIDAK BERTANGGUNG JAWAB ATAS KLAIM, KERUSAKAN ATAU
* KEWAJIBAN APAPUN ATAS PENGGUNAAN ATAU LAINNYA TERKAIT APLIKASI INI.
*
* @package OpenDK
* @author Tim Pengembang OpenDesa
* @copyright Hak Cipta 2017 - 2022 Perkumpulan Desa Digital Terbuka (https://opendesa.id)
* @license http://www.gnu.org/licenses/gpl.html GPL V3
* @link https://github.com/OpenSID/opendk
*/

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Requests\ProgramBantuanRequest;
use App\Imports\SinkronBantuan;
use App\Imports\SinkronPesertaBantuan;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use ZipArchive;

class ProgamBantuanController extends Controller
{
/**
* Create a new AuthController instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth:api');
}

public function store(ProgramBantuanRequest $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/bantuan/');

// Ekstrak file
$zip = new ZipArchive();
$zip->open($path);
$zip->extractTo($extract);
$zip->close();

(new SinkronBantuan())
->queue($extract . $csvName = Str::replaceLast('zip', 'csv', $name));
} catch (\Exception $e) {
report($e);
return response()->json([
"status" => "danger",
"message" => $e->getMessage(),
]);
}

// Hapus folder temp ketika sudah selesai
Storage::deleteDirectory('temp');
// Hapus file excell temp ketika sudah selesai
Storage::disk('public')->delete('bantuan' . $csvName);

return response()->json([
"message" => "Data Bantuan Sedang di Sinkronkan",
"status" => "success"
]);
}

public function storePeserta(ProgramBantuanRequest $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/bantuan/');
// Ekstrak file
$zip = new ZipArchive();
$zip->open($path);
$zip->extractTo($extract);
$zip->close();
// Proses impor excell
(new SinkronPesertaBantuan())
->queue($extract . $csvName = Str::replaceLast('zip', 'csv', $name));
} catch (\Exception $e) {
report($e);
return response()->json([
"status" => "danger",
"message" => $e->getMessage(),
]);
}
// Hapus folder temp ketika sudah selesai
Storage::deleteDirectory('temp');
// Hapus file excell temp ketika sudah selesai
Storage::disk('public')->delete('bantuan/' . $csvName);
return response()->json([
"status" => "success",
"message" => "Data Bantuan Sedang di Sinkronkan",
]);
}
}
10 changes: 5 additions & 5 deletions app/Http/Controllers/Data/ProgramBantuanController.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
namespace App\Http\Controllers\Data;

use App\Http\Controllers\Controller;
use App\Models\DataDesa;
use App\Models\PesertaProgram;
use App\Models\Program;
use Illuminate\Http\Request;
Expand All @@ -43,17 +44,16 @@ public function index()
{
$page_title = 'Program Bantuan';
$page_description = 'Daftar Program Bantuan';
$list_desa = DataDesa::all();

return view('data.program_bantuan.index', compact('page_title', 'page_description'));
return view('data.program_bantuan.index', compact('page_title', 'page_description', 'list_desa'));
}

public function getaProgramBantuan()
public function getaProgramBantuan(Request $request)
{
return DataTables::of(Program::all())
return DataTables::of(Program::when(!empty($request->input('desa')), fn ($q) => $q->where('desa_id', $request->desa))->with('desa'))
->addColumn('aksi', function ($row) {
$data['detail_url'] = route('data.program-bantuan.show', $row->id);
$data['edit_url'] = route('data.program-bantuan.edit', $row->id);
$data['delete_url'] = route('data.program-bantuan.destroy', $row->id);

return view('forms.aksi', $data);
})
Expand Down
61 changes: 61 additions & 0 deletions app/Http/Requests/ProgramBantuanRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<?php

/*
* File ini bagian dari:
*
* OpenDK
*
* Aplikasi dan source code ini dirilis berdasarkan lisensi GPL V3
*
* Hak Cipta 2017 - 2022 Perkumpulan Desa Digital Terbuka (https://opendesa.id)
*
* Dengan ini diberikan izin, secara gratis, kepada siapa pun yang mendapatkan salinan
* dari perangkat lunak ini dan file dokumentasi terkait ("Aplikasi Ini"), untuk diperlakukan
* tanpa batasan, termasuk hak untuk menggunakan, menyalin, mengubah dan/atau mendistribusikan,
* asal tunduk pada syarat berikut:
*
* Pemberitahuan hak cipta di atas dan pemberitahuan izin ini harus disertakan dalam
* setiap salinan atau bagian penting Aplikasi Ini. Barang siapa yang menghapus atau menghilangkan
* pemberitahuan ini melanggar ketentuan lisensi Aplikasi Ini.
*
* PERANGKAT LUNAK INI DISEDIAKAN "SEBAGAIMANA ADANYA", TANPA JAMINAN APA PUN, BAIK TERSURAT MAUPUN
* TERSIRAT. PENULIS ATAU PEMEGANG HAK CIPTA SAMA SEKALI TIDAK BERTANGGUNG JAWAB ATAS KLAIM, KERUSAKAN ATAU
* KEWAJIBAN APAPUN ATAS PENGGUNAAN ATAU LAINNYA TERKAIT APLIKASI INI.
*
* @package OpenDK
* @author Tim Pengembang OpenDesa
* @copyright Hak Cipta 2017 - 2022 Perkumpulan Desa Digital Terbuka (https://opendesa.id)
* @license http://www.gnu.org/licenses/gpl.html GPL V3
* @link https://github.com/OpenSID/opendk
*/

namespace App\Http\Requests;

use App\Rules\CekDesa;
use Illuminate\Foundation\Http\FormRequest;

class ProgramBantuanRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}

/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'file' => 'file|mimes:zip|max:5120',
"desa_id" => ['required', 'string', new CekDesa()],
];
}
}
77 changes: 77 additions & 0 deletions app/Imports/SinkronBantuan.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
<?php

/*
* File ini bagian dari:
*
* OpenDK
*
* Aplikasi dan source code ini dirilis berdasarkan lisensi GPL V3
*
* Hak Cipta 2017 - 2022 Perkumpulan Desa Digital Terbuka (https://opendesa.id)
*
* Dengan ini diberikan izin, secara gratis, kepada siapa pun yang mendapatkan salinan
* dari perangkat lunak ini dan file dokumentasi terkait ("Aplikasi Ini"), untuk diperlakukan
* tanpa batasan, termasuk hak untuk menggunakan, menyalin, mengubah dan/atau mendistribusikan,
* asal tunduk pada syarat berikut:
*
* Pemberitahuan hak cipta di atas dan pemberitahuan izin ini harus disertakan dalam
* setiap salinan atau bagian penting Aplikasi Ini. Barang siapa yang menghapus atau menghilangkan
* pemberitahuan ini melanggar ketentuan lisensi Aplikasi Ini.
*
* PERANGKAT LUNAK INI DISEDIAKAN "SEBAGAIMANA ADANYA", TANPA JAMINAN APA PUN, BAIK TERSURAT MAUPUN
* TERSIRAT. PENULIS ATAU PEMEGANG HAK CIPTA SAMA SEKALI TIDAK BERTANGGUNG JAWAB ATAS KLAIM, KERUSAKAN ATAU
* KEWAJIBAN APAPUN ATAS PENGGUNAAN ATAU LAINNYA TERKAIT APLIKASI INI.
*
* @package OpenDK
* @author Tim Pengembang OpenDesa
* @copyright Hak Cipta 2017 - 2022 Perkumpulan Desa Digital Terbuka (https://opendesa.id)
* @license http://www.gnu.org/licenses/gpl.html GPL V3
* @link https://github.com/OpenSID/opendk
*/

namespace App\Imports;

use App\Models\Program;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\Importable;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithChunkReading;
use Maatwebsite\Excel\Concerns\WithHeadingRow;

class SinkronBantuan implements ToCollection, WithHeadingRow, WithChunkReading, ShouldQueue
{
use Importable;

/**
* {@inheritdoc}
*/
public function chunkSize(): int
{
return 1000;
}

/**
* @param Collection $collection
*/
public function collection(Collection $collection)
{
foreach ($collection as $value) {
$insert = [
'id' => $value['id'],
'nama' => $value['nama'],
'sasaran' => $value['sasaran'],
'status' => $value['status'],
'start_date' => $value['sdate'],
'end_date' => $value['edate'],
'description' => $value['ndesc'],
'desa_id' => $value['kode_desa']
];

Program::updateOrCreate([
'desa_id' => $insert['desa_id'],
'id' => $insert['id']
], $insert);
}
}
}
Loading

0 comments on commit f0ea366

Please sign in to comment.