From 49382636157e1d726cacc0448a597d9a426efb30 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Fri, 2 Jul 2021 10:25:33 +0800 Subject: [PATCH] entity signature api --- .../User/Api/EntitySignatureController.php | 48 +++++ .../User/ContractTemplateObligationModule.php | 1 - .../Modules/User/EntitySignatureModule.php | 178 ++++++++++++++++++ app/Models/Entity.php | 12 +- app/Models/EntitySignature.php | 33 +++- routes/user/api.php | 43 ++++- 6 files changed, 310 insertions(+), 5 deletions(-) create mode 100644 app/Http/Controllers/User/Api/EntitySignatureController.php create mode 100644 app/Http/Modules/User/EntitySignatureModule.php diff --git a/app/Http/Controllers/User/Api/EntitySignatureController.php b/app/Http/Controllers/User/Api/EntitySignatureController.php new file mode 100644 index 0000000..93d7eb4 --- /dev/null +++ b/app/Http/Controllers/User/Api/EntitySignatureController.php @@ -0,0 +1,48 @@ +input('contract_template_id'); $contract_template_id = Hasher::decode('contract_templates', $contract_template_id[0]); $contarct_template = ContractTemplate::find($contract_template_id); diff --git a/app/Http/Modules/User/EntitySignatureModule.php b/app/Http/Modules/User/EntitySignatureModule.php new file mode 100644 index 0000000..971ea15 --- /dev/null +++ b/app/Http/Modules/User/EntitySignatureModule.php @@ -0,0 +1,178 @@ +query(), 'entity_signature_query'); + + $status = $request->get('status', []); + $page = $request->get('page', null); + $limit = $request->get('limit', 10); + + $query = EntitySignature::query(); + + if (!empty($status) > 0) { + $query->whereIn('status', $status); + } + + $user_id = Auth::guard('user-api')->user()->id; + $query->whereHas('entity', function($q) use ($user_id){ + $q->where('user_id', $user_id); + }); + + $query->orderBy('id', 'desc'); + + $params = [ + 'status' => $status, + 'page' => $page + ]; + + $entity_signature_list = $query->paginate($limit); + + $extract = []; + foreach ($entity_signature_list as $key => $row) { + $extract[] = $row; + + } + $pagination = General::paginationGenerator($entity_signature_list, $params, $extract); + + return $pagination; + } + + public static function show(Request $request, $hash_id) + { + $id = Hasher::decode('entity_signatures', $hash_id); + $user_id = Auth::guard('user-api')->user()->id; + $entity_signature = EntitySignature:: + where('id', $id) + ->whereHas('entity', function($q) use ($user_id){ + $q->where('user_id', $user_id); + }) + ->first(); + if ($entity_signature) { + $data = General::returnData($entity_signature, ''); + return response()->json($data); + } + $data = General::returnNotFoundData(); + return response()->json($data); + } + + public static function store(Request $request) + { + $validation = EntitySignatureModule::validation($request); + if (!$validation->status) { + return response()->json($validation, 422); + } + + DB::beginTransaction(); + + $entity_id = $request->input('entity_id'); + $entity_id = Hasher::decode('entities', $entity_id[0]); + $entity = Entity::find($entity_id); + + $name = $request->input('name'); + $type = $request->input('type'); + + $entity_signature = new EntitySignature(); + $entity_signature->entity_id = $entity->id; + $entity_signature->type = $type; + $entity_signature->status = config('constants.entity.status.active'); + $entity_signature->save(); + + // log + EntityModule::makeLog($entity_signature->entity_id, 'user (' . Auth::guard('user-api')->user()->id . ') sugnature created'); + + DB::commit(); + + $query_string = General::getCachePerviousQuery('entity_signature_query'); + $data = General::returnData($entity_signature, $query_string); + + return response()->json($data); + } + + public static function delete(Request $request, $hash_id) + { + $id = Hasher::decode('entity_signatures', $hash_id); + $validation = EntitySignatureModule::validation($request, $hash_id, 'DEL'); + if (!$validation->status) { + return response()->json($validation, 422); + } + + DB::beginTransaction(); + + $entity_signature = EntitySignature::find($id); + $entity_signature->status = config('constants.entity.status.delete'); + $entity_signature->update(); + + // log + EntityModule::makeLog($entity_signature->entity_id, 'user (' . Auth::guard('user-api')->user()->id . ') sugnature delete'); + + DB::commit(); + + $query_string = General::getCachePerviousQuery('entity_signature_query'); + $data = General::returnData($entity_signature, $query_string); + + return response()->json($data); + } + + + private static function validation(Request $request, $id = '', $method = 'POST') + { + $data = $request->all(); + $rule= []; + + if ($method == 'POST') { + $rule = [ + 'entity_id' => ['required', new UnderCheck('entity'), new ExistCheck('entity')], + 'type' => 'required|numeric|gt:-1' + ]; + } + + if ($method == 'DEL') { + $data['id'] = $id; + $rule = [ + 'id' => [new UnderCheck('entity_signature'), new ExistCheck('entity_signature')], + ]; + } + + $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]; + } + } +} diff --git a/app/Models/Entity.php b/app/Models/Entity.php index 52a14ce..93101f2 100644 --- a/app/Models/Entity.php +++ b/app/Models/Entity.php @@ -11,13 +11,23 @@ class Entity extends Model { protected $table = 'entities'; - protected $appends = ['hash_id']; + protected $appends = ['hash_id', 'entity_signature_list']; + + public function entity_signature() + { + return $this->hasMany('App\Models\EntitySignature', 'entity_id'); + } public function getHashIdAttribute() { return Hasher::encode('entities', $this->id); } + public function getEntitySignatureListAttribute() + { + return $this->entity_signature()->get()->makeHidden(['entity_list']); + } + public function getUpdatedAtAttribute($date) { return $date ? Carbon::parse($date)->timezone('Asia/Kuala_Lumpur')->format('Y-m-d') : ''; diff --git a/app/Models/EntitySignature.php b/app/Models/EntitySignature.php index 00135da..bbfcb74 100644 --- a/app/Models/EntitySignature.php +++ b/app/Models/EntitySignature.php @@ -2,10 +2,39 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Factories\HasFactory; +use App\Http\Helpers\Hasher; + use Illuminate\Database\Eloquent\Model; +use Carbon\Carbon; class EntitySignature extends Model { - use HasFactory; + protected $table = 'entity_signatures'; + + protected $appends = ['hash_id', 'entity_list']; + + public function entity() + { + return $this->belongsTo('App\Models\Entity', 'entity_id'); + } + + public function getHashIdAttribute() + { + return Hasher::encode('entity_signatures', $this->id); + } + + public function getEntityListAttribute() + { + return $this->entity()->get()->makeHidden(['entity_signature_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/routes/user/api.php b/routes/user/api.php index 7334ce7..2976ec8 100644 --- a/routes/user/api.php +++ b/routes/user/api.php @@ -52,6 +52,45 @@ Route::group(['namespace' => 'User', 'prefix' => 'user-backsys/api'], function ( ); }); + // Entity Signature + Route::prefix('entity-signature')->group(function () { + Route::get('list', + [ + 'as' => 'api.entity-signature.list', + 'uses' => 'EntitySignatureController@list', + 'middleware' => ['permission:view entity'] + ] + ); + Route::get('show/{hash_id}', + [ + 'as' => 'api.entity-signature.show', + 'uses' => 'EntitySignatureController@show', + 'middleware' => ['permission:view entity'] + ] + ); + Route::post('store', + [ + 'as' => 'api.entity-signature.store', + 'uses' => 'EntitySignatureController@store', + 'middleware' => ['permission:add entity'] + ] + ); + Route::put('update/{hash_id}', + [ + 'as' => 'api.entity-signature.update', + 'uses' => 'EntitySignatureController@update', + 'middleware' => ['permission:edit entity'] + ] + ); + Route::delete('delete/{hash_id}', + [ + 'as' => 'api.entity-signature.delete', + 'uses' => 'EntitySignatureController@delete', + 'middleware' => ['permission:delete entity'] + ] + ); + }); + // Contract Templete Route::prefix('contract-template')->group(function () { Route::get('list', @@ -169,6 +208,8 @@ Route::group(['namespace' => 'User', 'prefix' => 'user-backsys/api'], function ( ); }); - + // contract generate + // contract assign entity + // contract active }); }); \ No newline at end of file