Browse Source

Merge pull request 'update clear code' (#61) from dev-wahyun into staging

Reviewed-on: ibnu/generic-ospro-backend#61
pull/1/head
farhantock 7 months ago
parent
commit
6ba759d324
  1. 8
      app/Http/Controllers/AssignMaterialController.php
  2. 319
      app/Http/Controllers/AssignToolsController.php
  3. 280
      app/Http/Controllers/HolidayController.php
  4. 3
      app/Http/Controllers/HumanResourceController.php
  5. 2
      app/Http/Controllers/ReportActivityController.php
  6. 6
      app/Http/Controllers/ReportActivityMaterialController.php
  7. 2
      app/Http/Controllers/UserToActivityController.php
  8. 89
      app/Models/Activity.php
  9. 37
      app/Models/AssignMaterial.php
  10. 34
      app/Models/ProjectRole.php
  11. 396
      app/Models/User.php
  12. 57
      app/Models/UserToActivity.php
  13. 20
      routes/web.php

8
app/Http/Controllers/AssignMaterialController.php

@ -8,7 +8,7 @@ use App\Models\RequestMaterial;
use App\Models\Activity;
use App\Models\ReportActivityMaterial;
use Illuminate\Support\Facades\DB;
use Datatables;
use Yajra\Datatables\Datatables;
class AssignMaterialController extends Controller
{
@ -47,7 +47,11 @@ class AssignMaterialController extends Controller
if ($planDate >= $startDate) {
$result = AssignMaterial::create($data);
return response()->json(['status' => 'success', 'message' => 'Data added!', 'code' => 200], 200);
if($result) {
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);
}
} else {
return response()->json(['status' => 'failed', 'message' => 'Failed to add data!', 'code' => 400], 400);
}

319
app/Http/Controllers/AssignToolsController.php

@ -1,160 +1,159 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\AssignTools;
use Datatables;
use App\Models\ToolsResource;
class AssignToolsController extends Controller
{
public function add(Request $request){
$this->validate($request, [
'activity_id' => 'required',
'tools_id' => 'required',
'qty_planning' => 'required',
]);
$checkStock = ToolsResource::where("id", $request->tools_id)->first();
$currentStock = $checkStock->qty;
if((int)$currentStock < (int)$request->qty_planning){
return response()->json(['status'=>'failed','message'=>'Not enough stock in warehouse!','code'=>400]);
die();
}
$data = $request->all();
$data['created_by'] = $this->currentName;
$result = AssignTools::create($data);
if($result){
$checkStock = ToolsResource::find($request->tools_id);
$newStock = (int)$checkStock->qty - (int)$request->qty_planning;
$dataUpdate = array(
"qty"=>$newStock,
"updated_by"=>$this->currentName
);
$checkStock->update($dataUpdate);
return response()->json(['status'=>'success','message'=>'Assign tools success!','code'=>200]);
}else{
return response()->json(['status'=>'failed','message'=>'Assign tools failed','code'=>400]);
}
}
private function updateFromAdd($data){
$assignTools = AssignTools::where("activity_id", $data->activity_id)->where("tools_id", $data->tools_id)->first();
$newQty = (int)$assignTools->qty_planning + (int)$data->qty_planning;
$dataUpdate = array(
"qty_planning"=>$newQty,
"updated_by"=>$this->currentName
);
$dataWillUpdate = AssignMaterial::where("activity_id", $data->activity_id)->where("tools_id", $data->tools_id);
return $dataWillUpdate->update($dataUpdate);
}
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 = AssignTools::find($id);
if($data){
$result = $data->update($request->all());
}else{
return response()->json(['status'=>'failed','message'=>'Data Assign tools not found!','code'=>400], 400);
die();
}
if($result){
return response()->json(['status'=>'success','message'=>'Assign tools successfully updated!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'Assign tools failed updated!','code'=>400], 400);
}
}
public function delete($id)
{
$data = AssignTools::find($id);
if($data){
$id = $data->tools_id;
$stock = $data->qty_planning;
$toolsResource = ToolsResource::find($id);
if($toolsResource){
$oldStock = $toolsResource->qty;
$newStock = $oldStock + $stock;
$dataUpdate = array(
"qty"=>$newStock,
"updated_by"=>$this->currentName
);
$toolsResource->update($dataUpdate);
}
$delete = $data->delete();
}else{
return response()->json(['status'=>'failed','message'=>'Data Assign tools not found!','code'=>400], 400);
die();
}
if($delete){
return response()->json(['status'=>'success','message'=>'Assign tools successfully deleted!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'Assign tools failed deleted!','code'=>400], 400);
}
}
public function edit($id){
if(!$id || (int) $id < 0 || $id==""){
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
die();
}
$result = AssignTools::find($id);
if($result){
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
}else{
return response()->json(['status'=>'failed','message'=>'failed get data Assign tools, please try again later!','code'=>400], 400);
}
}
public function search(Request $request)
{
$payload = $request->all();
$dataBuilder = $this->setUpPayload($payload, 'assign_tools_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 = AssignTools::all();
$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 tools, please try again later!','code'=>400], 400);
}
}
public function datatables(Request $request){
$id_activity = $request->query('idact');
$data = AssignTools::select("assign_tools_to_activity.*","m.name as tools_name","m.uom as uom")->join("m_tools_resource as m", "m.id", "=", "assign_tools_to_activity.tools_id")->where('assign_tools_to_activity.activity_id', $id_activity)->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-tools-delete"><i class="fa fa-trash"></i></a>';
return $actionBtn;
})
->rawColumns(['action'])->make(true);
}
}
<?php
namespace App\Http\Controllers;
use App\Models\{AssignMaterial,AssignTools,ToolsResource};
use Illuminate\Http\Request;
use Yajra\Datatables\Datatables;
class AssignToolsController extends Controller
{
public function add(Request $request){
$this->validate($request, [
'activity_id' => 'required',
'tools_id' => 'required',
'qty_planning' => 'required',
]);
$checkStock = ToolsResource::where("id", $request->tools_id)->first();
$currentStock = $checkStock->qty;
if((int)$currentStock < (int)$request->qty_planning){
return response()->json(['status'=>'failed','message'=>'Not enough stock in warehouse!','code'=>400]);
die();
}
$data = $request->all();
$data['created_by'] = $this->currentName;
$result = AssignTools::create($data);
if($result){
$checkStock = ToolsResource::find($request->tools_id);
$newStock = (int)$checkStock->qty - (int)$request->qty_planning;
$dataUpdate = array(
"qty"=>$newStock,
"updated_by"=>$this->currentName
);
$checkStock->update($dataUpdate);
return response()->json(['status'=>'success','message'=>'Assign tools success!','code'=>200]);
}else{
return response()->json(['status'=>'failed','message'=>'Assign tools failed','code'=>400]);
}
}
private function updateFromAdd($data){
$assignTools = AssignTools::where("activity_id", $data->activity_id)->where("tools_id", $data->tools_id)->first();
$newQty = (int)$assignTools->qty_planning + (int)$data->qty_planning;
$dataUpdate = array(
"qty_planning"=>$newQty,
"updated_by"=>$this->currentName
);
$dataWillUpdate = AssignMaterial::where("activity_id", $data->activity_id)->where("tools_id", $data->tools_id);
return $dataWillUpdate->update($dataUpdate);
}
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 = AssignTools::find($id);
if($data){
$result = $data->update($request->all());
}else{
return response()->json(['status'=>'failed','message'=>'Data Assign tools not found!','code'=>400], 400);
die();
}
if($result){
return response()->json(['status'=>'success','message'=>'Assign tools successfully updated!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'Assign tools failed updated!','code'=>400], 400);
}
}
public function delete($id)
{
$data = AssignTools::find($id);
if($data){
$id = $data->tools_id;
$stock = $data->qty_planning;
$toolsResource = ToolsResource::find($id);
if($toolsResource){
$oldStock = $toolsResource->qty;
$newStock = $oldStock + $stock;
$dataUpdate = array(
"qty"=>$newStock,
"updated_by"=>$this->currentName
);
$toolsResource->update($dataUpdate);
}
$delete = $data->delete();
}else{
return response()->json(['status'=>'failed','message'=>'Data Assign tools not found!','code'=>400], 400);
die();
}
if($delete){
return response()->json(['status'=>'success','message'=>'Assign tools successfully deleted!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'Assign tools failed deleted!','code'=>400], 400);
}
}
public function edit($id){
if(!$id || (int) $id < 0 || $id==""){
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
die();
}
$result = AssignTools::find($id);
if($result){
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
}else{
return response()->json(['status'=>'failed','message'=>'failed get data Assign tools, please try again later!','code'=>400], 400);
}
}
public function search(Request $request)
{
$payload = $request->all();
$dataBuilder = $this->setUpPayload($payload, 'assign_tools_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 = AssignTools::all();
$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 tools, please try again later!','code'=>400], 400);
}
}
public function datatables(Request $request){
$id_activity = $request->query('idact');
$data = AssignTools::select("assign_tools_to_activity.*","m.name as tools_name","m.uom as uom")->join("m_tools_resource as m", "m.id", "=", "assign_tools_to_activity.tools_id")->where('assign_tools_to_activity.activity_id', $id_activity)->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-tools-delete"><i class="fa fa-trash"></i></a>';
return $actionBtn;
})
->rawColumns(['action'])->make(true);
}
}

280
app/Http/Controllers/HolidayController.php

@ -1,140 +1,140 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Holiday;
use Datatables;
class HolidayController extends Controller
{
public function add(Request $request)
{
$this->validate($request, [
'proyek_id' => 'required',
'version_gantt_id' => 'required',
'date' => 'required'
]);
$data = $request->all();
$duration = $request->duration;
if(!$duration){
$data['duration'] = 1;
}
$data['created_by'] = $this->currentName;
$result = Holiday::create($data);
if($result){
return response()->json(['status'=>'success','message'=>'add holiday successfully!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'add holiday failed!','code'=>400], 400);
}
}
public function edit($id){
if(!$id || (int) $id < 0 || $id==""){
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
die();
}
$result = Holiday::find($id);
if($result){
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
}else{
return response()->json(['status'=>'failed','message'=>'failed get data holiday, please try again later!','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 = Holiday::find($id);
if($data){
$result = $data->update($request->all());
}else{
return response()->json(['status'=>'failed','message'=>'data holiday not found!','code'=>400], 400);
die();
}
if($result){
return response()->json(['status'=>'success','message'=>'data holiday successfully updated!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'data holiday failed updated!','code'=>400], 400);
}
}
public function delete($id)
{
$data = Holiday::find($id);
if($data){
$deletedData = $data;
$delete = $data->delete();
}else{
return response()->json(['status'=>'failed','message'=>'data holiday not found!','code'=>400], 400);
die();
}
if($delete){
return response()->json(['status'=>'success', 'data'=>$deletedData,'message'=>'data holiday successfully deleted!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'data holiday failed deleted!','code'=>400], 400);
}
}
public function search(Request $request)
{
$payload = $request->all();
$dataBuilder = $this->setUpPayload($payload, 'm_holidays');
$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 = Holiday::all();
$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 list holiday, please try again later!','code'=>400], 400);
}
}
public function datatables(Request $request){
$proyek_id = $request->query('proyek_id');
$gantt_id = $request->query('gantt_id');
$data = Holiday::where('proyek_id', $proyek_id)->where('version_gantt_id', $gantt_id)->get();
return Datatables::of($data)
->editColumn('date', function($row) {
$date = date_create($row->date);
$dateFormat = date_format($date,"d-m-Y");
return $dateFormat;
})
->editColumn('duration', function($row) {
$day = (int)$row->duration > 1 ? "days" : "day";
return $row->duration." ".$day;
})
->addIndexColumn()
->addColumn('action', function($row){
$actionBtn = '<a href="javascript:void(0)" data-id="'.$row->id.'" class="delete btn btn-danger btn-sm btn-holiday-delete"><i class="fa fa-trash"></i></a>';
return $actionBtn;
})
->rawColumns(['action'])->make(true);
}
}
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Holiday;
use Yajra\Datatables\Datatables;
class HolidayController extends Controller
{
public function add(Request $request)
{
$this->validate($request, [
'proyek_id' => 'required',
'version_gantt_id' => 'required',
'date' => 'required'
]);
$data = $request->all();
$duration = $request->duration;
if(!$duration){
$data['duration'] = 1;
}
$data['created_by'] = $this->currentName;
$result = Holiday::create($data);
if($result){
return response()->json(['status'=>'success','message'=>'add holiday successfully!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'add holiday failed!','code'=>400], 400);
}
}
public function edit($id){
if(!$id || (int) $id < 0 || $id==""){
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
die();
}
$result = Holiday::find($id);
if($result){
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
}else{
return response()->json(['status'=>'failed','message'=>'failed get data holiday, please try again later!','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 = Holiday::find($id);
if($data){
$result = $data->update($request->all());
}else{
return response()->json(['status'=>'failed','message'=>'data holiday not found!','code'=>400], 400);
die();
}
if($result){
return response()->json(['status'=>'success','message'=>'data holiday successfully updated!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'data holiday failed updated!','code'=>400], 400);
}
}
public function delete($id)
{
$data = Holiday::find($id);
if($data){
$deletedData = $data;
$delete = $data->delete();
}else{
return response()->json(['status'=>'failed','message'=>'data holiday not found!','code'=>400], 400);
die();
}
if($delete){
return response()->json(['status'=>'success', 'data'=>$deletedData,'message'=>'data holiday successfully deleted!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'data holiday failed deleted!','code'=>400], 400);
}
}
public function search(Request $request)
{
$payload = $request->all();
$dataBuilder = $this->setUpPayload($payload, 'm_holidays');
$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 = Holiday::all();
$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 list holiday, please try again later!','code'=>400], 400);
}
}
public function datatables(Request $request){
$proyek_id = $request->query('proyek_id');
$gantt_id = $request->query('gantt_id');
$data = Holiday::where('proyek_id', $proyek_id)->where('version_gantt_id', $gantt_id)->get();
return Datatables::of($data)
->editColumn('date', function($row) {
$date = date_create($row->date);
$dateFormat = date_format($date,"d-m-Y");
return $dateFormat;
})
->editColumn('duration', function($row) {
$day = (int)$row->duration > 1 ? "days" : "day";
return $row->duration." ".$day;
})
->addIndexColumn()
->addColumn('action', function($row){
$actionBtn = '<a href="javascript:void(0)" data-id="'.$row->id.'" class="delete btn btn-danger btn-sm btn-holiday-delete"><i class="fa fa-trash"></i></a>';
return $actionBtn;
})
->rawColumns(['action'])->make(true);
}
}

3
app/Http/Controllers/HumanResourceController.php

@ -22,7 +22,8 @@ class HumanResourceController extends Controller
'name' => 'required',
'ktp_number' => 'required|string|unique:m_users,ktp_number',
'employee_type' => 'required',
'company_id' => 'required'
'company_id' => 'required',
'username' => 'unique:m_users,username'
]);
$data = $request->all();

2
app/Http/Controllers/ReportActivityController.php

@ -6,7 +6,7 @@ use Illuminate\Http\Request;
use App\Models\ReportActivity;
use App\Models\Activity;
use App\Models\Image;
use Datatables;
use Yajra\Datatables\Datatables;
class ReportActivityController extends Controller
{

6
app/Http/Controllers/ReportActivityMaterialController.php

@ -8,7 +8,7 @@ use Illuminate\Support\Facades\DB;
use App\Models\ReportActivityMaterial;
use App\Models\Activity;
use App\Models\AssignMaterial;
use Datatables;
use Yajra\Datatables\Datatables;
use DateTime;
class ReportActivityMaterialController extends Controller
@ -72,10 +72,10 @@ class ReportActivityMaterialController extends Controller
// actual < plan
$persentaseProgress = $sumReportActivityMaterial/$sumAssignMaterial*100;
}
$dataUpdate = array(
"actual_start" => null,
"actual_end" => null,
"actual_end" => null,
"persentase_progress" => $persentaseProgress,
"updated_by" => $this->currentName
);

2
app/Http/Controllers/UserToActivityController.php

@ -7,7 +7,7 @@ use App\Models\UserToActivity;
use App\Models\Activity;
use App\Models\AssignMaterial;
use Illuminate\Support\Facades\DB;
use Datatables;
use Yajra\Datatables\Datatables;
class UserToActivityController extends Controller
{

89
app/Models/Activity.php

@ -33,6 +33,9 @@ class Activity extends Model
'jobs_done', 'assign_hr', 'assign_material', 'assign_tools', 'assign_expense'
];
protected $casts = [
'rencana_biaya' => 'double'
];
public function getStartDateAttribute($value)
{
@ -61,58 +64,60 @@ class Activity extends Model
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 (isset($data->parent_id)) {
if(Activity::where("parent_id", $data->parent_id)->count() == 0) {
$activity = Activity::find($data->parent_id);
if ($activity) {
$activity->update(["type_activity"=>"task"]);
}
}
}
$data->updateBobot(true);
$data->updateCostPlanning();
if($data->bobot_planning){
$data->updatePersentaseProgress();
}
$data->updateCostActual();
$data->updateStartEndDateHeader();
});
DB::transaction(function() {
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 (isset($data->parent_id)) {
if(Activity::where("parent_id", $data->parent_id)->count() == 0) {
$activity = Activity::find($data->parent_id);
if ($activity) {
$activity->update(["type_activity"=>"task"]);
}
}
}
$data->updateBobot(true);
$data->updateCostPlanning();
if($data->bobot_planning){
$data->updatePersentaseProgress();
}
$data->updateCostActual();
$data->updateStartEndDateHeader();
});
},5);
}
private function updateBobot($isDelete = false)
{
$root = Activity::where('version_gantt_id', $this->version_gantt_id)
->where("proyek_id", $this->proyek_id)
->whereNull('parent_id')
$root = Activity::where([
['version_gantt_id', $this->version_gantt_id],
['proyek_id', $this->proyek_id]
])
->whereNull('parent_id')
->first();
if(isset($root) && $root->rencana_biaya > 0){
$activities = Activity::where("proyek_id", $this->proyek_id)->where("version_gantt_id", $this->version_gantt_id)->get();
if(isset($root) && doubleval($root->rencana_biaya) > 0){
$activities = Activity::where([['proyek_id', $this->proyek_id],['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->bobot_planning = ( doubleval($activity->rencana_biaya) / doubleval($root->rencana_biaya)) * 100;
$activity->updated_by = auth()->user() ? auth()->user()->name : "system";
$activity->saveQuietly();

37
app/Models/AssignMaterial.php

@ -3,10 +3,8 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Models\RequestMaterial;
use App\Models\Activity;
use App\Models\ReportActivityMaterial;
use App\Models\{Activity,RequestMaterial,ReportActivityMaterial};
use Illuminate\Support\Facades\DB;
class AssignMaterial extends Model
{
protected $table = 'assign_material_to_activity';
@ -23,24 +21,25 @@ class AssignMaterial extends Model
protected $casts = [
'id' => 'integer',
'budget' => 'string',
'qty_planning' => 'float'
];
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();
});
DB::transaction(function () {
static::created(function($data) {
$activity = Activity::find((int)$data->activity_id);
$material = RequestMaterial::find((int)$data->material_id);
$activity->rencana_biaya += (doubleval($material->price) * doubleval($data->qty_planning));
$activity->save();
});
static::deleted(function($data) {
ReportActivityMaterial::where('assign_material_id', $data->id)->delete();
$activity = Activity::find($data->activity_id);
$activity->rencana_biaya -= (doubleval($data->budget) * doubleval($data->qty_planning));
$activity->save();
});
}, 5);
}
}

34
app/Models/ProjectRole.php

@ -1,17 +1,17 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class ProjectRole extends Model
{
protected $table = 'm_role_proyek';
const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at';
protected $fillable = [
'name', 'description', 'created_at', 'created_by', 'updated_at', 'updated_by'
];
}
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class ProjectRole extends Model
{
protected $table = 'm_role_proyek';
const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at';
protected $fillable = [
'name', 'description', 'created_at', 'created_by', 'updated_at', 'company_id', 'updated_by'
];
}

396
app/Models/User.php

@ -1,198 +1,198 @@
<?php
namespace App\Models;
use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Auth\Authenticatable;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Laravel\Lumen\Auth\Authorizable;
use Carbon\Carbon;
class User extends Model implements AuthenticatableContract, AuthorizableContract, JWTSubject
{
use Authenticatable, Authorizable, HasFactory;
protected $table = 'm_users';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'role_id', 'username', 'session_login', 'phone_number', 'email', 'address',
'fcm_token', 'gender', 'birth_place', 'birth_date', 'blood_type', 'ktp_number', 'working_hours',
'created_at', 'created_by', 'updated_at', 'updated_by', 'status_resource', 'discount_id'
];
const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at';
const DEFAULT_TZ = 'Asia/Jakarta';
const INSIDE = "INSIDE";
const OUTSIDE = "OUTSIDE";
const HOLIDAY = "HOLIDAY";
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = [
'password',
];
/**
* Get the identifier that will be stored in the subject claim of the JWT.
*
* @return mixed
*/
public function getJWTIdentifier()
{
return $this->getKey();
}
/**
* Return a key value array, containing any custom claims to be added to the JWT.
*
* @return array
*/
public function getJWTCustomClaims()
{
return [];
}
/**
* Get working hours for given timestamp
*
* @return array of carbon or NULL in case HOLIDAY
*/
public function getWorkingTime(Carbon $ts, $f = "08:00", $t = "17:00", $tz = self::DEFAULT_TZ)
{
$workingTime = array(
"from" => Carbon::createFromTimeString($f, $tz),
"to" => Carbon::createFromTimeString($t, $tz)
);
$userShift = UserShift::where('user_id',)
->orderByDesc('from_date')
->first();
$shift = null;
if ($userShift !== null) {
$shiftId = null;
switch ($ts->shortEnglishDayOfWeek) {
case "Mon":
$shiftId = $userShift->mon_shift_id;
break;
case "Tue":
$shiftId = $userShift->tue_shift_id;
break;
case "Wed":
$shiftId = $userShift->wed_shift_id;
break;
case "Thu":
$shiftId = $userShift->thu_shift_id;
break;
case "Fri":
$shiftId = $userShift->fri_shift_id;
break;
case "Sat":
$shiftId = $userShift->sat_shift_id;
break;
case "Sun":
$shiftId = $userShift->sun_shift_id;
break;
}
if ($shiftId === null) {
return null;
}
$shift = Shift::where('id', $shiftId)->first();
} else {
$shift = Shift::where('is_non_shift', true)
->orderByDesc('created_at')
->first();
}
if ($shift !== null) {
$from = Carbon::createFromTimeString($shift->start_time, $tz)
->subMinutes($shift->flex_time_minute);
$to = Carbon::createFromTimeString($shift->end_time, $tz)
->addMinutes($shift->flex_time_minute);
/*
if ($to->lessThan($from))
{
$to->addDay();
}
*/
$workingTime['from'] = $from;
$workingTime['to'] = $to;
}
return $workingTime;
}
/**
* Get presence status
*/
public function presenceStatus(Carbon $at = null, $tz = self::DEFAULT_TZ)
{
$ts = $at;
if ($at !== null) {
$ts = Carbon::now($tz);
}
$tsSec = $ts->secondsSinceMidnight();
$status = "";
$wt = $this->getWorkingTime($ts, $tz);
if ($wt === null) {
$status = self::HOLIDAY;
} else {
$from = $wt->from;
$to = $wt->to;
$tsFrom = $from->secondsSinceMidnight();
$tsTo = $to->secondsSinceMidnight();
if ($from->greaterThan($to)) {
$tsMid = 24 * 60 * 60 - $tsFrom;
if ($tsSec >= $tsFrom || $tsSec < $tsTo) {
$status = self::INSIDE;
} else {
$status = self::OUTSIDE;
}
} else {
if ($tsSec < $tsFrom || $tsSec > $tsTo) {
$status = self::OUTSIDE;
} else {
$status = self::INSIDE;
}
}
}
$clockIn = null;
$clockOut = null;
$inout = Presence::where('user_id', $this->id)
->orderByDesc('clock_in')
->first();
if ($inout !== null) {
$clockIn = Carbon::parse($inout->clock_in, $tz);
$clockOut = Carbon::parse($inout->clock_out, $tz);
}
return array(
"status" => $status,
"ts" => $ts,
"clock_in" => $clockIn,
"clock_out" => $clockOut
);
}
}
<?php
namespace App\Models;
use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Auth\Authenticatable;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Laravel\Lumen\Auth\Authorizable;
use Carbon\Carbon;
class User extends Model implements AuthenticatableContract, AuthorizableContract, JWTSubject
{
use Authenticatable, Authorizable, HasFactory;
protected $table = 'm_users';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'role_id', 'username', 'session_login', 'phone_number', 'email', 'address',
'fcm_token', 'gender', 'birth_place', 'birth_date', 'blood_type', 'ktp_number', 'working_hours',
'created_at', 'created_by', 'updated_at', 'updated_by', 'status_resource', 'discount_id','company_id'
];
const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at';
const DEFAULT_TZ = 'Asia/Jakarta';
const INSIDE = "INSIDE";
const OUTSIDE = "OUTSIDE";
const HOLIDAY = "HOLIDAY";
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = [
'password',
];
/**
* Get the identifier that will be stored in the subject claim of the JWT.
*
* @return mixed
*/
public function getJWTIdentifier()
{
return $this->getKey();
}
/**
* Return a key value array, containing any custom claims to be added to the JWT.
*
* @return array
*/
public function getJWTCustomClaims()
{
return [];
}
/**
* Get working hours for given timestamp
*
* @return array of carbon or NULL in case HOLIDAY
*/
public function getWorkingTime(Carbon $ts, $f = "08:00", $t = "17:00", $tz = self::DEFAULT_TZ)
{
$workingTime = array(
"from" => Carbon::createFromTimeString($f, $tz),
"to" => Carbon::createFromTimeString($t, $tz)
);
$userShift = UserShift::where('user_id',)
->orderByDesc('from_date')
->first();
$shift = null;
if ($userShift !== null) {
$shiftId = null;
switch ($ts->shortEnglishDayOfWeek) {
case "Mon":
$shiftId = $userShift->mon_shift_id;
break;
case "Tue":
$shiftId = $userShift->tue_shift_id;
break;
case "Wed":
$shiftId = $userShift->wed_shift_id;
break;
case "Thu":
$shiftId = $userShift->thu_shift_id;
break;
case "Fri":
$shiftId = $userShift->fri_shift_id;
break;
case "Sat":
$shiftId = $userShift->sat_shift_id;
break;
case "Sun":
$shiftId = $userShift->sun_shift_id;
break;
}
if ($shiftId === null) {
return null;
}
$shift = Shift::where('id', $shiftId)->first();
} else {
$shift = Shift::where('is_non_shift', true)
->orderByDesc('created_at')
->first();
}
if ($shift !== null) {
$from = Carbon::createFromTimeString($shift->start_time, $tz)
->subMinutes($shift->flex_time_minute);
$to = Carbon::createFromTimeString($shift->end_time, $tz)
->addMinutes($shift->flex_time_minute);
/*
if ($to->lessThan($from))
{
$to->addDay();
}
*/
$workingTime['from'] = $from;
$workingTime['to'] = $to;
}
return $workingTime;
}
/**
* Get presence status
*/
public function presenceStatus(Carbon $at = null, $tz = self::DEFAULT_TZ)
{
$ts = $at;
if ($at !== null) {
$ts = Carbon::now($tz);
}
$tsSec = $ts->secondsSinceMidnight();
$status = "";
$wt = $this->getWorkingTime($ts, $tz);
if ($wt === null) {
$status = self::HOLIDAY;
} else {
$from = $wt->from;
$to = $wt->to;
$tsFrom = $from->secondsSinceMidnight();
$tsTo = $to->secondsSinceMidnight();
if ($from->greaterThan($to)) {
$tsMid = 24 * 60 * 60 - $tsFrom;
if ($tsSec >= $tsFrom || $tsSec < $tsTo) {
$status = self::INSIDE;
} else {
$status = self::OUTSIDE;
}
} else {
if ($tsSec < $tsFrom || $tsSec > $tsTo) {
$status = self::OUTSIDE;
} else {
$status = self::INSIDE;
}
}
}
$clockIn = null;
$clockOut = null;
$inout = Presence::where('user_id', $this->id)
->orderByDesc('clock_in')
->first();
if ($inout !== null) {
$clockIn = Carbon::parse($inout->clock_in, $tz);
$clockOut = Carbon::parse($inout->clock_out, $tz);
}
return array(
"status" => $status,
"ts" => $ts,
"clock_in" => $clockIn,
"clock_out" => $clockOut
);
}
}

57
app/Models/UserToActivity.php

@ -4,6 +4,7 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Models\Activity;
use Illuminate\Support\Facades\DB;
class UserToActivity extends Model
{
@ -29,35 +30,37 @@ class UserToActivity extends Model
public static function boot() {
parent::boot();
static::created(function($data) {
$activity = Activity::find($data->activity_id);
$getWorkingHours = UserToProyek::where('user_id', $data->user_id)->where('proyek_id', $activity->proyek_id)->first();
DB::transaction(function(){
static::created(function($data) {
$activity = Activity::find($data->activity_id);
$getWorkingHours = UserToProyek::where([['user_id', $data->user_id],['proyek_id', $activity->proyek_id]])->first();
$salary = 0;
if($getWorkingHours->uom_standart_rate == "Hour") {
$salary = (doubleval($getWorkingHours->standart_rate) * 8) * (int)$activity->duration * ($getWorkingHours->max_used / 100);
} else {
$salary = (doubleval($getWorkingHours->standart_rate) * (int)$activity->duration) * ($getWorkingHours->max_used / 100);
}
$activity->rencana_biaya += doubleval($salary);
$activity->save();
});
$salary = ($getWorkingHours->standart_rate * $activity->duration) * ($getWorkingHours->max_used / 100);
if($getWorkingHours->uom_standart_rate == "Hour")
$salary = ($getWorkingHours->standart_rate * 8) * $activity->duration * ($getWorkingHours->max_used / 100);
$activity->rencana_biaya += $salary;
$activity->save();
});
static::deleted(function($data) {
$activity = Activity::find($data->activity_id);
$getWorkingHours = UserToProyek::where('user_id', $data->user_id)->where('proyek_id', $activity->proyek_id)->first();
$salary = ($getWorkingHours->standart_rate * $activity->duration) * ($getWorkingHours->max_used / 100);
if($getWorkingHours->uom_standart_rate == "Hour"){
$salary = ($getWorkingHours->standart_rate * 8) * $activity->duration * ($getWorkingHours->max_used / 100);
}
$activity->rencana_biaya -= $salary;
if ($activity->rencana_biaya < 0) {
$activity->rencana_biaya = 0;
}
$activity->save();
});
static::deleted(function($data) {
$activity = Activity::find($data->activity_id);
$getWorkingHours = UserToProyek::where([['user_id', $data->user_id],['proyek_id', $activity->proyek_id]])->first();
$salary = 0;
if($getWorkingHours->uom_standart_rate == "Hour"){
$salary = (doubleval($getWorkingHours->standart_rate) * 8) * (int)$activity->duration * ($getWorkingHours->max_used / 100);
} else {
$salary = (doubleval($getWorkingHours->standart_rate) * (int)$activity->duration) * ($getWorkingHours->max_used / 100);
}
$activity->rencana_biaya -= doubleval($salary);
if ($activity->rencana_biaya < 0) {
$activity->rencana_biaya = 0;
}
$activity->save();
});
}, 5);
}
}

20
routes/web.php

@ -141,16 +141,6 @@ $router->group(['prefix' => 'api', 'middleware' => 'cors'], function () use ($ro
$router->post('/human-resource/check-old-password/{id}', 'HumanResourceController@checkOldPassword');
$router->get('/human-resource/sync', 'HumanResourceController@sync');
$router->post('/refferal-code/search', 'RefferalCodeController@search');
$router->post('/refferal-code/add', 'RefferalCodeController@add');
$router->get('/refferal-code/edit/{id}', 'RefferalCodeController@edit');
$router->put('/refferal-code/update/{id}', 'RefferalCodeController@update');
$router->post('/product-transaction/search', 'ProductTransactionController@search');
$router->post('/product-transaction/add', 'ProductTransactionController@add');
$router->get('/product-transaction/edit/{id}', 'ProductTransactionController@edit');
$router->put('/product-transaction/update/{id}', 'ProductTransactionController@update');
$router->post('/project-role/search', 'ProjectRoleController@search');
$router->post('/project-role/add', 'ProjectRoleController@add');
$router->get('/project-role/edit/{id}', 'ProjectRoleController@edit');
@ -599,7 +589,15 @@ $router->group(['prefix' => 'api', 'middleware' => 'cors'], function () use ($ro
$router->delete('/demo-management/delete/{id}', 'DemoController@delete');
$router->get('/demo-management/list', 'DemoController@list');
$router->get('information-storage/{company_name}', 'Controller@storage');
$router->get('/information-storage/{company_name}', 'Controller@storage');
$router->post('/register-user','UserRegisterController@add');
$router->post('/refferal-code/search', 'RefferalCodeController@search');
$router->post('/refferal-code/add', 'RefferalCodeController@add');
$router->get('/refferal-code/edit/{id}', 'RefferalCodeController@edit');
$router->put('/refferal-code/update/{id}', 'RefferalCodeController@update');
$router->post('/product-transaction/edit/{id}', 'ProductTransactionController@add');
$router->put('/product-transaction/update/{id}', 'ProductTransactionController@update');
$router->post('/product-transaction/search', 'ProductTransactionController@search');

Loading…
Cancel
Save