Files
wticreatorstudio/Modules/Staff/Http/Controllers/StaffAdminController.php
2024-05-14 11:23:57 +08:00

326 lines
12 KiB
PHP

<?php
namespace Modules\Staff\Http\Controllers;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\Setup\Entities\Department;
use Modules\WTIJobBoard\Entities\JobRequestBadge;
use Modules\RolePermission\Entities\Role;
use App\Repositories\UserRepositoryInterface;
use Modules\Staff\Transformers\StaffResource;
use Modules\Staff\Http\Requests\CreateStaffRequest;
use Modules\Staff\Http\Requests\UpdateStaffRequest;
use Illuminate\Support\Facades\DB;
use Modules\UserActivityLog\Traits\LogActivity;
use Modules\Affiliate\Repositories\AffiliateRepository;
use App\Traits\ImageStore;
use Modules\Staff\Entities\Staff;
use App\Models\User;
use Carbon\Carbon;
class StaffAdminController extends Controller
{
use ImageStore;
public function __construct(UserRepositoryInterface $userRepository)
{
$this->userRepository = $userRepository;
}
public function index()
{
return view('staff::staffs');
}
public function data(Request $request)
{
$staffQuery = Staff::query()->with('user.role','department')->whereHas('user', function($query){
$query->where('id', '>', 1);
});
if ($request->has('filter')) {
$filter = $request->filter;
$staffQuery = $staffQuery->where(function($query) use($filter) {
if(isset($filter['role']['value'])){
$roles = $filter['role']['value'];
$query->whereHas('user', function($query) use($roles){
$query->whereIn('role_id', $roles);
});
}
if(isset($filter['department']['value'])){
$departments = $filter['department']['value'];
$query->whereIn('department_id', $departments);
}
if(isset($filter['badges']['value'])){
$badges = array_map('intval', $filter['badges']['value']);
$query->whereJsonContains('badges', $badges);
}
if(isset($filter['upline']['value'])){
$upline = $filter['upline']['value'];
$query->whereHas('user', function($query) use($upline){
$query->where('parent_id', $upline);
});
}
if(isset($filter['is_active']['value'])){
$status = $filter['is_active']['value'];
$query->whereHas('user', function($query) use($status){
$query->where('is_active', $status);
});
}
if(isset($filter['global']['value'])){
$search = $filter['global']['value'];
$query->whereHas('user', function($query) use($search){
$query->where(DB::raw("concat(first_name, ' ', last_name)"), 'like', '%' . $search . '%');
$query->orWhere('email', 'like', '%' . $search . '%');
$query->orWhere('phone', 'like', '%' . $search . '%');
});
}
});
}
$statistics['total_staffs'] = $staffQuery->clone()->count();
$statistics['total_active'] = $staffQuery->clone()->whereHas('user', function($query){
$query->where('is_active', 1);
})->count();
$statistics['total_inactive'] = $staffQuery->clone()->whereHas('user', function($query){
$query->where('is_active', 0);
})->count();
$staffs = $staffQuery->clone()->join('users', 'staff.user_id', '=', 'users.id')->orderByRaw("concat(users.first_name, ' ', users.last_name)")->paginate($request->rows);
$roles = Role::where('id', '>', 1)->where('type','staff')->get();
if(isModuleActive('RolePermissionPlus')){
$roles = Role::where('id', '>', 1)->get();
}
$departments = Department::where('status', 1)->orderBy('name')->get();
$badges = JobRequestBadge::where('active', 1)->orderByRaw('-`order` DESC')->get();
return response()->json([
'staffs' => StaffResource::collection($staffs)->response()->getData(),
'statistics' => $statistics,
'roles' => $roles,
'departments' => $departments,
'badges' => $badges
]);
}
public function store(CreateStaffRequest $request)
{
try {
$user = new User;
if($request->hasFile('photo')) {
$user->avatar= $this->saveAvatar($request->file('photo'),200,200);
}
$user->first_name = $request->first_name;
$user->last_name = $request->last_name;
$user->email = $request->email;
$user->username = $request->username;
$user->phone = $request->phone;
$user->role_id = $request->role_id;
$user->parent_id = $request->parent_id;
$user->password = bcrypt($request->password);
$user->is_active = filter_var($request->is_active, FILTER_VALIDATE_BOOLEAN);
$user->date_of_birth = Carbon::parse($request->date_of_birth)->format('Y-m-d');
$user->created_at = Carbon::parse($request->created_at)->format('Y-m-d');
$user->email_verified_at = Carbon::now();
$user->save();
$staff = new Staff;
if($request->hasFile('ott_photo')) {
$staff->ott_photo = $this->saveOtt($request->file('ott_photo'));
}
$staff->user_id = $user->id;
$staff->department_id = $request->department_id;
$staff->badges = $request->badges != null ? array_map('intval', $request->badges) : null;
$staff->bank_name = $request->bank_name;
$staff->bank_branch_name = $request->branch_name;
$staff->bank_account_name = $request->account_name;
$staff->bank_account_no = $request->account_number;
$staff->date_of_joining = Carbon::parse($request->created_at)->format('Y-m-d');
$staff->date_of_birth = Carbon::parse($request->date_of_birth)->format('Y-m-d');
$staff->address = $request->address;
$staff->phone = $request->phone;;
$staff->save();
//affiliate user
if(isModuleActive('Affiliate')){
$affiliateRepo = new AffiliateRepository();
$affiliateRepo->affiliateUser($user->id);
}
if (isModuleActive('MLMDownline') && $request->parent_id != null) {
if ($request->parent_id > 0) {
app(\Modules\MLMDownline\Repositories\UplineRepository::class)->assignUpline($user, $request->parent_id);
} else {
app(\Modules\MLMDownline\Repositories\UplineRepository::class)->assignUpline($user, null);
}
}
return response()->json([
'message' => 'Staff Created Successfully.'
]);
} catch (\Exception $e) {
return response()->json([
'message' => $e->getMessage()
], 500);
}
}
public function update(UpdateStaffRequest $request, $id)
{
try {
$user = User::findOrFail($id);
if($request->hasFile('photo')) {
$this->deleteImage($user->avatar);
$user->avatar= $this->saveAvatar($request->file('photo'),200,200);
}
$user->first_name = $request->first_name;
$user->last_name = $request->last_name;
$user->email = $request->email;
$user->username = $request->username;
$user->phone = $request->phone;
$user->role_id = $request->role_id;
$user->parent_id = $request->parent_id;
$user->is_active = filter_var($request->is_active, FILTER_VALIDATE_BOOLEAN);
$user->date_of_birth = Carbon::parse($request->date_of_birth)->format('Y-m-d');
$user->created_at = Carbon::parse($request->created_at)->format('Y-m-d');
$user->save();
$staff = $user->staff;
if($request->hasFile('ott_photo')) {
$this->deleteImage( $staff->ott_photo);
$staff->ott_photo = $this->saveOtt($request->file('ott_photo'));
}
$staff->department_id = $request->department_id;
$staff->bank_name = $request->bank_name;
$staff->bank_branch_name = $request->branch_name;
$staff->bank_account_name = $request->account_name;
$staff->bank_account_no = $request->account_number;
$staff->date_of_joining = Carbon::parse($request->created_at)->format('Y-m-d');
$staff->date_of_birth = Carbon::parse($request->date_of_birth)->format('Y-m-d');
$staff->address = $request->address;
$staff->phone = $request->phone;;
$staff->save();
if (isModuleActive('MLMDownline') && $request->parent_id != null) {
if ($request->parent_id > 0) {
app(\Modules\MLMDownline\Repositories\UplineRepository::class)->assignUpline($user, $request->parent_id);
} else {
app(\Modules\MLMDownline\Repositories\UplineRepository::class)->assignUpline($user, null);
}
}
return response()->json([
'staff' => $staff,
'message' => 'Staff Updated Successfully.'
]);
} catch (\Exception $e) {
return response()->json([
'message' => $e->getMessage()
], 500);
}
}
public function updateStatus($id, Request $request)
{
try {
$user = User::findOrFail($id);
if($user){
$user->is_active = !$user->is_active;
$user->save();
return response()->json([
'message' => 'Staff Active Status Updated Successfully'
]);
}
} catch(Exception $e){
return response()->json([
'message' => $e->getMessage()
], 500);
}
}
public function updateBadges($id, Request $request)
{
try {
$request->validate([
'badges' => 'nullable|array'
]);
$user = User::findOrFail($id);
if($user){
$staff = $user->staff;
$staff->badges = $request->badges;
$staff->save();
return response()->json([
'staff' => $staff,
'message' => 'Staff Badges Updated Successfully'
]);
}
} catch(Exception $e){
return response()->json([
'message' => $e->getMessage()
], 500);
}
}
public function updatePassword($id, Request $request)
{
try {
$request->validate([
'password' => 'required|min:8|confirmed',
'password_confirmation' => 'required',
]);
$user = User::findOrFail($id);
if($user){
$user->password = bcrypt($request->password);
$user->save();
return response()->json([
'message' => 'Staff Password Updated Successfully'
]);
}
} catch(Exception $e){
return response()->json([
'message' => $e->getMessage()
], 500);
}
}
public function uplines(Request $request)
{
$uplines = Staff::with(['user:id,first_name,last_name,email,avatar,role_id','user.role:id,name'])->whereHas('user.role', function($query){
$query->where('id', '>', 1)->orderBy('first_name');
})->get(['user_id']);
return response()->json([
'uplines' => $uplines
]);
}
}