336 lines
12 KiB
PHP
336 lines
12 KiB
PHP
<?php
|
|
|
|
namespace Modules\Essentials\Http\Controllers;
|
|
|
|
use App\User;
|
|
use App\Utils\ModuleUtil;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Response;
|
|
use Illuminate\Routing\Controller;
|
|
use Modules\Essentials\Entities\EssentialsUserShift;
|
|
use Modules\Essentials\Entities\Shift;
|
|
use Yajra\DataTables\Facades\DataTables;
|
|
|
|
class ShiftController extends Controller
|
|
{
|
|
/**
|
|
* All Utils instance.
|
|
*/
|
|
protected $moduleUtil;
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @param ModuleUtil $moduleUtil
|
|
* @return void
|
|
*/
|
|
public function __construct(ModuleUtil $moduleUtil)
|
|
{
|
|
$this->moduleUtil = $moduleUtil;
|
|
}
|
|
|
|
/**
|
|
* Display a listing of the resource.
|
|
*
|
|
* @return Response
|
|
*/
|
|
public function index()
|
|
{
|
|
$business_id = request()->session()->get('user.business_id');
|
|
|
|
if (! (auth()->user()->can('superadmin') || $this->moduleUtil->hasThePermissionInSubscription($business_id, 'essentials_module'))) {
|
|
abort(403, 'Unauthorized action.');
|
|
}
|
|
|
|
$is_admin = $this->moduleUtil->is_admin(auth()->user(), $business_id);
|
|
|
|
if (request()->ajax()) {
|
|
$shifts = Shift::where('essentials_shifts.business_id', $business_id)
|
|
->select([
|
|
'id',
|
|
'name',
|
|
'type',
|
|
'start_time',
|
|
'end_time',
|
|
'holidays',
|
|
]);
|
|
|
|
return Datatables::of($shifts)
|
|
->editColumn('start_time', function ($row) {
|
|
$start_time_formated = $this->moduleUtil->format_time($row->start_time);
|
|
|
|
return $start_time_formated;
|
|
})
|
|
->editColumn('end_time', function ($row) {
|
|
$end_time_formated = $this->moduleUtil->format_time($row->end_time);
|
|
|
|
return $end_time_formated;
|
|
})
|
|
->editColumn('type', function ($row) {
|
|
return __('essentials::lang.'.$row->type);
|
|
})
|
|
->editColumn('holidays', function ($row) {
|
|
if (! empty($row->holidays)) {
|
|
$holidays = array_map(function ($item) {
|
|
return __('lang_v1.'.$item);
|
|
}, $row->holidays);
|
|
|
|
return implode(', ', $holidays);
|
|
}
|
|
})
|
|
->addColumn('action', function ($row) {
|
|
$html = '<a href="#" data-href="'.action([\Modules\Essentials\Http\Controllers\ShiftController::class, 'edit'], [$row->id]).'" data-container="#edit_shift_modal" class="btn-modal btn btn-xs btn-primary"><i class="fas fa-edit" aria-hidden="true"></i> '.__('messages.edit').'</a> <a href="#" data-href="'.action([\Modules\Essentials\Http\Controllers\ShiftController::class, 'getAssignUsers'], [$row->id]).'" data-container="#user_shift_modal" class="btn-modal btn btn-xs btn-success"><i class="fas fa-users" aria-hidden="true"></i> '.__('essentials::lang.assign_users').'</a>';
|
|
|
|
return $html;
|
|
})
|
|
->removeColumn('id')
|
|
->rawColumns(['action', 'type'])
|
|
->make(true);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Show the form for creating a new resource.
|
|
*
|
|
* @return Response
|
|
*/
|
|
public function create()
|
|
{
|
|
return view('essentials::create');
|
|
}
|
|
|
|
/**
|
|
* Store a newly created resource in storage.
|
|
*
|
|
* @param Request $request
|
|
* @return Response
|
|
*/
|
|
public function store(Request $request)
|
|
{
|
|
$business_id = $request->session()->get('user.business_id');
|
|
$is_admin = $this->moduleUtil->is_admin(auth()->user(), $business_id);
|
|
|
|
if (! (auth()->user()->can('superadmin') || $this->moduleUtil->hasThePermissionInSubscription($business_id, 'essentials_module')) && ! $is_admin) {
|
|
abort(403, 'Unauthorized action.');
|
|
}
|
|
|
|
try {
|
|
$input = $request->only(['name', 'type', 'holidays']);
|
|
|
|
if ($input['type'] != 'flexible_shift') {
|
|
$input['start_time'] = $this->moduleUtil->uf_time($request->input('start_time'));
|
|
$input['end_time'] = $this->moduleUtil->uf_time($request->input('end_time'));
|
|
} else {
|
|
$input['start_time'] = null;
|
|
$input['end_time'] = null;
|
|
}
|
|
|
|
$input['is_allowed_auto_clockout'] = ! empty($request->input('is_allowed_auto_clockout')) ? 1 : 0;
|
|
|
|
if (! empty($request->input('auto_clockout_time'))) {
|
|
$input['auto_clockout_time'] = $this->moduleUtil->uf_time($request->input('auto_clockout_time'));
|
|
}
|
|
|
|
$input['business_id'] = $business_id;
|
|
|
|
Shift::create($input);
|
|
|
|
$output = ['success' => true,
|
|
'msg' => __('lang_v1.added_success'),
|
|
];
|
|
} catch (\Exception $e) {
|
|
\Log::emergency('File:'.$e->getFile().'Line:'.$e->getLine().'Message:'.$e->getMessage());
|
|
|
|
$output = ['success' => false,
|
|
'msg' => __('messages.something_went_wrong'),
|
|
|
|
];
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
|
|
/**
|
|
* Show the specified resource.
|
|
*
|
|
* @param int $id
|
|
* @return Response
|
|
*/
|
|
public function show($id)
|
|
{
|
|
return view('essentials::show');
|
|
}
|
|
|
|
/**
|
|
* Show the form for editing the specified resource.
|
|
*
|
|
* @param int $id
|
|
* @return Response
|
|
*/
|
|
public function edit($id)
|
|
{
|
|
$business_id = request()->session()->get('user.business_id');
|
|
$is_admin = $this->moduleUtil->is_admin(auth()->user(), $business_id);
|
|
|
|
if (! (auth()->user()->can('superadmin') || $this->moduleUtil->hasThePermissionInSubscription($business_id, 'essentials_module')) && ! $is_admin) {
|
|
abort(403, 'Unauthorized action.');
|
|
}
|
|
$shift = Shift::where('business_id', $business_id)
|
|
->findOrFail($id);
|
|
|
|
$days = $this->moduleUtil->getDays();
|
|
|
|
return view('essentials::attendance.shift_modal')->with(compact('shift', 'days'));
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*
|
|
* @param Request $request
|
|
* @param int $id
|
|
* @return Response
|
|
*/
|
|
public function update(Request $request, $id)
|
|
{
|
|
try {
|
|
$business_id = request()->session()->get('user.business_id');
|
|
$is_admin = $this->moduleUtil->is_admin(auth()->user(), $business_id);
|
|
|
|
if (! (auth()->user()->can('superadmin') || $this->moduleUtil->hasThePermissionInSubscription($business_id, 'essentials_module')) && ! $is_admin) {
|
|
abort(403, 'Unauthorized action.');
|
|
}
|
|
|
|
$input = $request->only(['name', 'type', 'holidays']);
|
|
|
|
if ($input['type'] != 'flexible_shift') {
|
|
$input['start_time'] = $this->moduleUtil->uf_time($request->input('start_time'));
|
|
$input['end_time'] = $this->moduleUtil->uf_time($request->input('end_time'));
|
|
} else {
|
|
$input['start_time'] = null;
|
|
$input['end_time'] = null;
|
|
}
|
|
|
|
$input['is_allowed_auto_clockout'] = ! empty($request->input('is_allowed_auto_clockout')) ? 1 : 0;
|
|
|
|
if (! empty($request->input('auto_clockout_time'))) {
|
|
$input['auto_clockout_time'] = $this->moduleUtil->uf_time($request->input('auto_clockout_time'));
|
|
}
|
|
|
|
if (! empty($input['holidays'])) {
|
|
$input['holidays'] = json_encode($input['holidays']);
|
|
} else {
|
|
$input['holidays'] = null;
|
|
}
|
|
|
|
$shift = Shift::where('business_id', $business_id)
|
|
->where('id', $id)
|
|
->update($input);
|
|
|
|
$output = ['success' => true,
|
|
'msg' => __('lang_v1.updated_success'),
|
|
];
|
|
} catch (\Exception $e) {
|
|
\Log::emergency('File:'.$e->getFile().'Line:'.$e->getLine().'Message:'.$e->getMessage());
|
|
|
|
$output = ['success' => false,
|
|
'msg' => __('messages.something_went_wrong'),
|
|
|
|
];
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
|
|
/**
|
|
* Remove the specified resource from storage.
|
|
*
|
|
* @param int $id
|
|
* @return Response
|
|
*/
|
|
public function destroy($id)
|
|
{
|
|
//
|
|
}
|
|
|
|
public function getAssignUsers($shift_id)
|
|
{
|
|
$business_id = request()->session()->get('user.business_id');
|
|
$is_admin = $this->moduleUtil->is_admin(auth()->user(), $business_id);
|
|
|
|
if (! (auth()->user()->can('superadmin') || $this->moduleUtil->hasThePermissionInSubscription($business_id, 'essentials_module')) && ! $is_admin) {
|
|
abort(403, 'Unauthorized action.');
|
|
}
|
|
$shift = Shift::where('business_id', $business_id)
|
|
->with(['user_shifts'])
|
|
->findOrFail($shift_id);
|
|
|
|
$users = User::forDropdown($business_id, false);
|
|
|
|
$user_shifts = [];
|
|
|
|
if (! empty($shift->user_shifts)) {
|
|
foreach ($shift->user_shifts as $user_shift) {
|
|
$user_shifts[$user_shift->user_id] = [
|
|
'start_date' => ! empty($user_shift->start_date) ? $this->moduleUtil->format_date($user_shift->start_date) : null,
|
|
'end_date' => ! empty($user_shift->end_date) ? $this->moduleUtil->format_date($user_shift->end_date) : null,
|
|
];
|
|
}
|
|
}
|
|
|
|
return view('essentials::attendance.add_shift_users')
|
|
->with(compact('shift', 'users', 'user_shifts'));
|
|
}
|
|
|
|
public function postAssignUsers(Request $request)
|
|
{
|
|
$business_id = request()->session()->get('user.business_id');
|
|
$is_admin = $this->moduleUtil->is_admin(auth()->user(), $business_id);
|
|
|
|
if (! (auth()->user()->can('superadmin') || $this->moduleUtil->hasThePermissionInSubscription($business_id, 'essentials_module')) && ! $is_admin) {
|
|
abort(403, 'Unauthorized action.');
|
|
}
|
|
|
|
try {
|
|
$shift_id = $request->input('shift_id');
|
|
$shift = Shift::where('business_id', $business_id)
|
|
->find($shift_id);
|
|
|
|
$user_shifts = $request->input('user_shift');
|
|
$user_shift_data = [];
|
|
$user_ids = [];
|
|
foreach ($user_shifts as $key => $value) {
|
|
if (! empty($value['is_added'])) {
|
|
$user_ids[] = $key;
|
|
EssentialsUserShift::updateOrCreate(
|
|
[
|
|
'essentials_shift_id' => $shift_id,
|
|
'user_id' => $key,
|
|
],
|
|
[
|
|
'start_date' => ! empty($value['start_date']) ? $this->moduleUtil->uf_date($value['start_date']) : null,
|
|
'end_date' => ! empty($value['end_date']) ? $this->moduleUtil->uf_date($value['end_date']) : null,
|
|
]
|
|
);
|
|
}
|
|
}
|
|
|
|
EssentialsUserShift::where('essentials_shift_id', $shift_id)
|
|
->whereNotIn('user_id', $user_ids)
|
|
->delete();
|
|
|
|
$output = ['success' => true,
|
|
'msg' => __('lang_v1.added_success'),
|
|
];
|
|
} catch (\Exception $e) {
|
|
\Log::emergency('File:'.$e->getFile().'Line:'.$e->getLine().'Message:'.$e->getMessage());
|
|
|
|
$output = ['success' => false,
|
|
'msg' => __('messages.something_went_wrong'),
|
|
|
|
];
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
}
|