Rev 2 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?phpdeclare(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;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 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 reportsAction(){$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/reports.phtml');$viewModel->setVariables(['form' => $form]);return $viewModel ;}}return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}