Files
kulakpos_web/Modules/HrmAddon/App/Http/Controllers/AcnooEmployeeController.php

202 lines
7.7 KiB
PHP
Raw Normal View History

2026-05-04 23:04:09 +07:00
<?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')
]);
}
}