From 812191032cd262f1376f8b3a483b3b2f4f6510b4 Mon Sep 17 00:00:00 2001 From: "afiq.hamzah" Date: Mon, 6 Mar 2023 10:33:22 +0800 Subject: [PATCH 1/4] Add backend operation to use with MyKad reader feature --- app/Daerah.php | 10 ++++++-- app/Http/Controllers/DaerahController.php | 10 ++++++-- app/Http/Controllers/PoskodController.php | 28 +++++++++++++++++++---- app/Poskod.php | 11 +++++---- routes/web.php | 7 +++--- 5 files changed, 50 insertions(+), 16 deletions(-) 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..1899bd5 100644 --- a/app/Http/Controllers/PoskodController.php +++ b/app/Http/Controllers/PoskodController.php @@ -7,17 +7,35 @@ use Illuminate\Http\Request; class PoskodController extends Controller { - public function showAllPoskod(){ + + public function showAllPoskod() + { $poskod = Poskod::on('mysql7')->get(); - + return response()->json($poskod); } public function showOnePoskod($poskod) { $poskod = Poskod::on('mysql7') - ->where('poskod','=',$poskod) - ->first(); + ->where('poskod', '=', $poskod) + ->first(); return response()->json($poskod); } -} \ No newline at end of file + + public function store(Request $request) + { + + if (Poskod::where('poskod', $request->poskod)->exists()) { + return response()->json('Poskod creation forbidden, already exist', 403); + } + + $created_poskod = Poskod::create([ + 'poskod' => $request->poskod, + 'koddaerah' => $request->koddaerah, + 'kodnegeri' => $request->kodnegeri, + ]); + + return response()->json($created_poskod, 200); + } +} diff --git a/app/Poskod.php b/app/Poskod.php index 754225c..822cbcb 100644 --- a/app/Poskod.php +++ b/app/Poskod.php @@ -7,15 +7,18 @@ use Illuminate\Database\Eloquent\Model; class Poskod extends Model { protected $table = 'poskod'; + public $timestamps = false; /** * The attributes that are mass assignable. * * @var array */ - // protected $fillable = [ - - // ]; + protected $fillable = [ + 'poskod', + 'koddaerah', + 'kodnegeri', + ]; /** * The attributes excluded from the model's JSON form. @@ -23,4 +26,4 @@ class Poskod extends Model * @var array */ // protected $hidden = []; -} \ No newline at end of file +} diff --git a/routes/web.php b/routes/web.php index da770ab..f1027cc 100644 --- a/routes/web.php +++ b/routes/web.php @@ -174,6 +174,7 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->get('cawangan/detail/{kodcaw}',['uses'=>'CawanganDetailController@getCawanganDetail']); //Poskod API + $router->post('poskod',['uses'=>'PoskodController@store']); $router->get('poskod',['uses'=>'PoskodController@showAllPoskod']); $router->get('poskod/{poskod}',['uses'=>'PoskodController@showOnePoskod']); @@ -182,6 +183,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 +347,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']); @@ -727,7 +729,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']); @@ -755,4 +757,3 @@ $router->group(['prefix'=>'kelantanpay'], function () use ($router){ $router->get('gadai/customer',['uses'=>'KelantanPayController@index']); $router->post('payment/gadai',['uses'=>'KelantanPayController@postPayment']); }); - From 5e94cae9a0e76532d04f2dacdfa031450ced29c6 Mon Sep 17 00:00:00 2001 From: "afiq.hamzah" Date: Thu, 16 Mar 2023 16:38:08 +0800 Subject: [PATCH 2/4] Add endpoint and backend for managing postcode --- app/Http/Controllers/PoskodController.php | 44 ++++++++++++++++++++--- app/Poskod.php | 11 ++++++ routes/web.php | 1 + 3 files changed, 52 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/PoskodController.php b/app/Http/Controllers/PoskodController.php index 1899bd5..4d75703 100644 --- a/app/Http/Controllers/PoskodController.php +++ b/app/Http/Controllers/PoskodController.php @@ -4,22 +4,40 @@ namespace App\Http\Controllers; use App\Poskod; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Log; class PoskodController extends Controller { public function showAllPoskod() { - $poskod = Poskod::on('mysql7')->get(); + $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); + + return response() + ->json($poskod) + ->header('query_string', request()->query_string); } public function showOnePoskod($poskod) { $poskod = Poskod::on('mysql7') + ->with(['negeri:kodnegeri,negeri', 'daerah:koddaerah,namadaerah']) ->where('poskod', '=', $poskod) ->first(); + return response()->json($poskod); } @@ -27,10 +45,10 @@ class PoskodController extends Controller { if (Poskod::where('poskod', $request->poskod)->exists()) { - return response()->json('Poskod creation forbidden, already exist', 403); + return response()->json("Daftar poskod tidak dibenarkan, poskod {$request->poskod} sudah wujud", 403); } - $created_poskod = Poskod::create([ + $created_poskod = Poskod::create([ 'poskod' => $request->poskod, 'koddaerah' => $request->koddaerah, 'kodnegeri' => $request->kodnegeri, @@ -38,4 +56,22 @@ class PoskodController extends Controller return response()->json($created_poskod, 200); } + + public function update(Request $request) + { + + if (Poskod::where('poskod', $request->poskod)->exists()) { + return response()->json("Kemaskini poskod tidak dibenarkan, poskod {$request->poskod} sudah wujud", 403); + } + + $updated_poskod = Poskod::find($request->recno); + + $updated_poskod->update([ + 'poskod' => $request->poskod, + 'koddaerah' => $request->koddaerah, + 'kodnegeri' => $request->kodnegeri, + ]); + + return response()->json($updated_poskod, 200); + } } diff --git a/app/Poskod.php b/app/Poskod.php index 822cbcb..af2b2fc 100644 --- a/app/Poskod.php +++ b/app/Poskod.php @@ -3,10 +3,12 @@ namespace App; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; class Poskod extends Model { protected $table = 'poskod'; + protected $primaryKey = 'recno'; public $timestamps = false; /** @@ -26,4 +28,13 @@ class Poskod extends Model * @var array */ // 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 8584c80..826a8a0 100644 --- a/routes/web.php +++ b/routes/web.php @@ -175,6 +175,7 @@ $router->group(['prefix'=>'api'], function () use ($router){ //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']); From 535515ca24a84546c60deef175506817066bcfaf Mon Sep 17 00:00:00 2001 From: "afiq.hamzah" Date: Sun, 19 Mar 2023 19:35:49 +0800 Subject: [PATCH 3/4] Add validations --- app/Http/Controllers/PoskodController.php | 91 +++++++++++++++++------ 1 file changed, 68 insertions(+), 23 deletions(-) diff --git a/app/Http/Controllers/PoskodController.php b/app/Http/Controllers/PoskodController.php index 4d75703..ed4fdaf 100644 --- a/app/Http/Controllers/PoskodController.php +++ b/app/Http/Controllers/PoskodController.php @@ -2,30 +2,32 @@ 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') ->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) . '%'); - }); + 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); @@ -44,14 +46,20 @@ class PoskodController extends Controller public function store(Request $request) { - if (Poskod::where('poskod', $request->poskod)->exists()) { - return response()->json("Daftar poskod tidak dibenarkan, poskod {$request->poskod} sudah wujud", 403); + 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' => $request->poskod, - 'koddaerah' => $request->koddaerah, - 'kodnegeri' => $request->kodnegeri, + 'poskod' => $validated['poskod'], + 'koddaerah' => $validated['koddaerah'], + 'kodnegeri' => $validated['kodnegeri'], ]); return response()->json($created_poskod, 200); @@ -59,19 +67,56 @@ class PoskodController extends Controller public function update(Request $request) { + $poskod = Poskod::find($request->recno); - if (Poskod::where('poskod', $request->poskod)->exists()) { - return response()->json("Kemaskini poskod tidak dibenarkan, poskod {$request->poskod} sudah wujud", 403); + 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); } - $updated_poskod = Poskod::find($request->recno); - - $updated_poskod->update([ - 'poskod' => $request->poskod, - 'koddaerah' => $request->koddaerah, - 'kodnegeri' => $request->kodnegeri, + $poskod->update([ + 'poskod' => $validated['poskod'], + 'koddaerah' => $validated['koddaerah'], + 'kodnegeri' => $validated['kodnegeri'], ]); - return response()->json($updated_poskod, 200); + $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); } } From 50ab73701ad889fa327f37ae58e6f7b243b08267 Mon Sep 17 00:00:00 2001 From: "afiq.hamzah" Date: Thu, 23 Mar 2023 12:42:02 +0800 Subject: [PATCH 4/4] Add record audit action when poskod created/updated --- app/Audit.php | 12 ++++++++++- app/Poskod.php | 56 ++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 58 insertions(+), 10 deletions(-) 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/Poskod.php b/app/Poskod.php index af2b2fc..2051e7c 100644 --- a/app/Poskod.php +++ b/app/Poskod.php @@ -4,6 +4,8 @@ namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; +use App\Audit; +use Illuminate\Support\Carbon; class Poskod extends Model { @@ -16,25 +18,61 @@ class Poskod extends Model * * @var array */ - protected $fillable = [ - 'poskod', - 'koddaerah', - 'kodnegeri', - ]; + 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 = []; + // protected $hidden = [], - public function negeri(): BelongsTo { + public function negeri(): BelongsTo + { return $this->belongsTo(Negeri::class, 'kodnegeri', 'kodnegeri'); } - - public function daerah(): BelongsTo { + public function daerah(): BelongsTo + { return $this->belongsTo(Daerah::class, 'koddaerah', 'koddaerah'); } }