wahyun
1 year ago
11 changed files with 2663 additions and 2611 deletions
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,215 +1,221 @@
|
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\AssignMaterial; |
||||
use App\Models\RequestMaterial; |
||||
use App\Models\Activity; |
||||
use App\Models\ReportActivityMaterial; |
||||
use Datatables; |
||||
|
||||
class AssignMaterialController extends Controller |
||||
{ |
||||
private function sanitizeDecimal($number) { |
||||
$number = str_replace(".","",$number); |
||||
$number = str_replace(",",".",$number); |
||||
return $number; |
||||
} |
||||
|
||||
public function add(Request $request){ |
||||
$this->validate($request, [ |
||||
'activity_id' => 'required', |
||||
'material_id' => 'required', |
||||
'qty_planning' => 'required' |
||||
]); |
||||
|
||||
$activity = Activity::where('id', $request->activity_id)->first(); |
||||
|
||||
$checkStock = RequestMaterial::where("id", $request->material_id)->first(); |
||||
$currentStock = $checkStock->qty; |
||||
if((int)$currentStock < (int)$request->qty_planning){ |
||||
return response()->json(['status'=>'failed','message'=>'Stock is not enough!','code'=> 500]); |
||||
} |
||||
|
||||
$start_date = $activity->start_date; |
||||
$start_date = substr($start_date, 0, 19); // remove the timezone offset |
||||
$startDate = new \DateTime(date("Y-m-d", strtotime($start_date))); |
||||
$planDate = new \DateTime(date("Y-m-d", strtotime($request->plan_date))); |
||||
|
||||
$data = $request->all(); |
||||
$data['created_by'] = $this->currentName; |
||||
$data['budget'] = $checkStock->price; |
||||
$data['qty_planning'] = $this->sanitizeDecimal($data['qty_planning']); |
||||
|
||||
if ($planDate >= $startDate) { |
||||
$result = AssignMaterial::create($data); |
||||
return response()->json(['status'=>'success','message'=>'Data added!', 'code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'Failed to add data!','code'=> 400], 400); |
||||
} |
||||
} |
||||
|
||||
public function update(Request $request, $id){ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
|
||||
$data = AssignMaterial::find($id); |
||||
if(!$data) |
||||
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); |
||||
|
||||
$result = $data->update($request->all()); |
||||
|
||||
if($result) |
||||
return response()->json(['status'=>'success','message'=> 'Data updated!','code'=> 200], 200); |
||||
|
||||
return response()->json(['status'=>'failed','message'=>'Failed to update!','code'=> 500], 500); |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
$data = AssignMaterial::where('id', $id)->first(); |
||||
|
||||
if($data->delete()) |
||||
return response()->json(['status'=>'success','message'=>'Data deleted!','code'=> 200], 200); |
||||
|
||||
return response()->json(['status'=>'failed','message'=>'Failed to delete!','code'=> 500], 500); |
||||
} |
||||
|
||||
public function edit($id){ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
|
||||
$result = AssignMaterial::find($id); |
||||
|
||||
if($result) |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); |
||||
|
||||
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
$dataBuilder = $this->setUpPayload($payload, 'assign_material_to_activity'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$dataGet = $builder->get(); |
||||
$totalRecord = $countBuilder->count(); |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
} |
||||
|
||||
public function list() |
||||
{ |
||||
$data = AssignMaterial::all(); |
||||
$countData = $data->count(); |
||||
|
||||
if($data) |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); |
||||
|
||||
return response()->json(['status'=>'failed','message'=>'Failed to get the data!','code'=> 500], 500); |
||||
} |
||||
|
||||
public function datatables(Request $request){ |
||||
$id_activity = $request->query('idact'); |
||||
$type = $request->query('type') ?? "material"; |
||||
$data = AssignMaterial::select( |
||||
"assign_material_to_activity.*","m.description as material_name", "m.uom as uom" |
||||
) |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->where('assign_material_to_activity.activity_id', $id_activity) |
||||
->where('assign_material_to_activity.type', $type) |
||||
->orderBy('plan_date', 'desc') |
||||
->get(); |
||||
return Datatables::of($data) |
||||
->addIndexColumn() |
||||
->addColumn('action', function($row){ |
||||
$actionBtn = '<a href="javascript:void(0)" data-id="'.$row->id.'" class="delete btn btn-danger btn-sm btn-material-delete"><i class="fa fa-trash"></i></a>'; |
||||
return $actionBtn; |
||||
}) |
||||
->rawColumns(['action'])->make(true); |
||||
} |
||||
|
||||
public function datatablesForReportActivity(Request $request){ |
||||
$id_activity = $request->query('idact'); |
||||
$data = |
||||
AssignMaterial::select( |
||||
AssignMaterial::raw('SUM(qty_planning) as qty_planning'), |
||||
"m.description as material_name", |
||||
"assign_material_to_activity.activity_id", |
||||
"assign_material_to_activity.type" |
||||
// "assign_material_to_activity.material_id", |
||||
) |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->groupBy("m.description") |
||||
->groupBy("assign_material_to_activity.activity_id") |
||||
->groupBy("assign_material_to_activity.type") |
||||
->where("assign_material_to_activity.activity_id", $id_activity)->get(); |
||||
return Datatables::of($data) |
||||
->addIndexColumn() |
||||
->addColumn('qty_sum', function($row){ |
||||
$val_qty_act = AssignMaterial::select(ReportActivityMaterial::raw('SUM(ram.qty) as qty_sum'),"m.description as material_name1") |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->join("report_activity_material as ram", "ram.assign_material_id", "=", "assign_material_to_activity.id") |
||||
->groupBy("m.description") |
||||
->where("m.description", strval($row->material_name)) |
||||
->where("ram.activity_id", $row->activity_id)->first(); |
||||
return $val_qty_act ? $val_qty_act->qty_sum : '-'; |
||||
}) |
||||
->addColumn('status_activity', function($row){ |
||||
$val_status = AssignMaterial::select("status_activity") |
||||
->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') |
||||
->where('m.description', '=', $row->material_name) |
||||
->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); |
||||
return $val_status ? $val_status->status_activity : null; |
||||
}) |
||||
->addColumn('start_activity', function($row){ |
||||
$val_start = AssignMaterial::select("start_activity") |
||||
->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') |
||||
->where('m.description', '=', $row->material_name) |
||||
->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); |
||||
return $val_start ? $val_start->start_activity : null; |
||||
}) |
||||
->addColumn('finish_activity', function($row){ |
||||
$val_finish = AssignMaterial::select("finish_activity") |
||||
->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') |
||||
->where('m.description', '=', $row->material_name) |
||||
->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); |
||||
return $val_finish ? $val_finish->finish_activity : null; |
||||
}) |
||||
->addColumn('uom', function($row){ |
||||
$val_uom = RequestMaterial::select("uom") |
||||
->where('description', '=', $row->material_name)->first(); |
||||
return $val_uom ? $val_uom->uom : null; |
||||
}) |
||||
->addColumn('assign_material_id', function($row){ |
||||
$assignMaterial =AssignMaterial::select('assign_material_to_activity.id')->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->where('activity_id', $row->activity_id)->where('m.description', $row->material_name)->first(); |
||||
return $assignMaterial ? $assignMaterial->id : null; |
||||
}) |
||||
->addColumn('action', function($row){ |
||||
$dataPlan = AssignMaterial::select('assign_material_to_activity.id')->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->where('activity_id', $row->activity_id)->where('m.description', $row->material_name)->first(); |
||||
$actionBtn = '<a href="javascript:void(0)" data-id="'.$dataPlan->id.'" data-activity_id="'.$row->activity_id.'" data-material-name="'.$row->material_name.'" class="primary btn btn-primary btn-sm btn-lihat-plan" data-toggle="tooltip" title="Lihat Plan" data-placement="top"><i class="fa fa-align-justify"></i></a>'; |
||||
$actionBtn .= '<a href="javascript:void(0)" data-id="'.$dataPlan->id.'" data-activity_id="'.$row->activity_id.'" data-material-name="'.$row->material_name.'" class="warning btn btn-warning btn-sm btn-lihat-actual" data-toggle="tooltip" title="Input Progress" data-placement="top"><i class="fa fa-edit" aria-hidden="true"></i></a>'; |
||||
return $actionBtn; |
||||
}) |
||||
->rawColumns(['action'])->make(true); |
||||
} |
||||
|
||||
public function ForReportActivityByMaterial(Request $request){ |
||||
$id_activity = $request->idact; |
||||
$data = AssignMaterial::select("assign_material_to_activity.*","m.description as material_name", "m.uom as uom") |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->where('assign_material_to_activity.activity_id', $id_activity)->get(); |
||||
foreach ($data as $key) { |
||||
$val_qty_sum = ReportActivityMaterial::where('assign_material_id', '=', $key->id)->sum("qty"); |
||||
} |
||||
$countData = $data->count(); |
||||
if($data){ |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'failed get Assign material, please try again later!','code'=>400], 400); |
||||
} |
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\AssignMaterial; |
||||
use App\Models\RequestMaterial; |
||||
use App\Models\Activity; |
||||
use App\Models\ReportActivityMaterial; |
||||
use Datatables; |
||||
|
||||
class AssignMaterialController extends Controller |
||||
{ |
||||
private function sanitizeDecimal($number) { |
||||
$number = str_replace(".","",$number); |
||||
$number = str_replace(",",".",$number); |
||||
return $number; |
||||
} |
||||
|
||||
public function add(Request $request){ |
||||
$this->validate($request, [ |
||||
'activity_id' => 'required', |
||||
'material_id' => 'required', |
||||
'qty_planning' => 'required' |
||||
]); |
||||
|
||||
$activity = Activity::where('id', $request->activity_id)->first(); |
||||
|
||||
$checkStock = RequestMaterial::where("id", $request->material_id)->first(); |
||||
$currentStock = $checkStock->qty; |
||||
if((int)$currentStock < (int)$request->qty_planning){ |
||||
return response()->json(['status'=>'failed','message'=>'Stock is not enough!','code'=> 500]); |
||||
} |
||||
|
||||
$start_date = $activity->start_date; |
||||
$start_date = substr($start_date, 0, 19); // remove the timezone offset |
||||
$startDate = new \DateTime(date("Y-m-d", strtotime($start_date))); |
||||
$planDate = new \DateTime(date("Y-m-d", strtotime($request->plan_date))); |
||||
|
||||
$data = $request->all(); |
||||
$data['created_by'] = $this->currentName; |
||||
$data['budget'] = $checkStock->price; |
||||
$data['qty_planning'] = $this->sanitizeDecimal($data['qty_planning']); |
||||
|
||||
if ($planDate >= $startDate) { |
||||
$result = AssignMaterial::create($data); |
||||
return response()->json(['status'=>'success','message'=>'Data added!', 'code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'Failed to add data!','code'=> 400], 400); |
||||
} |
||||
} |
||||
|
||||
public function update(Request $request, $id){ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
|
||||
$data = AssignMaterial::find($id); |
||||
if(!$data) |
||||
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); |
||||
|
||||
$result = $data->update($request->all()); |
||||
|
||||
if($result) |
||||
return response()->json(['status'=>'success','message'=> 'Data updated!','code'=> 200], 200); |
||||
|
||||
return response()->json(['status'=>'failed','message'=>'Failed to update!','code'=> 500], 500); |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
$data = AssignMaterial::where('id', $id)->first(); |
||||
$reports = ReportActivityMaterial::where('assign_material_id', $data->id)->get(); |
||||
if (isset($reports)) { |
||||
foreach ($reports as $report) { |
||||
$report->delete(); |
||||
} |
||||
} |
||||
|
||||
if($data->delete()) |
||||
return response()->json(['status'=>'success','message'=>'Data deleted!','code'=> 200], 200); |
||||
|
||||
return response()->json(['status'=>'failed','message'=>'Failed to delete!','code'=> 500], 500); |
||||
} |
||||
|
||||
public function edit($id){ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
|
||||
$result = AssignMaterial::find($id); |
||||
|
||||
if($result) |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); |
||||
|
||||
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
$dataBuilder = $this->setUpPayload($payload, 'assign_material_to_activity'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$dataGet = $builder->get(); |
||||
$totalRecord = $countBuilder->count(); |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
} |
||||
|
||||
public function list() |
||||
{ |
||||
$data = AssignMaterial::all(); |
||||
$countData = $data->count(); |
||||
|
||||
if($data) |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); |
||||
|
||||
return response()->json(['status'=>'failed','message'=>'Failed to get the data!','code'=> 500], 500); |
||||
} |
||||
|
||||
public function datatables(Request $request){ |
||||
$id_activity = $request->query('idact'); |
||||
$type = $request->query('type') ?? "material"; |
||||
$data = AssignMaterial::select( |
||||
"assign_material_to_activity.*","m.description as material_name", "m.uom as uom" |
||||
) |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->where('assign_material_to_activity.activity_id', $id_activity) |
||||
->where('assign_material_to_activity.type', $type) |
||||
->orderBy('plan_date', 'desc') |
||||
->get(); |
||||
return Datatables::of($data) |
||||
->addIndexColumn() |
||||
->addColumn('action', function($row){ |
||||
$actionBtn = '<a href="javascript:void(0)" data-id="'.$row->id.'" class="delete btn btn-danger btn-sm btn-material-delete"><i class="fa fa-trash"></i></a>'; |
||||
return $actionBtn; |
||||
}) |
||||
->rawColumns(['action'])->make(true); |
||||
} |
||||
|
||||
public function datatablesForReportActivity(Request $request){ |
||||
$id_activity = $request->query('idact'); |
||||
$data = |
||||
AssignMaterial::select( |
||||
AssignMaterial::raw('SUM(qty_planning) as qty_planning'), |
||||
"m.description as material_name", |
||||
"assign_material_to_activity.activity_id", |
||||
"assign_material_to_activity.type" |
||||
// "assign_material_to_activity.material_id", |
||||
) |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->groupBy("m.description") |
||||
->groupBy("assign_material_to_activity.activity_id") |
||||
->groupBy("assign_material_to_activity.type") |
||||
->where("assign_material_to_activity.activity_id", $id_activity)->get(); |
||||
return Datatables::of($data) |
||||
->addIndexColumn() |
||||
->addColumn('qty_sum', function($row){ |
||||
$val_qty_act = AssignMaterial::select(ReportActivityMaterial::raw('SUM(ram.qty) as qty_sum'),"m.description as material_name1") |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->join("report_activity_material as ram", "ram.assign_material_id", "=", "assign_material_to_activity.id") |
||||
->groupBy("m.description") |
||||
->where("m.description", strval($row->material_name)) |
||||
->where("ram.activity_id", $row->activity_id)->first(); |
||||
return $val_qty_act ? $val_qty_act->qty_sum : '-'; |
||||
}) |
||||
->addColumn('status_activity', function($row){ |
||||
$val_status = AssignMaterial::select("status_activity") |
||||
->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') |
||||
->where('m.description', '=', $row->material_name) |
||||
->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); |
||||
return $val_status ? $val_status->status_activity : null; |
||||
}) |
||||
->addColumn('start_activity', function($row){ |
||||
$val_start = AssignMaterial::select("start_activity") |
||||
->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') |
||||
->where('m.description', '=', $row->material_name) |
||||
->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); |
||||
return $val_start ? $val_start->start_activity : null; |
||||
}) |
||||
->addColumn('finish_activity', function($row){ |
||||
$val_finish = AssignMaterial::select("finish_activity") |
||||
->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') |
||||
->where('m.description', '=', $row->material_name) |
||||
->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); |
||||
return $val_finish ? $val_finish->finish_activity : null; |
||||
}) |
||||
->addColumn('uom', function($row){ |
||||
$val_uom = RequestMaterial::select("uom") |
||||
->where('description', '=', $row->material_name)->first(); |
||||
return $val_uom ? $val_uom->uom : null; |
||||
}) |
||||
->addColumn('assign_material_id', function($row){ |
||||
$assignMaterial =AssignMaterial::select('assign_material_to_activity.id')->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->where('activity_id', $row->activity_id)->where('m.description', $row->material_name)->first(); |
||||
return $assignMaterial ? $assignMaterial->id : null; |
||||
}) |
||||
->addColumn('action', function($row){ |
||||
$dataPlan = AssignMaterial::select('assign_material_to_activity.id')->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->where('activity_id', $row->activity_id)->where('m.description', $row->material_name)->first(); |
||||
$actionBtn = '<a href="javascript:void(0)" data-id="'.$dataPlan->id.'" data-activity_id="'.$row->activity_id.'" data-material-name="'.$row->material_name.'" class="primary btn btn-primary btn-sm btn-lihat-plan" data-toggle="tooltip" title="Lihat Plan" data-placement="top"><i class="fa fa-align-justify"></i></a>'; |
||||
$actionBtn .= '<a href="javascript:void(0)" data-id="'.$dataPlan->id.'" data-activity_id="'.$row->activity_id.'" data-material-name="'.$row->material_name.'" class="warning btn btn-warning btn-sm btn-lihat-actual" data-toggle="tooltip" title="Input Progress" data-placement="top"><i class="fa fa-edit" aria-hidden="true"></i></a>'; |
||||
return $actionBtn; |
||||
}) |
||||
->rawColumns(['action'])->make(true); |
||||
} |
||||
|
||||
public function ForReportActivityByMaterial(Request $request){ |
||||
$id_activity = $request->idact; |
||||
$data = AssignMaterial::select("assign_material_to_activity.*","m.description as material_name", "m.uom as uom") |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->where('assign_material_to_activity.activity_id', $id_activity)->get(); |
||||
foreach ($data as $key) { |
||||
$val_qty_sum = ReportActivityMaterial::where('assign_material_id', '=', $key->id)->sum("qty"); |
||||
} |
||||
$countData = $data->count(); |
||||
if($data){ |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'failed get Assign material, please try again later!','code'=>400], 400); |
||||
} |
||||
} |
||||
} |
||||
|
@ -1,102 +1,102 @@
|
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\Menu; |
||||
use App\Models\RoleMenu; |
||||
|
||||
class RoleMenuController extends Controller |
||||
{ |
||||
public function add(Request $request) |
||||
{ |
||||
$this->validate($request, [ |
||||
'role_id' => 'required', |
||||
'menu_id' => 'required', |
||||
]); |
||||
|
||||
$data = $request->all(); |
||||
|
||||
$data['created_by'] = $this->currentName; |
||||
|
||||
$result = RoleMenu::create($data); |
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','message'=>'add data role menu successfully!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'add data role menu failed!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function update(Request $request, $id) |
||||
{ |
||||
if(!$id || (int) $id < 0 || $id==""){ |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
} |
||||
|
||||
$data = RoleMenu::find($id); |
||||
|
||||
if($data){ |
||||
$result = $data->update($request->all()); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','message'=>'data role menu successfully updated!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu failed updated!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
$data = RoleMenu::find($id); |
||||
|
||||
if($data){ |
||||
$delete = $data->delete(); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($delete){ |
||||
return response()->json(['status'=>'success','message'=>'data role menu successfully deleted!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu failed deleted!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function deleteByRole($id) |
||||
{ |
||||
$data = RoleMenu::where("role_id", $id); |
||||
|
||||
if($data){ |
||||
$delete = $data->delete(); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($delete){ |
||||
return response()->json(['status'=>'success','message'=>'data role menu successfully deleted!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu failed deleted!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
$dataBuilder = $this->setUpPayload($payload, 't_roles_menu'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$dataGet = $builder->get(); |
||||
$totalRecord = $countBuilder->count(); |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\Menu; |
||||
use App\Models\RoleMenu; |
||||
|
||||
class RoleMenuController extends Controller |
||||
{ |
||||
public function add(Request $request) |
||||
{ |
||||
$this->validate($request, [ |
||||
'role_id' => 'required', |
||||
'menu_id' => 'required', |
||||
]); |
||||
|
||||
$data = $request->all(); |
||||
|
||||
$data['created_by'] = $this->currentName; |
||||
|
||||
$result = RoleMenu::create($data); |
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','message'=>'add data role menu successfully!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'add data role menu failed!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function update(Request $request, $id) |
||||
{ |
||||
if(!$id || (int) $id < 0 || $id==""){ |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
} |
||||
|
||||
$data = RoleMenu::find($id); |
||||
|
||||
if($data){ |
||||
$result = $data->update($request->all()); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','message'=>'data role menu successfully updated!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu failed updated!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
$data = RoleMenu::find($id); |
||||
|
||||
if($data){ |
||||
$delete = $data->delete(); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($delete){ |
||||
return response()->json(['status'=>'success','message'=>'data role menu successfully deleted!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu failed deleted!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function deleteByRole($id) |
||||
{ |
||||
$data = RoleMenu::where("role_id", $id); |
||||
|
||||
if($data){ |
||||
$delete = $data->delete(); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($delete){ |
||||
return response()->json(['status'=>'success','message'=>'data role menu successfully deleted!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu failed deleted!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
$dataBuilder = $this->setUpPayload($payload, 't_roles_menu'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$dataGet = $builder->get(); |
||||
$totalRecord = $countBuilder->count(); |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
} |
||||
} |
||||
|
@ -1,246 +1,246 @@
|
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use App\Models\AssignMaterial; |
||||
use App\Models\ActivityProgressLog; |
||||
use App\Models\AssignTools; |
||||
use App\Models\ReportActivityMaterial; |
||||
use Illuminate\Database\Eloquent\Model; |
||||
use Illuminate\Support\Arr; |
||||
use Illuminate\Support\Facades\DB; |
||||
use Carbon\Carbon; |
||||
|
||||
class Activity extends Model |
||||
{ |
||||
protected $table = 'm_activity'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
// persentase bobot gak kepake yg dipakenya bobot_planning |
||||
protected $fillable = [ |
||||
'proyek_id', 'parent_id', 'kode_sortname', 'name', 'rencana_biaya', 'start_date', |
||||
'end_date', 'area_kerja', 'biaya_actual', 'persentase_bobot', 'persentase_progress', |
||||
'buffer_radius', 'duration', 'color_progress', 'jumlah_pekerjaan', 'satuan', |
||||
'description', 'priority', 'bobot_planning', 'type_activity', 'open', 'geom', |
||||
'version_gantt_id', 'budget_plan', 'biaya_material_plan', 'biaya_human_plan', 'biaya_tools_plan', |
||||
'planned_start', 'planned_end', 'satuan_id', 'actual_start', 'actual_end', |
||||
'created_at', 'created_by', 'updated_at', 'updated_by', 'sortorder' |
||||
]; |
||||
|
||||
protected $appends = [ |
||||
'jobs_done', 'assign_hr', 'assign_material', 'assign_tools', 'assign_expense' |
||||
]; |
||||
|
||||
|
||||
public function getStartDateAttribute($value) |
||||
{ |
||||
if ($value instanceof \DateTime) { |
||||
return Carbon::instance($value) |
||||
->timezone(env('APP_TIMEZONE')) |
||||
->toDateTimeString(); |
||||
} |
||||
return Carbon::createFromTimestamp(strtotime($value)) |
||||
->timezone(env('APP_TIMEZONE')) |
||||
->toDateTimeString(); |
||||
} |
||||
|
||||
public function getEndDateAttribute($value) |
||||
{ |
||||
if ($value instanceof \DateTime) { |
||||
return Carbon::instance($value) |
||||
->timezone(env('APP_TIMEZONE')) |
||||
->toDateTimeString(); |
||||
} |
||||
return Carbon::createFromTimestamp(strtotime($value)) |
||||
->timezone(env('APP_TIMEZONE')) |
||||
->toDateTimeString(); |
||||
} |
||||
|
||||
|
||||
public static function boot() { |
||||
parent::boot(); |
||||
|
||||
static::updating(function($data) { |
||||
$data->logPersentaseProgress(); |
||||
}); |
||||
|
||||
static::updated(function($data) { |
||||
$data->updateBobot(); |
||||
$data->updateCostPlanning(); |
||||
if($data->bobot_planning){ |
||||
$data->updatePersentaseProgress(); |
||||
} |
||||
$data->updateCostActual(); |
||||
// if($data->start_date != request()->start_date || $data->end_date != request()->end_date) { |
||||
// $data->updateStartEndDateHeader(); |
||||
// } |
||||
}); |
||||
|
||||
static::deleted(function($data) { |
||||
if(Activity::where("parent_id", $data->parent_id)->count() == 0) |
||||
Activity::find($data->parent_id)->update(["type_activity"=>"task"]); |
||||
|
||||
$data->updateBobot(true); |
||||
$data->updateCostPlanning(); |
||||
if($data->bobot_planning){ |
||||
$data->updatePersentaseProgress(); |
||||
} |
||||
$data->updateCostActual(); |
||||
$data->updateStartEndDateHeader(); |
||||
}); |
||||
|
||||
} |
||||
|
||||
private function updateBobot($isDelete = false) |
||||
{ |
||||
$root = Activity::where('version_gantt_id', $this->version_gantt_id) |
||||
->where("proyek_id", $this->proyek_id) |
||||
->whereNull('parent_id') |
||||
->first(); |
||||
|
||||
if($root->rencana_biaya > 0){ |
||||
$activities = Activity::where("proyek_id", $this->proyek_id)->where("version_gantt_id", $this->version_gantt_id)->get(); |
||||
foreach ($activities as $activity) { |
||||
if($isDelete && $activity->id == $this->id) |
||||
continue; |
||||
|
||||
$activity->bobot_planning = ( (int)$activity->rencana_biaya / $root->rencana_biaya) * 100; |
||||
$activity->updated_by = auth()->user() ? auth()->user()->name : "system"; |
||||
$activity->saveQuietly(); |
||||
|
||||
} |
||||
} else { |
||||
if($parent = Activity::find($this->parent_id)){ |
||||
$totalChildWeight = Activity::where("parent_id", $this->parent_id)->sum('bobot_planning'); |
||||
$parent->update([ |
||||
"bobot_planning" => $totalChildWeight |
||||
]); |
||||
} |
||||
} |
||||
} |
||||
|
||||
private function updateCostActual() |
||||
{ |
||||
$actualCost = Activity::where("parent_id", $this->parent_id)->sum("biaya_actual"); |
||||
$this->biaya_actual = $actualCost; |
||||
if($parent = Activity::find($this->parent_id)){ |
||||
$parent->update([ |
||||
"biaya_actual" => $actualCost |
||||
]); |
||||
} |
||||
} |
||||
|
||||
private function updatePersentaseProgress() |
||||
{ |
||||
if($parent = Activity::find($this->parent_id)){ |
||||
$parentActWeight = $parent->bobot_planning; |
||||
|
||||
if ($parentActWeight == 0) { |
||||
$parent->update([ |
||||
"persentase_progress" => 0 |
||||
]); |
||||
return; |
||||
} |
||||
|
||||
$totalChildProportionalProgress = 0; |
||||
$childs = Activity::where("parent_id", $parent->id)->get(); |
||||
foreach($childs as $child){ |
||||
$currentActWeight = $child->bobot_planning; |
||||
$currentActProportionalProgress = ($currentActWeight / $parentActWeight) * $child->persentase_progress; |
||||
$totalChildProportionalProgress += $currentActProportionalProgress; |
||||
} |
||||
$parent->update([ |
||||
"persentase_progress" => $totalChildProportionalProgress |
||||
]); |
||||
} |
||||
} |
||||
|
||||
private function updateCostPlanning() { |
||||
$sumBiaya = Activity::select(DB::raw('sum(cast(rencana_biaya as double precision))')) |
||||
->where("parent_id", $this->parent_id) |
||||
->first(); |
||||
$this->rencana_biaya = $sumBiaya->sum; |
||||
if($parent = Activity::find($this->parent_id)){ |
||||
$parent->update([ |
||||
"rencana_biaya" => $sumBiaya->sum, |
||||
]); |
||||
} |
||||
} |
||||
|
||||
private function logPersentaseProgress() |
||||
{ |
||||
ActivityProgressLog::create([ |
||||
'version_gantt_id' => $this->version_gantt_id, |
||||
'activity_id' => request()->id, |
||||
'old_percentage' => $this->persentase_progress, |
||||
'new_percentage' => request()->persentase_progress, |
||||
'variance' => $this->persentase_progress - request()->persentase_progress, |
||||
'created_by'=> "system" |
||||
]); |
||||
} |
||||
|
||||
private function updateStartEndDateHeader() |
||||
{ |
||||
$earliestStartDate = Activity::where('version_gantt_id', $this->version_gantt_id)->whereNotNull('parent_id')->oldest('start_date')->pluck('start_date')->first(); |
||||
$latestEndDate = Activity::where('version_gantt_id', $this->version_gantt_id)->whereNotNull('parent_id')->latest('end_date')->pluck('end_date')->first(); |
||||
if($header = Activity::where('version_gantt_id', $this->version_gantt_id)->whereNull('parent_id')->first()) { |
||||
$header->start_date = $earliestStartDate; |
||||
$header->end_date = $latestEndDate; |
||||
$header->saveQuietly(); |
||||
} |
||||
} |
||||
|
||||
public function getJobsDoneAttribute() |
||||
{ |
||||
if(!ReportActivityMaterial::where('activity_id', $this->id)->first()) |
||||
return 0; |
||||
if(!$dataPlan = AssignMaterial::where('activity_id', $this->id)->get()) |
||||
return 0; |
||||
if($dataPlan->isEmpty()) |
||||
return 0; |
||||
if($dataPlan[0]->status_activity == 'done') |
||||
return 100; |
||||
return $this->persentase_progress; |
||||
} |
||||
|
||||
public function getAssignHrAttribute() |
||||
{ |
||||
return Arr::flatten(UserToActivity::select("u.name as name") |
||||
->join("m_users as u", "u.id", "=", "assign_hr_to_activity.user_id") |
||||
->where('assign_hr_to_activity.activity_id', $this->id) |
||||
->get() |
||||
->toArray()); |
||||
} |
||||
|
||||
public function getAssignMaterialAttribute() |
||||
{ |
||||
return Arr::flatten(AssignMaterial::select("m.description as name") |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->where('assign_material_to_activity.activity_id', $this->id) |
||||
->where('assign_material_to_activity.type', "material") |
||||
->get() |
||||
->toArray()); |
||||
} |
||||
|
||||
public function getAssignExpenseAttribute() |
||||
{ |
||||
return Arr::flatten(AssignMaterial::select("m.description as name") |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->where('assign_material_to_activity.activity_id', $this->id) |
||||
->where('assign_material_to_activity.type', "expense") |
||||
->get() |
||||
->toArray()); |
||||
} |
||||
|
||||
public function getAssignToolsAttribute() |
||||
{ |
||||
return Arr::flatten(AssignTools::select("m.name as name") |
||||
->join("m_tools_resource as m", "m.id", "=", "assign_tools_to_activity.tools_id") |
||||
->where('assign_tools_to_activity.activity_id', $this->id) |
||||
->get() |
||||
->toArray()); |
||||
} |
||||
|
||||
} |
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use App\Models\AssignMaterial; |
||||
use App\Models\ActivityProgressLog; |
||||
use App\Models\AssignTools; |
||||
use App\Models\ReportActivityMaterial; |
||||
use Illuminate\Database\Eloquent\Model; |
||||
use Illuminate\Support\Arr; |
||||
use Illuminate\Support\Facades\DB; |
||||
use Carbon\Carbon; |
||||
|
||||
class Activity extends Model |
||||
{ |
||||
protected $table = 'm_activity'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
// persentase bobot gak kepake yg dipakenya bobot_planning |
||||
protected $fillable = [ |
||||
'proyek_id', 'parent_id', 'kode_sortname', 'name', 'rencana_biaya', 'start_date', |
||||
'end_date', 'area_kerja', 'biaya_actual', 'persentase_bobot', 'persentase_progress', |
||||
'buffer_radius', 'duration', 'color_progress', 'jumlah_pekerjaan', 'satuan', |
||||
'description', 'priority', 'bobot_planning', 'type_activity', 'open', 'geom', |
||||
'version_gantt_id', 'budget_plan', 'biaya_material_plan', 'biaya_human_plan', 'biaya_tools_plan', |
||||
'planned_start', 'planned_end', 'satuan_id', 'actual_start', 'actual_end', |
||||
'created_at', 'created_by', 'updated_at', 'updated_by', 'sortorder' |
||||
]; |
||||
|
||||
protected $appends = [ |
||||
'jobs_done', 'assign_hr', 'assign_material', 'assign_tools', 'assign_expense' |
||||
]; |
||||
|
||||
|
||||
public function getStartDateAttribute($value) |
||||
{ |
||||
if ($value instanceof \DateTime) { |
||||
return Carbon::instance($value) |
||||
->timezone(env('APP_TIMEZONE')) |
||||
->toDateTimeString(); |
||||
} |
||||
return Carbon::createFromTimestamp(strtotime($value)) |
||||
->timezone(env('APP_TIMEZONE')) |
||||
->toDateTimeString(); |
||||
} |
||||
|
||||
public function getEndDateAttribute($value) |
||||
{ |
||||
if ($value instanceof \DateTime) { |
||||
return Carbon::instance($value) |
||||
->timezone(env('APP_TIMEZONE')) |
||||
->toDateTimeString(); |
||||
} |
||||
return Carbon::createFromTimestamp(strtotime($value)) |
||||
->timezone(env('APP_TIMEZONE')) |
||||
->toDateTimeString(); |
||||
} |
||||
|
||||
|
||||
public static function boot() { |
||||
parent::boot(); |
||||
|
||||
static::updating(function($data) { |
||||
$data->logPersentaseProgress(); |
||||
}); |
||||
|
||||
static::updated(function($data) { |
||||
$data->updateBobot(); |
||||
$data->updateCostPlanning(); |
||||
if($data->bobot_planning){ |
||||
$data->updatePersentaseProgress(); |
||||
} |
||||
$data->updateCostActual(); |
||||
// if($data->start_date != request()->start_date || $data->end_date != request()->end_date) { |
||||
// $data->updateStartEndDateHeader(); |
||||
// } |
||||
}); |
||||
|
||||
static::deleted(function($data) { |
||||
if(Activity::where("parent_id", $data->parent_id)->count() == 0) |
||||
Activity::find($data->parent_id)->update(["type_activity"=>"task"]); |
||||
|
||||
$data->updateBobot(true); |
||||
$data->updateCostPlanning(); |
||||
if($data->bobot_planning){ |
||||
$data->updatePersentaseProgress(); |
||||
} |
||||
$data->updateCostActual(); |
||||
$data->updateStartEndDateHeader(); |
||||
}); |
||||
|
||||
} |
||||
|
||||
private function updateBobot($isDelete = false) |
||||
{ |
||||
$root = Activity::where('version_gantt_id', $this->version_gantt_id) |
||||
->where("proyek_id", $this->proyek_id) |
||||
->whereNull('parent_id') |
||||
->first(); |
||||
|
||||
if($root->rencana_biaya > 0){ |
||||
$activities = Activity::where("proyek_id", $this->proyek_id)->where("version_gantt_id", $this->version_gantt_id)->get(); |
||||
foreach ($activities as $activity) { |
||||
if($isDelete && $activity->id == $this->id) |
||||
continue; |
||||
|
||||
$activity->bobot_planning = ( (int)$activity->rencana_biaya / $root->rencana_biaya) * 100; |
||||
$activity->updated_by = auth()->user() ? auth()->user()->name : "system"; |
||||
$activity->saveQuietly(); |
||||
|
||||
} |
||||
} else { |
||||
if($parent = Activity::find($this->parent_id)){ |
||||
$totalChildWeight = Activity::where("parent_id", $this->parent_id)->sum('bobot_planning'); |
||||
$parent->update([ |
||||
"bobot_planning" => $totalChildWeight |
||||
]); |
||||
} |
||||
} |
||||
} |
||||
|
||||
private function updateCostActual() |
||||
{ |
||||
$actualCost = Activity::where("parent_id", $this->parent_id)->sum("biaya_actual"); |
||||
$this->biaya_actual = $actualCost; |
||||
if($parent = Activity::find($this->parent_id)){ |
||||
$parent->update([ |
||||
"biaya_actual" => $actualCost |
||||
]); |
||||
} |
||||
} |
||||
|
||||
private function updatePersentaseProgress() |
||||
{ |
||||
if($parent = Activity::find($this->parent_id)){ |
||||
$parentActWeight = $parent->bobot_planning; |
||||
|
||||
if ($parentActWeight == 0) { |
||||
$parent->update([ |
||||
"persentase_progress" => 0 |
||||
]); |
||||
return; |
||||
} |
||||
|
||||
$totalChildProportionalProgress = 0; |
||||
$childs = Activity::where("parent_id", $parent->id)->get(); |
||||
foreach($childs as $child){ |
||||
$currentActWeight = $child->bobot_planning; |
||||
$currentActProportionalProgress = ($currentActWeight / $parentActWeight) * $child->persentase_progress; |
||||
$totalChildProportionalProgress += $currentActProportionalProgress; |
||||
} |
||||
$parent->update([ |
||||
"persentase_progress" => $totalChildProportionalProgress |
||||
]); |
||||
} |
||||
} |
||||
|
||||
private function updateCostPlanning() { |
||||
$sumBiaya = Activity::select(DB::raw('sum(cast(rencana_biaya as double precision))')) |
||||
->where("parent_id", $this->parent_id) |
||||
->first(); |
||||
$this->rencana_biaya = $sumBiaya->sum; |
||||
if($parent = Activity::find($this->parent_id)){ |
||||
$parent->update([ |
||||
"rencana_biaya" => $sumBiaya->sum, |
||||
]); |
||||
} |
||||
} |
||||
|
||||
private function logPersentaseProgress() |
||||
{ |
||||
ActivityProgressLog::create([ |
||||
'version_gantt_id' => $this->version_gantt_id, |
||||
'activity_id' => request()->id, |
||||
'old_percentage' => $this->persentase_progress, |
||||
'new_percentage' => request()->persentase_progress, |
||||
'variance' => $this->persentase_progress - request()->persentase_progress, |
||||
'created_by'=> "system" |
||||
]); |
||||
} |
||||
|
||||
private function updateStartEndDateHeader() |
||||
{ |
||||
$earliestStartDate = Activity::where('version_gantt_id', $this->version_gantt_id)->whereNotNull('parent_id')->oldest('start_date')->pluck('start_date')->first(); |
||||
$latestEndDate = Activity::where('version_gantt_id', $this->version_gantt_id)->whereNotNull('parent_id')->latest('end_date')->pluck('end_date')->first(); |
||||
if($header = Activity::where('version_gantt_id', $this->version_gantt_id)->whereNull('parent_id')->first()) { |
||||
$header->start_date = $earliestStartDate; |
||||
$header->end_date = $latestEndDate; |
||||
$header->saveQuietly(); |
||||
} |
||||
} |
||||
|
||||
public function getJobsDoneAttribute() |
||||
{ |
||||
if(!ReportActivityMaterial::where('activity_id', $this->id)->first()) |
||||
return 0; |
||||
if(!$dataPlan = AssignMaterial::where('activity_id', $this->id)->get()) |
||||
return 0; |
||||
if($dataPlan->isEmpty()) |
||||
return 0; |
||||
if($dataPlan[0]->status_activity == 'done') |
||||
return 100; |
||||
return $this->persentase_progress; |
||||
} |
||||
|
||||
public function getAssignHrAttribute() |
||||
{ |
||||
return Arr::flatten(UserToActivity::select("u.name as name") |
||||
->join("m_users as u", "u.id", "=", "assign_hr_to_activity.user_id") |
||||
->where('assign_hr_to_activity.activity_id', $this->id) |
||||
->get() |
||||
->toArray()); |
||||
} |
||||
|
||||
public function getAssignMaterialAttribute() |
||||
{ |
||||
return Arr::flatten(AssignMaterial::select("m.description as name") |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->where('assign_material_to_activity.activity_id', $this->id) |
||||
->where('assign_material_to_activity.type', "material") |
||||
->get() |
||||
->toArray()); |
||||
} |
||||
|
||||
public function getAssignExpenseAttribute() |
||||
{ |
||||
return Arr::flatten(AssignMaterial::select("m.description as name") |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->where('assign_material_to_activity.activity_id', $this->id) |
||||
->where('assign_material_to_activity.type', "expense") |
||||
->get() |
||||
->toArray()); |
||||
} |
||||
|
||||
public function getAssignToolsAttribute() |
||||
{ |
||||
return Arr::flatten(AssignTools::select("m.name as name") |
||||
->join("m_tools_resource as m", "m.id", "=", "assign_tools_to_activity.tools_id") |
||||
->where('assign_tools_to_activity.activity_id', $this->id) |
||||
->get() |
||||
->toArray()); |
||||
} |
||||
|
||||
} |
||||
|
@ -1,46 +1,46 @@
|
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
use App\Models\RequestMaterial; |
||||
use App\Models\Activity; |
||||
use App\Models\ReportActivityMaterial; |
||||
|
||||
class AssignMaterial extends Model |
||||
{ |
||||
protected $table = 'assign_material_to_activity'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'proyek_id', 'activity_id', 'material_id', 'qty_planning', |
||||
'budget', 'plan_date', 'status_activity', 'type', |
||||
'created_at', 'created_by', 'updated_at', 'updated_by' |
||||
]; |
||||
|
||||
protected $casts = [ |
||||
'id' => 'integer', |
||||
'budget' => 'string', |
||||
]; |
||||
|
||||
public static function boot() { |
||||
parent::boot(); |
||||
|
||||
static::created(function($data) { |
||||
$activity = Activity::find($data->activity_id); |
||||
$material = RequestMaterial::where("id", $data->material_id)->first(); |
||||
$activity->rencana_biaya += floatval($material->price) * floatval($data->qty_planning); |
||||
$activity->save(); |
||||
}); |
||||
|
||||
static::deleted(function($data) { |
||||
$reportActivities = ReportActivityMaterial::where('assign_material_id', $data->id)->delete(); |
||||
$activity = Activity::where('id', $data->activity_id)->first(); |
||||
$activity->rencana_biaya -= floatval($data->budget) * floatval($data->qty_planning); |
||||
$activity->save(); |
||||
}); |
||||
|
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
use App\Models\RequestMaterial; |
||||
use App\Models\Activity; |
||||
use App\Models\ReportActivityMaterial; |
||||
|
||||
class AssignMaterial extends Model |
||||
{ |
||||
protected $table = 'assign_material_to_activity'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'proyek_id', 'activity_id', 'material_id', 'qty_planning', |
||||
'budget', 'plan_date', 'status_activity', 'type', |
||||
'created_at', 'created_by', 'updated_at', 'updated_by' |
||||
]; |
||||
|
||||
protected $casts = [ |
||||
'id' => 'integer', |
||||
'budget' => 'string', |
||||
]; |
||||
|
||||
public static function boot() { |
||||
parent::boot(); |
||||
|
||||
static::created(function($data) { |
||||
$activity = Activity::find($data->activity_id); |
||||
$material = RequestMaterial::where("id", $data->material_id)->first(); |
||||
$activity->rencana_biaya += floatval($material->price) * floatval($data->qty_planning); |
||||
$activity->save(); |
||||
}); |
||||
|
||||
static::deleted(function($data) { |
||||
$reportActivities = ReportActivityMaterial::where('assign_material_id', $data->id)->delete(); |
||||
$activity = Activity::where('id', $data->activity_id)->first(); |
||||
$activity->rencana_biaya -= floatval($data->budget) * floatval($data->qty_planning); |
||||
$activity->save(); |
||||
}); |
||||
|
||||
} |
||||
} |
||||
|
@ -1,73 +1,73 @@
|
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
use App\Models\Activity; |
||||
use App\Models\AssignMaterial; |
||||
use Carbon\Carbon; |
||||
|
||||
class ReportActivityMaterial extends Model |
||||
{ |
||||
protected $table = 'report_activity_material'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'activity_id', 'user_id', 'qty', 'lat', 'lon','assign_material_id', |
||||
'report_date', 'description', 'created_at', 'created_by', 'updated_at', 'updated_by' |
||||
]; |
||||
|
||||
public function getReportDateAttribute($value) |
||||
{ |
||||
return Carbon::createFromTimestamp(strtotime($value)) |
||||
->timezone(env('APP_TIMEZONE')) |
||||
->toDateTimeString(); |
||||
} |
||||
|
||||
public static function boot() { |
||||
parent::boot(); |
||||
|
||||
static::created(function($data) { |
||||
$activity = Activity::find($data->activity_id); |
||||
$assignedMaterial = AssignMaterial::find($data->assign_material_id); |
||||
|
||||
$biayaActual = $activity->biaya_actual + floatval($assignedMaterial->budget) * floatval($data->qty); |
||||
|
||||
$dataPlan = AssignMaterial::where('activity_id', $activity->id)->get(); |
||||
if($dataPlan[0]->status_activity == 'done'){ |
||||
$percentage = 100; |
||||
} else { |
||||
$totalPlan = $dataPlan->sum('qty_planning'); |
||||
$totalVolumeActual = ReportActivityMaterial::where('activity_id', '=', $activity->id)->sum("qty"); |
||||
$percentage = ($totalVolumeActual * 100) / $totalPlan; |
||||
$percentage = $percentage >= config('app.max_percentage_not_done') ? config('app.max_percentage_not_done') : $percentage; |
||||
} |
||||
|
||||
$activity->update([ |
||||
"persentase_progress" => $percentage, |
||||
"biaya_actual" => $biayaActual, |
||||
]); |
||||
|
||||
$activity->save(); |
||||
}); |
||||
|
||||
static::deleted(function($data) { |
||||
|
||||
$activity = Activity::find($data->activity_id); |
||||
$assignedMaterial = AssignMaterial::find($data->assign_material_id); |
||||
|
||||
$activity->biaya_actual -= floatval($assignedMaterial->budget) * floatval($data->qty); |
||||
|
||||
$dataPlan = AssignMaterial::where('activity_id', $activity->id)->get(); |
||||
$totalPlan = $dataPlan->sum('qty_planning'); |
||||
$totalVolumeActual = ReportActivityMaterial::where('activity_id', '=', $activity->id)->sum("qty"); |
||||
$percentage = ($totalVolumeActual * 100) / $totalPlan; |
||||
$activity->persentase_progress = $percentage >= config('app.max_percentage_not_done') ? config('app.max_percentage_not_done') : $percentage; |
||||
$activity->save(); |
||||
|
||||
}); |
||||
|
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
use App\Models\Activity; |
||||
use App\Models\AssignMaterial; |
||||
use Carbon\Carbon; |
||||
|
||||
class ReportActivityMaterial extends Model |
||||
{ |
||||
protected $table = 'report_activity_material'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'activity_id', 'user_id', 'qty', 'lat', 'lon','assign_material_id', |
||||
'report_date', 'description', 'created_at', 'created_by', 'updated_at', 'updated_by' |
||||
]; |
||||
|
||||
public function getReportDateAttribute($value) |
||||
{ |
||||
return Carbon::createFromTimestamp(strtotime($value)) |
||||
->timezone(env('APP_TIMEZONE')) |
||||
->toDateTimeString(); |
||||
} |
||||
|
||||
public static function boot() { |
||||
parent::boot(); |
||||
|
||||
static::created(function($data) { |
||||
$activity = Activity::find($data->activity_id); |
||||
$assignedMaterial = AssignMaterial::find($data->assign_material_id); |
||||
|
||||
$biayaActual = $activity->biaya_actual + floatval($assignedMaterial->budget) * floatval($data->qty); |
||||
|
||||
$dataPlan = AssignMaterial::where('activity_id', $activity->id)->get(); |
||||
if($dataPlan[0]->status_activity == 'done'){ |
||||
$percentage = 100; |
||||
} else { |
||||
$totalPlan = $dataPlan->sum('qty_planning'); |
||||
$totalVolumeActual = ReportActivityMaterial::where('activity_id', '=', $activity->id)->sum("qty"); |
||||
$percentage = ($totalVolumeActual * 100) / $totalPlan; |
||||
$percentage = $percentage >= config('app.max_percentage_not_done') ? config('app.max_percentage_not_done') : $percentage; |
||||
} |
||||
|
||||
$activity->update([ |
||||
"persentase_progress" => $percentage, |
||||
"biaya_actual" => $biayaActual, |
||||
]); |
||||
|
||||
$activity->save(); |
||||
}); |
||||
|
||||
static::deleted(function($data) { |
||||
|
||||
$activity = Activity::find($data->activity_id); |
||||
$assignedMaterial = AssignMaterial::find($data->assign_material_id); |
||||
|
||||
$activity->biaya_actual -= floatval($assignedMaterial->budget) * floatval($data->qty); |
||||
|
||||
$dataPlan = AssignMaterial::where('activity_id', $activity->id)->get(); |
||||
$totalPlan = $dataPlan->sum('qty_planning'); |
||||
$totalVolumeActual = ReportActivityMaterial::where('activity_id', '=', $activity->id)->sum("qty"); |
||||
$percentage = ($totalVolumeActual * 100) / $totalPlan; |
||||
$activity->persentase_progress = $percentage >= config('app.max_percentage_not_done') ? config('app.max_percentage_not_done') : $percentage; |
||||
$activity->save(); |
||||
|
||||
}); |
||||
|
||||
} |
||||
} |
||||
|
Loading…
Reference in new issue