Browse Source

add endpoint project-by-customer

pull/3/head
wahyuun 1 year ago
parent
commit
866d747892
  1. 303
      app/Http/Controllers/Controller.php
  2. 20
      app/Http/Controllers/ProjectController.php
  3. 2
      routes/web.php

303
app/Http/Controllers/Controller.php

@ -1,14 +1,16 @@
<?php <?php
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Http;
use App\Models\UserToActivity;
use App\Models\Activity; use App\Models\Activity;
use App\Models\UserToProyek;
use App\Models\AssignMaterial; use App\Models\AssignMaterial;
use Laravel\Lumen\Routing\Controller as BaseController;
use App\Models\ReportK3Detail; use App\Models\ReportK3Detail;
use App\Models\UserToActivity;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Http;
use Laravel\Lumen\Routing\Controller as BaseController;
class Controller extends BaseController class Controller extends BaseController
{ {
@ -16,8 +18,10 @@ class Controller extends BaseController
protected $pathDocument = "assets/file/project/"; protected $pathDocument = "assets/file/project/";
protected $pathTmpImport = "assets/file/tmpimport/"; protected $pathTmpImport = "assets/file/tmpimport/";
protected $pathActivityDocument = "assets/file/activity/"; protected $pathActivityDocument = "assets/file/activity/";
protected $listJoinAll = ['first', 'second', 'third', 'fourth', 'fifth', protected $listJoinAll = [
'sixth', 'seventh', 'eighth', 'ninth', 'tenth']; 'first', 'second', 'third', 'fourth', 'fifth',
'sixth', 'seventh', 'eighth', 'ninth', 'tenth'
];
protected $currentDate; protected $currentDate;
protected $currentName; protected $currentName;
protected $currentId; protected $currentId;
@ -33,37 +37,105 @@ class Controller extends BaseController
$this->pathActivityDocument = config('assets.activity'); $this->pathActivityDocument = config('assets.activity');
} }
protected function setUpPayloadByUser($condition)
{
$alias = "utp";
$userProyek = UserToProyek::from('assign_hr_to_proyek AS ' . $alias);
$userProyek = $userProyek->where([
['is_customer', true],
// $condition['user_id']['user_id']
['user_id', 1561]
])->select('m_proyek.*', 'm_type_proyek.name AS nama_type_proyek');
if (isset($condition['joins'])) {
$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) {
$userProyek = $userProyek->addSelect($tableName . "." . $sColumn . " as join_" . $this->listJoinAll[$no] . "_" . $sColumn);
}
$userProyek = $userProyek->leftJoin($tableName, $tableJoin . "." . $columnJoin, '=', $tableName . '.' . $columnSelf);
$no++;
}
$userProyek->leftJoin('m_type_proyek', 'm_proyek.type_proyek_id', '=', 'm_type_proyek.id');
}
if (isset($condition['columns'])) {
$listWhere = $condition['columns'];
$userProyek = $userProyek->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'])) {
$userProyek = $this->groupWhere($userProyek, $condition['group_column'], $alias);
}
$data['count'] = clone $userProyek;
if (isset($condition['paging'])) {
$userProyek = $userProyek->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) {
$userProyek = $userProyek->orderBy($alias . "." . $column, $sortBy);
}
}
$data['userProyek'] = $userProyek;
return $data;
}
protected function setUpPayload($condition, $tableSelf) protected function setUpPayload($condition, $tableSelf)
{ {
$alias = "selfTable"; $alias = "selfTable";
$builder = DB::table($tableSelf." AS ".$alias); $builder = DB::table($tableSelf . " AS " . $alias);
$builder = $builder->select($alias.".*"); $builder = $builder->select($alias . ".*");
if($condition){ if ($condition) {
if(isset($condition['joins'])){ if (isset($condition['joins'])) {
$selectColumn = []; $selectColumn = [];
$no = 0; $no = 0;
foreach($condition['joins'] as $join){ foreach ($condition['joins'] as $join) {
$tableJoin = isset($join['name1']) ? $join['name1'] : $alias; $tableJoin = isset($join['name1']) ? $join['name1'] : $alias;
$tableName = $join['name']; $tableName = $join['name'];
$columnJoin = $join['column_join']; // foreign key table sini $columnJoin = $join['column_join']; // foreign key table sini
$columnSelf = isset($join['column_self']) ? $join['column_self'] : "id"; // primary key table lawan $columnSelf = isset($join['column_self']) ? $join['column_self'] : "id"; // primary key table lawan
$columnResult = $join['column_results']; $columnResult = $join['column_results'];
foreach($columnResult as $sColumn){ foreach ($columnResult as $sColumn) {
$builder = $builder->addSelect($tableName.".".$sColumn." as join_".$this->listJoinAll[$no]."_".$sColumn); $builder = $builder->addSelect($tableName . "." . $sColumn . " as join_" . $this->listJoinAll[$no] . "_" . $sColumn);
} }
$builder = $builder->leftJoin($tableName, $tableJoin.".".$columnJoin, '=', $tableName.'.'.$columnSelf); $builder = $builder->leftJoin($tableName, $tableJoin . "." . $columnJoin, '=', $tableName . '.' . $columnSelf);
$no++; $no++;
} }
} }
if(isset($condition['columns'])){ if (isset($condition['columns'])) {
$listWhere = $condition['columns']; $listWhere = $condition['columns'];
$builder = $builder->where(function ($query) use($listWhere, $alias){ $builder = $builder->where(function ($query) use ($listWhere, $alias) {
foreach($listWhere as $where){ foreach ($listWhere as $where) {
$value = $where['value']; $value = $where['value'];
if($value && $value!="" && $value!=" "){ if ($value && $value != "" && $value != " ") {
$column = $where['name']; $column = $where['name'];
$operator = strtolower($where['logic_operator']); // like, =, <>, range $operator = strtolower($where['logic_operator']); // like, =, <>, range
$value2 = isset($where['value1']) ? $where['value1'] : ""; $value2 = isset($where['value1']) ? $where['value1'] : "";
@ -74,22 +146,22 @@ class Controller extends BaseController
}); });
} }
if(isset($condition['group_column'])){ if (isset($condition['group_column'])) {
$builder = $this->groupWhere($builder, $condition['group_column'], $alias); $builder = $this->groupWhere($builder, $condition['group_column'], $alias);
} }
$data['count'] = clone $builder; $data['count'] = clone $builder;
if(isset($condition['paging'])){ if (isset($condition['paging'])) {
$builder = $builder->offset($condition['paging']['start'])->limit($condition['paging']['length']); $builder = $builder->offset($condition['paging']['start'])->limit($condition['paging']['length']);
} }
if(isset($condition['orders'])){ if (isset($condition['orders'])) {
$orders = $condition['orders']; $orders = $condition['orders'];
$sortBy = $orders['ascending'] ? "ASC" : "DESC"; $sortBy = $orders['ascending'] ? "ASC" : "DESC";
$columnOrder = $orders['columns']; $columnOrder = $orders['columns'];
foreach($columnOrder as $column){ foreach ($columnOrder as $column) {
$builder = $builder->orderBy($alias.".".$column, $sortBy); $builder = $builder->orderBy($alias . "." . $column, $sortBy);
} }
} }
} }
@ -104,8 +176,8 @@ class Controller extends BaseController
$operator = $listGroupWhere['operator']; $operator = $listGroupWhere['operator'];
$operatorGroup = $listGroupWhere['group_operator']; $operatorGroup = $listGroupWhere['group_operator'];
$listWhere = $listGroupWhere['where']; $listWhere = $listGroupWhere['where'];
if(strtolower($operator)=="and"){ if (strtolower($operator) == "and") {
$builder = $builder->where(function($query) use($operatorGroup, $listWhere, $alias){ $builder = $builder->where(function ($query) use ($operatorGroup, $listWhere, $alias) {
$no = 1; $no = 1;
foreach ($listWhere as $where) { foreach ($listWhere as $where) {
$value = $where['value']; $value = $where['value'];
@ -113,22 +185,22 @@ class Controller extends BaseController
$operator = strtolower($where['logic_operator']); $operator = strtolower($where['logic_operator']);
$value2 = isset($where['value1']) ? $where['value1'] : ""; $value2 = isset($where['value1']) ? $where['value1'] : "";
$tableColumn = isset($where['table_name']) ? $where['table_name'] : $alias; $tableColumn = isset($where['table_name']) ? $where['table_name'] : $alias;
if($value && $value!="" && $value!=" "){ if ($value && $value != "" && $value != " ") {
if($operatorGroup=="and"){ if ($operatorGroup == "and") {
$query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); $query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2);
}else{ } else {
if($no==1){ if ($no == 1) {
$query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); $query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2);
}else{ } else {
$query = $this->orWhereCondition($query, $operator, $tableColumn, $column, $value, $value2); $query = $this->orWhereCondition($query, $operator, $tableColumn, $column, $value, $value2);
} }
} }
} }
$no = $no+1; $no = $no + 1;
} }
}); });
}else if(strtolower($operator)=="or"){ } else if (strtolower($operator) == "or") {
$builder = $builder->orWhere(function($query) use($operatorGroup, $listWhere, $alias){ $builder = $builder->orWhere(function ($query) use ($operatorGroup, $listWhere, $alias) {
$no = 1; $no = 1;
foreach ($listWhere as $where) { foreach ($listWhere as $where) {
$value = $where['value']; $value = $where['value'];
@ -136,13 +208,13 @@ class Controller extends BaseController
$operator = strtolower($where['logic_operator']); $operator = strtolower($where['logic_operator']);
$value2 = isset($where['value1']) ? $where['value1'] : ""; $value2 = isset($where['value1']) ? $where['value1'] : "";
$tableColumn = isset($where['table_name']) ? $where['table_name'] : $alias; $tableColumn = isset($where['table_name']) ? $where['table_name'] : $alias;
if($value && $value!="" && $value!=" "){ if ($value && $value != "" && $value != " ") {
if($operatorGroup=="and"){ if ($operatorGroup == "and") {
$query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); $query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2);
}else{ } else {
if($no==1){ if ($no == 1) {
$query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); $query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2);
}else{ } else {
$query = $this->orWhereCondition($query, $operator, $tableColumn, $column, $value, $value2); $query = $this->orWhereCondition($query, $operator, $tableColumn, $column, $value, $value2);
} }
} }
@ -157,39 +229,40 @@ class Controller extends BaseController
private function whereCondition($oldQuery, $operator, $tableColumn, $column, $value, $value2) private function whereCondition($oldQuery, $operator, $tableColumn, $column, $value, $value2)
{ {
$query = $oldQuery; $query = $oldQuery;
if($operator=="range"){ if ($operator == "range") {
$query = $query->whereBetween($tableColumn.".".$column, [$value, $value2]); $query = $query->whereBetween($tableColumn . "." . $column, [$value, $value2]);
}else if($operator=="like"){ } else if ($operator == "like") {
$query = $query->where($tableColumn.".".$column, 'like', '%'.$value.'%'); $query = $query->where($tableColumn . "." . $column, 'like', '%' . $value . '%');
}else if($operator=="ilike"){ } else if ($operator == "ilike") {
$query = $query->where($tableColumn.".".$column, '~*', $value); $query = $query->where($tableColumn . "." . $column, '~*', $value);
}else if($operator=="="){ } else if ($operator == "=") {
$query = $query->where($tableColumn.".".$column, $value); $query = $query->where($tableColumn . "." . $column, $value);
}else if($operator=="in"){ } else if ($operator == "in") {
$query = $query->whereIn($tableColumn.".".$column, $value); $query = $query->whereIn($tableColumn . "." . $column, $value);
}else if($operator=="notin"){ } else if ($operator == "notin") {
$query = $query->whereNotIn($tableColumn.".".$column, $value); $query = $query->whereNotIn($tableColumn . "." . $column, $value);
}else{ } else {
$query = $query->where($tableColumn.".".$column, $operator, $value); $query = $query->where($tableColumn . "." . $column, $operator, $value);
} }
return $query; return $query;
} }
private function whereConditionSingleTable($oldQuery, $operator, $column, $value, $value2){ private function whereConditionSingleTable($oldQuery, $operator, $column, $value, $value2)
{
$query = $oldQuery; $query = $oldQuery;
if($operator=="range"){ if ($operator == "range") {
$query = $query->whereBetween($column, [$value, $value2]); $query = $query->whereBetween($column, [$value, $value2]);
}else if($operator=="like"){ } else if ($operator == "like") {
$query = $query->where($column, 'like', '%'.$value.'%'); $query = $query->where($column, 'like', '%' . $value . '%');
}else if($operator=="ilike"){ } else if ($operator == "ilike") {
$query = $query->where($column, '~*', $value); $query = $query->where($column, '~*', $value);
}else if($operator=="="){ } else if ($operator == "=") {
$query = $query->where($column, $value); $query = $query->where($column, $value);
}else if($operator=="in"){ } else if ($operator == "in") {
$query = $query->whereIn($column, $value); $query = $query->whereIn($column, $value);
}else if($operator=="notin"){ } else if ($operator == "notin") {
$query = $query->whereNotIn($column, $value); $query = $query->whereNotIn($column, $value);
}else{ } else {
$query = $query->where($column, $operator, $value); $query = $query->where($column, $operator, $value);
} }
return $query; return $query;
@ -198,25 +271,26 @@ class Controller extends BaseController
private function orWhereCondition($oldQuery, $operator, $tableColumn, $column, $value, $value2) private function orWhereCondition($oldQuery, $operator, $tableColumn, $column, $value, $value2)
{ {
$query = $oldQuery; $query = $oldQuery;
if($operator=="range"){ if ($operator == "range") {
$query = $query->orWhereBetween($tableColumn.".".$column, [$value, $value2]); $query = $query->orWhereBetween($tableColumn . "." . $column, [$value, $value2]);
}else if($operator=="like"){ } else if ($operator == "like") {
$query = $query->orWhere($tableColumn.".".$column, 'like', '%'.$value.'%'); $query = $query->orWhere($tableColumn . "." . $column, 'like', '%' . $value . '%');
}else if($operator=="ilike"){ } else if ($operator == "ilike") {
$query = $query->where($tableColumn.".".$column, '~*', $value); $query = $query->where($tableColumn . "." . $column, '~*', $value);
}else if($operator=="="){ } else if ($operator == "=") {
$query = $query->orWhere($tableColumn.".".$column, $value); $query = $query->orWhere($tableColumn . "." . $column, $value);
}else if($operator=="in"){ } else if ($operator == "in") {
$query = $query->orWhereIn($tableColumn.".".$column, $value); $query = $query->orWhereIn($tableColumn . "." . $column, $value);
}else if($operator=="notin"){ } else if ($operator == "notin") {
$query = $query->orWhereNotIn($tableColumn.".".$column, $value); $query = $query->orWhereNotIn($tableColumn . "." . $column, $value);
}else{ } else {
$query = $query->orWhere($tableColumn.".".$column, $operator, $value); $query = $query->orWhere($tableColumn . "." . $column, $operator, $value);
} }
return $query; return $query;
} }
protected function calculateAllCost($activity_id, $proyek_id){ protected function calculateAllCost($activity_id, $proyek_id)
{
$humanCostPlanning = $this->calculateAllHumanCost($activity_id, $proyek_id); $humanCostPlanning = $this->calculateAllHumanCost($activity_id, $proyek_id);
$materialCostPlanning = $this->calculateMaterialCost($activity_id, $proyek_id); $materialCostPlanning = $this->calculateMaterialCost($activity_id, $proyek_id);
$toolsCostPlanning = 0; $toolsCostPlanning = 0;
@ -227,11 +301,11 @@ class Controller extends BaseController
private function calculateAllHumanCost($activity_id, $proyek_id) 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") $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") ->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("assign_hr_to_activity.activity_id", $activity_id)->where("assign_hr_to_activity.proyek_id", $proyek_id)
->where("ahp.proyek_id", $proyek_id) ->where("ahp.proyek_id", $proyek_id)
->get(); ->get();
$totalCost = 0; $totalCost = 0;
foreach ($dataHuman as $human) { foreach ($dataHuman as $human) {
@ -246,58 +320,61 @@ class Controller extends BaseController
$activity = Activity::find($activity_id); $activity = Activity::find($activity_id);
$duration = $activity->duration; $duration = $activity->duration;
$standarRate = $human->standart_rate; $standarRate = $human->standart_rate;
$maxUsed = $human->max_used/100; $maxUsed = $human->max_used / 100;
if ($human->uom_standart_rate == "Hour") { if ($human->uom_standart_rate == "Hour") {
$totalCost = ($standarRate*8*$duration)*$maxUsed; $totalCost = ($standarRate * 8 * $duration) * $maxUsed;
return $totalCost; return $totalCost;
} }
$totalCost = ($standarRate*$duration)*$maxUsed; $totalCost = ($standarRate * $duration) * $maxUsed;
return $totalCost; return $totalCost;
} }
private function calculateMaterialCost($activity_id, $proyek_id) private function calculateMaterialCost($activity_id, $proyek_id)
{ {
$totalCost = AssignMaterial::selectRaw("COALESCE(qty_planning,0)*COALESCE(budget,0) as totalCost") $totalCost = AssignMaterial::selectRaw("COALESCE(qty_planning,0)*COALESCE(budget,0) as totalCost")
->where("proyek_id", $proyek_id) ->where("proyek_id", $proyek_id)
->where("activity_id", $activity_id) ->where("activity_id", $activity_id)
->sum(AssignMaterial::raw("COALESCE(qty_planning, 0) * COALESCE(budget, 0)")); ->sum(AssignMaterial::raw("COALESCE(qty_planning, 0) * COALESCE(budget, 0)"));
return $totalCost; return $totalCost;
} }
protected function getLoc($lat, $lng){ protected function getLoc($lat, $lng)
{
// $response = Http::get(config('api.nominatim') . "/reverse?lat=".$lat."&lon=".$lng."&format=json"); // $response = Http::get(config('api.nominatim') . "/reverse?lat=".$lat."&lon=".$lng."&format=json");
// return $response->json; // return $response->json;
$url = config('api.nominatim') . "/reverse?lat=".$lat."&lon=".$lng."&format=json"; $url = config('api.nominatim') . "/reverse?lat=" . $lat . "&lon=" . $lng . "&format=json";
// $token = config('api.adw_token'); // $token = config('api.adw_token');
$response = $this->curlRequest($url); $response = $this->curlRequest($url);
return $response; return $response;
} }
private function curlRequest($url){ private function curlRequest($url)
$ch = curl_init(); {
// $headers = [ $ch = curl_init();
// 'Authorization: '.$token // $headers = [
// ]; // 'Authorization: '.$token
curl_setopt($ch, CURLOPT_URL, $url); // ];
// curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch); $response = curl_exec($ch);
if ($response === false) if ($response === false)
$response = curl_error($ch); $response = curl_error($ch);
curl_close($ch); curl_close($ch);
return json_decode($response); return json_decode($response);
} }
protected function addDetailK3($dataDetail, $report_id){ protected function addDetailK3($dataDetail, $report_id)
{
foreach ($dataDetail as $value) { foreach ($dataDetail as $value) {
$dataNew = array( $dataNew = array(
"report_k3_id"=>$report_id, "report_k3_id" => $report_id,
"checklist_k3_id"=>$value['checklist_id'], "checklist_k3_id" => $value['checklist_id'],
"name_checklist_k3"=>$value['checklist_name'], "name_checklist_k3" => $value['checklist_name'],
"created_by"=>$this->currentName "created_by" => $this->currentName
); );
ReportK3Detail::create($dataNew); ReportK3Detail::create($dataNew);

20
app/Http/Controllers/ProjectController.php

@ -204,18 +204,16 @@ class ProjectController extends Controller
DokumenProject::where("type_dokumen", "project-document-in-folder")->whereIn('ref_id', $ref_ids)->delete(); DokumenProject::where("type_dokumen", "project-document-in-folder")->whereIn('ref_id', $ref_ids)->delete();
} }
public function getByUser($id) public function getByUser(Request $request)
{ {
$result = UserToProyek::query() $payload = $request->all();
->where([ $dataBuilder = $this->setUpPayloadByUser($payload);
['user_id', $id], $builder = $dataBuilder['userProyek'];
['is_customer', true] $countBuilder = $dataBuilder['count'];
])->get(); $dataGet = $builder->get();
if ($result) { $totalRecord = $countBuilder->count();
return response()->json(['status' => 'success', 'code' => 200, 'data' => $result], 200);
} else { return response()->json(['status' => 'success', 'code' => 200, 'data' => $dataGet, 'totalRecord' => $totalRecord], 200);
return response()->json(['status' => 'failed', 'message' => 'Get User Project Not Found!', 'code' => 404], 404);
}
} }
public function search(Request $request) public function search(Request $request)

2
routes/web.php

@ -53,7 +53,7 @@ $router->group(['prefix' => 'api', 'middleware' => 'cors'], function () use ($ro
$router->post('/document-activity/search', 'ActivityDokumenController@searchDocProject'); $router->post('/document-activity/search', 'ActivityDokumenController@searchDocProject');
$router->get('/document-activity/download/{id}', 'ActivityDokumenController@downloadDokumen'); $router->get('/document-activity/download/{id}', 'ActivityDokumenController@downloadDokumen');
$router->get('/project-by-customer/{id}', 'ProjectController@getByUser'); $router->post('/project-by-customer', 'ProjectController@getByUser');
$router->post('/project/search', 'ProjectController@search'); $router->post('/project/search', 'ProjectController@search');
$router->post('/project/add', 'ProjectController@add'); $router->post('/project/add', 'ProjectController@add');
$router->put('/project/update/{id}', 'ProjectController@update'); $router->put('/project/update/{id}', 'ProjectController@update');

Loading…
Cancel
Save