Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web
This commit is contained in:
@@ -54,11 +54,10 @@ class TabelBasisDataController extends Controller
|
||||
abort(403);
|
||||
}
|
||||
|
||||
$tabel = TabelBasisData::with('kolom')->findOrFail($id);
|
||||
$tabel = TabelBasisData::with('kolom', 'form', 'form.form', 'form.form.form', 'form.form.form.kolom')->findOrFail($id);
|
||||
|
||||
return (new TabelBasisDataResource($tabel))
|
||||
->response()
|
||||
->setStatusCode(201);
|
||||
->response();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -94,20 +94,24 @@ class TanamanController extends Controller
|
||||
if (!Gate::any(['petani', 'fasilitator','super_admin'])) {
|
||||
abort(403);
|
||||
}
|
||||
$profile = Auth::user()->profile;
|
||||
|
||||
$user = Auth::user();
|
||||
$profile = $user->profile;
|
||||
$profileId = $user->role === 'petani' ? $profile->id : $request->profile_id;
|
||||
|
||||
$request->merge([
|
||||
'komoditas_id' => $request->input('komoditas.id') ?? $request->input('komoditas_id'),
|
||||
'lahan_id' => $request->input('lahan.id') ?? $request->input('lahan_id'),
|
||||
'profile_id' => $profile->id
|
||||
'profile_id' => $profileId,
|
||||
]);
|
||||
|
||||
$validated = $request->validate([
|
||||
'nama' => ['required', 'string', 'max:255'],
|
||||
'komoditas_id' => ['required', 'exists:master_komoditas,id'],
|
||||
'lahan_id' => [
|
||||
'required',
|
||||
Rule::exists('map_lahan', 'id')->where(function ($query) use ($profile) {
|
||||
$query->where('profile_id', $profile->id)
|
||||
Rule::exists('map_lahan', 'id')->where(function ($query) use ($profileId) {
|
||||
$query->where('profile_id', $profileId)
|
||||
->whereNull('deleted_at');
|
||||
}),
|
||||
],
|
||||
|
||||
@@ -10,6 +10,7 @@ use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
|
||||
use App\Models\Ekosistem\TabelBasisData;
|
||||
use App\Models\Ekosistem\FormBasisData;
|
||||
|
||||
@@ -12,6 +12,7 @@ use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Support\Arr;
|
||||
|
||||
use App\Models\Ekosistem\TabelBasisData;
|
||||
use App\Models\Ekosistem\KolomBasisData;
|
||||
@@ -21,6 +22,13 @@ use App\Models\Core\Program;
|
||||
|
||||
class ValueBasisDataController extends Controller
|
||||
{
|
||||
private $tableModelClassMap = [
|
||||
'master_provinsi' => \App\Models\Wilayah\Provinsi::class,
|
||||
'master_kabupaten_kota' => \App\Models\Wilayah\KabupatenKota::class,
|
||||
'master_kecamatan' => \App\Models\Wilayah\Kecamatan::class,
|
||||
'master_desa_kelurahan' => \App\Models\Wilayah\DesaKelurahan::class,
|
||||
];
|
||||
|
||||
public function index(Request $request, string $tabelId): View
|
||||
{
|
||||
if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) {
|
||||
@@ -166,7 +174,7 @@ class ValueBasisDataController extends Controller
|
||||
if (!Gate::any(['super_admin', 'admin'])) {
|
||||
abort(403);
|
||||
}
|
||||
|
||||
|
||||
$tabel = TabelBasisData::with('kolom')
|
||||
->whereHas('kolom', function ($query) {
|
||||
$query->where('is_active', true);
|
||||
@@ -198,7 +206,12 @@ class ValueBasisDataController extends Controller
|
||||
if ($k->tipe == 'foreign_key') {
|
||||
$relasi['kolom_id'] = $k->id;
|
||||
try {
|
||||
$options_kolom = DB::table($k->relasi_tabel)->selectRaw($k->relasi_kolom_label . ' as label, ' . $k->relasi_kolom_id . ' as value')->whereNull('deleted_at');
|
||||
$modelClass = Arr::get($this->tableModelClassMap, 'master_desa_kelurahan');
|
||||
if ($modelClass) {
|
||||
$options_kolom = $modelClass::select($k->relasi_kolom_label . ' as label', $k->relasi_kolom_id . ' as value')->limit(10000);
|
||||
} else {
|
||||
$options_kolom = DB::table($k->relasi_tabel)->selectRaw($k->relasi_kolom_label . ' as label, ' . $k->relasi_kolom_id . ' as value')->whereNull('deleted_at')->limit(10000);
|
||||
}
|
||||
$relasi['options'] = $options_kolom->get();
|
||||
$relasi['sql'] = $options_kolom->toSql();
|
||||
} catch (\Throwable $th) {
|
||||
@@ -281,9 +294,6 @@ class ValueBasisDataController extends Controller
|
||||
return redirect()->route('tabel.data.index', [$tabelId, 'program_id' => $program->id])->with('success', 'Data berhasil ditambahkan.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(Request $request, string $tabelId, string $id): View
|
||||
{
|
||||
if (!Gate::any(['super_admin', 'admin'])) {
|
||||
@@ -329,7 +339,9 @@ class ValueBasisDataController extends Controller
|
||||
foreach ($values as $v) {
|
||||
$k = $kolom->where('id', $v->kolom_id)->first();
|
||||
if ($k->tipe == 'foreign_key') {
|
||||
$v->value_relasi_label = DB::table($k->relasi_tabel)->where($k->relasi_kolom_id, $v->value_relasi)->value($k->relasi_kolom_label);
|
||||
$v->value_relasi_label = DB::table($k->relasi_tabel)
|
||||
->where($k->relasi_kolom_id, $v->value_relasi)
|
||||
->value($k->relasi_kolom_label);
|
||||
} else if ($k->tipe == 'enum') {
|
||||
$opsi = collect($k->enum_opsi);
|
||||
$found = $opsi->first(function ($item) use ($v) {
|
||||
@@ -393,7 +405,12 @@ class ValueBasisDataController extends Controller
|
||||
if ($k->tipe == 'foreign_key') {
|
||||
$relasi['kolom_id'] = $k->id;
|
||||
try {
|
||||
$options_kolom = DB::table($k->relasi_tabel)->selectRaw($k->relasi_kolom_label . ' as label, ' . $k->relasi_kolom_id . ' as value')->whereNull('deleted_at');
|
||||
$modelClass = Arr::get($this->tableModelClassMap, 'master_desa_kelurahan');
|
||||
if ($modelClass) {
|
||||
$options_kolom = $modelClass::select($k->relasi_kolom_label . ' as label', $k->relasi_kolom_id . ' as value')->limit(10000);
|
||||
} else {
|
||||
$options_kolom = DB::table($k->relasi_tabel)->selectRaw($k->relasi_kolom_label . ' as label, ' . $k->relasi_kolom_id . ' as value')->whereNull('deleted_at')->limit(10000);
|
||||
}
|
||||
$relasi['options'] = $options_kolom->get();
|
||||
$relasi['sql'] = $options_kolom->toSql();
|
||||
} catch (\Throwable $th) {
|
||||
|
||||
@@ -0,0 +1,228 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Web\Master;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Master\JenisKomoditas;
|
||||
use App\Models\Pertanian\Komoditas;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class JenisKomoditasController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$perPage = $request->get('per_page', 10);
|
||||
$search = $request->get('search');
|
||||
|
||||
$jenisKomoditas = JenisKomoditas::with('komoditas')
|
||||
->when($search, function ($query) use ($search) {
|
||||
$query->where(function ($q) use ($search) {
|
||||
$q->where('nama', 'ILIKE', "%{$search}%")
|
||||
->orWhere('path', 'ILIKE', "%{$search}%")
|
||||
->orWhereHas('komoditas', function ($komoditasQuery) use ($search) {
|
||||
$komoditasQuery->where('nama', 'ILIKE', "%{$search}%");
|
||||
});
|
||||
});
|
||||
})
|
||||
->latest()
|
||||
->paginate($perPage);
|
||||
|
||||
$komoditas = Komoditas::orderBy('nama', 'asc')->get();
|
||||
|
||||
return view('master.jeniskomoditas.index', compact(
|
||||
'jenisKomoditas',
|
||||
'komoditas'
|
||||
));
|
||||
}
|
||||
|
||||
public function getByKomoditas($komoditas_id)
|
||||
{
|
||||
$jenisKomoditas = JenisKomoditas::where('komoditas_id', $komoditas_id)
|
||||
->orderBy('nama', 'asc')
|
||||
->get(['id', 'nama']);
|
||||
|
||||
return response()->json([
|
||||
'status' => 'success',
|
||||
'data' => $jenisKomoditas,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$validated = $request->validate([
|
||||
'komoditas_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
'exists:master_komoditas,id',
|
||||
],
|
||||
'nama' => [
|
||||
'required',
|
||||
'string',
|
||||
'max:255',
|
||||
Rule::unique('jenis_komoditas', 'nama')
|
||||
->where('komoditas_id', $request->komoditas_id),
|
||||
],
|
||||
], [
|
||||
'komoditas_id.required' => 'Komoditas wajib dipilih.',
|
||||
'komoditas_id.exists' => 'Komoditas yang dipilih tidak valid.',
|
||||
'nama.required' => 'Nama jenis komoditas wajib diisi.',
|
||||
'nama.unique' => 'Nama jenis komoditas sudah tersedia pada komoditas ini.',
|
||||
]);
|
||||
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
$jenisKomoditas = JenisKomoditas::create([
|
||||
'komoditas_id' => $validated['komoditas_id'],
|
||||
'nama' => $validated['nama'],
|
||||
'created_by' => auth()->id(),
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
|
||||
DB::commit();
|
||||
|
||||
return response()->json([
|
||||
'status' => 'success',
|
||||
'message' => 'Data jenis komoditas berhasil disimpan.',
|
||||
'data' => $jenisKomoditas,
|
||||
]);
|
||||
} catch (\Throwable $e) {
|
||||
DB::rollBack();
|
||||
|
||||
Log::error('Gagal menyimpan jenis komoditas', [
|
||||
'error' => $e->getMessage(),
|
||||
'request' => $request->all(),
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'status' => 'error',
|
||||
'message' => 'Gagal menyimpan data: ' . $e->getMessage(),
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(string $id)
|
||||
{
|
||||
try {
|
||||
$jenisKomoditas = JenisKomoditas::with('komoditas')->findOrFail($id);
|
||||
|
||||
return response()->json([
|
||||
'status' => 'success',
|
||||
'data' => $jenisKomoditas,
|
||||
]);
|
||||
} catch (\Throwable $e) {
|
||||
return response()->json([
|
||||
'status' => 'error',
|
||||
'message' => 'Data jenis komoditas tidak ditemukan.',
|
||||
], 404);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, string $id)
|
||||
{
|
||||
$jenisKomoditas = JenisKomoditas::findOrFail($id);
|
||||
|
||||
$validated = $request->validate([
|
||||
'komoditas_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
'exists:master_komoditas,id',
|
||||
],
|
||||
'nama' => [
|
||||
'required',
|
||||
'string',
|
||||
'max:255',
|
||||
Rule::unique('jenis_komoditas', 'nama')
|
||||
->where('komoditas_id', $request->komoditas_id)
|
||||
->ignore($jenisKomoditas->id),
|
||||
],
|
||||
'path' => [
|
||||
'nullable',
|
||||
'string',
|
||||
],
|
||||
], [
|
||||
'komoditas_id.required' => 'Komoditas wajib dipilih.',
|
||||
'komoditas_id.exists' => 'Komoditas yang dipilih tidak valid.',
|
||||
'nama.required' => 'Nama jenis komoditas wajib diisi.',
|
||||
'nama.unique' => 'Nama jenis komoditas sudah tersedia pada komoditas ini.',
|
||||
]);
|
||||
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
$jenisKomoditas->update([
|
||||
'komoditas_id' => $validated['komoditas_id'],
|
||||
'nama' => $validated['nama'],
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
|
||||
DB::commit();
|
||||
|
||||
return response()->json([
|
||||
'status' => 'success',
|
||||
'message' => 'Data jenis komoditas berhasil diperbarui.',
|
||||
'data' => $jenisKomoditas->fresh('komoditas'),
|
||||
]);
|
||||
} catch (\Throwable $e) {
|
||||
DB::rollBack();
|
||||
|
||||
Log::error('Gagal update jenis komoditas', [
|
||||
'error' => $e->getMessage(),
|
||||
'id' => $id,
|
||||
'request' => $request->all(),
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'status' => 'error',
|
||||
'message' => 'Gagal mengupdate data: ' . $e->getMessage(),
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(string $id)
|
||||
{
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
$jenisKomoditas = JenisKomoditas::findOrFail($id);
|
||||
$jenisKomoditas->update(['deleted_by' => auth()->id()]);
|
||||
$jenisKomoditas->delete();
|
||||
|
||||
DB::commit();
|
||||
|
||||
return response()->json([
|
||||
'status' => 'success',
|
||||
'message' => 'Data jenis komoditas berhasil dihapus.',
|
||||
]);
|
||||
} catch (\Throwable $e) {
|
||||
DB::rollBack();
|
||||
|
||||
Log::error('Gagal hapus jenis komoditas', [
|
||||
'error' => $e->getMessage(),
|
||||
'id' => $id,
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'status' => 'error',
|
||||
'message' => 'Gagal menghapus data: ' . $e->getMessage(),
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,226 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Web\Master;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Master\Varietas;
|
||||
use App\Models\Pertanian\Komoditas;
|
||||
use App\Models\Master\JenisKomoditas;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class VarietasController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$perPage = $request->get('per_page', 10);
|
||||
$search = $request->get('search');
|
||||
|
||||
$varietas = Varietas::with(['komoditas', 'jenisKomoditas'])
|
||||
->when($search, function ($query) use ($search) {
|
||||
$query->where(function ($q) use ($search) {
|
||||
$q->where('nama', 'ILIKE', "%{$search}%")
|
||||
->orWhere('path', 'ILIKE', "%{$search}%")
|
||||
->orWhereHas('komoditas', function ($komoditasQuery) use ($search) {
|
||||
$komoditasQuery->where('nama', 'ILIKE', "%{$search}%");
|
||||
})
|
||||
->orWhereHas('jenisKomoditas', function ($jenisQuery) use ($search) {
|
||||
$jenisQuery->where('nama', 'ILIKE', "%{$search}%");
|
||||
});
|
||||
});
|
||||
})
|
||||
->latest()
|
||||
->paginate($perPage);
|
||||
|
||||
$komoditas = Komoditas::orderBy('nama', 'asc')->get();
|
||||
|
||||
return view('master.varietas.index', compact(
|
||||
'varietas',
|
||||
'komoditas'
|
||||
));
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$komoditasTable = (new Komoditas)->getTable();
|
||||
$jenisKomoditasTable = (new JenisKomoditas)->getTable();
|
||||
$varietasTable = (new Varietas)->getTable();
|
||||
|
||||
$validated = $request->validate([
|
||||
'komoditas_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists($komoditasTable, 'id'),
|
||||
],
|
||||
'jenis_komoditas_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists($jenisKomoditasTable, 'id')
|
||||
->where('komoditas_id', $request->komoditas_id),
|
||||
],
|
||||
'nama' => [
|
||||
'required',
|
||||
'string',
|
||||
'max:255',
|
||||
Rule::unique($varietasTable, 'nama')
|
||||
->where('komoditas_id', $request->komoditas_id)
|
||||
->where('jenis_komoditas_id', $request->jenis_komoditas_id),
|
||||
],
|
||||
'deskripsi' => [
|
||||
'nullable',
|
||||
'string',
|
||||
],
|
||||
]);
|
||||
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
$varietas = Varietas::create([
|
||||
'komoditas_id' => $validated['komoditas_id'],
|
||||
'jenis_komoditas_id' => $validated['jenis_komoditas_id'],
|
||||
'nama' => $validated['nama'],
|
||||
'deskripsi' => $validated['deskripsi'] ?? null,
|
||||
'created_by' => auth()->id(),
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
|
||||
DB::commit();
|
||||
|
||||
return response()->json([
|
||||
'status' => 'success',
|
||||
'message' => 'Data varietas berhasil disimpan.',
|
||||
'data' => $varietas,
|
||||
]);
|
||||
} catch (\Throwable $e) {
|
||||
DB::rollBack();
|
||||
|
||||
Log::error('Gagal menyimpan varietas', [
|
||||
'error' => $e->getMessage(),
|
||||
'request' => $request->all(),
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'status' => 'error',
|
||||
'message' => 'Gagal menyimpan data: ' . $e->getMessage(),
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
|
||||
public function show(string $id)
|
||||
{
|
||||
try {
|
||||
$varietas = Varietas::with(['komoditas', 'jenisKomoditas'])->findOrFail($id);
|
||||
|
||||
return response()->json([
|
||||
'status' => 'success',
|
||||
'data' => $varietas,
|
||||
]);
|
||||
} catch (\Throwable $e) {
|
||||
return response()->json([
|
||||
'status' => 'error',
|
||||
'message' => 'Data varietas tidak ditemukan.',
|
||||
], 404);
|
||||
}
|
||||
}
|
||||
|
||||
public function update(Request $request, string $id)
|
||||
{
|
||||
$komoditasTable = (new Komoditas)->getTable();
|
||||
$jenisKomoditasTable = (new JenisKomoditas)->getTable();
|
||||
$varietasTable = (new Varietas)->getTable();
|
||||
|
||||
$validated = $request->validate([
|
||||
'komoditas_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists($komoditasTable, 'id'),
|
||||
],
|
||||
'jenis_komoditas_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists($jenisKomoditasTable, 'id')
|
||||
->where('komoditas_id', $request->komoditas_id),
|
||||
],
|
||||
'nama' => [
|
||||
'required',
|
||||
'string',
|
||||
'max:255',
|
||||
Rule::unique($varietasTable, 'nama')
|
||||
->where('komoditas_id', $request->komoditas_id)
|
||||
->where('jenis_komoditas_id', $request->jenis_komoditas_id),
|
||||
],
|
||||
'deskripsi' => [
|
||||
'nullable',
|
||||
'string',
|
||||
],
|
||||
]);
|
||||
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
$varietas = Varietas::findOrFail($id);
|
||||
$varietas->update([
|
||||
'komoditas_id' => $validated['komoditas_id'],
|
||||
'jenis_komoditas_id' => $validated['jenis_komoditas_id'],
|
||||
'nama' => $validated['nama'],
|
||||
'deskripsi' => $validated['deskripsi'] ?? null,
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
|
||||
DB::commit();
|
||||
|
||||
return response()->json([
|
||||
'status' => 'success',
|
||||
'message' => 'Data varietas berhasil diperbarui.',
|
||||
'data' => $varietas->fresh(['komoditas', 'jenisKomoditas']),
|
||||
]);
|
||||
} catch (\Throwable $e) {
|
||||
DB::rollBack();
|
||||
|
||||
Log::error('Gagal update varietas', [
|
||||
'error' => $e->getMessage(),
|
||||
'id' => $id,
|
||||
'request' => $request->all(),
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'status' => 'error',
|
||||
'message' => 'Gagal mengupdate data: ' . $e->getMessage(),
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
|
||||
public function destroy(string $id)
|
||||
{
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
$varietas = Varietas::findOrFail($id);
|
||||
$varietas->update(['deleted_by' => auth()->id()]);
|
||||
$varietas->delete();
|
||||
|
||||
DB::commit();
|
||||
|
||||
return response()->json([
|
||||
'status' => 'success',
|
||||
'message' => 'Data varietas berhasil dihapus.',
|
||||
]);
|
||||
} catch (\Throwable $e) {
|
||||
DB::rollBack();
|
||||
|
||||
Log::error('Gagal hapus varietas', [
|
||||
'error' => $e->getMessage(),
|
||||
'id' => $id,
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'status' => 'error',
|
||||
'message' => 'Gagal menghapus data: ' . $e->getMessage(),
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
use Illuminate\View\View;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
use App\Models\Program\Framework;
|
||||
use App\Models\Program\Realisasi;
|
||||
@@ -26,7 +27,89 @@ class RealisasiController extends Controller
|
||||
abort(404);
|
||||
}
|
||||
|
||||
return view('program.realisasi.index', compact('framework'));
|
||||
$ringkasanIsiRealisasi = DB::select('select count(pt.id) count_target, sum(case when rl.id > 0 then 1 else 0 end) count_realisasi
|
||||
from program_target pt
|
||||
inner join program_aktivitas pa on pt.aktivitas_id = pa.id
|
||||
inner join program_transformasi ptr on pa.transformasi_id = ptr.id
|
||||
inner join program_framework pf on ptr.framework_id = pf.id
|
||||
left join
|
||||
(select target_id, max(id) id from program_realisasi pr
|
||||
group by target_id) rl on pt.id = rl.target_id
|
||||
where
|
||||
pt.deleted_at is null
|
||||
and pa.deleted_at is null
|
||||
and ptr.deleted_at is null
|
||||
and pf.id = ?
|
||||
', [$framework->id]);
|
||||
$ringkasanIsiRealisasi = collect($ringkasanIsiRealisasi)->map(function ($item) {
|
||||
$item->persentase = $item->count_target > 0 ? round(($item->count_realisasi / $item->count_target) * 100, 2) : 0;
|
||||
return $item;
|
||||
})->first();
|
||||
|
||||
$ringkasanCapaianRealisasi = DB::select("select round(avg(percent_realisasi)::numeric * 100, 2) persentase,
|
||||
sum(case when percent_realisasi >= 0.8 then 1 else 0 end) capaian_80,
|
||||
sum(case when percent_realisasi >= 0.5 and percent_realisasi < 0.8 then 1 else 0 end) capaian_50_80,
|
||||
sum(case when percent_realisasi < 0.5 then 1 else 0 end) capaian_50
|
||||
from
|
||||
(select pt.id target_id, pr.id realisasi_id,
|
||||
pt.tipe,
|
||||
case
|
||||
when pt.tipe = 'integer' then pt.target_integer
|
||||
when pt.tipe = 'float' then pt.target_float
|
||||
when pt.tipe = 'boolean' then pt.target_boolean::integer
|
||||
end target,
|
||||
case
|
||||
when pt.tipe = 'integer' then pr.realisasi_integer
|
||||
when pt.tipe = 'float' then pr.realisasi_float
|
||||
when pt.tipe = 'boolean' then pr.realisasi_boolean::integer
|
||||
end realisasi,
|
||||
case
|
||||
when pt.tipe = 'integer' then pr.realisasi_integer::float / pt.target_integer::float
|
||||
when pt.tipe = 'float' then pr.realisasi_float / pt.target_float
|
||||
when pt.tipe = 'boolean' then pr.realisasi_boolean::integer / pt.target_boolean::integer
|
||||
end percent_realisasi
|
||||
from program_target pt
|
||||
inner join program_aktivitas pa on pt.aktivitas_id = pa.id
|
||||
inner join program_transformasi ptr on pa.transformasi_id = ptr.id
|
||||
inner join program_framework pf on ptr.framework_id = pf.id
|
||||
left join
|
||||
(select target_id, max(id) id from program_realisasi pr
|
||||
group by target_id) rl on pt.id = rl.target_id
|
||||
left join program_realisasi pr on rl.id = pr.id and pr.target_id = pt.id
|
||||
where
|
||||
pt.deleted_at is null
|
||||
and pa.deleted_at is null
|
||||
and ptr.deleted_at is null
|
||||
and pf.id = ?) v",
|
||||
[$framework->id]);
|
||||
$ringkasanCapaianRealisasi = collect($ringkasanCapaianRealisasi)->first();
|
||||
|
||||
$ringkasanVerifikasi = DB::select("select count(pt.id) count_target,
|
||||
sum(case when count_verifikasi > 0 then 1 else 0 end) count_verifikasi,
|
||||
sum(case when count_verifikasi = 0 or count_verifikasi is null then 1 else 0 end) count_unverifikasi
|
||||
from program_target pt
|
||||
inner join program_aktivitas pa on pt.aktivitas_id = pa.id
|
||||
inner join program_transformasi ptr on pa.transformasi_id = ptr.id
|
||||
inner join program_framework pf on ptr.framework_id = pf.id
|
||||
left join
|
||||
(select target_id, max(id) id from program_realisasi pr
|
||||
group by target_id) rl on pt.id = rl.target_id
|
||||
left join
|
||||
(select realisasi_id, count(pv.id) count_verifikasi from program_verifikasi pv
|
||||
group by realisasi_id) rv
|
||||
on rv.realisasi_id = rl.id
|
||||
where
|
||||
pt.deleted_at is null
|
||||
and pa.deleted_at is null
|
||||
and ptr.deleted_at is null
|
||||
and pf.id = ?",
|
||||
[$framework->id]);
|
||||
$ringkasanVerifikasi = collect($ringkasanVerifikasi)->map(function ($item) {
|
||||
$item->persentase = $item->count_target > 0 ? round(($item->count_verifikasi / $item->count_target) * 100, 2) : 0;
|
||||
return $item;
|
||||
})->first();
|
||||
|
||||
return view('program.realisasi.index', compact('framework', 'ringkasanIsiRealisasi', 'ringkasanCapaianRealisasi', 'ringkasanVerifikasi'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
@@ -64,7 +147,7 @@ class RealisasiController extends Controller
|
||||
abort(403);
|
||||
}
|
||||
|
||||
$realisasi = Realisasi::with('target', 'target.aktivitas', 'target.aktivitas.transformasi')
|
||||
$realisasi = Realisasi::with('target', 'target.aktivitas', 'target.aktivitas.transformasi', 'verifikasi')
|
||||
->find($id);
|
||||
if (!$realisasi) {
|
||||
return response()->json([
|
||||
|
||||
@@ -17,9 +17,9 @@ class VerifikasiController extends Controller
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index()
|
||||
public function index(Request $request): JsonResponse
|
||||
{
|
||||
//
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -83,8 +83,25 @@ class VerifikasiController extends Controller
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(string $id)
|
||||
public function destroy(string $id): JsonResponse
|
||||
{
|
||||
//
|
||||
if (!Gate::any(['super_admin', 'admin'])) {
|
||||
abort(403);
|
||||
}
|
||||
|
||||
$verifikasi = Verifikasi::find($id);
|
||||
if (!$verifikasi) {
|
||||
return response()->json([
|
||||
'status' => 'error',
|
||||
'message' => 'Data verifikasi tidak ditemukan.'
|
||||
], 404);
|
||||
}
|
||||
|
||||
$verifikasi->update(['updated_by' => auth()->id()]);
|
||||
$verifikasi->delete();
|
||||
return response()->json([
|
||||
'status' => 'success',
|
||||
'message' => 'Dokumen bukti berhasil dihapus.'
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,6 +49,7 @@ class ProgramController extends Controller
|
||||
'sub_domain' => ['required', Rule::unique(Program::class, 'sub_domain')],
|
||||
'tahun' => ['required', 'integer'],
|
||||
'instansi' => ['nullable', 'string'],
|
||||
'nama_singkat' => ['required', 'string'],
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
@@ -94,6 +95,9 @@ class ProgramController extends Controller
|
||||
$validator = Validator::make($request->all(), [
|
||||
'nama' => ['required'],
|
||||
'sub_domain' => ['required', Rule::unique(Program::class, 'sub_domain')->ignore($id)],
|
||||
'tahun' => ['required', 'integer'],
|
||||
'instansi' => ['nullable', 'string'],
|
||||
'nama_singkat' => ['required', 'string'],
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
@@ -106,9 +110,7 @@ class ProgramController extends Controller
|
||||
return redirect()->route('program.index')->with('error', 'Data program tidak ditemukan!');
|
||||
}
|
||||
|
||||
$program->update([
|
||||
'nama' => $request->nama,
|
||||
'sub_domain' => $request->sub_domain,
|
||||
$program->update([...$validator->validated(),
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ class ProgramResource extends JsonResource
|
||||
'sub_domain' => $this->sub_domain,
|
||||
'tahun' => $this->tahun,
|
||||
'instansi' => $this->instansi,
|
||||
'nama_singkat' => $this->nama_singkat,
|
||||
'komoditas' => $this->komoditas()->with('komoditas')->get()->map(function ($item) {
|
||||
return new ProgramKomoditasResource($item);
|
||||
}),
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources\Ekosistem;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
use App\Http\Resources\Ekosistem\KolomBasisDataResource;
|
||||
|
||||
class FormBasisDataResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function toArray(Request $request): array
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'tabel_id' => $this->tabel_id,
|
||||
'parent_id' => $this->parent_id,
|
||||
'tipe' => $this->tipe,
|
||||
'column_width' => $this->column_width,
|
||||
'kolom_id' => $this->kolom_id,
|
||||
'section_label' => $this->section_label,
|
||||
'urutan' => $this->urutan,
|
||||
'kolom' => new KolomBasisDataResource($this->whenLoaded('kolom')),
|
||||
'form' => FormBasisDataResource::collection($this->whenLoaded('form')),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -29,6 +29,7 @@ class TabelBasisDataResource extends JsonResource
|
||||
// 'group' => new GroupBasisDataResource($this->whenLoaded('group')),
|
||||
'kolom' => KolomBasisDataResource::collection($this->whenLoaded('kolom')),
|
||||
//'ringkasan' => RingkasanBasisDataResource::collection($this->whenLoaded('ringkasan')),
|
||||
'form' => FormBasisDataResource::collection($this->whenLoaded('form')),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ class Program extends Model
|
||||
"sub_domain",
|
||||
"tahun",
|
||||
"instansi",
|
||||
"nama_singkat",
|
||||
];
|
||||
|
||||
public function komoditas(): HasMany
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Master;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use App\Models\Pertanian\Komoditas;
|
||||
|
||||
class JenisKomoditas extends Model
|
||||
{
|
||||
use HasFactory, SoftDeletes;
|
||||
|
||||
protected $table = 'jenis_komoditas';
|
||||
|
||||
protected $fillable = [
|
||||
'nama',
|
||||
'komoditas_id',
|
||||
'created_by',
|
||||
'updated_by',
|
||||
'deleted_by',
|
||||
];
|
||||
|
||||
public function komoditas()
|
||||
{
|
||||
return $this->belongsTo(Komoditas::class, 'komoditas_id');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Master;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use App\Models\Pertanian\Komoditas;
|
||||
use App\Models\Master\JenisKomoditas;
|
||||
|
||||
class Varietas extends Model
|
||||
{
|
||||
protected $table = 'master_varietas';
|
||||
|
||||
protected $fillable = [
|
||||
'komoditas_id',
|
||||
'jenis_komoditas_id',
|
||||
'nama',
|
||||
'deskripsi',
|
||||
'created_by',
|
||||
'updated_by',
|
||||
];
|
||||
|
||||
public function jenisKomoditas()
|
||||
{
|
||||
return $this->belongsTo(JenisKomoditas::class, 'jenis_komoditas_id');
|
||||
}
|
||||
|
||||
public function komoditas()
|
||||
{
|
||||
return $this->belongsTo(Komoditas::class, 'komoditas_id');
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\wilayah;
|
||||
namespace App\Models\Wilayah;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
|
||||
Reference in New Issue
Block a user