Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 14612 | Rev 15387 | Ir a la última revisión | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 14612 Rev 15386
Línea 39... Línea 39...
39
use Laminas\Hydrator\ArraySerializableHydrator;
39
use Laminas\Hydrator\ArraySerializableHydrator;
40
use Laminas\Db\ResultSet\HydratingResultSet;
40
use Laminas\Db\ResultSet\HydratingResultSet;
41
use Laminas\Paginator\Adapter\DbSelect;
41
use Laminas\Paginator\Adapter\DbSelect;
42
use Laminas\Paginator\Paginator;
42
use Laminas\Paginator\Paginator;
43
use LeadersLinked\Model\CompanyMicrolearningUserProgress;
43
use LeadersLinked\Model\CompanyMicrolearningUserProgress;
-
 
44
use PhpOffice\PhpSpreadsheet\IOFactory;
-
 
45
use PhpOffice\PhpSpreadsheet\Spreadsheet;
-
 
46
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
-
 
47
use PhpOffice\PhpSpreadsheet\Calculation\TextData\Replace;
-
 
48
use LeadersLinked\Form\TopicReportForm;
-
 
49
use LeadersLinked\Model\User;
-
 
50
use LeadersLinked\Mapper\CompanyUserMapper;
-
 
51
use Laminas\Db\Sql\Select;
-
 
52
use LeadersLinked\Form\StudentReportForm;
-
 
53
 
Línea 44... Línea 54...
44
 
54
 
45
 
55
 
46
class MicrolearningReportsController extends AbstractActionController
56
class MicrolearningReportsController extends AbstractActionController
Línea 561... Línea 571...
561
                $select->from([ 'u' => UserMapper::_TABLE]);
571
                $select->from([ 'u' => UserMapper::_TABLE]);
Línea 562... Línea 572...
562
                
572
                
-
 
573
                
Línea 563... Línea 574...
563
                
574
                
Línea 564... Línea 575...
564
                
575
                $select->where->in('u.id', $selectUsers);
Línea 910... Línea 921...
910
                }
921
                }
Línea 911... Línea 922...
911
                
922
                
912
                if($student_type_id) {
923
                if($student_type_id) {
913
                    $select->where->equalTo('e.extend_student_type_id', $student_type_id);
924
                    $select->where->equalTo('e.extend_student_type_id', $student_type_id);
-
 
925
                }
-
 
926
                
914
                }
927
                $select->where->equalTo('u.status', User::STATUS_ACTIVE);
Línea 915... Línea 928...
915
                $select->order(['u.first_name', 'u.last_name']);
928
                $select->order(['u.first_name', 'u.last_name']);
Línea 1256... Línea 1269...
1256
                }
1269
                }
1257
            }
1270
            }
Línea 1258... Línea 1271...
1258
 
1271
 
1259
   
-
 
-
 
1272
   
-
 
1273
            if($isJson) {
Línea 1260... Línea 1274...
1260
            if($isJson) {
1274
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
1261
 
1275
                $allowDownload = $acl->isAllowed($currentUser->usertype_id, 'microlearning/reports/progress-for-capsule/excel');
1262
                
1276
                
1263
                $topic_uuid     = filter_var($this->params()->fromQuery('topic_uuid'), FILTER_SANITIZE_STRING);
-
 
1264
                $capsule_uuid   = filter_var($this->params()->fromQuery('capsule_uuid'), FILTER_SANITIZE_STRING);
-
 
1265
                
-
 
1266
                $data = [
-
 
1267
                ];
-
 
1268
                
-
 
1269
                
-
 
1270
                if(!$topic_uuid) {
-
 
1271
                    return new JsonModel([
-
 
1272
                        'success' => true,
-
 
1273
                        'data' => $data
-
 
1274
                    ]);
-
 
1275
                    
-
 
1276
                }
1277
                $topic_uuid     = filter_var($this->params()->fromQuery('topic_uuid'), FILTER_SANITIZE_STRING);
1277
                
1278
                $capsule_uuid   = filter_var($this->params()->fromQuery('capsule_uuid'), FILTER_SANITIZE_STRING);
1278
                
1279
 
1279
                $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
1280
                $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
1280
                $topic = $topicMapper->fetchOneByUuid($topic_uuid);
1281
                $topic = $topicMapper->fetchOneByUuid($topic_uuid);
1281
                if(!$topic) {
1282
                if(!$topic) {
1282
                    return new JsonModel([
1283
                    return new JsonModel([
1283
                        'success' => true,
1284
                        'success' => false,
Línea 1284... Línea 1285...
1284
                        'data' => 'ERROR_TOPIC_NOT_FOUND'
1285
                        'data' => 'ERROR_TOPIC_NOT_FOUND'
1285
                    ]);
1286
                    ]);
1286
                }
1287
                }
1287
                
1288
                
1288
                if($topic->company_id != $currentCompany->id) {
1289
                if($topic->company_id != $currentCompany->id) {
1289
                    return new JsonModel([
1290
                    return new JsonModel([
Línea -... Línea 1291...
-
 
1291
                        'success' => false,
-
 
1292
                        'data' => 'ERROR_UNAUTHORIZED'
-
 
1293
                    ]);
-
 
1294
                }
-
 
1295
                
-
 
1296
 
Línea 1290... Línea 1297...
1290
                        'success' => true,
1297
                $data = [
-
 
1298
 
-
 
1299
                    'items' => [],
-
 
1300
                    'link_download' => '',
1291
                        'data' => 'ERROR_UNAUTHORIZED'
1301
                    
1292
                    ]);
1302
                ];
Línea 1293... Línea -...
1293
                }
-
 
-
 
1303
                
1294
                
1304
                if(!$capsule_uuid) {
1295
 
1305
                    
1296
                
1306
                    $data['capsules'] = [];
1297
                if(!$capsule_uuid) {
1307
                    
1298
                    $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
1308
                    $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
Línea 1299... Línea 1309...
1299
                    $records = $capsuleMapper->fetchAllByCompanyIdAndTopicId($topic->company_id, $topic->id);
1309
                    $records = $capsuleMapper->fetchAllByCompanyIdAndTopicId($topic->company_id, $topic->id);
1300
                    
1310
                    
Línea 1301... Línea 1311...
1301
                    $capsules = [];
1311
 
-
 
1312
                    foreach($records as $record)
-
 
1313
                    {
1302
                    foreach($records as $record)
1314
                        if(!$capsule_uuid) {
Línea 1303... Línea 1315...
1303
                    {
1315
                            $capsule_uuid = $record->uuid;
Línea 1331... Línea 1343...
1331
                        'data' => 'ERROR_UNAUTHORIZED'
1343
                        'data' => 'ERROR_UNAUTHORIZED'
1332
                    ]);
1344
                    ]);
1333
                }
1345
                }
Línea -... Línea 1346...
-
 
1346
                
Línea 1334... Línea 1347...
1334
                
1347
 
1335
 
1348
               
1336
                
1349
                
1337
                
1350
                
1338
                $queryMapper = QueryMapper::getInstance($this->adapter);
1351
                $queryMapper = QueryMapper::getInstance($this->adapter);
1339
                $sql = $queryMapper->getSql();
1352
                $sql = $queryMapper->getSql();
1340
                $select = $sql->select();
1353
                $select = $sql->select();
1341
                $select->columns(['progress', 'total_slides', 'view_slides', 'completed', 'returning_after_completed', 'added_on', 'updated_on']);
-
 
1342
                $select->from(['tb1' => CompanyMicrolearningUserProgressMapper::_TABLE] );
1354
                $select->columns(['user_id']);
1343
                $select->join(['tb2' => UserMapper::_TABLE], 'tb1.user_id = tb2.id', ['uuid', 'first_name', 'last_name', 'email']);
1355
                $select->from(['tb1' => CompanyMicrolearningCapsuleUserMapper::_TABLE] );
-
 
1356
                $select->join(['tb2' => UserMapper::_TABLE], 'tb1.user_id = tb2.id', ['uuid', 'first_name', 'last_name', 'email']);
1344
                $select->where->equalTo('tb1.company_id', $capsule->company_id);
1357
                $select->where->equalTo('tb1.company_id', $capsule->company_id);
1345
                $select->where->equalTo('tb1.type', CompanyMicrolearningUserProgress::TYPE_CAPSULE);
-
 
1346
                $select->where->equalTo('tb1.topic_id', $capsule->topic_id);
-
 
Línea 1347... Línea 1358...
1347
                $select->where->equalTo('tb1.capsule_id', $capsule->id);
1358
                $select->where->equalTo('tb1.topic_id', $capsule->topic_id);
1348
                $select->order('first_name ASC, last_name ASC');
1359
                $select->where->equalTo('tb1.capsule_id', $capsule->id);
-
 
1360
                $select->where->equalTo('tb2.status', User::STATUS_ACTIVE);
1349
                
1361
                $select->order('first_name ASC, last_name ASC');
1350
 
1362
              
-
 
1363
                $user_ids = [];
-
 
1364
                $records = $queryMapper->fetchAll($select);
-
 
1365
              
-
 
1366
                foreach($records as $record)
-
 
1367
                {
-
 
1368
                    $user_id =  $record['user_id'];
-
 
1369
                    
Línea -... Línea 1370...
-
 
1370
                    if(in_array($user_id, $user_ids)) {
-
 
1371
                       continue; 
-
 
1372
                    }
-
 
1373
                    
-
 
1374
                    array_push($user_ids, $user_id);
-
 
1375
                    
-
 
1376
                    $item = [
-
 
1377
                        'uuid' => $record['uuid'],
-
 
1378
                        'first_name' => $record['first_name'],
-
 
1379
                        'last_name' => $record['last_name'],
-
 
1380
                        'email' => $record['email'],
-
 
1381
                        'progress' => 0, 
-
 
1382
                        'total_slides' => 0, 
-
 
1383
                        'view_slides' => 0, 
-
 
1384
                        'completed' => 0, 
-
 
1385
                        'returning_after_completed' => 0, 
-
 
1386
                        'added_on' => '', 
-
 
1387
                        'updated_on' => ''
-
 
1388
                        
-
 
1389
                    ]; 
-
 
1390
                    
-
 
1391
                    $items[ $user_id ] = $item;
-
 
1392
                }
-
 
1393
                
-
 
1394
                
-
 
1395
                $select->columns(['user_id', 'progress', 'total_slides', 'view_slides', 'completed', 'returning_after_completed', 'added_on', 'updated_on']);
-
 
1396
                $select->from(['tb1' => CompanyMicrolearningUserProgressMapper::_TABLE] );
-
 
1397
                $select->where->equalTo('tb1.company_id', $capsule->company_id);
-
 
1398
                $select->where->equalTo('tb1.type', CompanyMicrolearningUserProgress::TYPE_CAPSULE);
-
 
1399
                $select->where->equalTo('tb1.topic_id', $capsule->topic_id);
-
 
1400
                $select->where->equalTo('tb1.capsule_id', $capsule->id);
-
 
1401
                $select->where->in('tb1.user_id', $user_ids);
Línea 1351... Línea 1402...
1351
              
1402
                
1352
                $items = [];
1403
 
Línea 1353... Línea 1404...
1353
                $records = $queryMapper->fetchAll($select);
1404
                $records = $queryMapper->fetchAll($select);
1354
                foreach($records as $record)
1405
                foreach($records as $record)
Línea 1355... Línea -...
1355
                {
-
 
1356
                    
-
 
1357
                    
-
 
1358
                    
-
 
1359
                    $dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);
-
 
1360
                    $added_on = $dt_added_on->format('d/m/Y h:i a');
1406
                {
1361
                    
1407
                    $user_id = $record['user_id'];
1362
                    $dt_updated_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['updated_on']);
1408
                    
1363
                    $updated_on = $dt_updated_on->format('d/m/Y h:i a');
1409
                    
1364
                    
1410
                    $dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);
1365
                    
1411
                    $added_on = $dt_added_on->format('d/m/Y h:i a');
1366
                    $item = [
1412
                    
1367
                        'uuid' => $record['uuid'],
-
 
Línea 1368... Línea -...
1368
                        'first_name' => $record['first_name'],
-
 
1369
                        'last_name' => $record['last_name'],
-
 
Línea 1370... Línea 1413...
1370
                        'email' => $record['email'],
1413
                    $dt_updated_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['updated_on']);
Línea 1371... Línea 1414...
1371
                        'completed' => $record['completed'],
1414
                    $updated_on = $dt_updated_on->format('d/m/Y h:i a');
1372
                        'progress' => $record['progress'],
1415
                    
-
 
1416
                    
-
 
1417
                    $items[$user_id]['completed'] = $record['completed'];
-
 
1418
                    $items[$user_id]['progress'] = $record['progress'];
-
 
1419
                    $items[$user_id]['total_slides'] = $record['total_slides'];
Línea 1373... Línea 1420...
1373
                        'total_slides' => $record['total_slides'],
1420
                    $items[$user_id]['view_slides'] = $record['view_slides'];
1374
                        'view_slides' => $record['view_slides'],
1421
                    $items[$user_id]['returning_after_completed'] = $record['returning_after_completed'];
1375
                        'returning_after_completed' => $record['returning_after_completed'],
1422
                    $items[$user_id]['added_on'] = $added_on;
Línea 1422... Línea 1469...
1422
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1469
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1423
            ]);
1470
            ]);
1424
        }
1471
        }
1425
    }
1472
    }
Línea -... Línea 1473...
-
 
1473
    
-
 
1474
    public function progressForCapsuleExcelAction()
-
 
1475
    {
-
 
1476
        $currentUserPlugin = $this->plugin('currentUserPlugin');
-
 
1477
        $currentUser = $currentUserPlugin->getUser();
-
 
1478
        $currentCompany = $currentUserPlugin->getCompany();
-
 
1479
        
-
 
1480
        $request = $this->getRequest();
-
 
1481
        
-
 
1482
        if($request->isGet())
-
 
1483
        {
-
 
1484
            
-
 
1485
            $topic_uuid     = filter_var($this->params()->fromQuery('topic_uuid'), FILTER_SANITIZE_STRING);
-
 
1486
            $capsule_uuid   = filter_var($this->params()->fromQuery('capsule_uuid'), FILTER_SANITIZE_STRING);
-
 
1487
                
-
 
1488
                
-
 
1489
            $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
-
 
1490
            $topic = $topicMapper->fetchOneByUuid($topic_uuid);
-
 
1491
            if(!$topic) {
-
 
1492
                return new JsonModel([
-
 
1493
                    'success' => false,
-
 
1494
                    'data' => 'ERROR_TOPIC_NOT_FOUND'
-
 
1495
                ]);
-
 
1496
            }
-
 
1497
                
-
 
1498
            if($topic->company_id != $currentCompany->id) {
-
 
1499
                return new JsonModel([
-
 
1500
                    'success' => false,
-
 
1501
                    'data' => 'ERROR_UNAUTHORIZED'
-
 
1502
                ]);
-
 
1503
            }
-
 
1504
 
-
 
1505
            $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
-
 
1506
            $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
-
 
1507
                
-
 
1508
                
-
 
1509
                
-
 
1510
            if(!$capsule) {
-
 
1511
                return new JsonModel([
-
 
1512
                    'success' => false,
-
 
1513
                    'data' => 'ERROR_CAPSULE_NOT_FOUND'
-
 
1514
                ]);
-
 
1515
            }
-
 
1516
                
-
 
1517
            if($capsule->topic_id != $topic->id) {
-
 
1518
                return new JsonModel([
-
 
1519
                    'success' => false,
-
 
1520
                    'data' => 'ERROR_UNAUTHORIZED'
-
 
1521
                ]);
-
 
1522
            }
-
 
1523
                
-
 
1524
                
-
 
1525
                
-
 
1526
                
-
 
1527
            $queryMapper = QueryMapper::getInstance($this->adapter);
-
 
1528
            $sql = $queryMapper->getSql();
-
 
1529
            $select = $sql->select();
-
 
1530
            $select->columns(['user_id']);
-
 
1531
            $select->from(['tb1' => CompanyMicrolearningCapsuleUserMapper::_TABLE] );
-
 
1532
            $select->join(['tb2' => UserMapper::_TABLE], 'tb1.user_id = tb2.id', ['uuid', 'first_name', 'last_name', 'email']);
-
 
1533
            $select->where->equalTo('tb1.company_id', $capsule->company_id);
-
 
1534
            $select->where->equalTo('tb1.topic_id', $capsule->topic_id);
-
 
1535
            $select->where->equalTo('tb1.capsule_id', $capsule->id);
-
 
1536
            $select->where->equalTo('tb2.status', User::STATUS_ACTIVE);
-
 
1537
            $select->order('first_name ASC, last_name ASC');
-
 
1538
                
-
 
1539
            $user_ids = [];
-
 
1540
            $records = $queryMapper->fetchAll($select);
-
 
1541
                
-
 
1542
            foreach($records as $record)
-
 
1543
            {
-
 
1544
                $user_id =  $record['user_id'];
-
 
1545
                if(in_array($user_id, $user_ids)) {
-
 
1546
                    continue;
-
 
1547
                }
-
 
1548
                    
-
 
1549
                array_push($user_ids, $user_id);
-
 
1550
                    
-
 
1551
                $item = [
-
 
1552
                        'uuid' => $record['uuid'],
-
 
1553
                        'first_name' => $record['first_name'],
-
 
1554
                        'last_name' => $record['last_name'],
-
 
1555
                        'email' => $record['email'],
-
 
1556
                        'progress' => 0,
-
 
1557
                        'total_slides' => 0,
-
 
1558
                        'view_slides' => 0,
-
 
1559
                        'completed' => 0,
-
 
1560
                        'returning_after_completed' => 0,
-
 
1561
                        'added_on' => '',
-
 
1562
                        'updated_on' => ''
-
 
1563
                        
-
 
1564
                ];
-
 
1565
                    
-
 
1566
                $items[ $user_id ] = $item;
-
 
1567
            }
-
 
1568
                
-
 
1569
                
-
 
1570
            $select->columns(['user_id', 'progress', 'total_slides', 'view_slides', 'completed', 'returning_after_completed', 'added_on', 'updated_on']);
-
 
1571
            $select->from(['tb1' => CompanyMicrolearningUserProgressMapper::_TABLE] );
-
 
1572
            $select->where->equalTo('tb1.company_id', $capsule->company_id);
-
 
1573
            $select->where->equalTo('tb1.type', CompanyMicrolearningUserProgress::TYPE_CAPSULE);
-
 
1574
            $select->where->equalTo('tb1.topic_id', $capsule->topic_id);
-
 
1575
            $select->where->equalTo('tb1.capsule_id', $capsule->id);
-
 
1576
            $select->where->in('tb1.user_id', $user_ids);
-
 
1577
                
-
 
1578
                
-
 
1579
            $records = $queryMapper->fetchAll($select);
-
 
1580
            foreach($records as $record)
-
 
1581
            {
-
 
1582
                $user_id = $record['user_id'];
-
 
1583
                    
-
 
1584
                $dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);
-
 
1585
                $added_on = $dt_added_on->format('d/m/Y h:i a');
-
 
1586
                    
-
 
1587
                $dt_updated_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['updated_on']);
-
 
1588
                $updated_on = $dt_updated_on->format('d/m/Y h:i a');
-
 
1589
                    
-
 
1590
                    
-
 
1591
                $items[$user_id]['completed'] = $record['completed'];
-
 
1592
                $items[$user_id]['progress'] = $record['progress'];
-
 
1593
                $items[$user_id]['total_slides'] = $record['total_slides'];
-
 
1594
                $items[$user_id]['view_slides'] = $record['view_slides'];
-
 
1595
                $items[$user_id]['returning_after_completed'] = $record['returning_after_completed'];
-
 
1596
                $items[$user_id]['added_on'] = $added_on;
-
 
1597
                $items[$user_id]['updated_on'] = $updated_on;
-
 
1598
            }
-
 
1599
                
-
 
1600
            
-
 
1601
            $records = array_values($items);
-
 
1602
            
-
 
1603
            $spreadsheet = new Spreadsheet();
-
 
1604
            $spreadsheet->getProperties()->setTitle("Progreso por Cápsula");
-
 
1605
            
-
 
1606
            
-
 
1607
            
-
 
1608
            $spreadsheet->setActiveSheetIndex(0);
-
 
1609
            $spreadsheet->getActiveSheet()->SetCellValue('A1', 'Tópico:');
-
 
1610
            $spreadsheet->getActiveSheet()->SetCellValue('A2', ucwords(trim(strtolower($topic->name))));
-
 
1611
            
-
 
1612
            $spreadsheet->getActiveSheet()->SetCellValue('B1', ucwords('Cápsula:'));
-
 
1613
            $spreadsheet->getActiveSheet()->SetCellValue('B2', ucwords(trim(strtolower($capsule->name))));
-
 
1614
            
-
 
1615
            
-
 
1616
            $spreadsheet->getActiveSheet()->SetCellValue('C1', 'Fecha:');
-
 
1617
            $spreadsheet->getActiveSheet()->SetCellValue('C2', date('d/m/Y h:i a'));
-
 
1618
            
-
 
1619
            
-
 
1620
 
-
 
1621
            $spreadsheet->getActiveSheet()->SetCellValue('A4', 'Nombre');
-
 
1622
            $spreadsheet->getActiveSheet()->SetCellValue('B4', 'Apellido');
-
 
1623
            $spreadsheet->getActiveSheet()->SetCellValue('C4', 'Correo electrónico');
-
 
1624
            $spreadsheet->getActiveSheet()->SetCellValue('D4', 'Progreso');
-
 
1625
            $spreadsheet->getActiveSheet()->SetCellValue('E4', 'Diapositivas Totales');
-
 
1626
            $spreadsheet->getActiveSheet()->SetCellValue('F4', 'Diapositivas Vistas');
-
 
1627
            $spreadsheet->getActiveSheet()->SetCellValue('G4', 'Cápsula Completada');
-
 
1628
            $spreadsheet->getActiveSheet()->SetCellValue('H4', 'Inicio');
-
 
1629
            $spreadsheet->getActiveSheet()->SetCellValue('I4', 'Ultima vez');
-
 
1630
 
-
 
1631
            
-
 
1632
            $i = 5;
-
 
1633
            foreach($records as $record)
-
 
1634
            {
-
 
1635
                $spreadsheet->getActiveSheet()->SetCellValue('A' . $i, ucwords(strtolower(trim($record['first_name']))));
-
 
1636
                $spreadsheet->getActiveSheet()->SetCellValue('B' . $i, ucwords(strtolower(trim($record['last_name']))));
-
 
1637
                $spreadsheet->getActiveSheet()->SetCellValue('C' . $i, strtolower(trim($record['email'])));
-
 
1638
                $spreadsheet->getActiveSheet()->SetCellValue('D' . $i, $record['progress']);
-
 
1639
                $spreadsheet->getActiveSheet()->SetCellValue('E' . $i, $record['total_slides']);
-
 
1640
                $spreadsheet->getActiveSheet()->SetCellValue('F' . $i, $record['view_slides']);
-
 
1641
                $spreadsheet->getActiveSheet()->SetCellValue('G' . $i, $record['completed'] == 1 ? 'Si' : 'No');
-
 
1642
                $spreadsheet->getActiveSheet()->SetCellValue('H' . $i, $record['added_on']);
-
 
1643
                $spreadsheet->getActiveSheet()->SetCellValue('I' . $i, $record['updated_on']);
-
 
1644
                $i++;
-
 
1645
            }
-
 
1646
 
-
 
1647
            
-
 
1648
            $fileName = 'reporte_progreso_por_capsula_' . time() . '.xls';
-
 
1649
            
-
 
1650
            $tempFilename = tempnam(sys_get_temp_dir(), 'reporte_progreso_por_capsula_' . time());
-
 
1651
            
-
 
1652
            
-
 
1653
           
-
 
1654
            
-
 
1655
            
-
 
1656
            $writer = IOFactory::createWriter($spreadsheet, 'Xls');
-
 
1657
            $writer->save($tempFilename);
-
 
1658
            
-
 
1659
            $content = file_get_contents($tempFilename);
-
 
1660
            @unlink($tempFilename);
-
 
1661
            
-
 
1662
            return new JsonModel([
-
 
1663
                'success' => true,
-
 
1664
                'data' => [
-
 
1665
                    'content' => base64_encode($content),
-
 
1666
                    'basename' => $fileName
-
 
1667
                    
-
 
1668
                ]
-
 
1669
            ]);
-
 
1670
            
-
 
1671
            
-
 
1672
            
-
 
1673
            
-
 
1674
        } else {
-
 
1675
            return new JsonModel([
-
 
1676
                'success' => false,
-
 
1677
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
-
 
1678
            ]);
-
 
1679
        }
-
 
1680
    }
Línea -... Línea 1681...
-
 
1681
   
-
 
1682
    
-
 
1683
    public function progressForTopicAction()
-
 
1684
    {
-
 
1685
        $currentUserPlugin = $this->plugin('currentUserPlugin');
-
 
1686
        $currentUser = $currentUserPlugin->getUser();
-
 
1687
        $currentCompany = $currentUserPlugin->getCompany();
-
 
1688
        
-
 
1689
        $request = $this->getRequest();
-
 
1690
        
-
 
1691
        if($request->isGet())
-
 
1692
        {
-
 
1693
            
-
 
1694
            $headers  = $request->getHeaders();
-
 
1695
            
-
 
1696
            $isJson = false;
-
 
1697
            if($headers->has('Accept')) {
-
 
1698
                $accept = $headers->get('Accept');
-
 
1699
                
-
 
1700
                $prioritized = $accept->getPrioritized();
-
 
1701
                
-
 
1702
                foreach($prioritized as $key => $value) {
-
 
1703
                    $raw = trim($value->getRaw());
-
 
1704
                    
-
 
1705
                    if(!$isJson) {
-
 
1706
                        $isJson = strpos($raw, 'json');
-
 
1707
                    }
-
 
1708
                    
-
 
1709
                }
-
 
1710
            }
-
 
1711
            
-
 
1712
            
-
 
1713
            if($isJson) {
-
 
1714
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
-
 
1715
                $allowDownload = $acl->isAllowed($currentUser->usertype_id, 'microlearning/reports/progress-for-topic/excel');
-
 
1716
                
-
 
1717
                $topic_uuid     = filter_var($this->params()->fromQuery('topic_uuid'), FILTER_SANITIZE_STRING);
-
 
1718
 
-
 
1719
                $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
-
 
1720
                $topic = $topicMapper->fetchOneByUuid($topic_uuid);
-
 
1721
                if(!$topic) {
-
 
1722
                    return new JsonModel([
-
 
1723
                        'success' => false,
-
 
1724
                        'data' => 'ERROR_TOPIC_NOT_FOUND'
-
 
1725
                    ]);
-
 
1726
                }
-
 
1727
                
-
 
1728
                if($topic->company_id != $currentCompany->id) {
-
 
1729
                    return new JsonModel([
-
 
1730
                        'success' => false,
-
 
1731
                        'data' => 'ERROR_UNAUTHORIZED'
-
 
1732
                    ]);
-
 
1733
                }
-
 
1734
                
-
 
1735
                
-
 
1736
                $data = [
-
 
1737
                    
-
 
1738
                    'items' => [],
-
 
1739
                    'link_download' => '',
-
 
1740
                    
-
 
1741
                ];
-
 
1742
                
-
 
1743
                
-
 
1744
                
-
 
1745
                $queryMapper = QueryMapper::getInstance($this->adapter);
-
 
1746
                $sql = $queryMapper->getSql();
-
 
1747
                $select = $sql->select();
-
 
1748
                $select->columns(['user_id' => new Expression('DISTINCT(user_id)') ]);
-
 
1749
                $select->from(['tb1' => CompanyMicrolearningCapsuleUserMapper::_TABLE] );
-
 
1750
                $select->join(['tb2' => UserMapper::_TABLE], 'tb1.user_id = tb2.id', ['uuid', 'first_name', 'last_name', 'email']);
-
 
1751
                $select->where->equalTo('tb1.company_id', $topic->company_id);
-
 
1752
                $select->where->equalTo('tb1.topic_id', $topic->id);
-
 
1753
                $select->where->equalTo('tb2.status', User::STATUS_ACTIVE);
-
 
1754
                $select->order('first_name ASC, last_name ASC');
-
 
1755
                
-
 
1756
                $user_ids = [];
-
 
1757
                $records = $queryMapper->fetchAll($select);
-
 
1758
                
-
 
1759
                foreach($records as $record)
-
 
1760
                {
-
 
1761
                    $user_id =  $record['user_id'];
-
 
1762
                    
-
 
1763
                    if(in_array($user_id, $user_ids)) {
-
 
1764
                        continue;
-
 
1765
                    }
-
 
1766
                    
-
 
1767
                    array_push($user_ids, $user_id);
-
 
1768
                    
-
 
1769
                    $item = [
-
 
1770
                        'uuid' => $record['uuid'],
-
 
1771
                        'first_name' => $record['first_name'],
-
 
1772
                        'last_name' => $record['last_name'],
-
 
1773
                        'email' => $record['email'],
-
 
1774
                        'progress' => 0,
-
 
1775
                        'total_capsules' => 0,
-
 
1776
                        'completed_capsules' => 0,
-
 
1777
                        'started_capsules' => 0,
-
 
1778
                        'pending_capsules' => 0,
-
 
1779
                        'added_on' => '',
-
 
1780
                        'updated_on' => ''
-
 
1781
                        
-
 
1782
                    ];
-
 
1783
                    
-
 
1784
                    $items[ $user_id ] = $item;
-
 
1785
                }
-
 
1786
                
-
 
1787
                $select = $sql->select();
-
 
1788
                $select->columns(['total' => new Expression('COUNT(*)'), 'user_id']);
-
 
1789
                $select->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);
-
 
1790
                $select->where->equalTo('company_id', $topic->company_id);
-
 
1791
                $select->where->equalTo('topic_id', $topic->id);
-
 
1792
                $select->group('user_id');
-
 
1793
                
-
 
1794
                $records = $queryMapper->fetchAll($select);
-
 
1795
                foreach($records as $record)
-
 
1796
                {
-
 
1797
                    $user_id = $record['user_id'];
-
 
1798
                    
-
 
1799
                    $items[$user_id]['total_capsules'] = $record['total'];
-
 
1800
                
-
 
1801
                }
-
 
1802
                
-
 
1803
                
-
 
1804
                $select = $sql->select();
-
 
1805
                $select->columns(['total' => new Expression('COUNT(*)'), 'user_id']);
-
 
1806
                $select->from(CompanyMicrolearningUserProgressMapper::_TABLE);
-
 
1807
                $select->where->equalTo('company_id', $topic->company_id);
-
 
1808
                $select->where->equalTo('topic_id', $topic->id);
-
 
1809
                $select->where->equalTo('type', CompanyMicrolearningUserProgress::TYPE_CAPSULE);
-
 
1810
                $select->where->greaterThanOrEqualTo('progress', 100);
-
 
1811
                $select->where->equalTo('completed', 1);
-
 
1812
                $select->group('user_id');
-
 
1813
                
-
 
1814
                //echo $select->getSqlString($this->adapter->platform); exit;
-
 
1815
 
-
 
1816
                
-
 
1817
                $records = $queryMapper->fetchAll($select);
-
 
1818
                foreach($records as $record)
-
 
1819
                {
-
 
1820
                    $user_id = $record['user_id'];
-
 
1821
                    
-
 
1822
                    $items[$user_id]['completed_capsules'] = $record['total'];
-
 
1823
                    
-
 
1824
                }
-
 
1825
                
-
 
1826
                
-
 
1827
                $select = $sql->select();
-
 
1828
                $select->columns(['total' => new Expression('COUNT(*)'), 'user_id']);
-
 
1829
                $select->from(CompanyMicrolearningUserProgressMapper::_TABLE);
-
 
1830
                $select->where->equalTo('company_id', $topic->company_id);
-
 
1831
                $select->where->equalTo('topic_id', $topic->id);
-
 
1832
                $select->where->equalTo('type', CompanyMicrolearningUserProgress::TYPE_CAPSULE);
-
 
1833
                $select->where->lessThan('progress', 100);
-
 
1834
                $select->where->equalTo('completed', 0);
-
 
1835
                $select->group('user_id');
-
 
1836
                
-
 
1837
                
-
 
1838
                $records = $queryMapper->fetchAll($select);
-
 
1839
                foreach($records as $record)
-
 
1840
                {
-
 
1841
                    $user_id = $record['user_id'];
-
 
1842
                    
-
 
1843
                    $items[$user_id]['started_capsules'] = $record['total'];
-
 
1844
                    
-
 
1845
                }
-
 
1846
                
-
 
1847
                $select = $sql->select();
-
 
1848
                $select->columns(['added_on' => new Expression('MIN(added_on)'), 'updated_on' => new Expression('MAX(updated_on)'), 'user_id']);
-
 
1849
                $select->from(CompanyMicrolearningUserProgressMapper::_TABLE);
-
 
1850
                $select->where->equalTo('company_id', $topic->company_id);
-
 
1851
                $select->where->equalTo('topic_id', $topic->id);
-
 
1852
                $select->where->equalTo('type', CompanyMicrolearningUserProgress::TYPE_CAPSULE);
-
 
1853
                $select->group('user_id');
-
 
1854
                
-
 
1855
                
-
 
1856
                $records = $queryMapper->fetchAll($select);
-
 
1857
                foreach($records as $record)
-
 
1858
                {
-
 
1859
                    $user_id = $record['user_id'];
-
 
1860
 
-
 
1861
                    
-
 
1862
                    $dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);
-
 
1863
                    $added_on = $dt_added_on->format('d/m/Y h:i a');
-
 
1864
                    
-
 
1865
                    $dt_updated_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['updated_on']);
-
 
1866
                    $updated_on = $dt_updated_on->format('d/m/Y h:i a');
-
 
1867
                    
-
 
1868
                    
-
 
1869
                    $items[$user_id]['added_on'] = $added_on;
-
 
1870
                    $items[$user_id]['updated_on'] = $updated_on;
-
 
1871
 
-
 
1872
                    if($items[$user_id]['completed_capsules']) {
-
 
1873
                        
-
 
1874
                        $progress = ($items[$user_id]['completed_capsules'] * 100) / $items[$user_id]['total_capsules'];
-
 
1875
                        
-
 
1876
                        $items[$user_id]['progress'] = number_format($progress, 2);
-
 
1877
                    }
-
 
1878
                }
-
 
1879
                
-
 
1880
                $data['items'] = array_values($items);
-
 
1881
                
-
 
1882
                if($allowDownload) {
-
 
1883
                    $data['link_download'] = $this->url()->fromRoute('microlearning/reports/progress-for-topic/excel', [], ['query' => ['topic_uuid' => $topic->uuid] ]);
-
 
1884
                }
-
 
1885
                
-
 
1886
                
-
 
1887
                
-
 
1888
                return new JsonModel([
-
 
1889
                    'success' => true,
-
 
1890
                    'data' => $data
-
 
1891
                ]);
-
 
1892
            } else {
-
 
1893
                
-
 
1894
                
-
 
1895
                $form = new TopicReportForm($this->adapter, $currentCompany->id);
-
 
1896
                
-
 
1897
                
-
 
1898
                
-
 
1899
                $this->layout()->setTemplate('layout/layout-backend');
-
 
1900
                $viewModel = new ViewModel();
-
 
1901
                $viewModel->setTemplate('leaders-linked/microlearning-reports/progress-for-topic.phtml');
-
 
1902
                $viewModel->setVariables([
-
 
1903
                    'form' => $form,
-
 
1904
                ]);
-
 
1905
                
-
 
1906
                return $viewModel ;
-
 
1907
            }
-
 
1908
            
-
 
1909
        } else {
-
 
1910
            return new JsonModel([
-
 
1911
                'success' => false,
-
 
1912
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
-
 
1913
            ]);
Línea -... Línea 1914...
-
 
1914
        }
-
 
1915
    }
-
 
1916
    
-
 
1917
    public function progressForTopicExcelAction()
-
 
1918
    {
-
 
1919
        $currentUserPlugin = $this->plugin('currentUserPlugin');
-
 
1920
        $currentUser = $currentUserPlugin->getUser();
-
 
1921
        $currentCompany = $currentUserPlugin->getCompany();
-
 
1922
        
-
 
1923
        $request = $this->getRequest();
-
 
1924
        
-
 
1925
        if($request->isGet())
-
 
1926
        {
-
 
1927
            
-
 
1928
            $topic_uuid     = filter_var($this->params()->fromQuery('topic_uuid'), FILTER_SANITIZE_STRING);
-
 
1929
            
-
 
1930
            $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
-
 
1931
            $topic = $topicMapper->fetchOneByUuid($topic_uuid);
-
 
1932
            if(!$topic) {
-
 
1933
                return new JsonModel([
-
 
1934
                    'success' => false,
-
 
1935
                    'data' => 'ERROR_TOPIC_NOT_FOUND'
-
 
1936
                ]);
-
 
1937
            }
-
 
1938
            
-
 
1939
            if($topic->company_id != $currentCompany->id) {
-
 
1940
                return new JsonModel([
-
 
1941
                    'success' => false,
-
 
1942
                    'data' => 'ERROR_UNAUTHORIZED'
-
 
1943
                ]);
-
 
1944
            }
-
 
1945
            
-
 
1946
            $queryMapper = QueryMapper::getInstance($this->adapter);
-
 
1947
            $sql = $queryMapper->getSql();
-
 
1948
            $select = $sql->select();
-
 
1949
            $select->columns(['user_id' => new Expression('DISTINCT(user_id)') ]);
-
 
1950
            $select->from(['tb1' => CompanyMicrolearningCapsuleUserMapper::_TABLE] );
-
 
1951
            $select->join(['tb2' => UserMapper::_TABLE], 'tb1.user_id = tb2.id', ['uuid', 'first_name', 'last_name', 'email']);
-
 
1952
            $select->where->equalTo('tb1.company_id', $topic->company_id);
-
 
1953
            $select->where->equalTo('tb1.topic_id', $topic->id);
-
 
1954
            $select->where->equalTo('tb2.status', User::STATUS_ACTIVE);
-
 
1955
            $select->order('first_name ASC, last_name ASC');
-
 
1956
            
-
 
1957
            $user_ids = [];
-
 
1958
            $records = $queryMapper->fetchAll($select);
-
 
1959
            
-
 
1960
            foreach($records as $record)
-
 
1961
            {
-
 
1962
                $user_id =  $record['user_id'];
-
 
1963
                
-
 
1964
                if(in_array($user_id, $user_ids)) {
-
 
1965
                    continue;
-
 
1966
                }
-
 
1967
                
-
 
1968
                array_push($user_ids, $user_id);
-
 
1969
                
-
 
1970
                $item = [
-
 
1971
                    'uuid' => $record['uuid'],
-
 
1972
                    'first_name' => $record['first_name'],
-
 
1973
                    'last_name' => $record['last_name'],
-
 
1974
                    'email' => $record['email'],
-
 
1975
                    'progress' => 0,
-
 
1976
                    'total_capsules' => 0,
-
 
1977
                    'completed_capsules' => 0,
-
 
1978
                    'started_capsules' => 0,
-
 
1979
                    'pending_capsules' => 0,
-
 
1980
                    'added_on' => '',
-
 
1981
                    'updated_on' => ''
-
 
1982
                    
-
 
1983
                ];
-
 
1984
                
-
 
1985
                $items[ $user_id ] = $item;
-
 
1986
            }
-
 
1987
            
-
 
1988
            $select = $sql->select();
-
 
1989
            $select->columns(['total' => new Expression('COUNT(*)'), 'user_id']);
-
 
1990
            $select->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);
-
 
1991
            $select->where->equalTo('company_id', $topic->company_id);
-
 
1992
            $select->where->equalTo('topic_id', $topic->id);
-
 
1993
            $select->group('user_id');
-
 
1994
            
-
 
1995
            $records = $queryMapper->fetchAll($select);
-
 
1996
            foreach($records as $record)
-
 
1997
            {
-
 
1998
                $user_id = $record['user_id'];
-
 
1999
                
-
 
2000
                $items[$user_id]['total_capsules'] = $record['total'];
-
 
2001
                
-
 
2002
            }
-
 
2003
            
-
 
2004
            
-
 
2005
            $select = $sql->select();
-
 
2006
            $select->columns(['total' => new Expression('COUNT(*)'), 'user_id']);
-
 
2007
            $select->from(CompanyMicrolearningUserProgressMapper::_TABLE);
-
 
2008
            $select->where->equalTo('company_id', $topic->company_id);
-
 
2009
            $select->where->equalTo('topic_id', $topic->id);
-
 
2010
            $select->where->equalTo('type', CompanyMicrolearningUserProgress::TYPE_CAPSULE);
-
 
2011
            $select->where->greaterThanOrEqualTo('progress', 100);
-
 
2012
            $select->where->equalTo('completed', 1);
-
 
2013
            $select->group('user_id');
-
 
2014
            
-
 
2015
            //echo $select->getSqlString($this->adapter->platform); exit;
-
 
2016
            
-
 
2017
            
-
 
2018
            $records = $queryMapper->fetchAll($select);
-
 
2019
            foreach($records as $record)
-
 
2020
            {
-
 
2021
                $user_id = $record['user_id'];
-
 
2022
                
-
 
2023
                $items[$user_id]['completed_capsules'] = $record['total'];
-
 
2024
                
-
 
2025
            }
-
 
2026
            
-
 
2027
            
-
 
2028
            $select = $sql->select();
-
 
2029
            $select->columns(['total' => new Expression('COUNT(*)'), 'user_id']);
-
 
2030
            $select->from(CompanyMicrolearningUserProgressMapper::_TABLE);
-
 
2031
            $select->where->equalTo('company_id', $topic->company_id);
-
 
2032
            $select->where->equalTo('topic_id', $topic->id);
-
 
2033
            $select->where->equalTo('type', CompanyMicrolearningUserProgress::TYPE_CAPSULE);
-
 
2034
            $select->where->lessThan('progress', 100);
-
 
2035
            $select->where->equalTo('completed', 0);
-
 
2036
            $select->group('user_id');
-
 
2037
            
-
 
2038
            
-
 
2039
            $records = $queryMapper->fetchAll($select);
-
 
2040
            foreach($records as $record)
-
 
2041
            {
-
 
2042
                $user_id = $record['user_id'];
-
 
2043
                
-
 
2044
                $items[$user_id]['started_capsules'] = $record['total'];
-
 
2045
                
-
 
2046
            }
-
 
2047
            
-
 
2048
            $select = $sql->select();
-
 
2049
            $select->columns(['added_on' => new Expression('MIN(added_on)'), 'updated_on' => new Expression('MAX(updated_on)'), 'user_id']);
-
 
2050
            $select->from(CompanyMicrolearningUserProgressMapper::_TABLE);
-
 
2051
            $select->where->equalTo('company_id', $topic->company_id);
-
 
2052
            $select->where->equalTo('topic_id', $topic->id);
-
 
2053
            $select->where->equalTo('type', CompanyMicrolearningUserProgress::TYPE_CAPSULE);
-
 
2054
            $select->group('user_id');
-
 
2055
            
-
 
2056
            
-
 
2057
            $records = $queryMapper->fetchAll($select);
-
 
2058
            foreach($records as $record)
-
 
2059
            {
-
 
2060
                $user_id = $record['user_id'];
-
 
2061
                
-
 
2062
                
-
 
2063
                $dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);
-
 
2064
                $added_on = $dt_added_on->format('d/m/Y h:i a');
-
 
2065
                
-
 
2066
                $dt_updated_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['updated_on']);
-
 
2067
                $updated_on = $dt_updated_on->format('d/m/Y h:i a');
-
 
2068
                
-
 
2069
                
-
 
2070
                $items[$user_id]['added_on'] = $added_on;
-
 
2071
                $items[$user_id]['updated_on'] = $updated_on;
-
 
2072
                
-
 
2073
                if($items[$user_id]['completed_capsules']) {
-
 
2074
                    
-
 
2075
                    $progress = ($items[$user_id]['completed_capsules'] * 100) / $items[$user_id]['total_capsules'];
-
 
2076
                    
-
 
2077
                    $items[$user_id]['progress'] = number_format($progress, 2);
-
 
2078
                }
-
 
2079
            }
-
 
2080
 
-
 
2081
            $records = array_values($items);
-
 
2082
            
-
 
2083
            $spreadsheet = new Spreadsheet();
-
 
2084
            $spreadsheet->getProperties()->setTitle("Progreso por Tópico");
-
 
2085
            
-
 
2086
            
-
 
2087
            
-
 
2088
            $spreadsheet->setActiveSheetIndex(0);
-
 
2089
            $spreadsheet->getActiveSheet()->SetCellValue('A1', 'Tópico:');
-
 
2090
            $spreadsheet->getActiveSheet()->SetCellValue('A2', ucwords(trim(strtolower($topic->name))));
-
 
2091
            
-
 
2092
 
-
 
2093
            
-
 
2094
            $spreadsheet->getActiveSheet()->SetCellValue('B1', 'Fecha:');
-
 
2095
            $spreadsheet->getActiveSheet()->SetCellValue('N2', date('d/m/Y h:i a'));
-
 
2096
            
-
 
2097
            
-
 
2098
            
-
 
2099
            $spreadsheet->getActiveSheet()->SetCellValue('A4', 'Nombre');
-
 
2100
            $spreadsheet->getActiveSheet()->SetCellValue('B4', 'Apellido');
-
 
2101
            $spreadsheet->getActiveSheet()->SetCellValue('C4', 'Correo electrónico');
-
 
2102
            $spreadsheet->getActiveSheet()->SetCellValue('D4', 'Progreso');
-
 
2103
            $spreadsheet->getActiveSheet()->SetCellValue('E4', 'Capsulas Totales');
-
 
2104
            $spreadsheet->getActiveSheet()->SetCellValue('F4', 'Capsulas Completadas');
-
 
2105
            $spreadsheet->getActiveSheet()->SetCellValue('G4', 'Capsulas en Progreso');
-
 
2106
            $spreadsheet->getActiveSheet()->SetCellValue('H4', 'Capsulas sin Iniciar');
-
 
2107
            $spreadsheet->getActiveSheet()->SetCellValue('I4', 'Inicio');
-
 
2108
            $spreadsheet->getActiveSheet()->SetCellValue('J4', 'Ultima vez');
-
 
2109
            
-
 
2110
            $i = 5;
-
 
2111
            foreach($records as $record)
-
 
2112
            {
-
 
2113
                $spreadsheet->getActiveSheet()->SetCellValue('A' . $i, ucwords(strtolower(trim($record['first_name']))));
-
 
2114
                $spreadsheet->getActiveSheet()->SetCellValue('B' . $i, ucwords(strtolower(trim($record['last_name']))));
-
 
2115
                $spreadsheet->getActiveSheet()->SetCellValue('C' . $i, strtolower(trim($record['email'])));
-
 
2116
                $spreadsheet->getActiveSheet()->SetCellValue('D' . $i, $record['progress']);
-
 
2117
                $spreadsheet->getActiveSheet()->SetCellValue('E' . $i, $record['total_capsules']);
-
 
2118
                $spreadsheet->getActiveSheet()->SetCellValue('F' . $i, $record['completed_capsules']);
-
 
2119
                $spreadsheet->getActiveSheet()->SetCellValue('G' . $i, $record['started_capsules']);
-
 
2120
                $spreadsheet->getActiveSheet()->SetCellValue('H' . $i, $record['pending_capsules']);
-
 
2121
                $spreadsheet->getActiveSheet()->SetCellValue('I' . $i, $record['added_on']);
-
 
2122
                $spreadsheet->getActiveSheet()->SetCellValue('J' . $i, $record['updated_on']);
-
 
2123
                $i++;
-
 
2124
            }
-
 
2125
            
-
 
2126
            
-
 
2127
            $fileName = 'reporte_progreso_por_topico_' . time() . '.xls';
-
 
2128
            
-
 
2129
            $tempFilename = tempnam(sys_get_temp_dir(), 'reporte_progreso_por_topico_' . time());
-
 
2130
            
-
 
2131
            
-
 
2132
            
-
 
2133
            
-
 
2134
            
-
 
2135
            $writer = IOFactory::createWriter($spreadsheet, 'Xls');
-
 
2136
            $writer->save($tempFilename);
-
 
2137
            
-
 
2138
            $content = file_get_contents($tempFilename);
-
 
2139
            @unlink($tempFilename);
-
 
2140
            
-
 
2141
            return new JsonModel([
-
 
2142
                'success' => true,
-
 
2143
                'data' => [
-
 
2144
                    'content' => base64_encode($content),
-
 
2145
                    'basename' => $fileName
-
 
2146
                    
-
 
2147
                ]
-
 
2148
            ]);
-
 
2149
            
-
 
2150
            
-
 
2151
            
-
 
2152
            
-
 
2153
        } else {
-
 
2154
            return new JsonModel([
-
 
2155
                'success' => false,
-
 
2156
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
Línea -... Línea 2157...
-
 
2157
            ]);
-
 
2158
        }
-
 
2159
    }
-
 
2160
    
-
 
2161
    
-
 
2162
    public function progressForStudentAction()
-
 
2163
    {
-
 
2164
        $currentUserPlugin = $this->plugin('currentUserPlugin');
-
 
2165
        $currentUser = $currentUserPlugin->getUser();
-
 
2166
        $currentCompany = $currentUserPlugin->getCompany();
-
 
2167
        
-
 
2168
        $request = $this->getRequest();
-
 
2169
        
-
 
2170
        if($request->isGet())
-
 
2171
        {
-
 
2172
            
-
 
2173
            $headers  = $request->getHeaders();
-
 
2174
            
-
 
2175
            $isJson = false;
-
 
2176
            if($headers->has('Accept')) {
-
 
2177
                $accept = $headers->get('Accept');
-
 
2178
                
-
 
2179
                $prioritized = $accept->getPrioritized();
-
 
2180
                
-
 
2181
                foreach($prioritized as $key => $value) {
-
 
2182
                    $raw = trim($value->getRaw());
-
 
2183
                    
-
 
2184
                    if(!$isJson) {
-
 
2185
                        $isJson = strpos($raw, 'json');
-
 
2186
                    }
-
 
2187
                    
-
 
2188
                }
-
 
2189
            }
-
 
2190
            
-
 
2191
            
-
 
2192
            if($isJson) {
-
 
2193
                
-
 
2194
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
-
 
2195
                $allowDownload = $acl->isAllowed($currentUser->usertype_id, 'microlearning/reports/progress-for-student/excel');
-
 
2196
 
-
 
2197
                $student_uuid     = filter_var($this->params()->fromQuery('student_uuid'), FILTER_SANITIZE_STRING);
-
 
2198
                
-
 
2199
                $userMapper = UserMapper::getInstance($this->adapter);
-
 
2200
                $user = $userMapper->fetchOneByUuidAndNetworkId($student_uuid, $currentUser->network_id);
-
 
2201
                
-
 
2202
                
-
 
2203
                if(!$user) {
-
 
2204
                    return new JsonModel([
-
 
2205
                        'success' => false,
-
 
2206
                        'data' => 'ERROR_USER_NOT_FOUND'
-
 
2207
                    ]);
-
 
2208
                }
-
 
2209
                
-
 
2210
                
-
 
2211
                $companyMicrolearningCapsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
-
 
2212
                $count = $companyMicrolearningCapsuleUserMapper->fetchCountByCompanyIdAndUserId($currentCompany->id, $user->id);
-
 
2213
                
-
 
2214
 
-
 
2215
                if(!$count) {
-
 
2216
                    return new JsonModel([
-
 
2217
                        'success' => false,
-
 
2218
                        'data' => 'ERROR_UNAUTHORIZED'
-
 
2219
                    ]);
-
 
2220
                }
-
 
2221
                
-
 
2222
                
-
 
2223
                $data = [
-
 
2224
                    'items' => [],
-
 
2225
                ];
-
 
2226
                
-
 
2227
                
-
 
2228
                
-
 
2229
 
-
 
2230
                
-
 
2231
                
-
 
2232
                
-
 
2233
                $queryMapper = QueryMapper::getInstance($this->adapter);
-
 
2234
                $sql = $queryMapper->getSql();
-
 
2235
                $select = $sql->select();
-
 
2236
                $select->columns(['access', 'paid_from', 'paid_to' ]);
-
 
2237
                $select->from(['tb1' => CompanyMicrolearningCapsuleUserMapper::_TABLE] );
-
 
2238
                $select->join(['tb2' => CompanyMicrolearningTopicMapper::_TABLE], 'tb1.company_id = tb2.company_id AND tb1.topic_id = tb2.id', ['topic' => 'name']);
-
 
2239
                $select->join(['tb3' => CompanyMicrolearningCapsuleMapper::_TABLE], 'tb1.company_id = tb3.company_id AND tb1.topic_id = tb3.topic_id AND tb1.capsule_id = tb3.id', ['capsule' => 'name']);
-
 
2240
                $select->join(['tb4' => CompanyMicrolearningUserProgressMapper::_TABLE], 
-
 
2241
                    'tb1.company_id = tb2.company_id AND tb1.topic_id = tb4.topic_id AND tb1.capsule_id = tb4.capsule_id AND tb1.user_id = tb4.user_id', 
-
 
2242
                    ['progress', 'total_slides' , 'view_slides', 'completed', 'added_on','updated_on'], Select::JOIN_RIGHT_OUTER);
-
 
2243
                $select->where->equalTo('tb1.company_id', $currentCompany->id);
-
 
2244
                $select->where->equalTo('tb1.user_id', $user->id);
-
 
2245
                $select->where->equalTo('tb4.type', CompanyMicrolearningUserProgress::TYPE_CAPSULE);
-
 
2246
                $select->order('tb2.name ASC, tb3.name ASC');
-
 
2247
                
-
 
2248
 
-
 
2249
                $items = [];
-
 
2250
                $records = $queryMapper->fetchAll($select);
-
 
2251
                foreach($records as $record)
-
 
2252
                {
-
 
2253
                    
-
 
2254
    
-
 
2255
                    
-
 
2256
                    $item = [
-
 
2257
                        'topic' => $record['topic'],
-
 
2258
                        'capsule' => $record['capsule'],
-
 
2259
                        'progress' => $record['progress'],
-
 
2260
                        'total_slides' => $record['total_slides'],
-
 
2261
                        'view_slides' => $record['view_slides'],
-
 
2262
                        'completed' => $record['completed'],
-
 
2263
                        'added_on' => $record['added_on'],
-
 
2264
                        'updated_on' => $record['updated_on'],
-
 
2265
                        
-
 
2266
                    ];
-
 
2267
                    
-
 
2268
                    array_push($items, $item);
-
 
2269
                }
-
 
2270
                
-
 
2271
              
-
 
2272
                $data['items'] = array_values($items);
-
 
2273
                
-
 
2274
                if($allowDownload) {
-
 
2275
                    $data['link_download'] = $this->url()->fromRoute('microlearning/reports/progress-for-student/excel', [], ['query' => ['student_uuid' => $user->uuid] ]);
-
 
2276
                }
-
 
2277
                
-
 
2278
                
-
 
2279
                
-
 
2280
                return new JsonModel([
-
 
2281
                    'success' => true,
-
 
2282
                    'data' => $data
-
 
2283
                ]);
-
 
2284
            } else {
-
 
2285
                
-
 
2286
                
-
 
2287
                $form = new StudentReportForm($this->adapter, $currentCompany->id);
-
 
2288
                
-
 
2289
                
-
 
2290
                
-
 
2291
                $this->layout()->setTemplate('layout/layout-backend');
-
 
2292
                $viewModel = new ViewModel();
-
 
2293
                $viewModel->setTemplate('leaders-linked/microlearning-reports/progress-for-student.phtml');
-
 
2294
                $viewModel->setVariables([
-
 
2295
                    'form' => $form,
-
 
2296
                ]);
-
 
2297
                
-
 
2298
                return $viewModel ;
-
 
2299
            }
-
 
2300
            
-
 
2301
        } else {
-
 
2302
            return new JsonModel([
-
 
2303
                'success' => false,
1426
    
2304
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
-
 
2305
            ]);
-
 
2306
        }
-
 
2307
    }
-
 
2308
    
-
 
2309
    public function progressForStudentExcelAction()
-
 
2310
    {
-
 
2311
        $currentUserPlugin = $this->plugin('currentUserPlugin');
-
 
2312
        $currentUser = $currentUserPlugin->getUser();
-
 
2313
        $currentCompany = $currentUserPlugin->getCompany();
-
 
2314
        
-
 
2315
        $request = $this->getRequest();
-
 
2316
        
-
 
2317
        if($request->isGet())
-
 
2318
        {
-
 
2319
            
-
 
2320
            $student_uuid     = filter_var($this->params()->fromQuery('student_uuid'), FILTER_SANITIZE_STRING);
-
 
2321
            
-
 
2322
            $userMapper = UserMapper::getInstance($this->adapter);
-
 
2323
            $user = $userMapper->fetchOneByUuidAndNetworkId($student_uuid, $currentUser->network_id);
-
 
2324
            
-
 
2325
            
-
 
2326
            if(!$user) {
-
 
2327
                return new JsonModel([
-
 
2328
                    'success' => false,
-
 
2329
                    'data' => 'ERROR_USER_NOT_FOUND'
-
 
2330
                ]);
-
 
2331
            }
-
 
2332
            
-
 
2333
            $companyMicrolearningCapsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
-
 
2334
            $count = $companyMicrolearningCapsuleUserMapper->fetchCountByCompanyIdAndUserId($currentCompany->id, $user->id);
-
 
2335
            
-
 
2336
            
-
 
2337
            if(!$count) {
-
 
2338
                return new JsonModel([
-
 
2339
                    'success' => false,
-
 
2340
                    'data' => 'ERROR_UNAUTHORIZED'
-
 
2341
                ]);
-
 
2342
            }
-
 
2343
            
-
 
2344
 
-
 
2345
            
-
 
2346
            
-
 
2347
            $queryMapper = QueryMapper::getInstance($this->adapter);
-
 
2348
            $sql = $queryMapper->getSql();
-
 
2349
            $select = $sql->select();
-
 
2350
            $select->columns(['access', 'paid_from', 'paid_to' ]);
-
 
2351
            $select->from(['tb1' => CompanyMicrolearningCapsuleUserMapper::_TABLE] );
-
 
2352
            $select->join(['tb2' => CompanyMicrolearningTopicMapper::_TABLE], 'tb1.company_id = tb2.company_id AND tb1.topic_id = tb2.id', ['topic' => 'name']);
-
 
2353
            $select->join(['tb3' => CompanyMicrolearningCapsuleMapper::_TABLE], 'tb1.company_id = tb3.company_id AND tb1.topic_id = tb3.topic_id AND tb1.capsule_id = tb3.id', ['capsule' => 'name']);
-
 
2354
            $select->join(['tb4' => CompanyMicrolearningUserProgressMapper::_TABLE],
-
 
2355
                'tb1.company_id = tb2.company_id AND tb1.topic_id = tb4.topic_id AND tb1.capsule_id = tb4.capsule_id AND tb1.user_id = tb4.user_id',
-
 
2356
                ['progress', 'total_slides' , 'view_slides', 'completed', 'added_on','updated_on'], Select::JOIN_RIGHT_OUTER);
-
 
2357
            $select->where->equalTo('tb1.company_id', $currentCompany->id);
-
 
2358
            $select->where->equalTo('tb1.user_id', $user->id);
-
 
2359
            $select->where->equalTo('tb4.type', CompanyMicrolearningUserProgress::TYPE_CAPSULE);
-
 
2360
            $select->order('tb2.name ASC, tb3.name ASC');
-
 
2361
            
-
 
2362
            
-
 
2363
            $items = [];
-
 
2364
            $records = $queryMapper->fetchAll($select);
-
 
2365
            foreach($records as $record)
-
 
2366
            {
-
 
2367
                
-
 
2368
                
-
 
2369
                $item = [
-
 
2370
                    'topic' => $record['topic'],
-
 
2371
                    'capsule' => $record['capsule'],
-
 
2372
                    'progress' => $record['progress'],
-
 
2373
                    'total_slides' => $record['total_slides'],
-
 
2374
                    'view_slides' => $record['view_slides'],
-
 
2375
                    'completed' => $record['completed'],
-
 
2376
                    'added_on' => $record['added_on'],
-
 
2377
                    'updated_on' => $record['updated_on'],
-
 
2378
                    
-
 
2379
                ];
-
 
2380
                
-
 
2381
                array_push($items, $item);
-
 
2382
            }
-
 
2383
            
-
 
2384
            $records = $items;
-
 
2385
            
-
 
2386
            
-
 
2387
            $spreadsheet = new Spreadsheet();
-
 
2388
            $spreadsheet->getProperties()->setTitle("Progreso por Tópico");
-
 
2389
            
-
 
2390
            
-
 
2391
            
-
 
2392
            $spreadsheet->setActiveSheetIndex(0);
-
 
2393
            $spreadsheet->getActiveSheet()->SetCellValue('A1', 'Nombre:');
-
 
2394
            $spreadsheet->getActiveSheet()->SetCellValue('A2', ucwords(trim(strtolower($user->first_name))));
-
 
2395
            $spreadsheet->getActiveSheet()->SetCellValue('B1', 'Apellido:');
-
 
2396
            $spreadsheet->getActiveSheet()->SetCellValue('B2', ucwords(trim(strtolower($user->last_name))));
-
 
2397
            $spreadsheet->getActiveSheet()->SetCellValue('C1', 'Correo electrónco:');
-
 
2398
            $spreadsheet->getActiveSheet()->SetCellValue('C2', trim(strtolower($user->email)));
-
 
2399
            $spreadsheet->getActiveSheet()->SetCellValue('D1', 'Fecha:');
-
 
2400
            $spreadsheet->getActiveSheet()->SetCellValue('D2', date('d/m/Y h:i a'));
-
 
2401
            
-
 
2402
            
-
 
2403
            
-
 
2404
            $spreadsheet->getActiveSheet()->SetCellValue('A4', 'Tópico');
-
 
2405
            $spreadsheet->getActiveSheet()->SetCellValue('B4', 'Cápsula');
-
 
2406
            $spreadsheet->getActiveSheet()->SetCellValue('C4', 'Progreso');
-
 
2407
            $spreadsheet->getActiveSheet()->SetCellValue('D4', 'Diapositivas Totales');
-
 
2408
            $spreadsheet->getActiveSheet()->SetCellValue('E4', 'Diapositivas Vistas');
-
 
2409
            $spreadsheet->getActiveSheet()->SetCellValue('F4', 'Cápsula Completada');
-
 
2410
            $spreadsheet->getActiveSheet()->SetCellValue('G4', 'Inicio');
-
 
2411
            $spreadsheet->getActiveSheet()->SetCellValue('H4', 'Ultima vez');
-
 
2412
            
-
 
2413
            $i = 5;
-
 
2414
            foreach($records as $record)
-
 
2415
            {
-
 
2416
                $spreadsheet->getActiveSheet()->SetCellValue('A' . $i, ucwords(strtolower(trim($record['topic']))));
-
 
2417
                $spreadsheet->getActiveSheet()->SetCellValue('B' . $i, ucwords(strtolower(trim($record['capsule']))));
-
 
2418
                $spreadsheet->getActiveSheet()->SetCellValue('C' . $i, $record['progress']);
-
 
2419
                $spreadsheet->getActiveSheet()->SetCellValue('D' . $i, $record['total_slides']);
-
 
2420
                $spreadsheet->getActiveSheet()->SetCellValue('E' . $i, $record['view_slides']);
-
 
2421
                $spreadsheet->getActiveSheet()->SetCellValue('F' . $i, $record['completed'] == 1 ? 'Si' : 'No');
-
 
2422
                $spreadsheet->getActiveSheet()->SetCellValue('G' . $i, $record['added_on']);
-
 
2423
                $spreadsheet->getActiveSheet()->SetCellValue('H' . $i, $record['updated_on']);
-
 
2424
                $i++;
-
 
2425
            }
-
 
2426
 
-
 
2427
            
-
 
2428
            $fileName = 'reporte_progreso_por_estudiante_' . time() . '.xls';
-
 
2429
            
-
 
2430
            $tempFilename = tempnam(sys_get_temp_dir(), 'reporte_progreso_por_estudiante_' . time());
-
 
2431
            
-
 
2432
            
-
 
2433
            
-
 
2434
            
-
 
2435
            
-
 
2436
            $writer = IOFactory::createWriter($spreadsheet, 'Xls');
-
 
2437
            $writer->save($tempFilename);
-
 
2438
            
-
 
2439
            $content = file_get_contents($tempFilename);
-
 
2440
            @unlink($tempFilename);
-
 
2441
            
-
 
2442
            return new JsonModel([
-
 
2443
                'success' => true,
-
 
2444
                'data' => [
-
 
2445
                    'content' => base64_encode($content),
-
 
2446
                    'basename' => $fileName
-
 
2447
                    
-
 
2448
                ]
-
 
2449
            ]);
-
 
2450
            
-
 
2451
            
-
 
2452
            
-
 
2453
            
-
 
2454
        } else {
-
 
2455
            return new JsonModel([
-
 
2456
                'success' => false,
-
 
2457
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
-
 
2458
            ]);
1427
    
2459
        }
1428
    
2460
    }