diff --git a/app/Audit.php b/app/Audit.php index a0055bd..c10a8f1 100644 --- a/app/Audit.php +++ b/app/Audit.php @@ -8,4 +8,14 @@ class Audit extends Model { protected $table = 'audit'; protected $connection = 'mysql7'; -} \ No newline at end of file + protected $fillable = [ + 'users', + 'actions', + 'norujukan', + 'new_data', + 'old_data', + 'kodcaw', + 'created_at', + 'updated_at', + ]; +} diff --git a/app/Daerah.php b/app/Daerah.php index 70cfd67..6818f7b 100644 --- a/app/Daerah.php +++ b/app/Daerah.php @@ -3,6 +3,7 @@ namespace App; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; class Daerah extends Model { @@ -14,7 +15,7 @@ class Daerah extends Model * @var array */ // protected $fillable = [ - + // ]; /** @@ -23,4 +24,9 @@ class Daerah extends Model * @var array */ // protected $hidden = []; -} \ No newline at end of file + + public function negeri(): BelongsTo + { + return $this->belongsTo(Negeri::class, 'kodnegeri', 'kodnegeri'); + } +} diff --git a/app/Http/Controllers/DaerahController.php b/app/Http/Controllers/DaerahController.php index 56c4b80..e6c4b57 100644 --- a/app/Http/Controllers/DaerahController.php +++ b/app/Http/Controllers/DaerahController.php @@ -7,6 +7,12 @@ use Illuminate\Http\Request; class DaerahController extends Controller { + public function index() + { + $daerah = Daerah::on('mysql7')->with('negeri')->get(); + return response()->json($daerah); + } + public function showOneDaerah($koddaerah) { $daerah = Daerah::on('mysql7') @@ -20,7 +26,7 @@ class DaerahController extends Controller $daerah = Daerah::on('mysql7') ->where('kodnegeri','=',$kodnegeri) ->get(); - + return response()->json($daerah); } -} \ No newline at end of file +} diff --git a/app/Http/Controllers/PoskodController.php b/app/Http/Controllers/PoskodController.php index 5179caa..ed4fdaf 100644 --- a/app/Http/Controllers/PoskodController.php +++ b/app/Http/Controllers/PoskodController.php @@ -2,22 +2,121 @@ namespace App\Http\Controllers; +use App\Daerah; +use App\Negeri; use App\Poskod; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\ValidationException; class PoskodController extends Controller { - public function showAllPoskod(){ - $poskod = Poskod::on('mysql7')->get(); - - return response()->json($poskod); + public function showAllPoskod() + { + $poskod = Poskod::on('mysql7') + ->with(['negeri:kodnegeri,negeri', 'daerah:koddaerah,namadaerah']) + ->when(request()->query_string, function ($q) { + return $q + ->where('poskod', 'like', '%' . request()->query_string . '%') + ->orWhereHas('negeri', function ($b) { + $b->where(DB::raw('lower(negeri)'), 'like', '%' . strtolower(request()->query_string) . '%'); + }) + ->orWhereHas('daerah', function ($b) { + $b->where(DB::raw('lower(namadaerah)'), 'like', '%' . strtolower(request()->query_string) . '%'); + }); + }) + ->paginate(12); + + return response() + ->json($poskod) + ->header('query_string', request()->query_string); } public function showOnePoskod($poskod) { $poskod = Poskod::on('mysql7') - ->where('poskod','=',$poskod) - ->first(); + ->with(['negeri:kodnegeri,negeri', 'daerah:koddaerah,namadaerah']) + ->where('poskod', '=', $poskod) + ->first(); + return response()->json($poskod); } -} \ No newline at end of file + + public function store(Request $request) + { + + try { + $validated = $this->validate($request, [ + 'poskod' => 'required|numeric|digits:5|unique:poskod,poskod', + 'koddaerah' => 'required|numeric', + 'kodnegeri' => 'required|numeric', + ]); + } catch (ValidationException $e) { + return response()->json($e, 403); + } + + $created_poskod = Poskod::create([ + 'poskod' => $validated['poskod'], + 'koddaerah' => $validated['koddaerah'], + 'kodnegeri' => $validated['kodnegeri'], + ]); + + return response()->json($created_poskod, 200); + } + + public function update(Request $request) + { + $poskod = Poskod::find($request->recno); + + try { + $validated = $this->validate($request, [ + 'poskod' => 'required|numeric|digits:5|unique:poskod,poskod,' . $poskod->poskod . ',poskod', + 'koddaerah' => 'required|numeric', + 'kodnegeri' => 'required|numeric', + ]); + } catch (ValidationException $e) { + return response()->json($e, 403); + } + + $poskod->update([ + 'poskod' => $validated['poskod'], + 'koddaerah' => $validated['koddaerah'], + 'kodnegeri' => $validated['kodnegeri'], + ]); + + $poskod_changes = $poskod->getChanges(); + + $getProperChanges = function($poskod_changes){ + + $changes = []; + + if(array_key_exists('poskod', $poskod_changes)){ + $poskod = $poskod_changes['poskod']; + + array_push($changes, compact('poskod')); + + } + + if(array_key_exists('koddaerah', $poskod_changes)){ + $daerah = Daerah::where('koddaerah', '=', $poskod_changes['koddaerah'])->first()->namadaerah; + + array_push($changes, compact('daerah')); + + } + + if(array_key_exists('kodnegeri', $poskod_changes)){ + $negeri = Negeri::where('kodnegeri', '=', $poskod_changes['kodnegeri'])->first()->negeri; + + array_push($changes, compact('negeri')); + } + + return array_merge(...$changes); + + }; + + $poskod_changes = $getProperChanges($poskod_changes); + + return response()->json(compact('poskod', 'poskod_changes'), 200); + } +} diff --git a/app/Poskod.php b/app/Poskod.php index 754225c..2051e7c 100644 --- a/app/Poskod.php +++ b/app/Poskod.php @@ -3,24 +3,76 @@ namespace App; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; +use App\Audit; +use Illuminate\Support\Carbon; class Poskod extends Model { protected $table = 'poskod'; + protected $primaryKey = 'recno'; + public $timestamps = false; /** * The attributes that are mass assignable. * * @var array */ - // protected $fillable = [ - - // ]; + protected $fillable = ['poskod', 'koddaerah', 'kodnegeri']; + + public static function boot() + { + parent::boot(); + + $current = Carbon::now(); + $current = new Carbon(); + + static::created(function (Poskod $poskod) use($current){ + + Audit::create([ + 'users' => request()->all()['user']['name'], + 'actions' => 'Tambah poskod', + 'norujukan' => $poskod->recno, + 'new_data' => $poskod->toJson(), + 'old_data' => '', + 'kodcaw' => request()->all()['user']['cawangan'], + 'created_at' => $current, + 'updated_at' => $current, + ]); + + }); + + + static::updated(function (Poskod $poskod) use($current) { + + Audit::create([ + 'users' => request()->all()['user']['name'], + 'actions' => 'Kemaskini poskod', + 'norujukan' => $poskod->recno, + 'new_data' => $poskod->toJson(), + 'old_data' => json_encode($poskod->getOriginal()), + 'kodcaw' => request()->all()['user']['cawangan'], + 'created_at' => $current, + 'updated_at' => $current, + ]); + + }); + } /** * The attributes excluded from the model's JSON form. * * @var array */ - // protected $hidden = []; -} \ No newline at end of file + // protected $hidden = [], + + public function negeri(): BelongsTo + { + return $this->belongsTo(Negeri::class, 'kodnegeri', 'kodnegeri'); + } + + public function daerah(): BelongsTo + { + return $this->belongsTo(Daerah::class, 'koddaerah', 'koddaerah'); + } +} diff --git a/routes/web.php b/routes/web.php index 0ef0f19..826a8a0 100644 --- a/routes/web.php +++ b/routes/web.php @@ -174,6 +174,8 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->get('cawangan/detail/{kodcaw}',['uses'=>'CawanganDetailController@getCawanganDetail']); //Poskod API + $router->post('poskod',['uses'=>'PoskodController@store']); + $router->put('poskod/{poskod}/update',['uses'=>'PoskodController@update']); $router->get('poskod',['uses'=>'PoskodController@showAllPoskod']); $router->get('poskod/{poskod}',['uses'=>'PoskodController@showOnePoskod']); @@ -182,6 +184,7 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->get('negeri/',['uses'=>'NegeriController@NegeriListAll']); //Daerah API + $router->get('daerah',['uses'=>'DaerahController@index']); $router->get('daerah/{koddaerah}',['uses'=>'DaerahController@showOneDaerah']); $router->get('daerahkodnegeri/{kodnegeri}',['uses'=>'DaerahController@showOneNegeri']); @@ -345,7 +348,7 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->put('requestTeller/update/{kodcaw}',['uses' => 'TunaiController@updateRequestTeller']); $router->put('requestTeller/batal/{kodcaw}',['uses' => 'TunaiController@batalRequestTeller']); $router->get('requestTeller/checkproses',['uses'=>'TunaiController@CheckProsesReqTeller']); - + //API DENO PANJAR & DENO PEND-SERAHAN $router->post('requestdenopanjar/{kodcaw}',['uses' => 'PanjarController@createDenoPanjar']); $router->get('getdenopanjar/{kodcaw}',['uses' => 'PanjarController@getDenoPanjar']); @@ -729,7 +732,7 @@ $router->group(['prefix'=>'admin'], function () use ($router){ $router->get('audit/keuntungansebenar',['uses'=>'AdminPageController@KeuntunganSebenarExport']); $router->get('laporan/aging',['uses'=>'AdminPageController@LaporanAging']); $router->get('dashboard/aging',['uses'=>'AdminPageController@DashboardAging']); - + $router->get('laporan/auditcustomer',['uses'=>'AdminPageController@laporanAuditCustomer']); $router->get('ig/keuntungansebenar',['uses'=>'AdminPageController@AkruKeuntunganSebenar']); $router->get('ig/pendapatanterakru',['uses'=>'TebusController@CalculationPendapatanTerakru']); @@ -763,4 +766,3 @@ $router->group(['prefix'=>'kelantanpay'], function () use ($router){ $router->get('gadai/customer',['uses'=>'KelantanPayController@index']); $router->post('payment/gadai',['uses'=>'KelantanPayController@postPayment']); }); -