diff --git a/app/Helpers/MasterFunctionsHelper.php b/app/Helpers/MasterFunctionsHelper.php index 6d75174..5c9764f 100644 --- a/app/Helpers/MasterFunctionsHelper.php +++ b/app/Helpers/MasterFunctionsHelper.php @@ -428,7 +428,7 @@ class MasterFunctionsHelper } $lastReal = $tempPercentageReal[count($tempPercentageReal) - 1]; - $totalBCWP = $lastReal * $totalBCWP; + $totalBCWP = $lastReal * $dataProject->rencana_biaya / 100; $dataResponse = array( "date" => $tempDate, "percentage" => $tempPercentage, @@ -723,7 +723,7 @@ class MasterFunctionsHelper } $lastReal = $tempPercentageReal[count($tempPercentageReal) - 1]; - $totalBCWP = $lastReal * $totalBCWP; + $totalBCWP = $lastReal * $dataProject->rencana_biaya / 100; $dataResponse = array( "date" => $tempDate, "percentage" => $tempPercentage, diff --git a/app/Http/Controllers/BroadcastController.php b/app/Http/Controllers/BroadcastController.php index 5bb223e..87eb02d 100644 --- a/app/Http/Controllers/BroadcastController.php +++ b/app/Http/Controllers/BroadcastController.php @@ -15,6 +15,12 @@ class BroadcastController extends Controller $data = $request->all(); $data['status_send'] = true; $data['created_by'] = $this->currentName; + if (isset($data['send_to_id'])) { + $idArray = $data['send_to_id']; + if (is_array($data['send_to_id'])) { + $data['send_to_id'] = implode(", ", $idArray); + } + } // dd($data); $result = Broadcast::create($data); if($result){ @@ -140,8 +146,10 @@ class BroadcastController extends Controller } break; - case 'user': - $user = User::where("id", $data['send_to_id'])->whereNotNull('fcm_token')->first(); + case 'users': + $idArray = explode(", ", $data['send_to_id']); + foreach ($idArray as $key => $value) { + $user = User::where("id", $value)->whereNotNull('fcm_token')->first(); if (isset($user)) { FCMService::send( $user->fcm_token, @@ -151,6 +159,7 @@ class BroadcastController extends Controller ] ); } + } break; default: diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index b6537f7..507129d 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -1,313 +1,313 @@ -currentDate = date("Y-m-d H:i:s"); - $this->currentName = auth()->user() ? auth()->user()->name : "system"; - $this->currentId = auth()->user() ? auth()->user()->id : 0; - - $this->pathImage = config('assets.image'); - $this->pathDocument = config('assets.project'); - $this->pathActivityDocument = config('assets.activity'); - } - - protected function setUpPayload($condition, $tableSelf) - { - $alias = "selfTable"; - $builder = DB::table($tableSelf." AS ".$alias); - // $builder = $builder->select($alias.".*"); - if($condition){ - if(isset($condition['select'])){ - foreach($condition['select'] as $select){ - $builder = $builder->addSelect($alias.".".$select); - } - }else{ - $builder = $builder->addSelect($alias.".*"); - } - if(isset($condition['joins'])){ - $selectColumn = []; - $no = 0; - foreach($condition['joins'] as $join){ - $tableJoin = isset($join['name1']) ? $join['name1'] : $alias; - $tableName = $join['name']; - $columnJoin = $join['column_join']; // foreign key table sini - $columnSelf = isset($join['column_self']) ? $join['column_self'] : "id"; // primary key table lawan - $columnResult = $join['column_results']; - - foreach($columnResult as $sColumn){ - $builder = $builder->addSelect($tableName.".".$sColumn." as join_".$this->listJoinAll[$no]."_".$sColumn); - } - $builder = $builder->leftJoin($tableName, $tableJoin.".".$columnJoin, '=', $tableName.'.'.$columnSelf); - $no++; - } - } - - if(isset($condition['columns'])){ - $listWhere = $condition['columns']; - - $builder = $builder->where(function ($query) use($listWhere, $alias){ - foreach($listWhere as $where){ - $value = $where['value']; - if($value && $value!="" && $value!=" "){ - $column = $where['name']; - $operator = strtolower($where['logic_operator']); // like, =, <>, range - $value2 = isset($where['value1']) ? $where['value1'] : ""; - $tableColumn = isset($where['table_name']) ? $where['table_name'] : $alias; - $query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); - } - } - }); - } - - if(isset($condition['group_column'])){ - $builder = $this->groupWhere($builder, $condition['group_column'], $alias); - } - - $data['count'] = clone $builder; - - if(isset($condition['paging'])){ - $builder = $builder->offset($condition['paging']['start'])->limit($condition['paging']['length']); - } - - if(isset($condition['orders'])){ - $orders = $condition['orders']; - $sortBy = $orders['ascending'] ? "ASC" : "DESC"; - $columnOrder = $orders['columns']; - foreach($columnOrder as $column){ - $builder = $builder->orderBy($alias.".".$column, $sortBy); - } - } - } - $data['builder'] = $builder; - return $data; - } - - private function groupWhere($oldBuilder, $groupWhere, $alias) - { - $builder = $oldBuilder; - $listGroupWhere = $groupWhere; - $operator = $listGroupWhere['operator']; - $operatorGroup = $listGroupWhere['group_operator']; - $listWhere = $listGroupWhere['where']; - if(strtolower($operator)=="and"){ - $builder = $builder->where(function($query) use($operatorGroup, $listWhere, $alias){ - $no = 1; - foreach ($listWhere as $where) { - $value = $where['value']; - $column = $where['name']; - $operator = strtolower($where['logic_operator']); - $value2 = isset($where['value1']) ? $where['value1'] : ""; - $tableColumn = isset($where['table_name']) ? $where['table_name'] : $alias; - if($value && $value!="" && $value!=" "){ - if($operatorGroup=="and"){ - $query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); - }else{ - if($no==1){ - $query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); - }else{ - $query = $this->orWhereCondition($query, $operator, $tableColumn, $column, $value, $value2); - } - } - } - $no = $no+1; - } - }); - }else if(strtolower($operator)=="or"){ - $builder = $builder->orWhere(function($query) use($operatorGroup, $listWhere, $alias){ - $no = 1; - foreach ($listWhere as $where) { - $value = $where['value']; - $column = $where['name']; - $operator = strtolower($where['logic_operator']); - $value2 = isset($where['value1']) ? $where['value1'] : ""; - $tableColumn = isset($where['table_name']) ? $where['table_name'] : $alias; - if($value && $value!="" && $value!=" "){ - if($operatorGroup=="and"){ - $query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); - }else{ - if($no==1){ - $query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); - }else{ - $query = $this->orWhereCondition($query, $operator, $tableColumn, $column, $value, $value2); - } - } - } - $no++; - } - }); - } - return $builder; - } - - private function whereCondition($oldQuery, $operator, $tableColumn, $column, $value, $value2) - { - $query = $oldQuery; - if($operator=="range"){ - $query = $query->whereBetween($tableColumn.".".$column, [$value, $value2]); - }else if($operator=="like"){ - $query = $query->where($tableColumn.".".$column, 'like', '%'.$value.'%'); - }else if($operator=="ilike"){ - $query = $query->where($tableColumn.".".$column, '~*', $value); - }else if($operator=="="){ - $query = $query->where($tableColumn.".".$column, $value); - }else if($operator=="in"){ - $query = $query->whereIn($tableColumn.".".$column, $value); - }else if($operator=="notin"){ - $query = $query->whereNotIn($tableColumn.".".$column, $value); - }else{ - $query = $query->where($tableColumn.".".$column, $operator, $value); - } - return $query; - } - - private function whereConditionSingleTable($oldQuery, $operator, $column, $value, $value2){ - $query = $oldQuery; - if($operator=="range"){ - $query = $query->whereBetween($column, [$value, $value2]); - }else if($operator=="like"){ - $query = $query->where($column, 'like', '%'.$value.'%'); - }else if($operator=="ilike"){ - $query = $query->where($column, '~*', $value); - }else if($operator=="="){ - $query = $query->where($column, $value); - }else if($operator=="in"){ - $query = $query->whereIn($column, $value); - }else if($operator=="notin"){ - $query = $query->whereNotIn($column, $value); - }else{ - $query = $query->where($column, $operator, $value); - } - return $query; - } - - private function orWhereCondition($oldQuery, $operator, $tableColumn, $column, $value, $value2) - { - $query = $oldQuery; - if($operator=="range"){ - $query = $query->orWhereBetween($tableColumn.".".$column, [$value, $value2]); - }else if($operator=="like"){ - $query = $query->orWhere($tableColumn.".".$column, 'like', '%'.$value.'%'); - }else if($operator=="ilike"){ - $query = $query->where($tableColumn.".".$column, '~*', $value); - }else if($operator=="="){ - $query = $query->orWhere($tableColumn.".".$column, $value); - }else if($operator=="in"){ - $query = $query->orWhereIn($tableColumn.".".$column, $value); - }else if($operator=="notin"){ - $query = $query->orWhereNotIn($tableColumn.".".$column, $value); - }else{ - $query = $query->orWhere($tableColumn.".".$column, $operator, $value); - } - return $query; - } - - protected function calculateAllCost($activity_id, $proyek_id){ - $humanCostPlanning = $this->calculateAllHumanCost($activity_id, $proyek_id); - $materialCostPlanning = $this->calculateMaterialCost($activity_id, $proyek_id); - $toolsCostPlanning = 0; - - $allCost = $humanCostPlanning + $materialCostPlanning + $toolsCostPlanning; - return $allCost; - } - - private function calculateAllHumanCost($activity_id, $proyek_id) - { - $dataHuman = UserToActivity::select("ahp.standart_rate as standart_rate","ahp.max_used as max_used", "ahp.cost_per_used as cost_per_used", "ahp.uom_standart_rate as uom_standart_rate") - ->leftJoin("assign_hr_to_proyek as ahp", "assign_hr_to_activity.user_id", "=", "ahp.user_id") - ->where("assign_hr_to_activity.activity_id", $activity_id)->where("assign_hr_to_activity.proyek_id", $proyek_id) - ->where("ahp.proyek_id", $proyek_id) - ->get(); - - $totalCost = 0; - foreach ($dataHuman as $human) { - $totalCost += $this->calculateHumanCost($human, $activity_id); - } - - return $totalCost; - } - - private function calculateHumanCost($human, $activity_id) - { - $activity = Activity::find($activity_id); - $duration = $activity->duration; - $standarRate = $human->standart_rate; - $maxUsed = $human->max_used/100; - if ($human->uom_standart_rate == "Hour") { - $totalCost = ($standarRate*8*$duration)*$maxUsed; - return $totalCost; - } - $totalCost = ($standarRate*$duration)*$maxUsed; - return $totalCost; - } - - private function calculateMaterialCost($activity_id, $proyek_id) - { - $totalCost = AssignMaterial::selectRaw("COALESCE(qty_planning,0)*COALESCE(budget,0) as totalCost") - ->where("proyek_id", $proyek_id) - ->where("activity_id", $activity_id) - ->sum(AssignMaterial::raw("COALESCE(qty_planning, 0) * COALESCE(budget, 0)")); - return $totalCost; - } - - protected function getLoc($lat, $lng){ - // $response = Http::get(config('api.nominatim') . "/reverse?lat=".$lat."&lon=".$lng."&format=json"); - // return $response->json; - - $url = config('api.nominatim') . "/reverse?lat=".$lat."&lon=".$lng."&format=json"; - // $token = config('api.adw_token'); - $response = $this->curlRequest($url); - return $response; - } - - private function curlRequest($url){ - $ch = curl_init(); - // $headers = [ - // 'Authorization: '.$token - // ]; - curl_setopt($ch, CURLOPT_URL, $url); - // curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - - $response = curl_exec($ch); - if ($response === false) - $response = curl_error($ch); - curl_close($ch); - - return json_decode($response); - } - - protected function addDetailK3($dataDetail, $report_id){ - foreach ($dataDetail as $value) { - $dataNew = array( - "report_k3_id"=>$report_id, - "checklist_k3_id"=>$value['checklist_id'], - "name_checklist_k3"=>$value['checklist_name'], - "created_by"=>$this->currentName - ); - - ReportK3Detail::create($dataNew); - } - } -} +currentDate = date("Y-m-d H:i:s"); + $this->currentName = auth()->user() ? auth()->user()->name : "system"; + $this->currentId = auth()->user() ? auth()->user()->id : 0; + + $this->pathImage = config('assets.image'); + $this->pathDocument = config('assets.project'); + $this->pathActivityDocument = config('assets.activity'); + } + + protected function setUpPayload($condition, $tableSelf) + { + $alias = "selfTable"; + $builder = DB::table($tableSelf." AS ".$alias); + // $builder = $builder->select($alias.".*"); + if($condition){ + if(isset($condition['select'])){ + foreach($condition['select'] as $select){ + $builder = $builder->addSelect($alias.".".$select); + } + }else{ + $builder = $builder->addSelect($alias.".*"); + } + if(isset($condition['joins'])){ + $selectColumn = []; + $no = 0; + foreach($condition['joins'] as $join){ + $tableJoin = isset($join['name1']) ? $join['name1'] : $alias; + $tableName = $join['name']; + $columnJoin = $join['column_join']; // foreign key table sini + $columnSelf = isset($join['column_self']) ? $join['column_self'] : "id"; // primary key table lawan + $columnResult = $join['column_results']; + + foreach($columnResult as $sColumn){ + $builder = $builder->addSelect($tableName.".".$sColumn." as join_".$this->listJoinAll[$no]."_".$sColumn); + } + $builder = $builder->leftJoin($tableName, $tableJoin.".".$columnJoin, '=', $tableName.'.'.$columnSelf); + $no++; + } + } + + if(isset($condition['columns'])){ + $listWhere = $condition['columns']; + + $builder = $builder->where(function ($query) use($listWhere, $alias){ + foreach($listWhere as $where){ + $value = $where['value']; + if($value && $value!="" && $value!=" "){ + $column = $where['name']; + $operator = strtolower($where['logic_operator']); // like, =, <>, range + $value2 = isset($where['value1']) ? $where['value1'] : ""; + $tableColumn = isset($where['table_name']) ? $where['table_name'] : $alias; + $query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); + } + } + }); + } + + if(isset($condition['group_column'])){ + $builder = $this->groupWhere($builder, $condition['group_column'], $alias); + } + + $data['count'] = clone $builder; + + if(isset($condition['paging'])){ + $builder = $builder->offset($condition['paging']['start'])->limit($condition['paging']['length']); + } + + if(isset($condition['orders'])){ + $orders = $condition['orders']; + $sortBy = $orders['ascending'] ? "ASC" : "DESC"; + $columnOrder = $orders['columns']; + foreach($columnOrder as $column){ + $builder = $builder->orderBy($alias.".".$column, $sortBy); + } + } + } + $data['builder'] = $builder; + return $data; + } + + private function groupWhere($oldBuilder, $groupWhere, $alias) + { + $builder = $oldBuilder; + $listGroupWhere = $groupWhere; + $operator = $listGroupWhere['operator']; + $operatorGroup = $listGroupWhere['group_operator']; + $listWhere = $listGroupWhere['where']; + if(strtolower($operator)=="and"){ + $builder = $builder->where(function($query) use($operatorGroup, $listWhere, $alias){ + $no = 1; + foreach ($listWhere as $where) { + $value = $where['value']; + $column = $where['name']; + $operator = strtolower($where['logic_operator']); + $value2 = isset($where['value1']) ? $where['value1'] : ""; + $tableColumn = isset($where['table_name']) ? $where['table_name'] : $alias; + if($value && $value!="" && $value!=" "){ + if($operatorGroup=="and"){ + $query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); + }else{ + if($no==1){ + $query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); + }else{ + $query = $this->orWhereCondition($query, $operator, $tableColumn, $column, $value, $value2); + } + } + } + $no = $no+1; + } + }); + }else if(strtolower($operator)=="or"){ + $builder = $builder->orWhere(function($query) use($operatorGroup, $listWhere, $alias){ + $no = 1; + foreach ($listWhere as $where) { + $value = $where['value']; + $column = $where['name']; + $operator = strtolower($where['logic_operator']); + $value2 = isset($where['value1']) ? $where['value1'] : ""; + $tableColumn = isset($where['table_name']) ? $where['table_name'] : $alias; + if($value && $value!="" && $value!=" "){ + if($operatorGroup=="and"){ + $query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); + }else{ + if($no==1){ + $query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); + }else{ + $query = $this->orWhereCondition($query, $operator, $tableColumn, $column, $value, $value2); + } + } + } + $no++; + } + }); + } + return $builder; + } + + private function whereCondition($oldQuery, $operator, $tableColumn, $column, $value, $value2) + { + $query = $oldQuery; + if($operator=="range"){ + $query = $query->whereBetween($tableColumn.".".$column, [$value, $value2]); + }else if($operator=="like"){ + $query = $query->where($tableColumn.".".$column, 'like', '%'.$value.'%'); + }else if($operator=="ilike"){ + $query = $query->where($tableColumn.".".$column, '~*', $value); + }else if($operator=="="){ + $query = $query->where($tableColumn.".".$column, $value); + }else if($operator=="in"){ + $query = $query->whereIn($tableColumn.".".$column, $value); + }else if($operator=="notin"){ + $query = $query->whereNotIn($tableColumn.".".$column, $value); + }else{ + $query = $query->where($tableColumn.".".$column, $operator, $value); + } + return $query; + } + + private function whereConditionSingleTable($oldQuery, $operator, $column, $value, $value2){ + $query = $oldQuery; + if($operator=="range"){ + $query = $query->whereBetween($column, [$value, $value2]); + }else if($operator=="like"){ + $query = $query->where($column, 'like', '%'.$value.'%'); + }else if($operator=="ilike"){ + $query = $query->where($column, '~*', $value); + }else if($operator=="="){ + $query = $query->where($column, $value); + }else if($operator=="in"){ + $query = $query->whereIn($column, $value); + }else if($operator=="notin"){ + $query = $query->whereNotIn($column, $value); + }else{ + $query = $query->where($column, $operator, $value); + } + return $query; + } + + private function orWhereCondition($oldQuery, $operator, $tableColumn, $column, $value, $value2) + { + $query = $oldQuery; + if($operator=="range"){ + $query = $query->orWhereBetween($tableColumn.".".$column, [$value, $value2]); + }else if($operator=="like"){ + $query = $query->orWhere($tableColumn.".".$column, 'like', '%'.$value.'%'); + }else if($operator=="ilike"){ + $query = $query->where($tableColumn.".".$column, '~*', $value); + }else if($operator=="="){ + $query = $query->orWhere($tableColumn.".".$column, $value); + }else if($operator=="in"){ + $query = $query->orWhereIn($tableColumn.".".$column, $value); + }else if($operator=="notin"){ + $query = $query->orWhereNotIn($tableColumn.".".$column, $value); + }else{ + $query = $query->orWhere($tableColumn.".".$column, $operator, $value); + } + return $query; + } + + protected function calculateAllCost($activity_id, $proyek_id){ + $humanCostPlanning = $this->calculateAllHumanCost($activity_id, $proyek_id); + $materialCostPlanning = $this->calculateMaterialCost($activity_id, $proyek_id); + $toolsCostPlanning = 0; + + $allCost = $humanCostPlanning + $materialCostPlanning + $toolsCostPlanning; + return $allCost; + } + + private function calculateAllHumanCost($activity_id, $proyek_id) + { + $dataHuman = UserToActivity::select("ahp.standart_rate as standart_rate","ahp.max_used as max_used", "ahp.cost_per_used as cost_per_used", "ahp.uom_standart_rate as uom_standart_rate") + ->leftJoin("assign_hr_to_proyek as ahp", "assign_hr_to_activity.user_id", "=", "ahp.user_id") + ->where("assign_hr_to_activity.activity_id", $activity_id)->where("assign_hr_to_activity.proyek_id", $proyek_id) + ->where("ahp.proyek_id", $proyek_id) + ->get(); + + $totalCost = 0; + foreach ($dataHuman as $human) { + $totalCost += $this->calculateHumanCost($human, $activity_id); + } + + return $totalCost; + } + + private function calculateHumanCost($human, $activity_id) + { + $activity = Activity::find($activity_id); + $duration = $activity->duration; + $standarRate = $human->standart_rate; + $maxUsed = $human->max_used/100; + if ($human->uom_standart_rate == "Hour") { + $totalCost = ($standarRate*8*$duration)*$maxUsed; + return $totalCost; + } + $totalCost = ($standarRate*$duration)*$maxUsed; + return $totalCost; + } + + private function calculateMaterialCost($activity_id, $proyek_id) + { + $totalCost = AssignMaterial::selectRaw("COALESCE(qty_planning,0)*COALESCE(budget,0) as totalCost") + ->where("proyek_id", $proyek_id) + ->where("activity_id", $activity_id) + ->sum(AssignMaterial::raw("COALESCE(qty_planning, 0) * COALESCE(budget, 0)")); + return $totalCost; + } + + protected function getLoc($lat, $lng){ + // $response = Http::get(config('api.nominatim') . "/reverse?lat=".$lat."&lon=".$lng."&format=json"); + // return $response->json; + + $url = config('api.nominatim') . "/reverse?lat=".$lat."&lon=".$lng."&format=json"; + // $token = config('api.adw_token'); + $response = $this->curlRequest($url); + return $response; + } + + private function curlRequest($url){ + $ch = curl_init(); + // $headers = [ + // 'Authorization: '.$token + // ]; + curl_setopt($ch, CURLOPT_URL, $url); + // curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + + $response = curl_exec($ch); + if ($response === false) + $response = curl_error($ch); + curl_close($ch); + + return json_decode($response); + } + + protected function addDetailK3($dataDetail, $report_id){ + foreach ($dataDetail as $value) { + $dataNew = array( + "report_k3_id"=>$report_id, + "checklist_k3_id"=>$value['checklist_id'], + "name_checklist_k3"=>$value['checklist_name'], + "created_by"=>$this->currentName + ); + + ReportK3Detail::create($dataNew); + } + } +} diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index 3a204d7..fe082c2 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -30,6 +30,7 @@ use Illuminate\Support\Facades\DB; use App\Helpers\MasterFunctionsHelper; use App\Models\ReportActivityMaterial; use Illuminate\Support\Facades\Artisan; +use App\Jobs\ProcessSCurve; const API_GEOLOCATION = "https://nominatim.oslogdev.com/search/ADDR?format=json&addressdetails=1&limit=1"; @@ -214,7 +215,7 @@ class ProjectController extends Controller $totalRecord = $countBuilder->count(); return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); - } + } public function list() { @@ -321,18 +322,27 @@ class ProjectController extends Controller $data = MasterFunctionsHelper::getSCurve($request); return response()->json(['status'=>'success','code'=>200, 'data' => $data], 200); } - + public function calculateSCurve(Request $request){ $sCurve = Project::select('scurve')->where('id', $request->project_id)->first(); return response()->json(['status'=>'success','code'=>200, 'data' => json_decode($sCurve->scurve)], 200); } - + public function sCurveCommand(Request $request){ - Artisan::call('calculate:scurve', [ - 'project_id' => $request->project_id - ]); + Artisan::call('calculate:scurve', [ + 'project_id' => $request->project_id + ]); + // $project = Project::find($request->project_id); + + // if ($project) { + // dispatch(new ProcessSCurve($project)); + + // return response()->json(['message' => 'S Curve calculation queued']); + // } + + // return response()->json(['message' => 'Project not found'], 404); } - + public function getLinearSCurve(Request $request){ $data = MasterFunctionsHelper::getLinearSCurve($request); return response()->json(['status'=>'success','code'=>200, 'data' => $data], 200); @@ -390,7 +400,7 @@ class ProjectController extends Controller if ($successor) { $predecessor = Activity::find($successor->s_activity_id); $activity->start_date = $predecessor->end_date; - } + } if($reports[$i]['status'] != 'done'){ $reports[$i]['max_date']->modify('-1 day'); }else if($reports[$i]['status'] == 'done'){ @@ -432,7 +442,24 @@ class ProjectController extends Controller // return response()->json(['status'=>'success', 'data'=> $response, 'code'=>200], 200); return response()->json(['status'=>'success', 'data'=> '', 'code'=>200], 200); } - + public function getByUser($id) + { + $alias = "utp"; + $userProyek = UserToProyek::query() + ->from('assign_hr_to_proyek AS ' . $alias) + ->where([ + ['is_customer', true], + ['user_id', $id] + ]) + ->leftJoin('m_users', $alias.'.user_id', '=', 'm_users.id') + ->leftJoin('m_proyek', $alias.'.proyek_id', '=', 'm_proyek.id') + ->leftJoin('m_type_proyek', 'm_proyek.type_proyek_id', '=', 'm_type_proyek.id') + ->select('m_proyek.*', 'm_type_proyek.name AS join_second_name','m_users.name AS join_first_name') + ->get(); + $totalRecord = $userProyek->count(); + + return response()->json(['status' => 'success', 'code' => 200, 'data' => $userProyek, 'totalRecord' => $totalRecord], 200); + } public function detail($id){ if(empty($id) || !is_int((int)$id)) return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); @@ -473,7 +500,7 @@ class ProjectController extends Controller $result->header->end_date = $endDate; return response()->json(['status'=>'success','code'=> 200,'data'=>$result, 'gantt'=>$gantt], 200); } - + public function getOverdueActivities(Request $request){ $payload = $request->all(); if(empty($payload['id']) || !is_int((int)$payload['id'])) @@ -522,7 +549,7 @@ class ProjectController extends Controller ->where('ama.proyek_id', '=', $payload['project_id']) ->whereNotNull('ram.lat') ->whereBetween('ram.report_date', [$payload['start_date'], $payload['end_date']]); - + return response()->json(['status'=>'success', 'code'=> 200, 'data'=> $reports], 200); } diff --git a/app/Jobs/ProcessSCurve.php b/app/Jobs/ProcessSCurve.php new file mode 100644 index 0000000..fe07ab9 --- /dev/null +++ b/app/Jobs/ProcessSCurve.php @@ -0,0 +1,36 @@ +project = $project; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + $data = MasterFunctionsHelper::CalculateSCurve($this->project->id); + + $this->project->scurve = json_encode($data); + $this->project->calculation_status = true; + $this->project->save(); + } +} diff --git a/app/Models/UserToProyek.php b/app/Models/UserToProyek.php index bffc876..8076ff9 100644 --- a/app/Models/UserToProyek.php +++ b/app/Models/UserToProyek.php @@ -1,19 +1,19 @@ -bigIncrements('id'); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedTinyInteger('attempts'); + $table->unsignedInteger('reserved_at')->nullable(); + $table->unsignedInteger('available_at'); + $table->unsignedInteger('created_at'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('jobs'); + } +} diff --git a/routes/web.php b/routes/web.php index 2b97a41..a207fe8 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,7 +1,7 @@ get('/', function () use ($router) { - return $router->app->version(); + return $router->app->version(); }); $router->group(['prefix'=>'api', 'middleware' => 'cors'], function () use ($router) { @@ -53,6 +53,7 @@ $router->group(['prefix'=>'api', 'middleware' => 'cors'], function () use ($rout $router->post('/document-activity/search', 'ActivityDokumenController@searchDocProject'); $router->get('/document-activity/download/{id}', 'ActivityDokumenController@downloadDokumen'); + $router->get('/project-by-customer/{id}','ProjectController@getByUser'); $router->post('/project/search', 'ProjectController@search'); $router->post('/project/add', 'ProjectController@add'); $router->put('/project/update/{id}', 'ProjectController@update');