From b23b22583783ba251649ea0e9f24caedf36775b0 Mon Sep 17 00:00:00 2001 From: wahyun Date: Wed, 7 Feb 2024 16:18:44 +0700 Subject: [PATCH] implement user & project limit by paket --- .../Controllers/HumanResourceController.php | 28 +++++++++- app/Http/Controllers/ProjectController.php | 51 +++++++++++++++++-- 2 files changed, 74 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/HumanResourceController.php b/app/Http/Controllers/HumanResourceController.php index 2ea52d7..9b46c9b 100644 --- a/app/Http/Controllers/HumanResourceController.php +++ b/app/Http/Controllers/HumanResourceController.php @@ -8,6 +8,7 @@ use App\Models\UserToProyek; use Illuminate\Http\Request; use App\Models\HumanResource; use App\Models\UserToActivity; +use App\Models\ProductTransaction; use Illuminate\Support\Facades\Artisan; const URL_EMAIL = 'https://notifapp.odm-iu.com/service-mail/notif_mail.php'; @@ -30,7 +31,32 @@ class HumanResourceController extends Controller $data['password'] = md5($request->password); } - $result = HumanResource::create($data); + $transaction = ProductTransaction::query() + ->where('company_id', $request->company_id); + $cloneQueryTransaction = clone $transaction; + + $countCreate = false; + $projectResult = HumanResource::query() + ->selectRaw('count(*) as total_hr') + ->where('company_id', $request->company_id) + ->first(); + if($transaction->where([['type_paket','Basic'],['amount','!=',null]])->exists()) { + if($projectResult['total_hr'] < 10) { + $countCreate = true; + } + } elseif ($cloneQueryTransaction->where([['type_paket','Free'],['amount',0]])->exists()) { + if($projectResult['total_hr'] < 1) { + $countCreate = true; + } + } else { + $countCreate = true; + } + + if($countCreate) { + $result = HumanResource::create($data); + } else { + return response()->json(['status' => 'failed', 'message' => 'Limited to create human resource!', 'code' => 500], 500); + } if ($result) { return response()->json(['status' => 'success', 'message' => 'Human Resource Pool successfull created', 'code' => 200]); diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index 0254307..b5ef259 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -38,8 +38,10 @@ use App\Models\ProjectParticipants; use App\Models\FolderDocumentProyek; use App\Models\ProjectToChecklistK3; use App\Helpers\MasterFunctionsHelper; +use App\Models\ProductTransaction; use App\Models\ReportActivityMaterial; use Illuminate\Support\Facades\Artisan; +use Illuminate\Database\Query\Builder; const API_GEOLOCATION = "https://nominatim.oslogdev.com/search/ADDR?format=json&addressdetails=1&limit=1"; @@ -63,10 +65,36 @@ class ProjectController extends Controller $data['created_by'] = $this->currentName; $data['created_by_id'] = $this->currentId; - if (empty($data['phase_id'])) - $data['phase_id'] = 1; - - $result = Project::create($data); + if (empty($data['phase_id'])) { + $data['phase_id'] = 1; + } + + $transaction = ProductTransaction::query() + ->where('company_id', $request->company_id); + $cloneQueryTransaction = clone $transaction; + + $countCreate = false; + $projectResult = Project::query() + ->selectRaw('count(*) as total_project') + ->where('company_id', $request->company_id) + ->first(); + if($transaction->where([['type_paket','Basic'],['amount','!=',null]])->exists()) { + if($projectResult['total_project'] < 10) { + $countCreate = true; + } + } elseif ($cloneQueryTransaction->where([['type_paket','Free'],['amount',0]])->exists()) { + if($projectResult['total_project'] < 1) { + $countCreate = true; + } + } else { + $countCreate = true; + } + + if($countCreate) { + $result = Project::create($data); + } else { + return response()->json(['status' => 'failed', 'message' => 'Limited to create project!', 'code' => 500], 500); + } if (!$result) return response()->json(['status' => 'failed', 'message' => 'Failed to add data!', 'code' => 500], 500); @@ -531,6 +559,21 @@ class ProjectController extends Controller return response()->json(['status' => 'success', 'message' => 'Set baseline success!', 'code' => 200], 200); } + public function setBaselineActivity($activity_id, $gantt_id) + { + $activity = Activity::where([ + ["version_gantt_id", $gantt_id], + ['id',$activity_id] + ])->first(); + $activity->update([ + "planned_start" => $activity->start_date, + "planned_end" => $activity->end_date, + "early_start" => $activity->start_date, + "early_end" => $activity->end_date, + ]); + return response()->json(['status' => 'success', 'message' => 'Set baseline activity success!', 'code' => 200], 200); + } + public function getInvoiceIntegration(Request $request) { $ganttCount = VersionGantt::where('proyek_id', $request->id)->count();