MOON
Server: Apache
System: Linux e2e-78-16.ssdcloudindia.net 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64
User: imensosw (1005)
PHP: 7.4.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/imensosw/www/imenso.co/demo/ulapp/app/User.php
<?php
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Zizaco\Entrust\Traits\EntrustUserTrait;
use DB ;
class User extends Authenticatable
{
    use EntrustUserTrait, Notifiable;
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function timeZone()
    {
        return $this->belongsTo('App\Time_zone','timeZoneId')->withDefault();
    }

    public function jobRole()
    {
        return $this->belongsTo('App\Job_role','jobRoleId')->withDefault();
    }

    public function language()
    {
      return $this->belongsToMany('App\Language', 'user_language_rels','userId','languageId'); 
    }
    public function skill()
    {
      return $this->belongsToMany('App\Skill', 'user_skill_rels','userId','skillId'); 
    }
    public function specialization()
    {
      return $this->belongsToMany('App\Specialization', 'user_specialization_rels','userId','specializationId'); 
    }

    public static function businessUnit()
    {
        
        return  \App\User::
            leftjoin('units','units.id','=','users.unitId')
            ->leftjoin('divisions','units.id','=','users.divisionId')
            ->leftjoin('departments','departments.id','=','users.departmentId')
            ->leftjoin('sub_departments','sub_departments.id','=','users.subDepartmentId')
            ->leftjoin('job_roles','job_roles.id','=','users.jobRoleId')
            ->leftjoin('users as reportingToName','reportingToName.id','=','users.reportingToId')
            ->select('units.unitName','divisions.divisionName','departments.departmentName','sub_departments.subDepartmentName','job_roles.jobRoleName','reportingToName.name as reportingToName')
            ->where('users.id', \Auth::user()->id )
            ->first();
           
    }

    public static function userSpecialization($id = FALSE)
    {
        $userId = \Auth::user()->id ; 
        if( $id !== FALSE )
        {
            $userId = $id ;
        }
        return \App\User_specialization_rel::
        join('specializations','specializations.id','=','user_specialization_rels.specializationId')
        ->join('degrees','degrees.id','=','specializations.degreeId')
        ->join('qualifications','qualifications.id','=','degrees.qualificationId')
         ->where('user_specialization_rels.userId', $userId )
        ->select('specializations.specializationName',
            'degrees.degreeName','qualifications.qualificationName'
        )->get();  
    }


    public function getSkills($skillTypeId)
    {
        return \App\User_skill_rel::
            join('skills','skills.id','=','user_skill_rels.skillId')
            ->join('comepetency_levels','comepetency_levels.id','=','user_skill_rels.comepetencyLevelId')
            ->select('user_skill_rels.id','skills.skillName','comepetency_levels.comepetencyLevelName')
            ->where('user_skill_rels.userId', $this->id)
            ->where('skills.skillTypeId', $skillTypeId)
            ->groupBy('user_skill_rels.id')->get();
    }

    public function getlanguages()
    {
        return \App\User_language_rel::
            join('languages','languages.id','=','user_language_rels.languageId')
            ->select('user_language_rels.*','languages.languageName')
            ->where('user_language_rels.userId', $this->id)
            ->groupBy('user_language_rels.id')->get();
    }

    public static function getSkillChartDetail( $userId , $jobRoleId )
    { 
        $userId = $userId ;
        $jobRoleId = $jobRoleId ;
        $jobRole = \App\Job_role::find($jobRoleId);

        $languages = \App\Language::
            Join('job_role_language_rels', function($join) use ($jobRoleId){
                $join->on('languages.id', '=', 'job_role_language_rels.languageId')
                ->where('job_role_language_rels.jobRoleId',$jobRoleId);
            })
            ->leftjoin('user_language_rels', function($join) use ($userId){
                $join->on('user_language_rels.languageId', '=', 'languages.id');
                //->where('user_language_rels.reading','job_role_language_rels.reading')
                // ->where('user_language_rels.writeing','job_role_language_rels.writeing')
                // ->where('user_language_rels.speaking','job_role_language_rels.speaking')
                // ->where('user_language_rels.understanding','job_role_language_rels.understanding')
                $join->where('user_language_rels.userId',$userId);
            })
            ->select('languages.id','languages.languageName','job_role_language_rels.jobRoleId','job_role_language_rels.reading','job_role_language_rels.writeing','job_role_language_rels.speaking','job_role_language_rels.understanding','user_language_rels.languageId as userLanguageId'
                ,'user_language_rels.reading as userReading','user_language_rels.writeing as userWriteing','user_language_rels.speaking as userSpeaking','user_language_rels.understanding as userUnderstanding')
            ->groupBy('languages.id')->get();  

        $skills = \App\Skill::
            Join('job_role_skill_rels', function($join) use ($jobRoleId){
                $join->on('skills.id', '=', 'job_role_skill_rels.skillId')
                ->where('job_role_skill_rels.jobRoleId',$jobRoleId);
            })
            ->leftjoin('user_skill_rels', function($join) use ($userId){
                $join->on('user_skill_rels.skillId', '=', 'job_role_skill_rels.skillId')
                ->where('user_skill_rels.isApproved',1)
                ->where('user_skill_rels.userId',$userId);
            })
            ->select('skills.id','skills.skillName','skills.skillTypeId','job_role_skill_rels.jobRoleId','job_role_skill_rels.comepetencyLevelId',
                'user_skill_rels.comepetencyLevelId as userComepetencyLevelId'
                )
            ->groupBy('skills.id')->get();  

        $jobRoleSpecializationRels = \App\Job_role_specialization_rel::
            join('specializations', 'specializations.id', '=', 'job_role_specialization_rels.specializationId')
            ->join('degrees','degrees.id','=','specializations.degreeId')
            ->leftjoin('user_specialization_rels', function($join) use ($userId){
                $join->on('user_specialization_rels.specializationId', '=', 'specializations.id')
                ->where('user_specialization_rels.userId',$userId);
            })
            ->where('job_role_specialization_rels.jobRoleId',$jobRoleId)
            ->select('specializations.id as specializationId','specializations.specializationName',
                'degrees.id as degreeId','degrees.degreeName','degrees.qualificationId',
                'user_specialization_rels.specializationId as userSpecializationId'
            )->groupBy('job_role_specialization_rels.id')->get();
        $jobSkilUserSkill = User::getJobSkilUserSkill( $userId , $jobRoleId ) ; 
        return array('languages'=>$languages , 'skills'=>$skills ,'jobRoleSpecializationRels'=>$jobRoleSpecializationRels , 'jobSkilUserSkill'=>$jobSkilUserSkill ,'jobRole'=>$jobRole );
    }
    public static function getUserSkillChartDetail( $userId  ,$jobRoleId )
    {
        $userId = $userId ;
        $jobRoleId = $jobRoleId ;
        $jobRole = \App\Job_role::find($jobRoleId);

        $languages = \App\User_language_rel::join('languages','languages.id','=','user_language_rels.languageId')->where('userId', $userId)->get();
        $skills =  \App\User_skill_rel::
            join('skills','skills.id','=','user_skill_rels.skillId')
            ->select('skills.id','skills.skillName','skills.skillTypeId',
                'user_skill_rels.comepetencyLevelId as comepetencyLevelId')
            ->where('user_skill_rels.userId', $userId )
            ->where('user_skill_rels.isApproved',1)
            ->get();  

        $jobRoleSpecializationRels = \App\User_specialization_rel::
            join('specializations', 'specializations.id', '=', 'user_specialization_rels.specializationId')
            ->join('degrees','degrees.id','=','specializations.degreeId')
            ->where('user_specialization_rels.userId',$userId)
            ->select('specializations.id as specializationId','specializations.specializationName',
                'degrees.id as degreeId','degrees.degreeName','degrees.qualificationId'
            )->groupBy('user_specialization_rels.id')->get();

        return array('languages'=>$languages , 'skills'=>$skills ,'jobRoleSpecializationRels'=>$jobRoleSpecializationRels  ,'jobRole'=>$jobRole );
    }

    public static function getAppyledjob( $reportingToId = FALSE  )
    {
        $jobApply = DB::table('job_apply')
            ->select( DB::raw("DATE_FORMAT(job_roles_apply.created_at, '%M %d, %Y') as created_at") ,'users.name','job_roles.jobRoleName','users.name','users.employeeId','users.image','job_roles_apply.jobRoleName as jobRoleNameApply')
            ->leftJoin('users','users.id','=','job_apply.user_id')
            ->leftJoin('job_roles','job_roles.id','=','users.jobRoleId')
            ->leftJoin('job_roles as job_roles_apply','job_roles_apply.id','=','job_apply.role_id')
            ->where('job_apply.status_id','=', 1);
            if( $reportingToId !== FALSE )
            {
                $jobApply = $jobApply->where('users.reportingToId','=',  \Auth::user()->id );
            }
            $jobApply = $jobApply->get();
            return $jobApply  ;
    }

    public static function getCompetencyPercent( $userId  )
    {

        $competencyPercent = \App\User::
            join('job_role_skill_rels', 'job_role_skill_rels.jobRoleId','=','users.jobRoleId')
            ->join('skills','skills.id','=','job_role_skill_rels.skillId')
            ->join('skill_types','skill_types.id','=','skills.skillTypeId')
            ->leftJoin('user_skill_rels', function($join) {
                $join->on('user_skill_rels.userId', '=', 'users.id')
                ->on('user_skill_rels.skillId', '=', 'job_role_skill_rels.skillId');
            })
            ->select('skills.skillTypeId','skill_types.skillTypeName',  
                DB::raw('
                    (
                    (
                    sum( if( user_skill_rels.id > 0 , 1 ,0 ) )
                    /
                    count(job_role_skill_rels.id )
                    )
                    *
                    100 
                    )
                    as percent'
                 ),
                DB::raw(' sum( if( user_skill_rels.id > 0 , 1 ,0 ) ) as userSkillRelId'),
                DB::raw('count(job_role_skill_rels.id ) as jobRoleKkillRelId'),
                'skills.skillTypeId'
            )
            ->where('users.id', $userId )
            ->groupBy('skills.skillTypeId')->get();
        return $competencyPercent ; 

        // SELECT skills.skillTypeId , 
        // sum( if(job_role_skill_rels.id > 0 , 1 , 0) ) as countTotal ,
        // sum( if(user_skill_rels.id > 0 , 1 , 0) ) as countUser
        // FROM users 
        // inner join job_role_skill_rels on job_role_skill_rels.jobRoleId = users.jobRoleId 
        // inner join skills on skills.id = job_role_skill_rels.skillId 
        // left join user_skill_rels on user_skill_rels.userId = users.id and user_skill_rels.skillId = job_role_skill_rels.skillId 
        // where users.id = 3 group by skills.skillTypeId

    }
    public static function getJobSkilUserSkill( $userId , $jobRoleId = FALSE )
    {
        $id = $userId ; 
        $where = "";
        if($jobRoleId !== FALSE) 
        {
            $where = "where tbl1.id = $jobRoleId";
        }
        
        $result = DB::select( DB::raw("SELECT tbl1.*,job_roles.jobRoleName , divisions.divisionName , job_apply.status_id  From  ( 
        SELECT job_roles.id , COUNT(job_roles.id) as idCount , COUNT( user_skill_rels.id ) as userCount , if( COUNT(job_roles.id) = COUNT( user_skill_rels.id ) , 'Y' , 'N' ) as isAllowed  FROM `job_roles` inner join job_role_skill_rels on job_roles.id = job_role_skill_rels.jobRoleId left join user_skill_rels on user_skill_rels.skillId = job_role_skill_rels.skillId AND user_skill_rels.comepetencyLevelId >= job_role_skill_rels.comepetencyLevelId AND user_skill_rels.isApproved = 1 and user_skill_rels.userId = $userId
        GROUP by job_roles.id
        UNION
        SELECT job_roles.id , COUNT(job_roles.id) as idCount , sum( if(
        job_role_language_rels.reading <= user_language_rels.reading && job_role_language_rels.writeing <= user_language_rels.writeing && job_role_language_rels.speaking <= user_language_rels.speaking && job_role_language_rels.understanding <= user_language_rels.understanding , 1 , 0 )) as userCount , if( COUNT(job_roles.id) = 
        sum( if(job_role_language_rels.reading <= user_language_rels.reading && job_role_language_rels.writeing <= user_language_rels.writeing && job_role_language_rels.speaking <= user_language_rels.speaking && job_role_language_rels.understanding <= user_language_rels.understanding , 1 , 0 )) , 'Y' , 'N' ) as isAllowed 
        FROM `job_roles` inner join job_role_language_rels  on job_roles.id = job_role_language_rels.jobRoleId 
        left join user_language_rels  on user_language_rels.languageId = job_role_language_rels.languageId AND  user_language_rels.userId = $userId 
        GROUP by job_roles.id  
        UNION
        SELECT job_roles.id , COUNT(job_role_specialization_rels.id) as idCount , COUNT( user_specialization_rels.id ) as userCount , 
        if( COUNT(job_role_specialization_rels.id) = 0 OR COUNT( user_specialization_rels.id ) > 0  , 'Y' , 'N' ) as isAllowed  
        FROM job_roles 
        inner join job_role_specialization_rels  on job_roles.id = job_role_specialization_rels.jobRoleId 
        left join user_specialization_rels  on user_specialization_rels.specializationId = job_role_specialization_rels.specializationId and user_specialization_rels.userId = $userId
        GROUP by job_roles.id
        ) as tbl1
        INNER join job_roles on job_roles.id = tbl1.id
        INNER join sub_departments  on sub_departments.id = job_roles.subDepartmentId
        INNER join departments  on departments.id = sub_departments.departmentId
        INNER join divisions on divisions.id = departments.id
        LEFT join job_apply on job_apply.role_id = job_roles.id and job_apply.status_id = 
        '1' and  job_apply.user_id = $userId
        $where
        GROUP by tbl1.id having COUNT(  tbl1.id ) = sum( if( tbl1.isAllowed = 'Y',1,0 ))
        "));
        return $result ;
    }
}