Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 11
CRAP
0.00% covered (danger)
0.00%
0 / 279
TeamController
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 11
9900
0.00% covered (danger)
0.00%
0 / 279
 index
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 biometric
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 11
 employeeId
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 11
 store
0.00% covered (danger)
0.00%
0 / 1
4970
0.00% covered (danger)
0.00%
0 / 210
 show
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 edit
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 update
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 destroy
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 getTeams
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 15
 getUsers
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 16
 getPrimaryReportingManagers
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 11
<?php
namespace App\Http\Controllers\Admin\UserDetails;
use App\Http\Controllers\FirebaseController\FirebaseCloudMessaging;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Admin\attendanceRequest;
use App\Models\Auth\User;
use App\Models\Admin\UserDetail;
use App\Models\Admin\Department;
use App\Models\Admin\Organisation;
use App\Models\Admin\Team;
use App\Models\Admin\Shift;
use App\Models\Admin\UserAddress;
use App\Models\Admin\UserBankDetail;
use App\Models\Admin\UserDocumentDetail;
use Spatie\Permission\Models\Role;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Storage;
use Intervention\Image\Facades\Image;
use Session;
use Illuminate\Support\Facades\Crypt;
use App\Notifications\AppNotifications;
use App\Models\Leave\LeaveEntitlement;
use Carbon\Carbon;
use App\Models\Admin\Leave;
class TeamController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
    }
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function biometric(Request $request)
    {
        if ($request->user_id == '') {
            if (UserDetail::where('biometric_id', '=', $request->biometric_id)->exists()) {
                return response()->json([
                    'valid' => false
                ]);
            } else {
                return response()->json([
                    'valid' => true
                ]);
            }
        } else {
            if (UserDetail::where('biometric_id', '=', $request->biometric_id)->where('user_id', '!=', $request->user_id)->withTrashed()->exists()) {
                return response()->json([
                    'valid' => false
                ]);
            } else {
                return response()->json([
                    'valid' => true
                ]);
            }
        }
    }
    public function employeeId(Request $request)
    {
        if ($request->user_id == '') {
            if (UserDetail::where('employee_id', '=', $request->employee_id)->exists()) {
                return response()->json([
                    'valid' => false
                ]);
            } else {
                return response()->json([
                    'valid' => true
                ]);
            }
        } else {
            if (UserDetail::where('employee_id', '=', $request->employee_id)->where('user_id', '!=', $request->user_id)->withTrashed()->exists()) {
                return response()->json([
                    'valid' => false
                ]);
            } else {
                return response()->json([
                    'valid' => true
                ]);
            }
        }
    }
    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //tab name
        $tab = 'team';
        if ($request->editUserdetail == true) //Edit form 1
        {
            $user_details_id = UserDetail::where('user_id', $request->user_id)->first();
            // $biometric_validation = 'unique:user_details,biometric_id,NULL,id,user_id,' . $request->user_id;
            //$employee_validation = 'unique:user_details,employee_id,NULL,id,user_id,' . $request->user_id;
            $biometric_validation = 'unique:user_details,biometric_id,' . $user_details_id['id'];
            $employee_validation = 'unique:user_details,employee_id,' . $user_details_id['id'];
        } else {
            $biometric_validation = 'unique:user_details';
            $employee_validation = 'unique:user_details';
        }
        $validator = Validator::make($request->all(), [
            'organisationName' => 'required',
            'department_id' => 'required',
            'primary_team_id' => 'required',
            'role_id' => 'required',
            'shift_id' => 'required',
            'attendance_request_id' => 'required',
            // 'primary_reporting_manager_id' => 'required',
            'reporting_manager_id' => 'required',
            'biometric_id' =>  'required|' . $biometric_validation,
            'employee_id' => 'required|' . $employee_validation
        ]);
        if ($validator->fails()) {
            return redirect()->back()->withErrors($validator)->with('tab', $tab);
        }
        if ($request->editUserdetail == true) //Edit form 2
        {
            $user = User::find($request->user_id);
            $userdetail = $user->userdetail;
            $userPreviousTeams = $user->userdetail->teams;
            $previous_teams = [];
            foreach ($userPreviousTeams as $userPreviousTeam) {
                $previous_teams[] = $userPreviousTeam->id;
            }
            //prevoius primary team id
            $previous_primary_team = $userdetail->primary_team_id;
            $userdetail->organisation_id = $request->organisation_id;
            $userdetail->biometric_id = $request->biometric_id;
            $userdetail->employee_id = $request->employee_id;
            $userdetail->role_id = $request->role_id;
            $userdetail->primary_reporting_manager_id = $request->primary_reporting_manager_id == null ? 0 : $request->primary_reporting_manager_id;
            $userdetail->primary_team_id = $request->primary_team_id;
            $userdetail->save();
            // var_dump($userdetail);
            $role = Role::find($request->role_id);
            $roleArr = collect([]);
            $roleArr->push($role);
            $user->syncRoles($roleArr);
            $userInfo = UserDetail::find($user->userdetail->id);
            $shiftArr = collect([]);
            foreach ($request->shift_id as $key => $shift_id) {
                $shiftArr->push($shift_id);
            }
            $userInfo->shifts()->sync($shiftArr);
            $departmentArr = collect([]);
            foreach ($request->department_id as $key => $department_id) {
                $departmentArr->push($department_id);
            }
            $userInfo->departments()->sync($departmentArr);
            $teamArr = collect([]);
            if (!empty($request->team_id)) {
                foreach ($request->team_id as $key => $team_id) {
                    $teamArr->push($team_id);
                }
            }
            $userInfo->teams()->sync($teamArr);
            $attendanceUpdate = collect([]);
            foreach ($request->attendance_request_id as $key => $attendance_request_id) {
                $attendanceUpdate->push($attendance_request_id);
            }
            $userInfo->attendanceRequests()->sync($attendanceUpdate);
            $reportingManagerArr = collect([]);
            foreach ($request->reporting_manager_id as $key => $reporting_manager_id) {
                $reportingManagerArr->push($reporting_manager_id);
            }
            $userInfo->secondaryManager()->sync($reportingManagerArr);
            $userAttendanceTeam = $user->userdetail->teams;
            $teams = $request->team_id;
            $primary_team_id = $request->primary_team_id;
            //if primary team is added for firts time
            if ($previous_primary_team == 0) {
                //new team
                $team =  Team::find($primary_team_id);
                //notification to team user 
                $title = "Primary Team";
                $message = "Your Primary Team is " . $team->team;
                $actionUrl = null;
                $arr = null;
                $arr = [$title, $message, $actionUrl];
                $user->notify(new AppNotifications($arr));
                $firebaseObject = new FirebaseCloudMessaging();
                $firebaseObject->sendFirebaseNotification($title,$message,$request->user_id);
            }
            if ($primary_team_id != $previous_primary_team && $previous_primary_team != 0) {
                //new team
                $team =  Team::find($primary_team_id);
                //notification to team user 
                $title = "Primary Team";
                $message = "Your Primary Team is changed to " . $team->team;
                $actionUrl = null;
                $arr = null;
                $arr = [$title, $message, $actionUrl];
                $user->notify(new AppNotifications($arr));
                $firebaseObject = new FirebaseCloudMessaging();
                $firebaseObject->sendFirebaseNotification($title,$message,$request->user_id);
            }
            if ($primary_team_id != $previous_primary_team && $previous_primary_team != 0) {
                if ((!empty($previous_teams) && !in_array($primary_team_id, $previous_teams)) ||
                    (empty($teams) && !empty($previous_teams) && !in_array($primary_team_id, $previous_teams)) ||
                    empty($previous_teams)
                ) {
                    //new team
                    $team =  Team::find($primary_team_id);
                    //notification to team user 
                    $title = "New Employee to Team";
                    $message = $user->name . ' ' . $user->lastName . " is added to the " . $team->team . " team";
                    $actionUrl = null;
                    $arr = null;
                    $arr = [$title, $message, $actionUrl];
                    //get primary team users
                    $primaryTeamUsers = UserDetail::where('primary_team_id', $primary_team_id)->get();
                    if (!empty($primaryTeamUsers)) {
                        foreach ($primaryTeamUsers as $primaryTeamUser) {
                            if ($user->id  != $primaryTeamUser->user_id) {
                                $teamUser = User::find($primaryTeamUser->user_id);
                                if (!empty($teamUser)) {
                                    $teamUser->notify(new AppNotifications($arr));
                                    $firebaseObject = new FirebaseCloudMessaging();
                                    $firebaseObject->sendFirebaseNotification($title,$message,$primaryTeamUser->user_id);
                                }
                            }
                        }
                    }
                    //other teams
                    if (!empty($team->userTeams)) {
                        foreach ($team->userTeams as $userTeam) {
                            if ($user->id  != $userTeam->user_id) {
                                $teamUser = User::find($userTeam->user_id);
                                if (!empty($teamUser)) {
                                    $teamUser->notify(new AppNotifications($arr));
                                    $firebaseObject = new FirebaseCloudMessaging();
                                    $firebaseObject->sendFirebaseNotification($title,$message,$userTeam->user_id);
                                }
                            }
                        }
                    }
                }
                //notification for remove from old team
                //old team
                $oldTeam =  Team::find($previous_primary_team);
                if (!empty($teams) ? !in_array($previous_primary_team, $teams) : empty($teams)) {
                    //notification to team user 
                    $title = "Removed Employee from Team";
                    $message = $user->name . ' ' . $user->lastName . " is removed from the " . $oldTeam->team . " team";
                    $actionUrl = null;
                    $arr = null;
                    $arr = [$title, $message, $actionUrl];
                    //get previous primary team users
                    $previousPrimaryTeamUsers = UserDetail::where('primary_team_id', $previous_primary_team)->get();
                    if (!empty($previousPrimaryTeamUsers)) {
                        foreach ($previousPrimaryTeamUsers as $previousPrimaryTeamUser) {
                            if ($user->id  != $previousPrimaryTeamUser->user_id) {
                                $teamUser = User::find($previousPrimaryTeamUser->user_id);
                                if (!empty($teamUser)) {
                                    $teamUser->notify(new AppNotifications($arr));
                                    $firebaseObject = new FirebaseCloudMessaging();
                                    $firebaseObject->sendFirebaseNotification($title,$message,$previousPrimaryTeamUser->user_id);
                                }
                            }
                        }
                    }
                    //other teams
                    if (!empty($oldTeam->userTeams)) {
                        foreach ($oldTeam->userTeams as $userTeam) {
                            if ($user->id  != $userTeam->user_id) {
                                $teamUser = User::find($userTeam->user_id);
                                if (!empty($teamUser)) {
                                    $teamUser->notify(new AppNotifications($arr));
                                    $firebaseObject = new FirebaseCloudMessaging();
                                    $firebaseObject->sendFirebaseNotification($title,$message,$userTeam->user_id);
                                }
                            }
                        }
                    }
                }
            }
            if (!empty($teams)) {
                $get_new_team_diff = array_diff($teams, $previous_teams);
                if (!empty($get_new_team_diff)) {
                    foreach ($get_new_team_diff as $team) {
                        $team =  Team::find($team);
                        if (!empty($team)) {
                            if ($team->id != $previous_primary_team) {
                                //notification to team user 
                                $title = "New Employee to Team";
                                $message = $user->name . ' ' . $user->lastName . " is added to the " . $team->team . " team";
                                $actionUrl = null;
                                $arr = null;
                                $arr = [$title, $message, $actionUrl];
                                //get primary team users
                                $primaryTeamUsers = UserDetail::where('primary_team_id', $team->id)->get();
                                if (!empty($primaryTeamUsers)) {
                                    foreach ($primaryTeamUsers as $primaryTeamUser) {
                                        if ($user->id  != $primaryTeamUser->user_id) {
                                            $teamUser = User::find($primaryTeamUser->user_id);
                                            if (!empty($teamUser)) {
                                                $teamUser->notify(new AppNotifications($arr));
                                                $firebaseObject = new FirebaseCloudMessaging();
                                                $firebaseObject->sendFirebaseNotification($title,$message,$teamUser);
                                            }
                                        }
                                    }
                                }
                                if (!empty($team->userTeams)) {
                                    foreach ($team->userTeams as $userTeam) {
                                        if ($user->id  != $userTeam->user_id) {
                                            $teamUser = User::find($userTeam->user_id);
                                            if (!empty($teamUser)) {
                                                $teamUser->notify(new AppNotifications($arr));
                                                $firebaseObject = new FirebaseCloudMessaging();
                                                $firebaseObject->sendFirebaseNotification($title,$message,$teamUser);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            if (empty($teams)) {
                $teams = [0];
            }
            $get_old_team_diff = array_diff($previous_teams, $teams);
            if (!empty($get_old_team_diff)) {
                foreach ($get_old_team_diff as $team) {
                    $team =  Team::find($team);
                    if (!empty($team)) {
                        if ($primary_team_id != $team->id) {
                            //notification to team user 
                            $title = "Removed Employee from Team";
                            $message = $user->name . ' ' . $user->lastName . " is removed from the " . $team->team . " team";
                            $actionUrl = null;
                            $arr = null;
                            $arr = [$title, $message, $actionUrl];
                            //get previous primary team users
                            $previousPrimaryTeamUsers = UserDetail::where('primary_team_id', $team->id)->get();
                            if (!empty($previousPrimaryTeamUsers)) {
                                foreach ($previousPrimaryTeamUsers as $previousPrimaryTeamUser) {
                                    if ($user->id  != $previousPrimaryTeamUser->user_id) {
                                        $teamUser = User::find($previousPrimaryTeamUser->user_id);
                                        if (!empty($teamUser)) {
                                            $teamUser->notify(new AppNotifications($arr));
                                            $firebaseObject = new FirebaseCloudMessaging();
                                            $firebaseObject->sendFirebaseNotification($title,$message,$teamUser);
                                        }
                                    }
                                }
                            }
                            if (!empty($team->userTeams)) {
                                foreach ($team->userTeams as $userTeam) {
                                    if ($user->id  != $userTeam->user_id) {
                                        $teamUser = User::find($userTeam->user_id);
                                        if (!empty($teamUser)) {
                                            $teamUser->notify(new AppNotifications($arr));
                                            $firebaseObject = new FirebaseCloudMessaging();
                                            $firebaseObject->sendFirebaseNotification($title,$message,$teamUser);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            $leaves = Leave::all();
            if(count($leaves) > 0){
                foreach($leaves as $leave){
                $leaveEntitlementFindQuery = array(
                    'user_id' => $request->user_id,
                    'leave_id' => $leave->id,
                    'year' => Carbon::now()->year
                );
               
                $leaveEntitlement = LeaveEntitlement::where($leaveEntitlementFindQuery)->first();
                
                if(empty($leaveEntitlement)) {
                     $leaveEntitlementData = array(
                       'user_id' => $user->id,
                       'leave_id' => $leave->id,
                       'leave_balance' => 0,
                       'year' => Carbon::now()->year,
                       'entitled_leaves' => $leave->n_days
                    );
                   
                   LeaveEntitlement::create($leaveEntitlementData);
                }
                }
            }
            
            Session::flash('success', 'Team details Updated Successfully!');
            return redirect()->route('user-tab.edit', $request->user_id)->with('tab', $tab);
        }
    }
    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }
    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
    }
    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
    }
    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
    }
    //get teams
    public function getTeams(Request $request)
    {
        $teams = Team::get();
        //get primary id
        $primary_team_id = $request->primary_team_id;
        //get current user id
        $user_id = $request->user_id;
        //get team ids
        $team_ids = $request->team_id;
        $data = '';
        foreach ($teams as $team) {
            if (!empty($primary_team_id) && $team->id != $primary_team_id) {
                $select = '';
                if (!empty($team_ids) && in_array($team->id, $team_ids)) {
                    $select = 'selected="selected"';
                }
                $data .= '<option value="' . $team->id . '"' . $select . '>';
                $data .=   $team->team;
                $data .=  '</option>';
            }
        }
        $response = array(
            'teams' => $data
        );
        return response()->json($response);
    }
    //get users
    public function getUsers(Request $request)
    {
        $users = User::get();
        //get primary  reporting manager id
        $primary_reporting_manager_id = $request->primary_reporting_manager_id;
        //get current user id
        $user_id = $request->user_id;
        //get reporting manager ids
        $reporting_manager_ids = $request->reporting_manager_id;
        $data = '';
        if (!empty($users)) {
            foreach ($users as $user) {
                if ($user->id != $primary_reporting_manager_id) {
                    $select = '';
                    if (!empty($reporting_manager_ids) && in_array($user->id, $reporting_manager_ids)) {
                        $select = 'selected="selected"';
                    }
                    $data .= '<option value="' . $user->id . '"' . $select . '>';
                    $data .=   $user->name . ' ' . $user->lastName;
                    $data .=  '</option>';
                }
            }
        }
        $response = array(
            'users' => $data
        );
        return response()->json($response);
    }
    public function getPrimaryReportingManagers(Request $request)
    {
        //get reporting manager ids
        $reporting_manager_ids = $request->reporting_manager_id;
        $users = User::get();
        $data = '<option></option>';
        if (!empty($users)) {
            foreach ($users as $user) {
                if (in_array($user->id, $reporting_manager_ids)) {
                    $data .= '<option value="' . $user->id . '">';
                    $data .=   $user->name . ' ' . $user->lastName;
                    $data .=  '</option>';
                }
            }
        }
        $response = array(
            'users' => $data
        );
        return response()->json($response);
    }
}