From fca442fb7c10cb32f40cfcb170d8c15ad808e0e3 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Sat, 17 Jul 2021 14:14:49 +0800 Subject: [PATCH] api contract template obligation contract template dependency --- ...onContractTemplateDependencyController.php | 48 +++++ ...gationContractTemplateDependencyModule.php | 187 ++++++++++++++++++ ...ObligationContractTemplateDependencies.php | 11 -- ...teObligationContractTemplateDependency.php | 66 +++++++ config/constants.php | 7 + routes/user/api.php | 41 +++- 6 files changed, 348 insertions(+), 12 deletions(-) create mode 100644 app/Http/Controllers/User/Api/ContractTemplateObligationContractTemplateDependencyController.php create mode 100644 app/Http/Modules/User/ContractTemplateObligationContractTemplateDependencyModule.php delete mode 100644 app/Models/ContractTemplateObligationContractTemplateDependencies.php create mode 100644 app/Models/ContractTemplateObligationContractTemplateDependency.php diff --git a/app/Http/Controllers/User/Api/ContractTemplateObligationContractTemplateDependencyController.php b/app/Http/Controllers/User/Api/ContractTemplateObligationContractTemplateDependencyController.php new file mode 100644 index 0000000..abde862 --- /dev/null +++ b/app/Http/Controllers/User/Api/ContractTemplateObligationContractTemplateDependencyController.php @@ -0,0 +1,48 @@ +query(), 'contract_template_obligation_contract_template_dependency_query'); + + $name = $request->get('name', null); + $status = $request->get('status', []); + $page = $request->get('page', null); + $limit = $request->get('limit', 10); + + $query = ContractTemplateObligationContractTemplateDependency::query(); + + if (strlen($name) > 0) { + $query->where('name', 'like', '%' . $name . '%'); + } + + if (!empty($status) > 0) { + $query->whereIn('status', $status); + } + + $query->where('user_id', Auth::guard('user-api')->user()->id); + + $query->orderBy('id', 'desc'); + + $params = [ + 'name' => $name, + 'status' => $status, + 'page' => $page + ]; + + $contract_template_obligation_contract_template_dependency_list = $query->paginate($limit); + + $extract = []; + foreach ($contract_template_obligation_contract_template_dependency_list as $key => $row) { + $extract[] = $row; + + } + $pagination = General::paginationGenerator($contract_template_obligation_contract_template_dependency_list, $params, $extract); + + return $pagination; + } + + public static function show(Request $request, $hash_id) + { + $id = Hasher::decode('contract_template_obligation_contract_template_dependencies', $hash_id); + $contract_template_obligation_contract_template_dependency = ContractTemplateObligationContractTemplateDependency::find($id); + if ($contract_template_obligation_contract_template_dependency) { + $data = General::returnData($contract_template_obligation_contract_template_dependency, ''); + return response()->json($data); + } + $data = General::returnNotFoundData(); + return response()->json($data); + } + + public static function store(Request $request) + { + $validation = ContractTemplateObligationContractTemplateDependencyModule::validation($request); + if (!$validation->status) { + return response()->json($validation, 422); + } + + DB::beginTransaction(); + + $contract_template_obligation_id = $request->input('contract_template_obligation_id'); + $contract_template_obligation_id = Hasher::decode('contract_template_obligations', $contract_template_obligation_id[0]); + $contarct_template_obligation = ContractTemplateObligation::find($contract_template_obligation_id); + + $depend_contract_template_id = $request->input('depend_contract_template_id'); + $depend_contract_template_id = Hasher::decode('contract_templates', $depend_contract_template_id[0]); + $depend_contract_template = ContractTemplate::find($depend_contract_template_id); + + $contract_template_obligation_contract_template_dependency = new ContractTemplateObligationContractTemplateDependency(); + $contract_template_obligation_contract_template_dependency->user_id = Auth::guard('user-api')->user()->id; + $contract_template_obligation_contract_template_dependency->contract_template_obligation_id = $contarct_template_obligation->id; + $contract_template_obligation_contract_template_dependency->depend_contract_template_id = $depend_contract_template->id; + $contract_template_obligation_contract_template_dependency->status = config('constants.contract_template_obligation_contract_template_dependency.status.active'); + $contract_template_obligation_contract_template_dependency->save(); + + // log + ContractTemplateObligationModule::makeLog($contract_template_obligation_contract_template_dependency->contract_template_obligation_id, 'user (' . Auth::guard('user-api')->user()->id . ') created contract dependency'); + + DB::commit(); + + $query_string = General::getCachePerviousQuery('contract_template_obligation_contract_template_dependency_query'); + $data = General::returnData($contract_template_obligation_contract_template_dependency, $query_string); + + return response()->json($data); + } + + public static function delete(Request $request, $hash_id) + { + $id = Hasher::decode('contract_template_obligation_contract_template_dependencies', $hash_id); + $validation = ContractTemplateObligationContractTemplateDependencyModule::validation($request, $hash_id, 'DEL'); + if (!$validation->status) { + return response()->json($validation, 422); + } + + DB::beginTransaction(); + + $contract_template_obligation_contract_template_dependency = ContractTemplateObligationContractTemplateDependency::find($id); + $contract_template_obligation_contract_template_dependency->status = config('constants.contract_template_obligation_contract_template_dependency.status.delete'); + $contract_template_obligation_contract_template_dependency->update(); + + // log + ContractTemplateObligationModule::makeLog($contract_template_obligation_contract_template_dependency->contract_template_obligation_id, 'user (' . Auth::guard('user-api')->user()->id . ') delete dependency'); + + DB::commit(); + + $query_string = General::getCachePerviousQuery('contract_template_obligation_contract_template_dependency_query'); + $data = General::returnData($contract_template_obligation_contract_template_dependency, $query_string); + + return response()->json($data); + } + + + private static function validation(Request $request, $id = '', $method = 'POST') + { + $data = $request->all(); + $rule= []; + + if ($method == 'POST') { + $rule = [ + 'contract_template_obligation_id' => [ + 'required', + new UnderCheck('contract_template_obligation'), + new ExistCheck('contract_template_obligation'), + // new ContractTemplateObligationDependencyCheck($data['depend_contract_template_obligation_id'] ?? []) + ], + 'depend_contract_template_id' => [ + 'required', + new UnderCheck('contract_template'), + new ExistCheck('contract_template') + ], + ]; + } + + if ($method == 'DEL') { + $data['id'] = $id; + $rule = [ + 'id' => [new UnderCheck('contract_template_obligation_contract_template_dependency'), new ExistCheck('contract_template_obligation_contract_template_dependency')], + ]; + } + + $validator = Validator::make($data, $rule, config('error_code')); + + $errors = $validator->errors(); + + if ($validator->fails()) { + $data = General::returnErrorData($errors); + return $data; + } + else { + return (object)['status' => true]; + } + } +} \ No newline at end of file diff --git a/app/Models/ContractTemplateObligationContractTemplateDependencies.php b/app/Models/ContractTemplateObligationContractTemplateDependencies.php deleted file mode 100644 index 5e20a7b..0000000 --- a/app/Models/ContractTemplateObligationContractTemplateDependencies.php +++ /dev/null @@ -1,11 +0,0 @@ -belongsTo('App\Models\ContractTemplateObligation', 'contract_template_obligation_id'); + } + + public function depend_contract_template() + { + return $this->belongsTo('App\Models\ContractTemplate', 'depend_contract_template_id'); + } + + public function getHashIdAttribute() + { + return Hasher::encode('contract_template_obligation_contract_template_dependencies', $this->id); + } + + public function getContractTemplateObligationHashIdAttribute() + { + return Hasher::encode('contract_template_obligations', $this->contract_template_obligation_id); + } + + public function getDependContractTemplateHashIdAttribute() + { + return Hasher::encode('contract_templates', $this->depend_contract_template_id); + } + + public function getContractTemplateObligationListAttribute() + { + return $this->contract_template_obligation()->get()->makeHidden(['contract_template_obligation_dependency_list', 'depend_contract_template_obligation_dependency_list']); + } + + public function getDependContractTemplateListAttribute() + { + return $this->depend_contract_template()->get()->makeHidden(['contract_template_obligation_list']); + } + + public function getUpdatedAtAttribute($date) + { + return $date ? Carbon::parse($date)->timezone('Asia/Kuala_Lumpur')->format('Y-m-d') : ''; + } + + public function getCreatedAtAttribute($date) + { + return $date ? Carbon::parse($date)->timezone('Asia/Kuala_Lumpur')->format('Y-m-d') : ''; + } +} diff --git a/config/constants.php b/config/constants.php index f7a3e2b..bfabad6 100644 --- a/config/constants.php +++ b/config/constants.php @@ -39,6 +39,13 @@ 'pending' => 9 ] ], + 'contract_template_obligation_contract_template_dependency' => [ + 'status' => [ + 'active' => 1, + 'delete' => 2, + 'pending' => 9 + ] + ], 'contact' => [ 'status' => [ 'active' => 1, diff --git a/routes/user/api.php b/routes/user/api.php index e7b47d5..0d7ea7f 100644 --- a/routes/user/api.php +++ b/routes/user/api.php @@ -200,7 +200,7 @@ Route::group(['namespace' => 'User', 'prefix' => 'user-backsys/api'], function ( ); }); - // Contract Templete Obligation + // Contract Templete Obligation Dependency Route::prefix('contract-template-obligation-dependency')->group(function () { Route::get('list', [ @@ -239,6 +239,45 @@ Route::group(['namespace' => 'User', 'prefix' => 'user-backsys/api'], function ( ); }); + // Contract Templete Obligation Contract Template Dependency + Route::prefix('contract-template-obligation-contract-template-dependency')->group(function () { + Route::get('list', + [ + 'as' => 'api.contract-template-obligation-contract-template-dependency.list', + 'uses' => 'ContractTemplateObligationContractTemplateDependencyController@list', + 'middleware' => ['permission:view contract_template_obligation_dependency'] + ] + ); + Route::get('show/{hash_id}', + [ + 'as' => 'api.contract-template-obligation-contract-template-dependency.show', + 'uses' => 'ContractTemplateObligationContractTemplateDependencyController@show', + 'middleware' => ['permission:view contract_template_obligation_dependency'] + ] + ); + Route::post('store', + [ + 'as' => 'api.contract-template-obligation-contract-template-dependency.store', + 'uses' => 'ContractTemplateObligationContractTemplateDependencyController@store', + 'middleware' => ['permission:add contract_template_obligation_dependency'] + ] + ); + Route::put('update/{hash_id}', + [ + 'as' => 'api.contract-template-obligation-contract-template-dependency.update', + 'uses' => 'ContractTemplateObligationContractTemplateDependencyController@update', + 'middleware' => ['permission:edit contract_template_obligation_dependency'] + ] + ); + Route::delete('delete/{hash_id}', + [ + 'as' => 'api.contract-template-obligation-contract-template-dependency.delete', + 'uses' => 'ContractTemplateObligationContractTemplateDependencyController@delete', + 'middleware' => ['permission:delete contract_template_obligation_dependency'] + ] + ); + }); + // Contract Route::prefix('contract')->group(function () {