mirror of
https://github.com/Bigherollc/wticreatorstudio.git
synced 2026-01-16 19:05:08 -05:00
326 lines
12 KiB
PHP
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
|
|
]);
|
|
}
|
|
}
|