Update Koperasi

This commit is contained in:
2026-11-06 22:38:45 +07:00
parent 6232b28e11
commit cb36682d9e
79 changed files with 4639 additions and 1378 deletions
@@ -0,0 +1,58 @@
<?php
namespace App\Http\Requests\Koperasi;
use App\Services\Koperasi\WilayahKoperasiService;
use Illuminate\Support\Facades\DB;
use Illuminate\Validation\Rule;
use Illuminate\Validation\Validator;
trait ValidatesWilayahKoperasi
{
protected function wilayahRules(bool $profile = false): array
{
$tables = ['kabupaten_kota_id' => 'master_kabupaten_kota', 'kecamatan_id' => 'master_kecamatan', 'desa_kelurahan_id' => 'master_desa_kelurahan'];
if ($profile) {
$tables = ['provinsi_id' => 'master_provinsi', ...$tables];
}
$available = app(WilayahKoperasiService::class)->available();
$rules = [];
foreach ($tables as $field => $table) {
$rules[$field] = ['bail', Rule::prohibitedIf(! $available), 'nullable', 'integer', Rule::exists($table, 'id')->whereNull('deleted_at')];
if ($profile) {
$others = array_diff(array_keys($tables), [$field]);
$rules[$field][] = Rule::requiredIf(fn () => collect($others)->contains(fn ($other) => $this->filled($other)));
}
}
return $rules;
}
protected function wilayahAttributes(): array
{
return ['provinsi_id' => 'Provinsi', 'kabupaten_kota_id' => 'Kabupaten/Kota', 'kecamatan_id' => 'Kecamatan', 'desa_kelurahan_id' => 'Desa/Kelurahan'];
}
public function after(): array
{
return [function (Validator $validator) {
$labels = $this->wilayahAttributes();
if ($validator->errors()->hasAny(array_keys($labels))) {
return;
}
foreach ([
['kabupaten_kota_id', 'provinsi_id', 'master_kabupaten_kota'],
['kecamatan_id', 'kabupaten_kota_id', 'master_kecamatan'],
['desa_kelurahan_id', 'kecamatan_id', 'master_desa_kelurahan'],
] as [$child, $parent, $table]) {
if ($parent === 'provinsi_id' && ! $this instanceof StorePengurusKoperasiRequest) {
continue;
}
if ($this->filled($child) && $this->filled($parent)
&& ! DB::table($table)->where('id', $this->input($child))->where($parent, $this->input($parent))->exists()) {
$validator->errors()->add($child, 'Pilihan '.$labels[$child].' tidak sesuai dengan '.$labels[$parent].'.');
}
}
}];
}
}