202 lines
7.7 KiB
PHP
202 lines
7.7 KiB
PHP
<?php
|
|
|
|
namespace Modules\HrmAddon\App\Http\Controllers;
|
|
|
|
use App\Helpers\HasUploader;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Imports\EmployeeImport;
|
|
use App\Models\Branch;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Maatwebsite\Excel\Facades\Excel;
|
|
use Modules\HrmAddon\App\Models\Department;
|
|
use Modules\HrmAddon\App\Models\Designation;
|
|
use Modules\HrmAddon\App\Models\Employee;
|
|
use Modules\HrmAddon\App\Models\Shift;
|
|
|
|
class AcnooEmployeeController extends Controller
|
|
{
|
|
use HasUploader;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->middleware('check.permission:employees.read')->only(['index']);
|
|
$this->middleware('check.permission:employees.create')->only(['create', 'store']);
|
|
$this->middleware('check.permission:employees.update')->only(['edit', 'update']);
|
|
$this->middleware('check.permission:employees.delete')->only(['destroy', 'deleteAll']);
|
|
}
|
|
|
|
public function index(Request $request)
|
|
{
|
|
$branches = Branch::withTrashed()->where('business_id', auth()->user()->business_id)->latest()->get();
|
|
|
|
$employees = Employee::with('department', 'designation', 'shift', 'branch:id,name')
|
|
->where('business_id', auth()->user()->business_id)
|
|
->when(request('search'), function ($q) {
|
|
$q->where('phone', 'like', '%' . request('search') . '%')
|
|
->orWhere('amount', 'like', '%' . request('search') . '%')
|
|
->orWhere('name', 'like', '%' . request('search') . '%');
|
|
$q->orwhereHas('department', function ($d) {
|
|
$d->where('name', 'like', '%' . request('search') . '%');
|
|
});
|
|
$q->orwhereHas('designation', function ($r) {
|
|
$r->where('name', 'like', '%' . request('search') . '%');
|
|
});
|
|
$q->orwhereHas('shift', function ($s) {
|
|
$s->where('name', 'like', '%' . request('search') . '%');
|
|
});
|
|
$q->orwhereHas('branch', function ($r) {
|
|
$r->where('name', 'like', '%' . request('search') . '%');
|
|
});
|
|
})
|
|
->when($request->branch_id, function ($q) use ($request) {
|
|
$q->where('branch_id', $request->branch_id);
|
|
})
|
|
->latest()
|
|
->paginate($request->per_page ?? 20)->appends($request->query());
|
|
|
|
if ($request->ajax()) {
|
|
return response()->json([
|
|
'data' => view('hrmaddon::employees.datas', compact('employees', 'branches'))->render()
|
|
]);
|
|
}
|
|
|
|
return view('hrmaddon::employees.index', compact('employees', 'branches'));
|
|
}
|
|
|
|
public function create()
|
|
{
|
|
$designations = Designation::where('business_id', auth()->user()->business_id)->where('status', 1)->get();
|
|
$departments = Department::where('business_id', auth()->user()->business_id)->where('status', 1)->get();
|
|
$shifts = Shift::where('business_id', auth()->user()->business_id)->where('status', 1)->get();
|
|
|
|
return view('hrmaddon::employees.create', compact('designations', 'departments', 'shifts'));
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
$request->validate([
|
|
'name' => 'required|string|max:255',
|
|
'designation_id' => 'required|exists:designations,id',
|
|
'department_id' => 'required|exists:departments,id',
|
|
'shift_id' => 'required|exists:shifts,id',
|
|
'amount' => 'numeric|required',
|
|
'phone' => 'required|string|max:20',
|
|
'email' => 'nullable|email|max:255',
|
|
'gender' => 'required|in:male,female,others',
|
|
'country' => 'nullable|string|max:100',
|
|
'birth_date' => 'nullable|date',
|
|
'join_date' => 'nullable|date',
|
|
'image' => 'nullable|image|mimes:jpg,png,jpeg,svg',
|
|
'status' => 'required|in:active,terminated,suspended',
|
|
]);
|
|
|
|
Employee::create($request->except('business_id', 'image') + [
|
|
'business_id' => auth()->user()->business_id,
|
|
'image' => $request->image ? $this->upload($request, 'image') : NULL
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => __('Employee created Successfully'),
|
|
'redirect' => route('hrm.employees.index')
|
|
]);
|
|
}
|
|
|
|
|
|
public function edit(string $id)
|
|
{
|
|
$employee = Employee::findOrFail($id);
|
|
$designations = Designation::where('business_id', auth()->user()->business_id)->where('status', 1)->get();
|
|
$departments = Department::where('business_id', auth()->user()->business_id)->where('status', 1)->get();
|
|
$shifts = Shift::where('business_id', auth()->user()->business_id)->where('status', 1)->get();
|
|
|
|
return view('hrmaddon::employees.edit', compact('employee', 'designations', 'departments', 'shifts'));
|
|
}
|
|
|
|
public function update(Request $request, string $id)
|
|
{
|
|
$request->validate([
|
|
'name' => 'required|string|max:255',
|
|
'designation_id' => 'required|exists:designations,id',
|
|
'department_id' => 'required|exists:departments,id',
|
|
'shift_id' => 'required|exists:shifts,id',
|
|
'amount' => 'numeric|required',
|
|
'phone' => 'required|string|max:20',
|
|
'email' => 'nullable|email|max:255',
|
|
'gender' => 'required|in:male,female,others',
|
|
'country' => 'nullable|string|max:100',
|
|
'birth_date' => 'nullable|date',
|
|
'join_date' => 'nullable|date',
|
|
'image' => 'nullable|image|mimes:jpg,png,jpeg,svg',
|
|
'status' => 'required|in:active,terminated,suspended',
|
|
]);
|
|
|
|
$employee = Employee::findOrFail($id);
|
|
|
|
$employee->update($request->except('business_id', 'image') + [
|
|
'business_id' => auth()->user()->business_id,
|
|
'image' => $request->image ? $this->upload($request, 'image', $employee->image) : $employee->image
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => __('Employee updated Successfully'),
|
|
'redirect' => route('hrm.employees.index')
|
|
]);
|
|
}
|
|
|
|
public function destroy(string $id)
|
|
{
|
|
$employee = Employee::findOrFail($id);
|
|
if (file_exists($employee->image)) {
|
|
Storage::delete($employee->image);
|
|
}
|
|
$employee->delete();
|
|
|
|
return response()->json([
|
|
'message' => __('Employee deleted successfully'),
|
|
'redirect' => route('hrm.employees.index')
|
|
]);
|
|
}
|
|
|
|
public function deleteAll(Request $request)
|
|
{
|
|
$employees = Employee::whereIn('id', $request->ids)->get();
|
|
|
|
foreach ($employees as $employee) {
|
|
if (file_exists($employee->image)) {
|
|
Storage::delete($employee->image);
|
|
}
|
|
}
|
|
Employee::whereIn('id', $request->ids)->delete();
|
|
return response()->json([
|
|
'message' => __('Selected employees deleted successfully'),
|
|
'redirect' => route('hrm.employees.index')
|
|
]);
|
|
}
|
|
|
|
public function bulkStore(Request $request)
|
|
{
|
|
$request->validate([
|
|
'file' => 'required|file|mimes:xlsx,xls,csv'
|
|
]);
|
|
|
|
$businessId = auth()->user()->business_id;
|
|
$import = new EmployeeImport($businessId);
|
|
|
|
try {
|
|
Excel::import($import, $request->file('file'));
|
|
} catch (\Exception $e) {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => $e->getMessage(),
|
|
], 422);
|
|
}
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => __('Bulk upload successfully.'),
|
|
'redirect' => route('hrm.employees.index')
|
|
]);
|
|
}
|
|
}
|