Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 1 | Rev 187 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

<?php
declare(strict_types=1);

namespace LeadersLinked\Controller;

use Laminas\Db\Adapter\AdapterInterface;
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\Log\LoggerInterface;
use Laminas\View\Model\ViewModel;
use Laminas\View\Model\JsonModel;
use LeadersLinked\Form\ExtendUserMicrolearningForm;
use LeadersLinked\Mapper\QueryMapper;
use LeadersLinked\Mapper\UserMapper;
use Laminas\Db\Sql\Expression;
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleUserMapper;
use LeadersLinked\Model\CompanyMicrolearningCapsuleUser;
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleMapper;
use LeadersLinked\Mapper\CompanyMicrolearningUserProgressMapper;
use LeadersLinked\Mapper\CompanyMicrolearningSlideMapper;
use LeadersLinked\Mapper\CompanyMicrolearningUserLogMapper;
use Google\Service\Classroom\Student;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserCompanyMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserFunctionMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserGroupMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserInstitutionMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserProgramMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserPartnerMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserSectorMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserStudentTypeMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserMapper;
use LeadersLinked\Mapper\DeviceMapper;
use LeadersLinked\Model\Application;


class MicrolearningReportsController extends AbstractActionController
{
    /**
     *
     * @var AdapterInterface
     */
    private $adapter;
    
    
    /**
     *
     * @var AbstractAdapter
     */
    private $cache;
    
    /**
     *
     * @var  LoggerInterface
     */
    private $logger;
   
    
    /**
     *
     * @param AdapterInterface $adapter
     * @param AbstractAdapter $cache
     * @param LoggerInterface $logger
     * @param array $config
     */
    public function __construct($adapter, $cache , $logger, $config)
    {
        $this->adapter      = $adapter;
        $this->cache        = $cache;
        $this->logger       = $logger;
        $this->config       = $config;
       
     
    }
    
    
    public function indexAction() 
    {
        
        $this->layout()->setTemplate('layout/layout-backend.phtml');
        $viewModel = new ViewModel();
        $viewModel->setTemplate('leaders-linked/microlearning-reports/index.phtml');
        return $viewModel ;
    }
    
   
    public function overviewAction()
    {
        
        
        $currentUserPlugin = $this->plugin('currentUserPlugin');
        $currentUser = $currentUserPlugin->getUser();
        $currentCompany = $currentUserPlugin->getCompany();
        
        
        $request = $this->getRequest();
        if($request->isGet()) {
            $reportsLastWeek = [];
            $reportsCapsuleResume = []; 
            $reportsStudentsTotal = [];
            
            $companyMicrolearningExtendUserCompanyMapper = CompanyMicrolearningExtendUserCompanyMapper::getInstance($this->adapter);
            $extendCompanies = $companyMicrolearningExtendUserCompanyMapper->fetchAllByCompanyId($currentCompany->id);
            
            foreach($extendCompanies as $extendCompany)
            {
                $reportsLastWeek['companies'][$extendCompany->id] = [
                    'name' => $extendCompany->name,
                    'total' => 0,
                    'value' => 0
                ] ;
                
                $reportsCapsuleResume['companies'][$extendCompany->id] = [
                    'name' => $extendCompany->name,
                    'total' => 0,
                    'value' => 0
                ] ;
                
                $reportsStudentsTotal['companies'][$extendCompany->id] = [
                    'name' => $extendCompany->name,
                    'total' => 0,
                ] ;
            }
            

            $companyMicrolearningExtendUserFunctionMapper = CompanyMicrolearningExtendUserFunctionMapper::getInstance($this->adapter);
            $extendFunctions = $companyMicrolearningExtendUserFunctionMapper->fetchAllByCompanyId($currentCompany->id);
            
            foreach($extendFunctions as $extendFunction)
            {
                $reportsLastWeek['functions'][$extendFunction->id] = [
                    'name' => $extendFunction->name,
                    'total' => 0,
                    'value' => 0
                ] ;
                
                $reportsCapsuleResume['functions'][$extendFunction->id] = [
                    'name' => $extendFunction->name,
                    'total' => 0,
                    'value' => 0
                ] ;
                
                $reportsStudentsTotal['functions'][$extendFunction->id] = [
                    'name' => $extendFunction->name,
                    'total' => 0,
                ] ;
            }
            
            $companyMicrolearningExtendUserGroupMapper = CompanyMicrolearningExtendUserGroupMapper::getInstance($this->adapter);
            $extendGroups = $companyMicrolearningExtendUserGroupMapper->fetchAllByCompanyId($currentCompany->id);
            
            foreach($extendGroups as $extendGroup)
            {
                $reportsLastWeek['groups'][$extendGroup->id] = [
                    'name' => $extendGroup->name,
                    'total' => 0,
                    'value' => 0
                ];
                
                $reportsCapsuleResume['groups'][$extendGroup->id] = [
                    'name' => $extendFunction->name,
                    'total' => 0,
                    'value' => 0
                ] ;
                
                $reportsStudentsTotal['groups'][$extendGroup->id] = [
                    'name' => $extendGroup->name,
                    'total' => 0,
                ];
                
                
            }
            
            
            $companyMicrolearningExtendUserInstitutionMapper = CompanyMicrolearningExtendUserInstitutionMapper::getInstance($this->adapter);
            $extendInstitutions = $companyMicrolearningExtendUserInstitutionMapper->fetchAllByCompanyId($currentCompany->id);
            
            foreach($extendInstitutions as $extendInstitution)
            {
                $reportsLastWeek['institutions'][$extendInstitution->id] = [
                    'name' => $extendInstitution->name,
                    'total' => 0,
                    'value' => 0
                ] ;
                
                $reportsCapsuleResume['institutions'][$extendInstitution->id] = [
                    'name' => $extendInstitution->name,
                    'total' => 0,
                    'value' => 0
                ] ;
                
                $reportsStudentsTotal['institutions'][$extendInstitution->id] = [
                    'name' => $extendInstitution->name,
                    'total' => 0,
                ] ;
            }
            
            
            $companyMicrolearningExtendUserProgramMapper = CompanyMicrolearningExtendUserProgramMapper::getInstance($this->adapter);
            $extendPrograms = $companyMicrolearningExtendUserProgramMapper->fetchAllByCompanyId($currentCompany->id);
            
            foreach($extendPrograms as $extendProgram)
            {
                $reportsLastWeek['programs'][$extendProgram->id] = [
                    'name' => $extendProgram->name,
                    'total' => 0,
                    'value' => 0
                ] ;
                
                $reportsCapsuleResume['programs'][$extendProgram->id] = [
                    'name' => $extendProgram->name,
                    'total' => 0,
                    'value' => 0
                ] ;
                
                $reportsStudentsTotal['programs'][$extendProgram->id] = [
                    'name' => $extendProgram->name,
                    'total' => 0,

                ] ;
            }
            
            
            $companyMicrolearningExtendUserPartnerMapper = CompanyMicrolearningExtendUserPartnerMapper::getInstance($this->adapter);
            $extendPartners = $companyMicrolearningExtendUserPartnerMapper->fetchAllByCompanyId($currentCompany->id);
            
            foreach($extendPartners as $extendPartner)
            {
                $reportsLastWeek['partners'][$extendPartner->id] = [
                    'name' => $extendPartner->name,
                    'total' => 0,
                    'value' => 0
                ] ;
                
                $reportsCapsuleResume['partners'][$extendPartner->id] = [
                    'name' => $extendPartner->name,
                    'total' => 0,
                    'value' => 0
                ] ;
                
                $reportsStudentsTotal['partners'][$extendPartner->id] = [
                    'name' => $extendPartner->name,
                    'total' => 0,
                ] ;
            }
            
            
            $companyMicrolearningExtendUserSectorMapper = CompanyMicrolearningExtendUserSectorMapper::getInstance($this->adapter);
            $extendSectors = $companyMicrolearningExtendUserSectorMapper->fetchAllByCompanyId($currentCompany->id);
            
            foreach($extendSectors as $extendSector)
            {
                $reportsLastWeek['sectors'][$extendSector->id] = [
                    'name' => $extendSector->name,
                    'total' => 0,
                    'value' => 0
                ] ;
                
                $reportsCapsuleResume['sectors'][$extendSector->id] = [
                    'name' => $extendSector->name,
                    'total' => 0,
                    'value' => 0
                ] ;
                
                $reportsStudentsTotal['sectors'][$extendSector->id] = [
                    'name' => $extendSector->name,
                    'total' => 0,
                ] ;
            }
            
            $companyMicrolearningExtendUserStudentTypeMapper = CompanyMicrolearningExtendUserStudentTypeMapper::getInstance($this->adapter);
            $extendStudentTypes = $companyMicrolearningExtendUserStudentTypeMapper->fetchAllByCompanyId($currentCompany->id);
            
            foreach($extendStudentTypes as $extendStudentType)
            {
                $reportsLastWeek['student_types'][$extendStudentType->id] = [
                    'name' => $extendStudentType->name,
                    'total' => 0,
                    'value' => 0
                ] ;
                
                $reportsCapsuleResume['student_types'][$extendStudentType->id] = [
                    'name' => $extendStudentType->name,
                    'total' => 0,
                    'value' => 0
                ] ;
                
                $reportsStudentsTotal['student_types'][$extendStudentType->id] = [
                    'name' => $extendStudentType->name,
                    'total' => 0,
                ] ;
            }
            
            $companyMicrolearningUserProgressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);
            
            $minLastWeek = date('Y-m-d', strtotime(' -180 days'));
            $maxLastWeek = date('Y-m-d'); 
            $companyMicrolearningUserLogMapper = CompanyMicrolearningUserLogMapper::getInstance($this->adapter);
            $companyUsersLogWithActivityLastWeek = $companyMicrolearningUserLogMapper->fetchAllUserIdsLastWeekByCompanyId($currentCompany->id, $minLastWeek, $maxLastWeek);
            
            //header('Content-type: text/plain');
           // print_r($companyUsersLogWithActivityLastWeek);
            
            
      
            
            $date = date('Y-m-d');
            
            $companyMicrolearningCapsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
            $user_ids = $companyMicrolearningCapsuleUserMapper->fetchAllDistinctUserIdActiveByCompanyIdAndDate($currentCompany->id, $date); 
            
            $studentsTotal = count($user_ids);
            $studentsStarted = 0;

            
            $userIdsWithAllCapsulesCompleted = [];

            
            foreach($user_ids as $user_id)
            {
                $countSlides = $companyMicrolearningUserProgressMapper->fetchCountAllSlideCompletedByCompanyIdAndUserId($currentCompany->id, $user_id); 
                if($countSlides) {
                    $studentsStarted++;
                } 
                
                $incompleted = false;
                
                $capsuleUsers = $companyMicrolearningCapsuleUserMapper->fetchAllActiveByUserId($user_id);
                foreach($capsuleUsers as $capsuleUser)
                {
                    $userProgress = $companyMicrolearningUserProgressMapper->fetchOneByUseridAndCapsuleId($capsuleUser->user_id, $capsuleUser->capsule_id);
                    if($userProgress) {
                        if(!$userProgress->completed) {
                            $incompleted = true;
                            break;
                        }
                    }  else {
                        $incompleted = true;
                        break;
                    } 
                    
                    
                    
                }
                
                if(!$incompleted) {
                    array_push($userIdsWithAllCapsulesCompleted, $user_id);
                } 
            }
            
            
            $studentsWithoutStarting =  $studentsTotal - $studentsStarted;
            $reportsLastWeek['general'] = ['total' => $studentsTotal, 'value' => count($companyUsersLogWithActivityLastWeek) ];
        
            $reportsCapsuleResume['general'] = ['total' => $studentsTotal, 'value' => count($userIdsWithAllCapsulesCompleted) ];
            
            
            $companyMicrolearningExtendUserMapper = CompanyMicrolearningExtendUserMapper::getInstance($this->adapter);
            $records = $companyMicrolearningExtendUserMapper->fetchAllByCompanyId($currentCompany->id);
            foreach($records as $record)
            {

                if($record->extend_company_id) { 
                    $reportsLastWeek['companies'][$record->extend_company_id]['total'] += 1;
                    $reportsStudentsTotal['companies'][$record->extend_company_id]['total'] += 1;
                    
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
                        $reportsLastWeek['companies'][$record->extend_company_id]['value'] += 1;
                    }
                    
                    $reportsCapsuleResume['companies'][$record->extend_company_id]['total'] += 1;
                    
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
                        $reportsCapsuleResume['companies'][$record->extend_company_id]['value'] += 1;
                    }
                    
                }
                
                if($record->extend_function_id) {
                    $reportsLastWeek['functions'][$record->extend_function_id]['total'] += 1;
                    $reportsStudentsTotal['functions'][$record->extend_function_id]['total'] += 1;
                    
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
                        $reportsLastWeek['functions'][$record->extend_function_id]['value'] += 1;
                    }
                    
                    $reportsCapsuleResume['functions'][$record->extend_function_id]['total'] += 1;
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
                        $reportsCapsuleResume['functions'][$record->extend_function_id]['value'] += 1;
                    }
                }
                
                if($record->extend_group_id) {
                    $reportsLastWeek['groups'][$record->extend_group_id]['total'] += 1;
                    $reportsStudentsTotal['groups'][$record->extend_group_id]['total'] += 1;
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
                        $reportsLastWeek['groups'][$record->extend_group_id]['value'] += 1;
                    }
                    
                    $reportsCapsuleResume['groups'][$record->extend_group_id]['total'] += 1;
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
                        $reportsCapsuleResume['groups'][$record->extend_group_id]['value'] += 1;
                    }
                }
                
                if($record->extend_institution_id) {
                    $reportsLastWeek['institutions'][$record->extend_institution_id]['total'] += 1;
                    $reportsStudentsTotal['institutions'][$record->extend_institution_id]['total'] += 1;
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
                        $reportsLastWeek['institutions'][$record->extend_institution_id]['value'] += 1;
                    }
                    
                    $reportsCapsuleResume['institutions'][$record->extend_institution_id]['total'] += 1;
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
                        $reportsCapsuleResume['institutions'][$record->extend_institution_id]['value'] += 1;
                    }
                }
                
                if($record->extend_program_id) {
                    $reportsLastWeek['programs'][$record->extend_program_id]['total'] += 1;
                    $reportsStudentsTotal['programs'][$record->extend_program_id]['total'] += 1;
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
                        $reportsLastWeek['programs'][$record->extend_program_id]['value'] += 1;
                    }
                    
                    $reportsCapsuleResume['programs'][$record->extend_program_id]['total'] += 1;
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
                        $reportsCapsuleResume['programs'][$record->extend_program_id]['value'] += 1;
                    }
                }
                
                if($record->extend_partner_id) {
                    $reportsLastWeek['partners'][$record->extend_partner_id]['total'] += 1;
                    $reportsStudentsTotal['partners'][$record->extend_partner_id]['total'] += 1;
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
                        $reportsLastWeek['partners'][$record->extend_partner_id]['value'] += 1;
                    }
                    
                    $reportsCapsuleResume['partners'][$record->extend_partner_id]['total'] += 1;
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
                        $reportsCapsuleResume['partners'][$record->extend_partner_id]['value'] += 1;
                    }
                }
                
                if($record->extend_sector_id) {
                    $reportsLastWeek['sectors'][$record->extend_sector_id]['total'] += 1;
                    $reportsStudentsTotal['sectors'][$record->extend_sector_id]['total'] += 1;
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
                        $reportsLastWeek['sectors'][$record->extend_sector_id]['value'] += 1;
                    }
                    
                    $reportsCapsuleResume['sectors'][$record->extend_sector_id]['total'] += 1;
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
                        $reportsCapsuleResume['sectors'][$record->extend_sector_id]['value'] += 1;
                    }
                }
                
                if($record->extend_student_type_id) {
                    $reportsLastWeek['student_types'][$record->extend_student_type_id]['total'] += 1;
                    $reportsStudentsTotal['student_types'][$record->extend_student_type_id]['total'] += 1;
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
                        $reportsLastWeek['student_types'][$record->extend_student_type_id]['value'] += 1;
                    }
                    
                    $reportsCapsuleResume['student_types'][$record->extend_student_type_id]['total'] += 1;
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
                        $reportsCapsuleResume['student_types'][$record->extend_student_type_id]['value'] += 1;
                    }
                }
            }
            
          
            /*
            header('Content-type: text/plain');
            print_r($reportsStudentsTotal); exit;
            */

            
            $this->layout()->setTemplate('layout/layout-backend.phtml');
            $viewModel = new ViewModel();
            $viewModel->setTemplate('leaders-linked/microlearning-reports/overview.phtml');
            $viewModel->setVariables([
                'reportsLastWeek'       => $reportsLastWeek,
                'reportsCapsuleResume'  => $reportsCapsuleResume,
                'reportsStudentsTotal'  => $reportsStudentsTotal,
                'reportStudents' => [
                    'total' => $studentsTotal,
                    'started' => $studentsStarted,
                    'withoutStarting' => $studentsWithoutStarting,
                ]
                
            ]); 
            return $viewModel ;
        }
        
        return new JsonModel([
           'success' => false,
           'data' => 'ERROR_METHOD_NOT_ALLOWED'
        ]);
    }
    
    public function progressAction()
    {
        
        
        $currentUserPlugin = $this->plugin('currentUserPlugin');
        $currentUser = $currentUserPlugin->getUser();
        $currentCompany = $currentUserPlugin->getCompany();
        
        
        $request = $this->getRequest();
        if($request->isGet()) {
            
            
            $headers  = $request->getHeaders();
            
            $isJson = false;
            if($headers->has('Accept')) {
                $accept = $headers->get('Accept');
                
                $prioritized = $accept->getPrioritized();
                
                foreach($prioritized as $key => $value) {
                    $raw = trim($value->getRaw());
                    
                    if(!$isJson) {
                        $isJson = strpos($raw, 'json');
                    }
                    
                }
            }
            
            if($isJson) {
                
                $date = date('Y-m-d');
                
                $companyMicrolearningProgressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);
                $companyMicrolearningUserLogMapper = CompanyMicrolearningUserLogMapper::getInstance($this->adapter);
                
                $companyMicrolearningCapsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
  
                $companyMicrolearningSlideMapper = CompanyMicrolearningSlideMapper::getInstance($this->adapter);
                
                
                
                $queryMapper = QueryMapper::getInstance($this->adapter);
                
                $selectCapsuleUser = $queryMapper->getSql()->select();
                $selectCapsuleUser->columns(['user_id' => new Expression('DISTINCT(user_id)')  ]);
                $selectCapsuleUser->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);
                $selectCapsuleUser->where->equalTo('company_id', $currentCompany->id);
                $selectCapsuleUser->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
                ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
                ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
                ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
                
                //echo $select->getSqlString($this->adapter->platform); exit;
                
                $select = $queryMapper->getSql()->select();
                $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email']);
                $select->from(UserMapper::_TABLE);
                $select->where->in('id', $selectCapsuleUser);
                $select->order(['first_name', 'last_name']);
                
                
                
                $students = []; 
                $records = $queryMapper->fetchAll($select);
                foreach($records as $record)
                {
                    $capsules               = $companyMicrolearningCapsuleUserMapper->fetchAllActiveByUserId($record['id']);
                    $totalCapsules          = count($capsules);
                    $totalCapsulesStarted   = 0;
                    $totalCapsulesCompleted = 0;
                    
                    $totalSlides            = 0;
                    $totalSlidesStarted     = 0; 
                    $totalSlidesCompleted   = 0; 
                    
                    foreach($capsules as $capsule)
                    {
                        $userProgress = $companyMicrolearningProgressMapper->fetchOneByUseridAndCapsuleId($capsule->user_id, $capsule->capsule_id);
                        if($userProgress) {
                            $totalCapsulesStarted++;
                            if($userProgress->completed) {
                                $totalCapsulesCompleted++;
                            } 
                        }
                        
                        $slides = $companyMicrolearningSlideMapper->fetchAllByCompanyIdAndTopicIdAndCapsuleId($capsule->company_id, $capsule->topic_id, $capsule->capsule_id); 
                        $totalSlides = count($slides);
                        foreach($slides as $slide)
                        { 
                        
                             $userProgress = $companyMicrolearningProgressMapper->fetchOneByUserIdAndSlideId($capsule->user_id, $slide->id); 
                             if($userProgress) {
                                 
                                 $totalSlidesStarted++; 
                                 if($userProgress->completed) {
                                     $totalSlidesCompleted++;
                                 } 
                                 
                             } 
                        }
                        
                        
                    }
                    
  
                    
                    $student = [
                        'uuid' => $record['uuid'],
                        'first_name' => $record['first_name'],
                        'last_name' => $record['last_name'],
                        'email' => $record['email'], 
                        'total_capsules' => $totalCapsules,
                        'total_capsules_incomplete' => ( $totalCapsules - $totalCapsulesCompleted ), 
                        'total_capsules_started' => $totalCapsulesStarted,
                        'total_capsules_completed' => $totalCapsulesCompleted,
                        'total_slides' => $totalSlides,
                        'total_slides_started' => $totalSlidesStarted,
                        'total_slides_completed' => $totalSlidesCompleted,
                        'totql_slides_incompleted' => ($totalSlides - $totalSlidesCompleted ) ,
                        'first_date' => '',
                        'first_time' => '',
                        'last_date' => '',
                        'last_time' => '',
                    ];
                    
                    $first_added_on = $companyMicrolearningUserLogMapper->fetchFirstDateByCompanyIdAndUserId($currentCompany->id, $record['id']);
                    if($first_added_on) {
                        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $first_added_on);
                        if($dt) {
                            $student['first_date'] = $dt->format('d/m/Y');
                            $student['first_time'] = $dt->format('h:i a');
                        }
                    }
                    
                    $last_added_on  = $companyMicrolearningUserLogMapper->fetchLastDateByCompanyIdAndUserId($currentCompany->id, $record['id']);
                    if($last_added_on) {
                        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $last_added_on);
                        if($dt) {
                            $student['last_date'] = $dt->format('d/m/Y');
                            $student['last_time'] = $dt->format('h:i a');
                        } 
                    }
     
                    array_push($students, $student);
                    
                    
                }
                
                
                
                
                return new JsonModel([
                    'success' => true, 
                    'data' => $students
                    
                ]); 
                
            } else { 
                
                
                
                $form = new ExtendUserMicrolearningForm($this->adapter, $currentCompany->id);
                
                
                $this->layout()->setTemplate('layout/layout-backend.phtml');
                $viewModel = new ViewModel();
                $viewModel->setTemplate('leaders-linked/microlearning-reports/progress.phtml');
                $viewModel->setVariables([
                    'form' => $form
                ]); 
                return $viewModel ;
            }
        }
        
        return new JsonModel([
            'success' => false,
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
        ]);
    }
    
    public function devicesAction()
    {
        
        
        $currentUserPlugin = $this->plugin('currentUserPlugin');
        $currentUser = $currentUserPlugin->getUser();
        $currentCompany = $currentUserPlugin->getCompany();
        
        
        $request = $this->getRequest();
        if($request->isGet()) {
            
            
            $headers  = $request->getHeaders();
            
            $isJson = false;
            if($headers->has('Accept')) {
                $accept = $headers->get('Accept');
                
                $prioritized = $accept->getPrioritized();
                
                foreach($prioritized as $key => $value) {
                    $raw = trim($value->getRaw());
                    
                    if(!$isJson) {
                        $isJson = strpos($raw, 'json');
                    }
                    
                }
            }
            
            if($isJson) {
                
                $date = date('Y-m-d');
                $deviceMapper = DeviceMapper::getInstance($this->adapter);
                
                
                $queryMapper = QueryMapper::getInstance($this->adapter);
                
                $selectCapsuleUser = $queryMapper->getSql()->select();
                $selectCapsuleUser->columns(['user_id' => new Expression('DISTINCT(user_id)')  ]);
                $selectCapsuleUser->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);
                $selectCapsuleUser->where->equalTo('company_id', $currentCompany->id);
                $selectCapsuleUser->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
                ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
                ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
                ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
                
                //echo $select->getSqlString($this->adapter->platform); exit;
                
                $select = $queryMapper->getSql()->select();
                $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email']);
                $select->from(UserMapper::_TABLE);
                $select->where->in('id', $selectCapsuleUser);
                $select->order(['first_name', 'last_name']);
                
                
                
                $students = [];
                $records = $queryMapper->fetchAll($select);
                foreach($records as $record)
                {
                    
                    
                    $record_devices = $deviceMapper->fetchAllByUserId($record['id']);
                    
                    $devices = [];
                    foreach($record_devices as $device)
                    {
                        /*if($device->application_id != Application::LEADERSLINKED) {
                            continue;
                        }*/
                        
                        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $device->updated_on);
                        
                        array_push($devices, [
                            'brand' => $device->brand,
                            'manufacturer' => $device->manufacturer,
                            'model' => $device->model,
                            'platform' => $device->platform,
                            'version' => $device->version,
                            'token' => $device->token ? 'LABEL_YES' : 'LABEL_NO',
                            'updated_on' => $dt->format('d/m/Y h:i a')
                        ]);
                    }
                    
                    
                    $student = [
                        'uuid' => $record['uuid'],
                        'first_name' => $record['first_name'],
                        'last_name' => $record['last_name'],
                        'email' => $record['email'],
                        'devices' => $devices
                    ];
                    
                    array_push($students, $student);
                    
                    
                }
                
                
                
                
                return new JsonModel([
                    'success' => true,
                    'data' => $students
                    
                ]);
                
            } else {
                
                
                
                $form = new ExtendUserMicrolearningForm($this->adapter, $currentCompany->id);
                
                
                $this->layout()->setTemplate('layout/layout-backend.phtml');
                $viewModel = new ViewModel();
                $viewModel->setTemplate('leaders-linked/microlearning-reports/devices.phtml');
                $viewModel->setVariables([
                    'form' => $form
                ]);
                return $viewModel ;
            }
        }
        
        return new JsonModel([
            'success' => false,
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
        ]);
    }
   
}