Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 17344 | Rev 17347 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 www 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Db\Adapter\AdapterInterface;
16768 efrain 7
 
1 www 8
use Laminas\Mvc\Controller\AbstractActionController;
9
use Laminas\Log\LoggerInterface;
10
use Laminas\View\Model\ViewModel;
11
use Laminas\View\Model\JsonModel;
17345 stevensc 12
use LeadersLinked\Form\Microlearning\ExtendUserMicrolearningForm;
1 www 13
use LeadersLinked\Mapper\QueryMapper;
14
use LeadersLinked\Mapper\UserMapper;
15
use Laminas\Db\Sql\Expression;
17002 efrain 16
use LeadersLinked\Mapper\MicrolearningCapsuleUserMapper;
17
use LeadersLinked\Model\MicrolearningCapsuleUser;
18
use LeadersLinked\Mapper\MicrolearningCapsuleMapper;
19
use LeadersLinked\Mapper\MicrolearningUserProgressMapper;
20
use LeadersLinked\Mapper\MicrolearningSlideMapper;
21
use LeadersLinked\Mapper\MicrolearningUserLogMapper;
1 www 22
use Google\Service\Classroom\Student;
17002 efrain 23
use LeadersLinked\Mapper\MicrolearningExtendUserCompanyMapper;
24
use LeadersLinked\Mapper\MicrolearningExtendUserFunctionMapper;
25
use LeadersLinked\Mapper\MicrolearningExtendUserGroupMapper;
26
use LeadersLinked\Mapper\MicrolearningExtendUserInstitutionMapper;
27
use LeadersLinked\Mapper\MicrolearningExtendUserProgramMapper;
28
use LeadersLinked\Mapper\MicrolearningExtendUserPartnerMapper;
29
use LeadersLinked\Mapper\MicrolearningExtendUserSectorMapper;
30
use LeadersLinked\Mapper\MicrolearningExtendUserStudentTypeMapper;
31
use LeadersLinked\Mapper\MicrolearningExtendUserMapper;
32
use LeadersLinked\Mapper\MicrolearningTopicMapper;
2 efrain 33
use LeadersLinked\Mapper\DeviceMapper;
187 efrain 34
use LeadersLinked\Form\TopicCapsuleForm;
17002 efrain 35
use LeadersLinked\Mapper\MicrolearningCapsuleCommentMapper;
187 efrain 36
use Laminas\Hydrator\ArraySerializableHydrator;
37
use Laminas\Db\ResultSet\HydratingResultSet;
38
use Laminas\Paginator\Adapter\DbSelect;
39
use Laminas\Paginator\Paginator;
17002 efrain 40
use LeadersLinked\Model\MicrolearningUserProgress;
15386 efrain 41
use PhpOffice\PhpSpreadsheet\IOFactory;
42
use PhpOffice\PhpSpreadsheet\Spreadsheet;
43
use LeadersLinked\Model\User;
17343 stevensc 44
use LeadersLinked\Form\Microlearning\TopicReportForm as MicrolearningTopicReportForm;
15386 efrain 45
use LeadersLinked\Form\StudentReportForm;
16766 efrain 46
use LeadersLinked\Library\Functions;
1 www 47
 
48
 
15386 efrain 49
 
1 www 50
class MicrolearningReportsController extends AbstractActionController
51
{
52
    /**
53
     *
16769 efrain 54
     * @var \Laminas\Db\Adapter\AdapterInterface
1 www 55
     */
56
    private $adapter;
57
 
58
    /**
59
     *
16769 efrain 60
     * @var \LeadersLinked\Cache\CacheInterface
1 www 61
     */
16769 efrain 62
    private $cache;
63
 
64
 
65
    /**
66
     *
67
     * @var \Laminas\Log\LoggerInterface
68
     */
16768 efrain 69
    private $logger;
1 www 70
 
71
    /**
72
     *
16768 efrain 73
     * @var array
1 www 74
     */
16768 efrain 75
    private $config;
1 www 76
 
16769 efrain 77
 
1 www 78
    /**
79
     *
16769 efrain 80
     * @var \Laminas\Mvc\I18n\Translator
81
     */
82
    private $translator;
83
 
84
 
85
    /**
86
     *
87
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
88
     * @param \LeadersLinked\Cache\CacheInterface $cache
89
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
1 www 90
     * @param array $config
16769 efrain 91
     * @param \Laminas\Mvc\I18n\Translator $translator
1 www 92
     */
16769 efrain 93
    public function __construct($adapter, $cache, $logger, $config, $translator)
1 www 94
    {
16769 efrain 95
        $this->adapter      = $adapter;
96
        $this->cache        = $cache;
97
        $this->logger       = $logger;
98
        $this->config       = $config;
99
        $this->translator   = $translator;
1 www 100
    }
101
 
2 efrain 102
 
103
    public function indexAction()
104
    {
105
 
106
        $this->layout()->setTemplate('layout/layout-backend.phtml');
107
        $viewModel = new ViewModel();
108
        $viewModel->setTemplate('leaders-linked/microlearning-reports/index.phtml');
109
        return $viewModel ;
110
    }
111
 
1 www 112
 
113
    public function overviewAction()
114
    {
115
 
116
 
117
        $currentUserPlugin = $this->plugin('currentUserPlugin');
118
        $currentUser = $currentUserPlugin->getUser();
119
        $currentCompany = $currentUserPlugin->getCompany();
120
 
121
 
122
        $request = $this->getRequest();
123
        if($request->isGet()) {
124
            $reportsLastWeek = [];
125
            $reportsCapsuleResume = [];
126
            $reportsStudentsTotal = [];
127
 
17002 efrain 128
            $microlearningExtendUserCompanyMapper = MicrolearningExtendUserCompanyMapper::getInstance($this->adapter);
129
            $extendCompanies = $microlearningExtendUserCompanyMapper->fetchAllByCompanyId($currentCompany->id);
1 www 130
 
131
            foreach($extendCompanies as $extendCompany)
132
            {
133
                $reportsLastWeek['companies'][$extendCompany->id] = [
134
                    'name' => $extendCompany->name,
135
                    'total' => 0,
136
                    'value' => 0
137
                ] ;
138
 
139
                $reportsCapsuleResume['companies'][$extendCompany->id] = [
140
                    'name' => $extendCompany->name,
141
                    'total' => 0,
142
                    'value' => 0
143
                ] ;
144
 
145
                $reportsStudentsTotal['companies'][$extendCompany->id] = [
146
                    'name' => $extendCompany->name,
147
                    'total' => 0,
148
                ] ;
149
            }
150
 
151
 
17002 efrain 152
            $microlearningExtendUserFunctionMapper = MicrolearningExtendUserFunctionMapper::getInstance($this->adapter);
153
            $extendFunctions = $microlearningExtendUserFunctionMapper->fetchAllByCompanyId($currentCompany->id);
1 www 154
 
155
            foreach($extendFunctions as $extendFunction)
156
            {
157
                $reportsLastWeek['functions'][$extendFunction->id] = [
158
                    'name' => $extendFunction->name,
159
                    'total' => 0,
160
                    'value' => 0
161
                ] ;
162
 
163
                $reportsCapsuleResume['functions'][$extendFunction->id] = [
164
                    'name' => $extendFunction->name,
165
                    'total' => 0,
166
                    'value' => 0
167
                ] ;
168
 
169
                $reportsStudentsTotal['functions'][$extendFunction->id] = [
170
                    'name' => $extendFunction->name,
171
                    'total' => 0,
172
                ] ;
173
            }
174
 
17002 efrain 175
            $microlearningExtendUserGroupMapper = MicrolearningExtendUserGroupMapper::getInstance($this->adapter);
176
            $extendGroups = $microlearningExtendUserGroupMapper->fetchAllByCompanyId($currentCompany->id);
1 www 177
 
178
            foreach($extendGroups as $extendGroup)
179
            {
180
                $reportsLastWeek['groups'][$extendGroup->id] = [
181
                    'name' => $extendGroup->name,
182
                    'total' => 0,
183
                    'value' => 0
184
                ];
185
 
186
                $reportsCapsuleResume['groups'][$extendGroup->id] = [
187
                    'name' => $extendFunction->name,
188
                    'total' => 0,
189
                    'value' => 0
190
                ] ;
191
 
192
                $reportsStudentsTotal['groups'][$extendGroup->id] = [
193
                    'name' => $extendGroup->name,
194
                    'total' => 0,
195
                ];
196
 
197
 
198
            }
199
 
200
 
17002 efrain 201
            $microlearningExtendUserInstitutionMapper = MicrolearningExtendUserInstitutionMapper::getInstance($this->adapter);
202
            $extendInstitutions = $microlearningExtendUserInstitutionMapper->fetchAllByCompanyId($currentCompany->id);
1 www 203
 
204
            foreach($extendInstitutions as $extendInstitution)
205
            {
206
                $reportsLastWeek['institutions'][$extendInstitution->id] = [
207
                    'name' => $extendInstitution->name,
208
                    'total' => 0,
209
                    'value' => 0
210
                ] ;
211
 
212
                $reportsCapsuleResume['institutions'][$extendInstitution->id] = [
213
                    'name' => $extendInstitution->name,
214
                    'total' => 0,
215
                    'value' => 0
216
                ] ;
217
 
218
                $reportsStudentsTotal['institutions'][$extendInstitution->id] = [
219
                    'name' => $extendInstitution->name,
220
                    'total' => 0,
221
                ] ;
222
            }
223
 
224
 
17002 efrain 225
            $microlearningExtendUserProgramMapper = MicrolearningExtendUserProgramMapper::getInstance($this->adapter);
226
            $extendPrograms = $microlearningExtendUserProgramMapper->fetchAllByCompanyId($currentCompany->id);
1 www 227
 
228
            foreach($extendPrograms as $extendProgram)
229
            {
230
                $reportsLastWeek['programs'][$extendProgram->id] = [
231
                    'name' => $extendProgram->name,
232
                    'total' => 0,
233
                    'value' => 0
234
                ] ;
235
 
236
                $reportsCapsuleResume['programs'][$extendProgram->id] = [
237
                    'name' => $extendProgram->name,
238
                    'total' => 0,
239
                    'value' => 0
240
                ] ;
241
 
242
                $reportsStudentsTotal['programs'][$extendProgram->id] = [
243
                    'name' => $extendProgram->name,
244
                    'total' => 0,
245
 
246
                ] ;
247
            }
248
 
249
 
17002 efrain 250
            $microlearningExtendUserPartnerMapper = MicrolearningExtendUserPartnerMapper::getInstance($this->adapter);
251
            $extendPartners = $microlearningExtendUserPartnerMapper->fetchAllByCompanyId($currentCompany->id);
1 www 252
 
253
            foreach($extendPartners as $extendPartner)
254
            {
255
                $reportsLastWeek['partners'][$extendPartner->id] = [
256
                    'name' => $extendPartner->name,
257
                    'total' => 0,
258
                    'value' => 0
259
                ] ;
260
 
261
                $reportsCapsuleResume['partners'][$extendPartner->id] = [
262
                    'name' => $extendPartner->name,
263
                    'total' => 0,
264
                    'value' => 0
265
                ] ;
266
 
267
                $reportsStudentsTotal['partners'][$extendPartner->id] = [
268
                    'name' => $extendPartner->name,
269
                    'total' => 0,
270
                ] ;
271
            }
272
 
273
 
17002 efrain 274
            $microlearningExtendUserSectorMapper = MicrolearningExtendUserSectorMapper::getInstance($this->adapter);
275
            $extendSectors = $microlearningExtendUserSectorMapper->fetchAllByCompanyId($currentCompany->id);
1 www 276
 
277
            foreach($extendSectors as $extendSector)
278
            {
279
                $reportsLastWeek['sectors'][$extendSector->id] = [
280
                    'name' => $extendSector->name,
281
                    'total' => 0,
282
                    'value' => 0
283
                ] ;
284
 
285
                $reportsCapsuleResume['sectors'][$extendSector->id] = [
286
                    'name' => $extendSector->name,
287
                    'total' => 0,
288
                    'value' => 0
289
                ] ;
290
 
291
                $reportsStudentsTotal['sectors'][$extendSector->id] = [
292
                    'name' => $extendSector->name,
293
                    'total' => 0,
294
                ] ;
295
            }
296
 
17002 efrain 297
            $microlearningExtendUserStudentTypeMapper = MicrolearningExtendUserStudentTypeMapper::getInstance($this->adapter);
298
            $extendStudentTypes = $microlearningExtendUserStudentTypeMapper->fetchAllByCompanyId($currentCompany->id);
1 www 299
 
300
            foreach($extendStudentTypes as $extendStudentType)
301
            {
302
                $reportsLastWeek['student_types'][$extendStudentType->id] = [
303
                    'name' => $extendStudentType->name,
304
                    'total' => 0,
305
                    'value' => 0
306
                ] ;
307
 
308
                $reportsCapsuleResume['student_types'][$extendStudentType->id] = [
309
                    'name' => $extendStudentType->name,
310
                    'total' => 0,
311
                    'value' => 0
312
                ] ;
313
 
314
                $reportsStudentsTotal['student_types'][$extendStudentType->id] = [
315
                    'name' => $extendStudentType->name,
316
                    'total' => 0,
317
                ] ;
318
            }
319
 
17002 efrain 320
            $microlearningUserProgressMapper = MicrolearningUserProgressMapper::getInstance($this->adapter);
1 www 321
 
322
            $minLastWeek = date('Y-m-d', strtotime(' -180 days'));
323
            $maxLastWeek = date('Y-m-d');
17002 efrain 324
            $microlearningUserLogMapper = MicrolearningUserLogMapper::getInstance($this->adapter);
325
            $companyUsersLogWithActivityLastWeek = $microlearningUserLogMapper->fetchAllUserIdsLastWeekByCompanyId($currentCompany->id, $minLastWeek, $maxLastWeek);
1 www 326
 
327
 
328
            $date = date('Y-m-d');
329
 
17002 efrain 330
            $microlearningCapsuleUserMapper = MicrolearningCapsuleUserMapper::getInstance($this->adapter);
331
            $user_ids = $microlearningCapsuleUserMapper->fetchAllDistinctUserIdActiveByCompanyIdAndDate($currentCompany->id, $date);
1 www 332
 
333
            $studentsTotal = count($user_ids);
334
            $studentsStarted = 0;
335
 
336
 
337
            $userIdsWithAllCapsulesCompleted = [];
338
 
339
 
340
            foreach($user_ids as $user_id)
341
            {
17002 efrain 342
                $countSlides = $microlearningUserProgressMapper->fetchCountAllSlideCompletedByCompanyIdAndUserId($currentCompany->id, $user_id);
1 www 343
                if($countSlides) {
344
                    $studentsStarted++;
345
                }
346
 
347
                $incompleted = false;
348
 
17002 efrain 349
                $capsuleUsers = $microlearningCapsuleUserMapper->fetchAllActiveByUserId($user_id);
1 www 350
                foreach($capsuleUsers as $capsuleUser)
351
                {
17002 efrain 352
                    $userProgress = $microlearningUserProgressMapper->fetchOneByUseridAndCapsuleId($capsuleUser->user_id, $capsuleUser->capsule_id);
1 www 353
                    if($userProgress) {
354
                        if(!$userProgress->completed) {
355
                            $incompleted = true;
356
                            break;
357
                        }
358
                    }  else {
359
                        $incompleted = true;
360
                        break;
361
                    }
362
 
363
 
364
 
365
                }
366
 
367
                if(!$incompleted) {
368
                    array_push($userIdsWithAllCapsulesCompleted, $user_id);
369
                }
370
            }
371
 
372
 
373
            $studentsWithoutStarting =  $studentsTotal - $studentsStarted;
374
            $reportsLastWeek['general'] = ['total' => $studentsTotal, 'value' => count($companyUsersLogWithActivityLastWeek) ];
375
 
376
            $reportsCapsuleResume['general'] = ['total' => $studentsTotal, 'value' => count($userIdsWithAllCapsulesCompleted) ];
377
 
378
 
17002 efrain 379
            $microlearningExtendUserMapper = MicrolearningExtendUserMapper::getInstance($this->adapter);
380
            $records = $microlearningExtendUserMapper->fetchAllByCompanyId($currentCompany->id);
1 www 381
            foreach($records as $record)
382
            {
383
 
384
                if($record->extend_company_id) {
385
                    $reportsLastWeek['companies'][$record->extend_company_id]['total'] += 1;
386
                    $reportsStudentsTotal['companies'][$record->extend_company_id]['total'] += 1;
387
 
388
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
389
                        $reportsLastWeek['companies'][$record->extend_company_id]['value'] += 1;
390
                    }
391
 
392
                    $reportsCapsuleResume['companies'][$record->extend_company_id]['total'] += 1;
393
 
394
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
395
                        $reportsCapsuleResume['companies'][$record->extend_company_id]['value'] += 1;
396
                    }
397
 
398
                }
399
 
400
                if($record->extend_function_id) {
401
                    $reportsLastWeek['functions'][$record->extend_function_id]['total'] += 1;
402
                    $reportsStudentsTotal['functions'][$record->extend_function_id]['total'] += 1;
403
 
404
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
405
                        $reportsLastWeek['functions'][$record->extend_function_id]['value'] += 1;
406
                    }
407
 
408
                    $reportsCapsuleResume['functions'][$record->extend_function_id]['total'] += 1;
409
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
410
                        $reportsCapsuleResume['functions'][$record->extend_function_id]['value'] += 1;
411
                    }
412
                }
413
 
414
                if($record->extend_group_id) {
415
                    $reportsLastWeek['groups'][$record->extend_group_id]['total'] += 1;
416
                    $reportsStudentsTotal['groups'][$record->extend_group_id]['total'] += 1;
417
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
418
                        $reportsLastWeek['groups'][$record->extend_group_id]['value'] += 1;
419
                    }
420
 
421
                    $reportsCapsuleResume['groups'][$record->extend_group_id]['total'] += 1;
422
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
423
                        $reportsCapsuleResume['groups'][$record->extend_group_id]['value'] += 1;
424
                    }
425
                }
426
 
427
                if($record->extend_institution_id) {
428
                    $reportsLastWeek['institutions'][$record->extend_institution_id]['total'] += 1;
429
                    $reportsStudentsTotal['institutions'][$record->extend_institution_id]['total'] += 1;
430
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
431
                        $reportsLastWeek['institutions'][$record->extend_institution_id]['value'] += 1;
432
                    }
433
 
434
                    $reportsCapsuleResume['institutions'][$record->extend_institution_id]['total'] += 1;
435
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
436
                        $reportsCapsuleResume['institutions'][$record->extend_institution_id]['value'] += 1;
437
                    }
438
                }
439
 
440
                if($record->extend_program_id) {
441
                    $reportsLastWeek['programs'][$record->extend_program_id]['total'] += 1;
442
                    $reportsStudentsTotal['programs'][$record->extend_program_id]['total'] += 1;
443
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
444
                        $reportsLastWeek['programs'][$record->extend_program_id]['value'] += 1;
445
                    }
446
 
447
                    $reportsCapsuleResume['programs'][$record->extend_program_id]['total'] += 1;
448
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
449
                        $reportsCapsuleResume['programs'][$record->extend_program_id]['value'] += 1;
450
                    }
451
                }
452
 
453
                if($record->extend_partner_id) {
454
                    $reportsLastWeek['partners'][$record->extend_partner_id]['total'] += 1;
455
                    $reportsStudentsTotal['partners'][$record->extend_partner_id]['total'] += 1;
456
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
457
                        $reportsLastWeek['partners'][$record->extend_partner_id]['value'] += 1;
458
                    }
459
 
460
                    $reportsCapsuleResume['partners'][$record->extend_partner_id]['total'] += 1;
461
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
462
                        $reportsCapsuleResume['partners'][$record->extend_partner_id]['value'] += 1;
463
                    }
464
                }
465
 
466
                if($record->extend_sector_id) {
467
                    $reportsLastWeek['sectors'][$record->extend_sector_id]['total'] += 1;
468
                    $reportsStudentsTotal['sectors'][$record->extend_sector_id]['total'] += 1;
469
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
470
                        $reportsLastWeek['sectors'][$record->extend_sector_id]['value'] += 1;
471
                    }
472
 
473
                    $reportsCapsuleResume['sectors'][$record->extend_sector_id]['total'] += 1;
474
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
475
                        $reportsCapsuleResume['sectors'][$record->extend_sector_id]['value'] += 1;
476
                    }
477
                }
478
 
479
                if($record->extend_student_type_id) {
480
                    $reportsLastWeek['student_types'][$record->extend_student_type_id]['total'] += 1;
481
                    $reportsStudentsTotal['student_types'][$record->extend_student_type_id]['total'] += 1;
482
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
483
                        $reportsLastWeek['student_types'][$record->extend_student_type_id]['value'] += 1;
484
                    }
485
 
486
                    $reportsCapsuleResume['student_types'][$record->extend_student_type_id]['total'] += 1;
487
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
488
                        $reportsCapsuleResume['student_types'][$record->extend_student_type_id]['value'] += 1;
489
                    }
490
                }
491
            }
492
 
493
 
494
 
495
 
496
            $this->layout()->setTemplate('layout/layout-backend.phtml');
497
            $viewModel = new ViewModel();
498
            $viewModel->setTemplate('leaders-linked/microlearning-reports/overview.phtml');
499
            $viewModel->setVariables([
500
                'reportsLastWeek'       => $reportsLastWeek,
501
                'reportsCapsuleResume'  => $reportsCapsuleResume,
502
                'reportsStudentsTotal'  => $reportsStudentsTotal,
503
                'reportStudents' => [
504
                    'total' => $studentsTotal,
505
                    'started' => $studentsStarted,
506
                    'withoutStarting' => $studentsWithoutStarting,
507
                ]
508
 
509
            ]);
510
            return $viewModel ;
511
        }
512
 
513
        return new JsonModel([
514
           'success' => false,
515
           'data' => 'ERROR_METHOD_NOT_ALLOWED'
516
        ]);
517
    }
2126 efrain 518
 
1 www 519
 
187 efrain 520
 
2 efrain 521
    public function progressAction()
1 www 522
    {
523
 
524
 
525
        $currentUserPlugin = $this->plugin('currentUserPlugin');
526
        $currentUser = $currentUserPlugin->getUser();
527
        $currentCompany = $currentUserPlugin->getCompany();
528
 
529
 
530
        $request = $this->getRequest();
531
        if($request->isGet()) {
532
 
533
 
534
            $headers  = $request->getHeaders();
535
 
536
            $isJson = false;
537
            if($headers->has('Accept')) {
538
                $accept = $headers->get('Accept');
539
 
540
                $prioritized = $accept->getPrioritized();
541
 
542
                foreach($prioritized as $key => $value) {
543
                    $raw = trim($value->getRaw());
544
 
545
                    if(!$isJson) {
546
                        $isJson = strpos($raw, 'json');
547
                    }
548
 
549
                }
550
            }
551
 
187 efrain 552
 
2126 efrain 553
 
1 www 554
            if($isJson) {
483 efrain 555
 
1 www 556
                $queryMapper = QueryMapper::getInstance($this->adapter);
557
 
187 efrain 558
                $selectUsers = $queryMapper->getSql()->select();
559
                $selectUsers->columns(['user_id' => new Expression('DISTINCT(user_id)')]);
17002 efrain 560
                $selectUsers->from(MicrolearningCapsuleUserMapper::_TABLE);
187 efrain 561
                $selectUsers->where->equalTo('company_id', $currentCompany->id);
1 www 562
 
187 efrain 563
 
1 www 564
 
187 efrain 565
 
566
 
1 www 567
                $select = $queryMapper->getSql()->select();
568
                $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email']);
187 efrain 569
                $select->from([ 'u' => UserMapper::_TABLE]);
1 www 570
 
571
 
572
 
187 efrain 573
                $select->where->in('u.id', $selectUsers);
15386 efrain 574
                $select->where->equalTo('u.status', User::STATUS_ACTIVE);
483 efrain 575
 
187 efrain 576
                $select->order(['u.first_name', 'u.last_name']);
577
 
578
               // echo $select->getSqlString($this->adapter->platform); exit;
483 efrain 579
 
187 efrain 580
 
581
 
582
 
17002 efrain 583
                $microlearningProgressMapper = MicrolearningUserProgressMapper::getInstance($this->adapter);
584
                $microlearningUserLogMapper = MicrolearningUserLogMapper::getInstance($this->adapter);
187 efrain 585
 
17002 efrain 586
                $microlearningCapsuleUserMapper = MicrolearningCapsuleUserMapper::getInstance($this->adapter);
187 efrain 587
 
17002 efrain 588
               // $microlearningSlideMapper = MicrolearningSlideMapper::getInstance($this->adapter);
187 efrain 589
 
590
 
591
 
592
                $students = [];
593
 
1 www 594
                $records = $queryMapper->fetchAll($select);
187 efrain 595
 
596
 
1 www 597
                foreach($records as $record)
598
                {
187 efrain 599
 
600
 
17002 efrain 601
                    $capsules               = $microlearningCapsuleUserMapper->fetchAllActiveByUserId($record['id']);
187 efrain 602
 
603
 
604
 
1 www 605
                    $totalCapsules          = count($capsules);
606
                    $totalCapsulesStarted   = 0;
607
                    $totalCapsulesCompleted = 0;
608
 
609
 
187 efrain 610
 
611
 
612
 
613
 
614
 
1 www 615
                    foreach($capsules as $capsule)
616
                    {
17002 efrain 617
                        $userProgress = $microlearningProgressMapper->fetchOneByUseridAndCapsuleId($capsule->user_id, $capsule->capsule_id);
187 efrain 618
 
619
 
1 www 620
                        if($userProgress) {
621
                            $totalCapsulesStarted++;
622
                            if($userProgress->completed) {
623
                                $totalCapsulesCompleted++;
187 efrain 624
                            }
1 www 625
                        }
187 efrain 626
 
1 www 627
 
628
 
629
                    }
630
 
187 efrain 631
 
632
 
633
 
634
                    if($totalCapsulesCompleted > 0 && $totalCapsules > 0) {
635
                        $total_capsules_percentaje = intval ( ($totalCapsulesCompleted * 100 ) / $totalCapsules);
636
                    }  else {
637
                        $total_capsules_percentaje = 0;
638
                    }
639
 
1 www 640
 
187 efrain 641
 
1 www 642
                    $student = [
643
                        'uuid' => $record['uuid'],
644
                        'first_name' => $record['first_name'],
645
                        'last_name' => $record['last_name'],
187 efrain 646
                        'email' => $record['email'],
647
 
1 www 648
                        'total_capsules' => $totalCapsules,
187 efrain 649
                        'total_capsules_incomplete' => ( $totalCapsules - $totalCapsulesCompleted ),
1 www 650
                        'total_capsules_started' => $totalCapsulesStarted,
651
                        'total_capsules_completed' => $totalCapsulesCompleted,
187 efrain 652
                        'total_capsules_percentaje' => $total_capsules_percentaje,
653
 
1 www 654
                        'first_date' => '',
655
                        'first_time' => '',
656
                        'last_date' => '',
657
                        'last_time' => '',
658
                    ];
187 efrain 659
 
17002 efrain 660
                    $first_added_on = $microlearningUserLogMapper->fetchFirstDateByCompanyIdAndUserId($currentCompany->id, $record['id']);
1 www 661
                    if($first_added_on) {
662
                        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $first_added_on);
663
                        if($dt) {
664
                            $student['first_date'] = $dt->format('d/m/Y');
665
                            $student['first_time'] = $dt->format('h:i a');
666
                        }
667
                    }
668
 
17002 efrain 669
                    $last_added_on  = $microlearningUserLogMapper->fetchLastDateByCompanyIdAndUserId($currentCompany->id, $record['id']);
1 www 670
                    if($last_added_on) {
671
                        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $last_added_on);
672
                        if($dt) {
673
                            $student['last_date'] = $dt->format('d/m/Y');
674
                            $student['last_time'] = $dt->format('h:i a');
187 efrain 675
                        }
1 www 676
                    }
187 efrain 677
 
1 www 678
                    array_push($students, $student);
187 efrain 679
 
1 www 680
 
681
 
682
                }
17002 efrain 683
 
1 www 684
                return new JsonModel([
187 efrain 685
                    'success' => true,
1 www 686
                    'data' => $students
687
 
187 efrain 688
                ]);
1 www 689
 
187 efrain 690
            } else {
1 www 691
 
692
 
693
 
2126 efrain 694
                // $form = new ExtendUserMicrolearningForm($this->adapter, $currentCompany->id);
695
                $form = new TopicCapsuleForm($this->adapter, $currentCompany->id, $topic_id = 0);
1 www 696
 
697
 
698
                $this->layout()->setTemplate('layout/layout-backend.phtml');
699
                $viewModel = new ViewModel();
483 efrain 700
                $viewModel->setTemplate('leaders-linked/microlearning-reports/progress-for-capsule.phtml');
1 www 701
                $viewModel->setVariables([
702
                    'form' => $form
187 efrain 703
                ]);
1 www 704
                return $viewModel ;
705
            }
706
        }
707
 
708
        return new JsonModel([
709
            'success' => false,
710
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
711
        ]);
712
    }
2 efrain 713
 
187 efrain 714
 
15390 efrain 715
    public function devicesAndAccessAction()
2 efrain 716
    {
717
 
718
 
719
        $currentUserPlugin = $this->plugin('currentUserPlugin');
720
        $currentUser = $currentUserPlugin->getUser();
721
        $currentCompany = $currentUserPlugin->getCompany();
722
 
723
 
724
        $request = $this->getRequest();
725
        if($request->isGet()) {
726
 
727
 
728
            $headers  = $request->getHeaders();
729
 
730
            $isJson = false;
731
            if($headers->has('Accept')) {
732
                $accept = $headers->get('Accept');
733
 
734
                $prioritized = $accept->getPrioritized();
735
 
736
                foreach($prioritized as $key => $value) {
737
                    $raw = trim($value->getRaw());
738
 
739
                    if(!$isJson) {
740
                        $isJson = strpos($raw, 'json');
741
                    }
742
 
743
                }
744
            }
745
 
746
            if($isJson) {
15390 efrain 747
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
748
                $allowDownload = $acl->isAllowed($currentUser->usertype_id, 'microlearning/reports/progress-for-capsule/excel');
2 efrain 749
 
16766 efrain 750
                $company_id = Functions::sanitizeFilterString($this->params()->fromQuery('company_id', ''));
751
                $function_id = Functions::sanitizeFilterString($this->params()->fromQuery('function_id', ''));
752
                $group_id = Functions::sanitizeFilterString($this->params()->fromQuery('group_id', ''));
753
                $institution_id = Functions::sanitizeFilterString($this->params()->fromQuery('institution_id', ''));
754
                $program_id = Functions::sanitizeFilterString($this->params()->fromQuery('program_id', ''));
755
                $partner_id = Functions::sanitizeFilterString($this->params()->fromQuery('partner_id', ''));
756
                $sector_id = Functions::sanitizeFilterString($this->params()->fromQuery('sector_id', ''));
757
                $student_type_id = Functions::sanitizeFilterString($this->params()->fromQuery('student_type_id', ''));
129 efrain 758
 
759
 
760
                if($company_id) {
17002 efrain 761
                    $extendUserCompanyMapper = MicrolearningExtendUserCompanyMapper::getInstance($this->adapter);
129 efrain 762
                    $extendUserCompany = $extendUserCompanyMapper->fetchOneByUuid($company_id);
763
 
764
                    if($extendUserCompany) {
765
                        $company_id = $extendUserCompany->id;
766
                    } else {
767
                        $company_id = 0;
768
                    }
769
                }
770
 
771
                if($function_id) {
17002 efrain 772
                    $extendUserFunctionMapper = MicrolearningExtendUserFunctionMapper::getInstance($this->adapter);
129 efrain 773
                    $extendUserFunction = $extendUserFunctionMapper->fetchOneByUuid($function_id);
774
 
775
                    if($extendUserFunction) {
776
                        $function_id = $extendUserFunction->id;
777
                    } else {
778
                        $function_id = 0;
779
                    }
780
                }
781
 
782
                if($group_id) {
17002 efrain 783
                    $extendUserGroupMapper = MicrolearningExtendUserGroupMapper::getInstance($this->adapter);
129 efrain 784
                    $extendUserGroup = $extendUserGroupMapper->fetchOneByUuid($group_id);
785
 
786
                    if($extendUserGroup) {
787
                        $group_id = $extendUserGroup->id;
788
                    } else {
789
                        $group_id = 0;
790
                    }
791
                }
792
 
793
                if($institution_id) {
17002 efrain 794
                    $extendUserInstitutionMapper = MicrolearningExtendUserInstitutionMapper::getInstance($this->adapter);
129 efrain 795
                    $extendUserInstitution = $extendUserInstitutionMapper->fetchOneByUuid($institution_id);
796
                    if($extendUserInstitution) {
797
                        $institution_id = $extendUserInstitution->id;
798
                    } else {
799
                        $institution_id = 0;
800
                    }
801
                }
802
 
803
                if($program_id) {
17002 efrain 804
                    $extendUserProgramMapper = MicrolearningExtendUserProgramMapper::getInstance($this->adapter);
129 efrain 805
                    $extendUserProgram = $extendUserProgramMapper->fetchOneByUuid($program_id);
806
 
807
                    if($extendUserProgram) {
808
                        $program_id = $extendUserProgram->id;
809
                    } else {
810
                        $program_id = 0;
811
                    }
812
 
813
 
814
                }
815
 
816
                if($partner_id) {
17002 efrain 817
                    $extendUserPartnerMapper = MicrolearningExtendUserPartnerMapper::getInstance($this->adapter);
129 efrain 818
                    $extendUserPartner = $extendUserPartnerMapper->fetchOneByUuid($partner_id);
819
                    if($extendUserPartner) {
820
                        $partner_id = $extendUserPartner;
821
                    } else {
822
                        $partner_id = 0;
823
                    }
824
                }
825
 
826
                if($sector_id) {
17002 efrain 827
                    $extendUserSectorMapper = MicrolearningExtendUserSectorMapper::getInstance($this->adapter);
129 efrain 828
                    $extendUserSector = $extendUserSectorMapper->fetchOneByUuid($sector_id);
829
                    if($extendUserSector) {
830
                        $sector_id = $extendUserSector->id;
831
                    } else {
832
                        $sector_id = 0;
833
                    }
834
                }
835
 
836
                if($student_type_id) {
17002 efrain 837
                    $extendUserStudentTypeMapper = MicrolearningExtendUserStudentTypeMapper::getInstance($this->adapter);
129 efrain 838
                    $extendUserStudentType = $extendUserStudentTypeMapper->fetchOneByUuid($student_type_id);
839
 
840
                    if($extendUserStudentType) {
841
                        $student_type_id = $extendUserStudentType->id;
842
                    } else {
843
                        $student_type_id = 0;
844
                    }
845
                }
846
 
847
 
848
 
15390 efrain 849
                $paramsDownload = [
850
                    'company_id' => $company_id,
851
                    'function_id' => $function_id,
852
                    'group_id' => $group_id,
853
                    'institution_id' => $institution_id,
854
                    'program_id' => $program_id,
855
                    'partner_id' => $partner_id,
856
                    'sector_id' =>  $sector_id,
857
                    'student_type_id' => $student_type_id
858
                ];
859
 
860
 
129 efrain 861
                /*
862
                echo 'company_id 1 =  '. $company_id . PHP_EOL;
863
                echo 'function_id 1 =  '. $function_id . PHP_EOL;
864
                echo 'group_id 1 =  '. $group_id . PHP_EOL;
865
                echo 'institution_id 1 =  '. $institution_id . PHP_EOL;
866
                echo 'program_id 1 =  '. $program_id . PHP_EOL;
867
                echo 'partner_id 1 =  '. $partner_id . PHP_EOL;
868
                echo 'sector_id 1 =  '. $sector_id . PHP_EOL;
869
                echo 'student_type_id 1 =  '. $student_type_id . PHP_EOL;
870
                exit;
871
                */
872
 
873
 
2 efrain 874
                $date = date('Y-m-d');
875
                $deviceMapper = DeviceMapper::getInstance($this->adapter);
876
 
877
 
878
                $queryMapper = QueryMapper::getInstance($this->adapter);
879
 
880
                $selectCapsuleUser = $queryMapper->getSql()->select();
881
                $selectCapsuleUser->columns(['user_id' => new Expression('DISTINCT(user_id)')  ]);
17002 efrain 882
                $selectCapsuleUser->from(MicrolearningCapsuleUserMapper::_TABLE);
2 efrain 883
                $selectCapsuleUser->where->equalTo('company_id', $currentCompany->id);
17002 efrain 884
                $selectCapsuleUser->where->nest->equalTo('access', MicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
885
                ->equalTo('access', MicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
2 efrain 886
                ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
887
                ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
888
 
15390 efrain 889
                //echo $selectCapsuleUser->getSqlString($this->adapter->platform); exit;
2 efrain 890
 
891
                $select = $queryMapper->getSql()->select();
892
                $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email']);
129 efrain 893
                $select->from([ 'u' => UserMapper::_TABLE]);
894
                if( $company_id || $function_id  || $group_id || $institution_id || $program_id || $partner_id ||  $sector_id || $student_type_id ) {
895
 
17002 efrain 896
                    $select->join(['e' => MicrolearningExtendUserMapper::_TABLE], 'e.user_id = u.id', []);
129 efrain 897
 
898
                }
2 efrain 899
 
129 efrain 900
                $select->where->in('u.id', $selectCapsuleUser);
901
                if($company_id) {
902
                    $select->where->equalTo('e.extend_company_id', $company_id);
903
                }
2 efrain 904
 
129 efrain 905
                if($function_id) {
906
                    $select->where->equalTo('e.extend_function_id', $function_id);
907
 
908
                }
909
                if($group_id) {
910
                    $select->where->equalTo('e.extend_group_id', $group_id);
911
                }
2 efrain 912
 
129 efrain 913
                if($institution_id) {
914
                    $select->where->equalTo('e.extend_institution_id', $institution_id);
915
                }
916
 
917
                if($program_id) {
918
                    $select->where->equalTo('e.extend_program_id', $program_id);
919
                }
920
 
921
                if($partner_id) {
922
                    $select->where->equalTo('e.extend_partner_id', $partner_id);
923
                }
924
 
925
                if($sector_id) {
926
                    $select->where->equalTo('e.extend_sector_id', $sector_id);
927
                }
928
 
929
                if($student_type_id) {
930
                    $select->where->equalTo('e.extend_student_type_id', $student_type_id);
931
                }
15386 efrain 932
 
933
                $select->where->equalTo('u.status', User::STATUS_ACTIVE);
129 efrain 934
                $select->order(['u.first_name', 'u.last_name']);
935
 
936
 
937
 
15390 efrain 938
                $items = [];
2 efrain 939
                $records = $queryMapper->fetchAll($select);
940
                foreach($records as $record)
941
                {
15390 efrain 942
                    $item = [
2 efrain 943
                        'uuid' => $record['uuid'],
15387 efrain 944
                        'first_name' => ucwords(strtolower($record['first_name'])),
945
                        'last_name' => ucwords(strtolower($record['last_name'])),
946
                        'email' => strtolower($record['email']),
15390 efrain 947
                        'brand' => '',
948
                        'manufacturer' => '',
949
                        'model' => '',
950
                        'platform' => '',
951
                        'version' => '',
952
                        'token' => 'LABEL_NO',
953
                        'updated_on' => '',
2 efrain 954
                    ];
955
 
15390 efrain 956
                    $device = $deviceMapper->fetchOneByUserId($record['id']);
957
                    if($device) {
958
                        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $device->updated_on);
959
                        $updated_on = $dt->format('d/m/Y h:i a');
960
 
961
                        $item['brand'] = $device->brand;
962
                        $item['manufacturer'] = $device->manufacturer;
963
                        $item['model'] = $device->model;
964
                        $item['platform'] = $device->platform;
965
                        $item['version'] = $device->version;
966
                        $item['token'] = $device->token ? 'LABEL_YES' : 'LABEL_NO';
967
                        $item['updated_on'] = $updated_on;
968
 
969
                    }
970
 
971
                    array_push($items, $item);
2 efrain 972
 
973
 
974
                }
975
 
15390 efrain 976
                $link_download = '';
977
                if($allowDownload) {
978
 
979
                    $link_download = $this->url()->fromRoute('microlearning/reports/devices-and-access/excel', [], ['query' => $paramsDownload ]);
980
                }
2 efrain 981
 
982
 
983
 
15390 efrain 984
 
985
 
986
 
987
 
2 efrain 988
                return new JsonModel([
989
                    'success' => true,
15390 efrain 990
                    'data' => [
991
                        'link_download' => $link_download,
992
                        'items' => $items
993
                    ],
2 efrain 994
 
995
                ]);
996
 
997
            } else {
998
 
999
 
1000
 
1001
                $form = new ExtendUserMicrolearningForm($this->adapter, $currentCompany->id);
1002
 
1003
 
1004
                $this->layout()->setTemplate('layout/layout-backend.phtml');
1005
                $viewModel = new ViewModel();
15390 efrain 1006
                $viewModel->setTemplate('leaders-linked/microlearning-reports/devices-and-access.phtml');
2 efrain 1007
                $viewModel->setVariables([
1008
                    'form' => $form
1009
                ]);
1010
                return $viewModel ;
1011
            }
1012
        }
1013
 
1014
        return new JsonModel([
1015
            'success' => false,
1016
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1017
        ]);
1018
    }
187 efrain 1019
 
1020
 
15390 efrain 1021
    public function devicesAndAccessExcelAction()
1022
    {
1023
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1024
        $currentUser = $currentUserPlugin->getUser();
1025
        $currentCompany = $currentUserPlugin->getCompany();
1026
 
1027
        $request = $this->getRequest();
1028
 
1029
        if($request->isGet())
1030
        {
1031
 
16766 efrain 1032
            $company_id = Functions::sanitizeFilterString($this->params()->fromQuery('company_id', ''));
1033
            $function_id = Functions::sanitizeFilterString($this->params()->fromQuery('function_id', ''));
1034
            $group_id = Functions::sanitizeFilterString($this->params()->fromQuery('group_id', ''));
1035
            $institution_id = Functions::sanitizeFilterString($this->params()->fromQuery('institution_id', ''));
1036
            $program_id = Functions::sanitizeFilterString($this->params()->fromQuery('program_id', ''));
1037
            $partner_id = Functions::sanitizeFilterString($this->params()->fromQuery('partner_id', ''));
1038
            $sector_id = Functions::sanitizeFilterString($this->params()->fromQuery('sector_id', ''));
1039
            $student_type_id = Functions::sanitizeFilterString($this->params()->fromQuery('student_type_id', ''));
15390 efrain 1040
 
1041
 
1042
            if($company_id) {
17002 efrain 1043
                $extendUserCompanyMapper = MicrolearningExtendUserCompanyMapper::getInstance($this->adapter);
15390 efrain 1044
                $extendUserCompany = $extendUserCompanyMapper->fetchOneByUuid($company_id);
1045
 
1046
                if($extendUserCompany) {
1047
                    $company_id = $extendUserCompany->id;
1048
                } else {
1049
                    $company_id = 0;
1050
                }
1051
            }
1052
 
1053
            if($function_id) {
17002 efrain 1054
                $extendUserFunctionMapper = MicrolearningExtendUserFunctionMapper::getInstance($this->adapter);
15390 efrain 1055
                $extendUserFunction = $extendUserFunctionMapper->fetchOneByUuid($function_id);
1056
 
1057
                if($extendUserFunction) {
1058
                    $function_id = $extendUserFunction->id;
1059
                } else {
1060
                    $function_id = 0;
1061
                }
1062
            }
1063
 
1064
            if($group_id) {
17002 efrain 1065
                $extendUserGroupMapper = MicrolearningExtendUserGroupMapper::getInstance($this->adapter);
15390 efrain 1066
                $extendUserGroup = $extendUserGroupMapper->fetchOneByUuid($group_id);
1067
 
1068
                if($extendUserGroup) {
1069
                    $group_id = $extendUserGroup->id;
1070
                } else {
1071
                    $group_id = 0;
1072
                }
1073
            }
1074
 
1075
            if($institution_id) {
17002 efrain 1076
                $extendUserInstitutionMapper = MicrolearningExtendUserInstitutionMapper::getInstance($this->adapter);
15390 efrain 1077
                $extendUserInstitution = $extendUserInstitutionMapper->fetchOneByUuid($institution_id);
1078
                if($extendUserInstitution) {
1079
                    $institution_id = $extendUserInstitution->id;
1080
                } else {
1081
                    $institution_id = 0;
1082
                }
1083
            }
1084
 
1085
            if($program_id) {
17002 efrain 1086
                $extendUserProgramMapper = MicrolearningExtendUserProgramMapper::getInstance($this->adapter);
15390 efrain 1087
                $extendUserProgram = $extendUserProgramMapper->fetchOneByUuid($program_id);
1088
 
1089
                if($extendUserProgram) {
1090
                    $program_id = $extendUserProgram->id;
1091
                } else {
1092
                    $program_id = 0;
1093
                }
1094
 
1095
 
1096
            }
1097
 
1098
            if($partner_id) {
17002 efrain 1099
                $extendUserPartnerMapper = MicrolearningExtendUserPartnerMapper::getInstance($this->adapter);
15390 efrain 1100
                $extendUserPartner = $extendUserPartnerMapper->fetchOneByUuid($partner_id);
1101
                if($extendUserPartner) {
1102
                    $partner_id = $extendUserPartner;
1103
                } else {
1104
                    $partner_id = 0;
1105
                }
1106
            }
1107
 
1108
            if($sector_id) {
17002 efrain 1109
                $extendUserSectorMapper = MicrolearningExtendUserSectorMapper::getInstance($this->adapter);
15390 efrain 1110
                $extendUserSector = $extendUserSectorMapper->fetchOneByUuid($sector_id);
1111
                if($extendUserSector) {
1112
                    $sector_id = $extendUserSector->id;
1113
                } else {
1114
                    $sector_id = 0;
1115
                }
1116
            }
1117
 
1118
            if($student_type_id) {
17002 efrain 1119
                $extendUserStudentTypeMapper = MicrolearningExtendUserStudentTypeMapper::getInstance($this->adapter);
15390 efrain 1120
                $extendUserStudentType = $extendUserStudentTypeMapper->fetchOneByUuid($student_type_id);
1121
 
1122
                if($extendUserStudentType) {
1123
                    $student_type_id = $extendUserStudentType->id;
1124
                } else {
1125
                    $student_type_id = 0;
1126
                }
1127
            }
1128
 
1129
 
1130
 
1131
            $paramsDownload = [
1132
                'company_id' => $company_id,
1133
                'function_id' => $function_id,
1134
                'group_id' => $group_id,
1135
                'institution_id' => $institution_id,
1136
                'program_id' => $program_id,
1137
                'partner_id' => $partner_id,
1138
                'sector_id' =>  $sector_id,
1139
                'student_type_id' => $student_type_id
1140
            ];
1141
 
1142
 
1143
            /*
1144
             echo 'company_id 1 =  '. $company_id . PHP_EOL;
1145
             echo 'function_id 1 =  '. $function_id . PHP_EOL;
1146
             echo 'group_id 1 =  '. $group_id . PHP_EOL;
1147
             echo 'institution_id 1 =  '. $institution_id . PHP_EOL;
1148
             echo 'program_id 1 =  '. $program_id . PHP_EOL;
1149
             echo 'partner_id 1 =  '. $partner_id . PHP_EOL;
1150
             echo 'sector_id 1 =  '. $sector_id . PHP_EOL;
1151
             echo 'student_type_id 1 =  '. $student_type_id . PHP_EOL;
1152
             exit;
1153
             */
1154
 
1155
 
1156
            $date = date('Y-m-d');
1157
            $deviceMapper = DeviceMapper::getInstance($this->adapter);
1158
 
1159
 
1160
            $queryMapper = QueryMapper::getInstance($this->adapter);
1161
 
1162
            $selectCapsuleUser = $queryMapper->getSql()->select();
1163
            $selectCapsuleUser->columns(['user_id' => new Expression('DISTINCT(user_id)')  ]);
17002 efrain 1164
            $selectCapsuleUser->from(MicrolearningCapsuleUserMapper::_TABLE);
15390 efrain 1165
            $selectCapsuleUser->where->equalTo('company_id', $currentCompany->id);
17002 efrain 1166
            $selectCapsuleUser->where->nest->equalTo('access', MicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
1167
            ->equalTo('access', MicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
15390 efrain 1168
            ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
1169
            ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
1170
 
1171
            //echo $selectCapsuleUser->getSqlString($this->adapter->platform); exit;
1172
 
1173
            $select = $queryMapper->getSql()->select();
1174
            $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email']);
1175
            $select->from([ 'u' => UserMapper::_TABLE]);
1176
            if( $company_id || $function_id  || $group_id || $institution_id || $program_id || $partner_id ||  $sector_id || $student_type_id ) {
1177
 
17002 efrain 1178
                $select->join(['e' => MicrolearningExtendUserMapper::_TABLE], 'e.user_id = u.id', []);
15390 efrain 1179
 
1180
            }
1181
 
1182
            $select->where->in('u.id', $selectCapsuleUser);
1183
            if($company_id) {
1184
                $select->where->equalTo('e.extend_company_id', $company_id);
1185
            }
1186
 
1187
            if($function_id) {
1188
                $select->where->equalTo('e.extend_function_id', $function_id);
1189
 
1190
            }
1191
            if($group_id) {
1192
                $select->where->equalTo('e.extend_group_id', $group_id);
1193
            }
1194
 
1195
            if($institution_id) {
1196
                $select->where->equalTo('e.extend_institution_id', $institution_id);
1197
            }
1198
 
1199
            if($program_id) {
1200
                $select->where->equalTo('e.extend_program_id', $program_id);
1201
            }
1202
 
1203
            if($partner_id) {
1204
                $select->where->equalTo('e.extend_partner_id', $partner_id);
1205
            }
1206
 
1207
            if($sector_id) {
1208
                $select->where->equalTo('e.extend_sector_id', $sector_id);
1209
            }
1210
 
1211
            if($student_type_id) {
1212
                $select->where->equalTo('e.extend_student_type_id', $student_type_id);
1213
            }
1214
 
1215
            $select->where->equalTo('u.status', User::STATUS_ACTIVE);
1216
            $select->order(['u.first_name', 'u.last_name']);
1217
 
1218
 
1219
 
1220
            $items = [];
1221
            $records = $queryMapper->fetchAll($select);
1222
            foreach($records as $record)
1223
            {
1224
                $item = [
1225
                    'uuid' => $record['uuid'],
1226
                    'first_name' => ucwords(strtolower($record['first_name'])),
1227
                    'last_name' => ucwords(strtolower($record['last_name'])),
1228
                    'email' => strtolower($record['email']),
1229
                    'brand' => '',
1230
                    'manufacturer' => '',
1231
                    'model' => '',
1232
                    'platform' => '',
1233
                    'version' => '',
1234
                    'token' => 'LABEL_NO',
1235
                    'updated_on' => '',
1236
                ];
1237
 
1238
                $device = $deviceMapper->fetchOneByUserId($record['id']);
1239
                if($device) {
1240
                    $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $device->updated_on);
1241
                    $updated_on = $dt->format('d/m/Y h:i a');
1242
 
1243
                    $item['brand'] = $device->brand;
1244
                    $item['manufacturer'] = $device->manufacturer;
1245
                    $item['model'] = $device->model;
1246
                    $item['platform'] = $device->platform;
1247
                    $item['version'] = $device->version;
1248
                    $item['token'] = $device->token ? 'Si' : 'No';
1249
                    $item['updated_on'] = $updated_on;
1250
 
1251
                }
1252
 
1253
                array_push($items, $item);
1254
 
1255
 
1256
            }
1257
 
1258
            $records = $items;
1259
 
1260
            $spreadsheet = new Spreadsheet();
1261
            $spreadsheet->getProperties()->setTitle("Dispositivos y Accesos");
1262
 
1263
 
1264
 
1265
            $spreadsheet->setActiveSheetIndex(0);
1266
            $spreadsheet->getActiveSheet()->SetCellValue('A1', 'Fecha:');
1267
            $spreadsheet->getActiveSheet()->SetCellValue('A2', date('d/m/Y h:i a'));
1268
 
1269
            $spreadsheet->getActiveSheet()->SetCellValue('A4', 'Nombre');
1270
            $spreadsheet->getActiveSheet()->SetCellValue('B4', 'Apellido');
1271
            $spreadsheet->getActiveSheet()->SetCellValue('C4', 'Correo electrónico');
1272
            $spreadsheet->getActiveSheet()->SetCellValue('D4', 'Marca');
1273
            $spreadsheet->getActiveSheet()->SetCellValue('E4', 'Fabricante');
1274
            $spreadsheet->getActiveSheet()->SetCellValue('F4', 'Modelo');
1275
            $spreadsheet->getActiveSheet()->SetCellValue('G4', 'Plataforma');
1276
            $spreadsheet->getActiveSheet()->SetCellValue('H4', 'Versión');
1277
            $spreadsheet->getActiveSheet()->SetCellValue('I4', 'Token push');
1278
            $spreadsheet->getActiveSheet()->SetCellValue('J4', 'Ultima vez');
1279
 
1280
 
1281
            $i = 5;
1282
            foreach($records as $record)
1283
            {
1284
                $spreadsheet->getActiveSheet()->SetCellValue('A' . $i, ucwords(strtolower(trim($record['first_name']))));
1285
                $spreadsheet->getActiveSheet()->SetCellValue('B' . $i, ucwords(strtolower(trim($record['last_name']))));
1286
                $spreadsheet->getActiveSheet()->SetCellValue('C' . $i, strtolower(trim($record['email'])));
1287
                $spreadsheet->getActiveSheet()->SetCellValue('D' . $i, $record['brand']);
1288
                $spreadsheet->getActiveSheet()->SetCellValue('E' . $i, $record['manufacturer']);
1289
                $spreadsheet->getActiveSheet()->SetCellValue('F' . $i, $record['model']);
1290
                $spreadsheet->getActiveSheet()->SetCellValue('G' . $i, $record['platform']);
1291
                $spreadsheet->getActiveSheet()->SetCellValue('H' . $i, $record['version']);
1292
                $spreadsheet->getActiveSheet()->SetCellValue('I' . $i, $record['token']);
1293
                $spreadsheet->getActiveSheet()->SetCellValue('J' . $i, $record['updated_on']);
1294
 
1295
                $i++;
1296
            }
1297
 
1298
 
1299
            $fileName = 'reporte_dispositivo_y_acceso_' . time() . '.xls';
1300
 
1301
            $tempFilename = tempnam(sys_get_temp_dir(), 'reporte_dispositivo_y_acceso_' . time());
1302
 
1303
 
1304
 
1305
 
1306
 
1307
            $writer = IOFactory::createWriter($spreadsheet, 'Xls');
1308
            $writer->save($tempFilename);
1309
 
1310
            $content = file_get_contents($tempFilename);
1311
            @unlink($tempFilename);
1312
 
1313
            return new JsonModel([
1314
                'success' => true,
1315
                'data' => [
1316
                    'content' => base64_encode($content),
1317
                    'basename' => $fileName
1318
 
1319
                ]
1320
            ]);
1321
 
1322
 
1323
 
1324
 
1325
        } else {
1326
            return new JsonModel([
1327
                'success' => false,
1328
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1329
            ]);
1330
        }
1331
    }
1332
 
1333
 
187 efrain 1334
    public function comentsForCapsulesAction()
1335
    {
1336
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1337
        $currentUser = $currentUserPlugin->getUser();
1338
        $currentCompany = $currentUserPlugin->getCompany();
1339
 
1340
        $request = $this->getRequest();
1341
 
1342
        if($request->isGet())
1343
        {
1344
 
1345
            $headers  = $request->getHeaders();
1346
 
1347
            $isJson = false;
1348
            if($headers->has('Accept')) {
1349
                $accept = $headers->get('Accept');
1350
 
1351
                $prioritized = $accept->getPrioritized();
1352
 
1353
                foreach($prioritized as $key => $value) {
1354
                    $raw = trim($value->getRaw());
1355
 
1356
                    if(!$isJson) {
1357
                        $isJson = strpos($raw, 'json');
1358
                    }
1359
 
1360
                }
1361
            }
1362
 
1363
            if($isJson) {
16766 efrain 1364
                $topic_uuid     = Functions::sanitizeFilterString($this->params()->fromQuery('topic_uuid'));
1365
                $capsule_uuid   = Functions::sanitizeFilterString($this->params()->fromQuery('capsule_uuid'));
187 efrain 1366
 
1367
                $data = [
1368
                    'items' => [] ,
1369
                    'total' => 0,
1370
 
1371
                ];
1372
 
1373
 
1374
                if(!$topic_uuid) {
1375
                    return new JsonModel([
1376
                        'success' => true,
1377
                        'data' => $data
1378
                    ]);
1379
 
1380
                }
1381
 
1382
 
17002 efrain 1383
                $topicMapper = MicrolearningTopicMapper::getInstance($this->adapter);
187 efrain 1384
                $topic = $topicMapper->fetchOneByUuid($topic_uuid);
1385
                if(!$topic) {
1386
                    return new JsonModel([
1387
                        'success' => true,
1388
                        'data' => 'ERROR_TOPIC_NOT_FOUND'
1389
                    ]);
1390
                }
1391
 
1392
                if($topic->company_id != $currentCompany->id) {
1393
                    return new JsonModel([
1394
                        'success' => true,
1395
                        'data' => 'ERROR_UNAUTHORIZED'
1396
                    ]);
1397
                }
1398
 
1399
 
1400
 
1401
                if(!$capsule_uuid) {
17002 efrain 1402
                    $capsuleMapper = MicrolearningCapsuleMapper::getInstance($this->adapter);
187 efrain 1403
                    $records = $capsuleMapper->fetchAllByCompanyIdAndTopicId($topic->company_id, $topic->id);
1404
 
1405
                    $capsules = [];
1406
                    foreach($records as $record)
1407
                    {
1408
                        if(!$capsule_uuid) {
1409
                            $capsule_uuid = $record->uuid;
1410
                        }
1411
 
1412
                        $capsules[ $record->uuid ] = $record->name;
1413
                    }
1414
 
1415
                    $data['capsules']  = $capsules;
1416
                }
1417
 
1418
                if(!$capsule_uuid) {
1419
                    return new JsonModel([
1420
                        'success' => true,
1421
                        'data' => $data
1422
                    ]);
1423
 
1424
                }
1425
 
17002 efrain 1426
                $capsuleMapper = MicrolearningCapsuleMapper::getInstance($this->adapter);
187 efrain 1427
                $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
1428
 
1429
 
1430
 
1431
                if(!$capsule) {
1432
                    return new JsonModel([
1433
                        'success' => true,
1434
                        'data' => 'ERROR_CAPSULE_NOT_FOUND'
1435
                    ]);
1436
                }
1437
 
1438
                if($capsule->topic_id != $topic->id) {
1439
                    return new JsonModel([
1440
                        'success' => true,
1441
                        'data' => 'ERROR_UNAUTHORIZED'
1442
                    ]);
1443
                }
1444
 
1445
 
1446
                $search = $this->params()->fromQuery('search', []);
16766 efrain 1447
                $search = empty($search['value']) ? '' :  Functions::sanitizeFilterString($search['value']);
187 efrain 1448
 
1449
                $page               = intval($this->params()->fromQuery('start', 1), 10);
1450
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
1451
                $order =  $this->params()->fromQuery('order', []);
1452
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
16766 efrain 1453
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(Functions::sanitizeFilterString($order[0]['dir']));
187 efrain 1454
 
1455
                $fields =  ['uuid', 'first_name', 'last_name', 'email', 'rating', 'comment', 'added_on'];
1456
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'added_on';
1457
 
1458
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
1459
                    $order_direction = 'DESC';
1460
                }
1461
 
1462
 
1463
                $queryMapper = QueryMapper::getInstance($this->adapter);
1464
                $sql = $queryMapper->getSql();
1465
                $select = $sql->select();
1466
                $select->columns(['access', 'paid_from', 'paid_to', 'added_on', 'updated_on']);
17002 efrain 1467
                $select->from(['tb1' => MicrolearningCapsuleCommentMapper::_TABLE] );
187 efrain 1468
                $select->join(['tb2' => UserMapper::_TABLE], 'tb1.user_id = tb2.id', ['uuid', 'first_name', 'last_name', 'email']);
1469
                $select->where->equalTo('tb1.company_id', $capsule->company_id);
1470
                $select->where->equalTo('tb1.topic_id', $capsule->topic_id);
1471
                $select->where->equalTo('tb1.capsule_id', $capsule->id);
1472
 
1473
                if($search) {
1474
                    $select->where->nest()
1475
                    ->like('first_name', '%' . $search . '%')
1476
                    ->or->like('last_name', '%' . $search . '%')
1477
                    ->or->like('email', '%' . $search . '%')
1478
                    ->unnest();
1479
 
1480
                }
1481
 
1482
 
1483
                $select->order($order_field . ' ' . $order_direction);
1484
 
1485
                $hydrator   = new ArraySerializableHydrator();
1486
                $resultset  = new HydratingResultSet($hydrator);
1487
 
1488
                $adapter = new DbSelect($select, $sql, $resultset);
1489
                $paginator = new Paginator($adapter);
1490
                $paginator->setItemCountPerPage($records_x_page);
1491
                $paginator->setCurrentPageNumber($page);
1492
 
1493
 
1494
                $items = [ ];
1495
                $records = $paginator->getCurrentItems();
1496
                foreach($records as $record)
1497
                {
1498
 
1499
 
1500
 
1501
                    $dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);
1502
                    $added_on = $dt_added_on->format('d/m/Y h:i a');
1503
 
1504
 
1505
                    $item = [
1506
                        'uuid' => $record['uuid'],
15387 efrain 1507
                        'first_name' => ucwords(strtolower($record['first_name'])),
1508
                        'last_name' => ucwords(strtolower($record['last_name'])),
1509
                        'email' => strtolower($record['email']),
187 efrain 1510
                        'rating' => $record['rating'],
1511
                        'text' => $record['text'],
1512
                        'added_on' => $added_on,
1513
                    ];
1514
 
1515
 
1516
                    array_push($items, $item);
1517
 
1518
 
1519
                }
1520
 
1521
                $data['items'] = $items;
1522
                $data['total'] = $paginator->getTotalItemCount();
1523
 
1524
 
1525
                return new JsonModel([
1526
                    'success' => true,
1527
                    'data' => $data
1528
                ]);
1529
            } else {
17002 efrain 1530
                $topicMapper = MicrolearningTopicMapper::getInstance($this->adapter);
187 efrain 1531
                $topics = $topicMapper->fetchAllByCompanyId($currentCompany->id);
1532
 
1533
                if($topics) {
1534
                    $topic_id = $topics[0]->id;
1535
                }  else {
1536
                    $topic_id = 0;
1537
                }
1538
 
1539
 
1540
                $form = new TopicCapsuleForm($this->adapter, $currentCompany->id, $topic_id);
1541
 
1542
 
1543
 
1544
                $this->layout()->setTemplate('layout/layout-backend');
1545
                $viewModel = new ViewModel();
1546
                $viewModel->setTemplate('leaders-linked/microlearning-reports/comments-for-capsule.phtml');
1547
                $viewModel->setVariables([
1548
                    'form' => $form,
1549
                ]);
1550
 
1551
                return $viewModel ;
1552
            }
1553
 
1554
        } else {
1555
            return new JsonModel([
1556
                'success' => false,
1557
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1558
            ]);
1559
        }
1560
    }
1561
 
1562
 
1563
 
14612 efrain 1564
    public function progressForCapsuleAction()
483 efrain 1565
    {
1566
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1567
        $currentUser = $currentUserPlugin->getUser();
1568
        $currentCompany = $currentUserPlugin->getCompany();
1569
 
1570
        $request = $this->getRequest();
1571
 
1572
        if($request->isGet())
1573
        {
1574
 
1575
            $headers  = $request->getHeaders();
1576
 
1577
            $isJson = false;
1578
            if($headers->has('Accept')) {
1579
                $accept = $headers->get('Accept');
1580
 
1581
                $prioritized = $accept->getPrioritized();
1582
 
1583
                foreach($prioritized as $key => $value) {
1584
                    $raw = trim($value->getRaw());
1585
 
1586
                    if(!$isJson) {
1587
                        $isJson = strpos($raw, 'json');
1588
                    }
1589
 
1590
                }
1591
            }
14612 efrain 1592
 
1593
 
483 efrain 1594
            if($isJson) {
15386 efrain 1595
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
1596
                $allowDownload = $acl->isAllowed($currentUser->usertype_id, 'microlearning/reports/progress-for-capsule/excel');
14612 efrain 1597
 
16766 efrain 1598
                $topic_uuid     = Functions::sanitizeFilterString($this->params()->fromQuery('topic_uuid'));
1599
                $capsule_uuid   = Functions::sanitizeFilterString($this->params()->fromQuery('capsule_uuid'));
15386 efrain 1600
 
17002 efrain 1601
                $topicMapper = MicrolearningTopicMapper::getInstance($this->adapter);
483 efrain 1602
                $topic = $topicMapper->fetchOneByUuid($topic_uuid);
1603
                if(!$topic) {
1604
                    return new JsonModel([
15386 efrain 1605
                        'success' => false,
483 efrain 1606
                        'data' => 'ERROR_TOPIC_NOT_FOUND'
1607
                    ]);
1608
                }
1609
 
1610
                if($topic->company_id != $currentCompany->id) {
1611
                    return new JsonModel([
15386 efrain 1612
                        'success' => false,
483 efrain 1613
                        'data' => 'ERROR_UNAUTHORIZED'
1614
                    ]);
1615
                }
1616
 
14612 efrain 1617
 
15386 efrain 1618
                $data = [
1619
 
1620
                    'items' => [],
1621
                    'link_download' => '',
1622
 
1623
                ];
483 efrain 1624
 
1625
                if(!$capsule_uuid) {
15386 efrain 1626
 
1627
                    $data['capsules'] = [];
1628
 
17002 efrain 1629
                    $capsuleMapper = MicrolearningCapsuleMapper::getInstance($this->adapter);
483 efrain 1630
                    $records = $capsuleMapper->fetchAllByCompanyIdAndTopicId($topic->company_id, $topic->id);
1631
 
15386 efrain 1632
 
483 efrain 1633
                    foreach($records as $record)
1634
                    {
1635
                        if(!$capsule_uuid) {
1636
                            $capsule_uuid = $record->uuid;
1637
                        }
1638
 
15386 efrain 1639
                        $data['capsules'][ $record->uuid ] = $record->name;
483 efrain 1640
                    }
1641
 
15386 efrain 1642
                    $data['capsule_selected'] = $capsule_uuid;
1643
 
1644
 
483 efrain 1645
                }
14612 efrain 1646
 
1647
 
483 efrain 1648
 
17002 efrain 1649
                $capsuleMapper = MicrolearningCapsuleMapper::getInstance($this->adapter);
483 efrain 1650
                $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
1651
 
1652
 
1653
 
1654
                if(!$capsule) {
1655
                    return new JsonModel([
1656
                        'success' => true,
1657
                        'data' => 'ERROR_CAPSULE_NOT_FOUND'
1658
                    ]);
1659
                }
1660
 
1661
                if($capsule->topic_id != $topic->id) {
1662
                    return new JsonModel([
1663
                        'success' => true,
1664
                        'data' => 'ERROR_UNAUTHORIZED'
1665
                    ]);
1666
                }
1667
 
14612 efrain 1668
 
15386 efrain 1669
 
483 efrain 1670
 
1671
 
1672
                $queryMapper = QueryMapper::getInstance($this->adapter);
1673
                $sql = $queryMapper->getSql();
1674
                $select = $sql->select();
15386 efrain 1675
                $select->columns(['user_id']);
17002 efrain 1676
                $select->from(['tb1' => MicrolearningCapsuleUserMapper::_TABLE] );
483 efrain 1677
                $select->join(['tb2' => UserMapper::_TABLE], 'tb1.user_id = tb2.id', ['uuid', 'first_name', 'last_name', 'email']);
1678
                $select->where->equalTo('tb1.company_id', $capsule->company_id);
1679
                $select->where->equalTo('tb1.topic_id', $capsule->topic_id);
1680
                $select->where->equalTo('tb1.capsule_id', $capsule->id);
15386 efrain 1681
                $select->where->equalTo('tb2.status', User::STATUS_ACTIVE);
14612 efrain 1682
                $select->order('first_name ASC, last_name ASC');
15386 efrain 1683
 
1684
                $user_ids = [];
1685
                $records = $queryMapper->fetchAll($select);
1686
 
1687
                foreach($records as $record)
1688
                {
1689
                    $user_id =  $record['user_id'];
1690
 
1691
                    if(in_array($user_id, $user_ids)) {
1692
                       continue;
1693
                    }
1694
 
1695
                    array_push($user_ids, $user_id);
1696
 
1697
                    $item = [
1698
                        'uuid' => $record['uuid'],
15387 efrain 1699
                        'first_name' => ucwords(strtolower($record['first_name'])),
1700
                        'last_name' => ucwords(strtolower($record['last_name'])),
1701
                        'email' => strtolower($record['email']),
15386 efrain 1702
                        'progress' => 0,
1703
                        'total_slides' => 0,
1704
                        'view_slides' => 0,
1705
                        'completed' => 0,
1706
                        'returning_after_completed' => 0,
1707
                        'added_on' => '',
1708
                        'updated_on' => ''
1709
 
1710
                    ];
1711
 
1712
                    $items[ $user_id ] = $item;
1713
                }
483 efrain 1714
 
15386 efrain 1715
 
1716
                $select->columns(['user_id', 'progress', 'total_slides', 'view_slides', 'completed', 'returning_after_completed', 'added_on', 'updated_on']);
17002 efrain 1717
                $select->from(['tb1' => MicrolearningUserProgressMapper::_TABLE] );
15386 efrain 1718
                $select->where->equalTo('tb1.company_id', $capsule->company_id);
17002 efrain 1719
                $select->where->equalTo('tb1.type', MicrolearningUserProgress::TYPE_CAPSULE);
15386 efrain 1720
                $select->where->equalTo('tb1.topic_id', $capsule->topic_id);
1721
                $select->where->equalTo('tb1.capsule_id', $capsule->id);
1722
                $select->where->in('tb1.user_id', $user_ids);
1723
 
14612 efrain 1724
 
1725
                $records = $queryMapper->fetchAll($select);
483 efrain 1726
                foreach($records as $record)
1727
                {
15386 efrain 1728
                    $user_id = $record['user_id'];
483 efrain 1729
 
1730
 
1731
                    $dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);
1732
                    $added_on = $dt_added_on->format('d/m/Y h:i a');
1733
 
14612 efrain 1734
                    $dt_updated_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['updated_on']);
1735
                    $updated_on = $dt_updated_on->format('d/m/Y h:i a');
483 efrain 1736
 
14612 efrain 1737
 
15386 efrain 1738
                    $items[$user_id]['completed'] = $record['completed'];
1739
                    $items[$user_id]['progress'] = $record['progress'];
1740
                    $items[$user_id]['total_slides'] = $record['total_slides'];
1741
                    $items[$user_id]['view_slides'] = $record['view_slides'];
1742
                    $items[$user_id]['returning_after_completed'] = $record['returning_after_completed'];
1743
                    $items[$user_id]['added_on'] = $added_on;
1744
                    $items[$user_id]['updated_on'] = $updated_on;
483 efrain 1745
 
1746
 
1747
 
1748
                }
1749
 
15386 efrain 1750
                $data['items'] = array_values($items);
483 efrain 1751
 
15386 efrain 1752
                if($allowDownload) {
1753
                    $data['link_download'] = $this->url()->fromRoute('microlearning/reports/progress-for-capsule/excel', [], ['query' => ['topic_uuid' => $topic->uuid, 'capsule_uuid' => $capsule->uuid] ]);
1754
                }
483 efrain 1755
 
15386 efrain 1756
 
1757
 
483 efrain 1758
                return new JsonModel([
1759
                    'success' => true,
1760
                    'data' => $data
1761
                ]);
1762
            } else {
17002 efrain 1763
                $topicMapper = MicrolearningTopicMapper::getInstance($this->adapter);
483 efrain 1764
                $topics = $topicMapper->fetchAllByCompanyId($currentCompany->id);
1765
 
1766
                if($topics) {
1767
                    $topic_id = $topics[0]->id;
1768
                }  else {
1769
                    $topic_id = 0;
1770
                }
1771
 
1772
 
1773
                $form = new TopicCapsuleForm($this->adapter, $currentCompany->id, $topic_id);
1774
 
1775
 
1776
 
1777
                $this->layout()->setTemplate('layout/layout-backend');
1778
                $viewModel = new ViewModel();
14612 efrain 1779
                $viewModel->setTemplate('leaders-linked/microlearning-reports/progress-for-capsule.phtml');
483 efrain 1780
                $viewModel->setVariables([
1781
                    'form' => $form,
1782
                ]);
1783
 
1784
                return $viewModel ;
1785
            }
1786
 
1787
        } else {
1788
            return new JsonModel([
1789
                'success' => false,
1790
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1791
            ]);
1792
        }
1793
    }
1794
 
15386 efrain 1795
    public function progressForCapsuleExcelAction()
1796
    {
1797
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1798
        $currentUser = $currentUserPlugin->getUser();
1799
        $currentCompany = $currentUserPlugin->getCompany();
1800
 
1801
        $request = $this->getRequest();
1802
 
1803
        if($request->isGet())
1804
        {
1805
 
16766 efrain 1806
            $topic_uuid     = Functions::sanitizeFilterString($this->params()->fromQuery('topic_uuid'));
1807
            $capsule_uuid   = Functions::sanitizeFilterString($this->params()->fromQuery('capsule_uuid'));
15386 efrain 1808
 
1809
 
17002 efrain 1810
            $topicMapper = MicrolearningTopicMapper::getInstance($this->adapter);
15386 efrain 1811
            $topic = $topicMapper->fetchOneByUuid($topic_uuid);
1812
            if(!$topic) {
1813
                return new JsonModel([
1814
                    'success' => false,
1815
                    'data' => 'ERROR_TOPIC_NOT_FOUND'
1816
                ]);
1817
            }
1818
 
1819
            if($topic->company_id != $currentCompany->id) {
1820
                return new JsonModel([
1821
                    'success' => false,
1822
                    'data' => 'ERROR_UNAUTHORIZED'
1823
                ]);
1824
            }
1825
 
17002 efrain 1826
            $capsuleMapper = MicrolearningCapsuleMapper::getInstance($this->adapter);
15386 efrain 1827
            $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
1828
 
1829
 
1830
 
1831
            if(!$capsule) {
1832
                return new JsonModel([
1833
                    'success' => false,
1834
                    'data' => 'ERROR_CAPSULE_NOT_FOUND'
1835
                ]);
1836
            }
1837
 
1838
            if($capsule->topic_id != $topic->id) {
1839
                return new JsonModel([
1840
                    'success' => false,
1841
                    'data' => 'ERROR_UNAUTHORIZED'
1842
                ]);
1843
            }
1844
 
1845
 
1846
 
1847
 
1848
            $queryMapper = QueryMapper::getInstance($this->adapter);
1849
            $sql = $queryMapper->getSql();
1850
            $select = $sql->select();
1851
            $select->columns(['user_id']);
17002 efrain 1852
            $select->from(['tb1' => MicrolearningCapsuleUserMapper::_TABLE] );
15386 efrain 1853
            $select->join(['tb2' => UserMapper::_TABLE], 'tb1.user_id = tb2.id', ['uuid', 'first_name', 'last_name', 'email']);
1854
            $select->where->equalTo('tb1.company_id', $capsule->company_id);
1855
            $select->where->equalTo('tb1.topic_id', $capsule->topic_id);
1856
            $select->where->equalTo('tb1.capsule_id', $capsule->id);
1857
            $select->where->equalTo('tb2.status', User::STATUS_ACTIVE);
1858
            $select->order('first_name ASC, last_name ASC');
1859
 
1860
            $user_ids = [];
1861
            $records = $queryMapper->fetchAll($select);
1862
 
1863
            foreach($records as $record)
1864
            {
1865
                $user_id =  $record['user_id'];
1866
                if(in_array($user_id, $user_ids)) {
1867
                    continue;
1868
                }
1869
 
1870
                array_push($user_ids, $user_id);
1871
 
1872
                $item = [
1873
                        'uuid' => $record['uuid'],
1874
                        'first_name' => $record['first_name'],
1875
                        'last_name' => $record['last_name'],
1876
                        'email' => $record['email'],
1877
                        'progress' => 0,
1878
                        'total_slides' => 0,
1879
                        'view_slides' => 0,
1880
                        'completed' => 0,
1881
                        'returning_after_completed' => 0,
1882
                        'added_on' => '',
1883
                        'updated_on' => ''
1884
 
1885
                ];
1886
 
1887
                $items[ $user_id ] = $item;
1888
            }
1889
 
1890
 
1891
            $select->columns(['user_id', 'progress', 'total_slides', 'view_slides', 'completed', 'returning_after_completed', 'added_on', 'updated_on']);
17002 efrain 1892
            $select->from(['tb1' => MicrolearningUserProgressMapper::_TABLE] );
15386 efrain 1893
            $select->where->equalTo('tb1.company_id', $capsule->company_id);
17002 efrain 1894
            $select->where->equalTo('tb1.type', MicrolearningUserProgress::TYPE_CAPSULE);
15386 efrain 1895
            $select->where->equalTo('tb1.topic_id', $capsule->topic_id);
1896
            $select->where->equalTo('tb1.capsule_id', $capsule->id);
1897
            $select->where->in('tb1.user_id', $user_ids);
1898
 
1899
 
1900
            $records = $queryMapper->fetchAll($select);
1901
            foreach($records as $record)
1902
            {
1903
                $user_id = $record['user_id'];
1904
 
1905
                $dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);
1906
                $added_on = $dt_added_on->format('d/m/Y h:i a');
1907
 
1908
                $dt_updated_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['updated_on']);
1909
                $updated_on = $dt_updated_on->format('d/m/Y h:i a');
1910
 
1911
 
1912
                $items[$user_id]['completed'] = $record['completed'];
1913
                $items[$user_id]['progress'] = $record['progress'];
1914
                $items[$user_id]['total_slides'] = $record['total_slides'];
1915
                $items[$user_id]['view_slides'] = $record['view_slides'];
1916
                $items[$user_id]['returning_after_completed'] = $record['returning_after_completed'];
1917
                $items[$user_id]['added_on'] = $added_on;
1918
                $items[$user_id]['updated_on'] = $updated_on;
1919
            }
1920
 
1921
 
1922
            $records = array_values($items);
1923
 
1924
            $spreadsheet = new Spreadsheet();
1925
            $spreadsheet->getProperties()->setTitle("Progreso por Cápsula");
1926
 
1927
 
1928
 
1929
            $spreadsheet->setActiveSheetIndex(0);
1930
            $spreadsheet->getActiveSheet()->SetCellValue('A1', 'Tópico:');
1931
            $spreadsheet->getActiveSheet()->SetCellValue('A2', ucwords(trim(strtolower($topic->name))));
1932
 
1933
            $spreadsheet->getActiveSheet()->SetCellValue('B1', ucwords('Cápsula:'));
1934
            $spreadsheet->getActiveSheet()->SetCellValue('B2', ucwords(trim(strtolower($capsule->name))));
1935
 
1936
 
1937
            $spreadsheet->getActiveSheet()->SetCellValue('C1', 'Fecha:');
1938
            $spreadsheet->getActiveSheet()->SetCellValue('C2', date('d/m/Y h:i a'));
1939
 
1940
 
1941
 
1942
            $spreadsheet->getActiveSheet()->SetCellValue('A4', 'Nombre');
1943
            $spreadsheet->getActiveSheet()->SetCellValue('B4', 'Apellido');
1944
            $spreadsheet->getActiveSheet()->SetCellValue('C4', 'Correo electrónico');
1945
            $spreadsheet->getActiveSheet()->SetCellValue('D4', 'Progreso');
1946
            $spreadsheet->getActiveSheet()->SetCellValue('E4', 'Diapositivas Totales');
1947
            $spreadsheet->getActiveSheet()->SetCellValue('F4', 'Diapositivas Vistas');
1948
            $spreadsheet->getActiveSheet()->SetCellValue('G4', 'Cápsula Completada');
1949
            $spreadsheet->getActiveSheet()->SetCellValue('H4', 'Inicio');
1950
            $spreadsheet->getActiveSheet()->SetCellValue('I4', 'Ultima vez');
1951
 
1952
 
1953
            $i = 5;
1954
            foreach($records as $record)
1955
            {
1956
                $spreadsheet->getActiveSheet()->SetCellValue('A' . $i, ucwords(strtolower(trim($record['first_name']))));
1957
                $spreadsheet->getActiveSheet()->SetCellValue('B' . $i, ucwords(strtolower(trim($record['last_name']))));
1958
                $spreadsheet->getActiveSheet()->SetCellValue('C' . $i, strtolower(trim($record['email'])));
1959
                $spreadsheet->getActiveSheet()->SetCellValue('D' . $i, $record['progress']);
1960
                $spreadsheet->getActiveSheet()->SetCellValue('E' . $i, $record['total_slides']);
1961
                $spreadsheet->getActiveSheet()->SetCellValue('F' . $i, $record['view_slides']);
1962
                $spreadsheet->getActiveSheet()->SetCellValue('G' . $i, $record['completed'] == 1 ? 'Si' : 'No');
1963
                $spreadsheet->getActiveSheet()->SetCellValue('H' . $i, $record['added_on']);
1964
                $spreadsheet->getActiveSheet()->SetCellValue('I' . $i, $record['updated_on']);
1965
                $i++;
1966
            }
1967
 
1968
 
1969
            $fileName = 'reporte_progreso_por_capsula_' . time() . '.xls';
1970
 
1971
            $tempFilename = tempnam(sys_get_temp_dir(), 'reporte_progreso_por_capsula_' . time());
1972
 
1973
 
1974
 
1975
 
1976
 
1977
            $writer = IOFactory::createWriter($spreadsheet, 'Xls');
1978
            $writer->save($tempFilename);
1979
 
1980
            $content = file_get_contents($tempFilename);
1981
            @unlink($tempFilename);
1982
 
1983
            return new JsonModel([
1984
                'success' => true,
1985
                'data' => [
1986
                    'content' => base64_encode($content),
1987
                    'basename' => $fileName
1988
 
1989
                ]
1990
            ]);
1991
 
1992
 
1993
 
1994
 
1995
        } else {
1996
            return new JsonModel([
1997
                'success' => false,
1998
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1999
            ]);
2000
        }
2001
    }
2002
 
483 efrain 2003
 
15386 efrain 2004
    public function progressForTopicAction()
2005
    {
2006
        $currentUserPlugin = $this->plugin('currentUserPlugin');
2007
        $currentUser = $currentUserPlugin->getUser();
2008
        $currentCompany = $currentUserPlugin->getCompany();
2009
 
2010
        $request = $this->getRequest();
2011
 
2012
        if($request->isGet())
2013
        {
2014
 
2015
            $headers  = $request->getHeaders();
2016
 
2017
            $isJson = false;
2018
            if($headers->has('Accept')) {
2019
                $accept = $headers->get('Accept');
2020
 
2021
                $prioritized = $accept->getPrioritized();
2022
 
2023
                foreach($prioritized as $key => $value) {
2024
                    $raw = trim($value->getRaw());
2025
 
2026
                    if(!$isJson) {
2027
                        $isJson = strpos($raw, 'json');
2028
                    }
2029
 
2030
                }
2031
            }
2032
 
2033
 
2034
            if($isJson) {
2035
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
2036
                $allowDownload = $acl->isAllowed($currentUser->usertype_id, 'microlearning/reports/progress-for-topic/excel');
2037
 
16766 efrain 2038
                $topic_uuid     = Functions::sanitizeFilterString($this->params()->fromQuery('topic_uuid'));
15386 efrain 2039
 
17002 efrain 2040
                $topicMapper = MicrolearningTopicMapper::getInstance($this->adapter);
15386 efrain 2041
                $topic = $topicMapper->fetchOneByUuid($topic_uuid);
2042
                if(!$topic) {
2043
                    return new JsonModel([
2044
                        'success' => false,
2045
                        'data' => 'ERROR_TOPIC_NOT_FOUND'
2046
                    ]);
2047
                }
2048
 
2049
                if($topic->company_id != $currentCompany->id) {
2050
                    return new JsonModel([
2051
                        'success' => false,
2052
                        'data' => 'ERROR_UNAUTHORIZED'
2053
                    ]);
2054
                }
2055
 
2056
 
2057
                $data = [
2058
 
2059
                    'items' => [],
2060
                    'link_download' => '',
2061
 
2062
                ];
2063
 
2064
 
2065
 
2066
                $queryMapper = QueryMapper::getInstance($this->adapter);
2067
                $sql = $queryMapper->getSql();
2068
                $select = $sql->select();
2069
                $select->columns(['user_id' => new Expression('DISTINCT(user_id)') ]);
17002 efrain 2070
                $select->from(['tb1' => MicrolearningCapsuleUserMapper::_TABLE] );
15386 efrain 2071
                $select->join(['tb2' => UserMapper::_TABLE], 'tb1.user_id = tb2.id', ['uuid', 'first_name', 'last_name', 'email']);
2072
                $select->where->equalTo('tb1.company_id', $topic->company_id);
2073
                $select->where->equalTo('tb1.topic_id', $topic->id);
2074
                $select->where->equalTo('tb2.status', User::STATUS_ACTIVE);
2075
                $select->order('first_name ASC, last_name ASC');
2076
 
2077
                $user_ids = [];
17344 stevensc 2078
                $items = [];
15386 efrain 2079
                $records = $queryMapper->fetchAll($select);
2080
 
2081
                foreach($records as $record)
2082
                {
2083
                    $user_id =  $record['user_id'];
2084
 
2085
                    if(in_array($user_id, $user_ids)) {
2086
                        continue;
2087
                    }
2088
 
2089
                    array_push($user_ids, $user_id);
2090
 
2091
                    $item = [
2092
                        'uuid' => $record['uuid'],
15387 efrain 2093
                        'first_name' => ucwords(strtolower($record['first_name'])),
2094
                        'last_name' => ucwords(strtolower($record['last_name'])),
2095
                        'email' => strtolower($record['email']),
15386 efrain 2096
                        'progress' => 0,
2097
                        'total_capsules' => 0,
2098
                        'completed_capsules' => 0,
2099
                        'started_capsules' => 0,
2100
                        'pending_capsules' => 0,
2101
                        'added_on' => '',
2102
                        'updated_on' => ''
2103
 
2104
                    ];
2105
 
2106
                    $items[ $user_id ] = $item;
2107
                }
2108
 
2109
                $select = $sql->select();
2110
                $select->columns(['total' => new Expression('COUNT(*)'), 'user_id']);
17002 efrain 2111
                $select->from(MicrolearningCapsuleUserMapper::_TABLE);
15386 efrain 2112
                $select->where->equalTo('company_id', $topic->company_id);
2113
                $select->where->equalTo('topic_id', $topic->id);
15390 efrain 2114
                $select->where->in('user_id', $user_ids);
15386 efrain 2115
                $select->group('user_id');
15390 efrain 2116
 
15389 efrain 2117
                //echo $select->getSqlString($this->adapter->platform);
15386 efrain 2118
 
2119
                $records = $queryMapper->fetchAll($select);
2120
                foreach($records as $record)
2121
                {
2122
                    $user_id = $record['user_id'];
2123
 
2124
                    $items[$user_id]['total_capsules'] = $record['total'];
2125
 
2126
                }
2127
 
2128
 
2129
                $select = $sql->select();
2130
                $select->columns(['total' => new Expression('COUNT(*)'), 'user_id']);
17002 efrain 2131
                $select->from(MicrolearningUserProgressMapper::_TABLE);
15386 efrain 2132
                $select->where->equalTo('company_id', $topic->company_id);
2133
                $select->where->equalTo('topic_id', $topic->id);
17002 efrain 2134
                $select->where->equalTo('type', MicrolearningUserProgress::TYPE_CAPSULE);
15386 efrain 2135
                $select->where->greaterThanOrEqualTo('progress', 100);
2136
                $select->where->equalTo('completed', 1);
15390 efrain 2137
                $select->where->in('user_id', $user_ids);
15386 efrain 2138
                $select->group('user_id');
15390 efrain 2139
 
15386 efrain 2140
 
15389 efrain 2141
                //echo $select->getSqlString($this->adapter->platform);
15386 efrain 2142
 
2143
 
2144
                $records = $queryMapper->fetchAll($select);
2145
                foreach($records as $record)
2146
                {
2147
                    $user_id = $record['user_id'];
2148
 
2149
                    $items[$user_id]['completed_capsules'] = $record['total'];
2150
 
2151
                }
2152
 
2153
 
2154
                $select = $sql->select();
2155
                $select->columns(['total' => new Expression('COUNT(*)'), 'user_id']);
17002 efrain 2156
                $select->from(MicrolearningUserProgressMapper::_TABLE);
15386 efrain 2157
                $select->where->equalTo('company_id', $topic->company_id);
2158
                $select->where->equalTo('topic_id', $topic->id);
17002 efrain 2159
                $select->where->equalTo('type', MicrolearningUserProgress::TYPE_CAPSULE);
15386 efrain 2160
                $select->where->lessThan('progress', 100);
2161
                $select->where->equalTo('completed', 0);
15390 efrain 2162
                $select->where->in('user_id', $user_ids);
15386 efrain 2163
                $select->group('user_id');
15390 efrain 2164
 
15389 efrain 2165
                //echo $select->getSqlString($this->adapter->platform);
15386 efrain 2166
 
15389 efrain 2167
 
15386 efrain 2168
                $records = $queryMapper->fetchAll($select);
2169
                foreach($records as $record)
2170
                {
2171
                    $user_id = $record['user_id'];
2172
 
2173
                    $items[$user_id]['started_capsules'] = $record['total'];
2174
 
2175
                }
2176
 
2177
                $select = $sql->select();
2178
                $select->columns(['added_on' => new Expression('MIN(added_on)'), 'updated_on' => new Expression('MAX(updated_on)'), 'user_id']);
17002 efrain 2179
                $select->from(MicrolearningUserProgressMapper::_TABLE);
15386 efrain 2180
                $select->where->equalTo('company_id', $topic->company_id);
2181
                $select->where->equalTo('topic_id', $topic->id);
17002 efrain 2182
                $select->where->equalTo('type', MicrolearningUserProgress::TYPE_CAPSULE);
15390 efrain 2183
                $select->where->in('user_id', $user_ids);
15386 efrain 2184
                $select->group('user_id');
2185
 
2186
 
2187
                $records = $queryMapper->fetchAll($select);
15390 efrain 2188
 
15389 efrain 2189
 
2190
 
15386 efrain 2191
                foreach($records as $record)
2192
                {
2193
                    $user_id = $record['user_id'];
2194
 
2195
 
2196
                    $dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);
2197
                    $added_on = $dt_added_on->format('d/m/Y h:i a');
2198
 
2199
                    $dt_updated_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['updated_on']);
2200
                    $updated_on = $dt_updated_on->format('d/m/Y h:i a');
2201
 
2202
 
2203
                    $items[$user_id]['added_on'] = $added_on;
2204
                    $items[$user_id]['updated_on'] = $updated_on;
2205
 
2206
                    if($items[$user_id]['completed_capsules']) {
2207
 
2208
                        $progress = ($items[$user_id]['completed_capsules'] * 100) / $items[$user_id]['total_capsules'];
2209
 
2210
                        $items[$user_id]['progress'] = number_format($progress, 2);
2211
                    }
2212
                }
2213
 
2214
                $data['items'] = array_values($items);
2215
 
2216
                if($allowDownload) {
2217
                    $data['link_download'] = $this->url()->fromRoute('microlearning/reports/progress-for-topic/excel', [], ['query' => ['topic_uuid' => $topic->uuid] ]);
2218
                }
2219
 
2220
 
2221
 
2222
                return new JsonModel([
2223
                    'success' => true,
2224
                    'data' => $data
2225
                ]);
2226
            } else {
2227
 
2228
 
17343 stevensc 2229
                $form = new MicrolearningTopicReportForm($this->adapter, $currentCompany->id);
15386 efrain 2230
 
2231
 
2232
 
2233
                $this->layout()->setTemplate('layout/layout-backend');
2234
                $viewModel = new ViewModel();
2235
                $viewModel->setTemplate('leaders-linked/microlearning-reports/progress-for-topic.phtml');
2236
                $viewModel->setVariables([
2237
                    'form' => $form,
2238
                ]);
2239
 
2240
                return $viewModel ;
2241
            }
2242
 
2243
        } else {
2244
            return new JsonModel([
2245
                'success' => false,
2246
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
2247
            ]);
2248
        }
2249
    }
483 efrain 2250
 
15386 efrain 2251
    public function progressForTopicExcelAction()
2252
    {
2253
        $currentUserPlugin = $this->plugin('currentUserPlugin');
2254
        $currentUser = $currentUserPlugin->getUser();
2255
        $currentCompany = $currentUserPlugin->getCompany();
2256
 
2257
        $request = $this->getRequest();
2258
 
2259
        if($request->isGet())
2260
        {
2261
 
16766 efrain 2262
            $topic_uuid     = Functions::sanitizeFilterString($this->params()->fromQuery('topic_uuid'));
15386 efrain 2263
 
17002 efrain 2264
            $topicMapper = MicrolearningTopicMapper::getInstance($this->adapter);
15386 efrain 2265
            $topic = $topicMapper->fetchOneByUuid($topic_uuid);
2266
            if(!$topic) {
2267
                return new JsonModel([
2268
                    'success' => false,
2269
                    'data' => 'ERROR_TOPIC_NOT_FOUND'
2270
                ]);
2271
            }
2272
 
2273
            if($topic->company_id != $currentCompany->id) {
2274
                return new JsonModel([
2275
                    'success' => false,
2276
                    'data' => 'ERROR_UNAUTHORIZED'
2277
                ]);
2278
            }
2279
 
2280
            $queryMapper = QueryMapper::getInstance($this->adapter);
2281
            $sql = $queryMapper->getSql();
2282
            $select = $sql->select();
2283
            $select->columns(['user_id' => new Expression('DISTINCT(user_id)') ]);
17002 efrain 2284
            $select->from(['tb1' => MicrolearningCapsuleUserMapper::_TABLE] );
15386 efrain 2285
            $select->join(['tb2' => UserMapper::_TABLE], 'tb1.user_id = tb2.id', ['uuid', 'first_name', 'last_name', 'email']);
2286
            $select->where->equalTo('tb1.company_id', $topic->company_id);
2287
            $select->where->equalTo('tb1.topic_id', $topic->id);
2288
            $select->where->equalTo('tb2.status', User::STATUS_ACTIVE);
2289
            $select->order('first_name ASC, last_name ASC');
2290
 
2291
            $user_ids = [];
2292
            $records = $queryMapper->fetchAll($select);
2293
 
2294
            foreach($records as $record)
2295
            {
2296
                $user_id =  $record['user_id'];
2297
 
2298
                if(in_array($user_id, $user_ids)) {
2299
                    continue;
2300
                }
2301
 
2302
                array_push($user_ids, $user_id);
2303
 
2304
                $item = [
2305
                    'uuid' => $record['uuid'],
2306
                    'first_name' => $record['first_name'],
2307
                    'last_name' => $record['last_name'],
2308
                    'email' => $record['email'],
2309
                    'progress' => 0,
2310
                    'total_capsules' => 0,
2311
                    'completed_capsules' => 0,
2312
                    'started_capsules' => 0,
2313
                    'pending_capsules' => 0,
2314
                    'added_on' => '',
2315
                    'updated_on' => ''
2316
 
2317
                ];
2318
 
2319
                $items[ $user_id ] = $item;
2320
            }
2321
 
2322
            $select = $sql->select();
2323
            $select->columns(['total' => new Expression('COUNT(*)'), 'user_id']);
17002 efrain 2324
            $select->from(MicrolearningCapsuleUserMapper::_TABLE);
15386 efrain 2325
            $select->where->equalTo('company_id', $topic->company_id);
2326
            $select->where->equalTo('topic_id', $topic->id);
2327
            $select->group('user_id');
2328
 
2329
            $records = $queryMapper->fetchAll($select);
2330
            foreach($records as $record)
2331
            {
2332
                $user_id = $record['user_id'];
2333
 
2334
                $items[$user_id]['total_capsules'] = $record['total'];
2335
 
2336
            }
2337
 
2338
 
2339
            $select = $sql->select();
2340
            $select->columns(['total' => new Expression('COUNT(*)'), 'user_id']);
17002 efrain 2341
            $select->from(MicrolearningUserProgressMapper::_TABLE);
15386 efrain 2342
            $select->where->equalTo('company_id', $topic->company_id);
2343
            $select->where->equalTo('topic_id', $topic->id);
17002 efrain 2344
            $select->where->equalTo('type', MicrolearningUserProgress::TYPE_CAPSULE);
15386 efrain 2345
            $select->where->greaterThanOrEqualTo('progress', 100);
2346
            $select->where->equalTo('completed', 1);
2347
            $select->group('user_id');
2348
 
2349
            //echo $select->getSqlString($this->adapter->platform); exit;
2350
 
2351
 
2352
            $records = $queryMapper->fetchAll($select);
2353
            foreach($records as $record)
2354
            {
2355
                $user_id = $record['user_id'];
2356
 
2357
                $items[$user_id]['completed_capsules'] = $record['total'];
2358
 
2359
            }
2360
 
2361
 
2362
            $select = $sql->select();
2363
            $select->columns(['total' => new Expression('COUNT(*)'), 'user_id']);
17002 efrain 2364
            $select->from(MicrolearningUserProgressMapper::_TABLE);
15386 efrain 2365
            $select->where->equalTo('company_id', $topic->company_id);
2366
            $select->where->equalTo('topic_id', $topic->id);
17002 efrain 2367
            $select->where->equalTo('type', MicrolearningUserProgress::TYPE_CAPSULE);
15386 efrain 2368
            $select->where->lessThan('progress', 100);
2369
            $select->where->equalTo('completed', 0);
2370
            $select->group('user_id');
2371
 
2372
 
2373
            $records = $queryMapper->fetchAll($select);
2374
            foreach($records as $record)
2375
            {
2376
                $user_id = $record['user_id'];
2377
 
2378
                $items[$user_id]['started_capsules'] = $record['total'];
2379
 
2380
            }
2381
 
2382
            $select = $sql->select();
2383
            $select->columns(['added_on' => new Expression('MIN(added_on)'), 'updated_on' => new Expression('MAX(updated_on)'), 'user_id']);
17002 efrain 2384
            $select->from(MicrolearningUserProgressMapper::_TABLE);
15386 efrain 2385
            $select->where->equalTo('company_id', $topic->company_id);
2386
            $select->where->equalTo('topic_id', $topic->id);
17002 efrain 2387
            $select->where->equalTo('type', MicrolearningUserProgress::TYPE_CAPSULE);
15386 efrain 2388
            $select->group('user_id');
2389
 
2390
 
2391
            $records = $queryMapper->fetchAll($select);
2392
            foreach($records as $record)
2393
            {
2394
                $user_id = $record['user_id'];
2395
 
2396
 
2397
                $dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);
2398
                $added_on = $dt_added_on->format('d/m/Y h:i a');
2399
 
2400
                $dt_updated_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['updated_on']);
2401
                $updated_on = $dt_updated_on->format('d/m/Y h:i a');
2402
 
2403
 
2404
                $items[$user_id]['added_on'] = $added_on;
2405
                $items[$user_id]['updated_on'] = $updated_on;
2406
 
2407
                if($items[$user_id]['completed_capsules']) {
2408
 
2409
                    $progress = ($items[$user_id]['completed_capsules'] * 100) / $items[$user_id]['total_capsules'];
2410
 
2411
                    $items[$user_id]['progress'] = number_format($progress, 2);
2412
                }
15387 efrain 2413
                $items[$user_id]['pending_capsules'] = $items[$user_id]['total_capsules'] - ($items[$user_id]['completed_capsules' ] + $items[$user_id]['started_capsules']);
2414
 
15386 efrain 2415
            }
2416
 
2417
            $records = array_values($items);
2418
 
2419
            $spreadsheet = new Spreadsheet();
2420
            $spreadsheet->getProperties()->setTitle("Progreso por Tópico");
2421
 
2422
 
2423
 
2424
            $spreadsheet->setActiveSheetIndex(0);
2425
            $spreadsheet->getActiveSheet()->SetCellValue('A1', 'Tópico:');
2426
            $spreadsheet->getActiveSheet()->SetCellValue('A2', ucwords(trim(strtolower($topic->name))));
2427
 
2428
 
2429
 
2430
            $spreadsheet->getActiveSheet()->SetCellValue('B1', 'Fecha:');
2431
            $spreadsheet->getActiveSheet()->SetCellValue('N2', date('d/m/Y h:i a'));
2432
 
2433
 
2434
 
2435
            $spreadsheet->getActiveSheet()->SetCellValue('A4', 'Nombre');
2436
            $spreadsheet->getActiveSheet()->SetCellValue('B4', 'Apellido');
2437
            $spreadsheet->getActiveSheet()->SetCellValue('C4', 'Correo electrónico');
2438
            $spreadsheet->getActiveSheet()->SetCellValue('D4', 'Progreso');
2439
            $spreadsheet->getActiveSheet()->SetCellValue('E4', 'Capsulas Totales');
2440
            $spreadsheet->getActiveSheet()->SetCellValue('F4', 'Capsulas Completadas');
2441
            $spreadsheet->getActiveSheet()->SetCellValue('G4', 'Capsulas en Progreso');
2442
            $spreadsheet->getActiveSheet()->SetCellValue('H4', 'Capsulas sin Iniciar');
2443
            $spreadsheet->getActiveSheet()->SetCellValue('I4', 'Inicio');
2444
            $spreadsheet->getActiveSheet()->SetCellValue('J4', 'Ultima vez');
2445
 
2446
            $i = 5;
2447
            foreach($records as $record)
2448
            {
2449
                $spreadsheet->getActiveSheet()->SetCellValue('A' . $i, ucwords(strtolower(trim($record['first_name']))));
2450
                $spreadsheet->getActiveSheet()->SetCellValue('B' . $i, ucwords(strtolower(trim($record['last_name']))));
2451
                $spreadsheet->getActiveSheet()->SetCellValue('C' . $i, strtolower(trim($record['email'])));
2452
                $spreadsheet->getActiveSheet()->SetCellValue('D' . $i, $record['progress']);
2453
                $spreadsheet->getActiveSheet()->SetCellValue('E' . $i, $record['total_capsules']);
2454
                $spreadsheet->getActiveSheet()->SetCellValue('F' . $i, $record['completed_capsules']);
2455
                $spreadsheet->getActiveSheet()->SetCellValue('G' . $i, $record['started_capsules']);
2456
                $spreadsheet->getActiveSheet()->SetCellValue('H' . $i, $record['pending_capsules']);
2457
                $spreadsheet->getActiveSheet()->SetCellValue('I' . $i, $record['added_on']);
2458
                $spreadsheet->getActiveSheet()->SetCellValue('J' . $i, $record['updated_on']);
2459
                $i++;
2460
            }
2461
 
2462
 
2463
            $fileName = 'reporte_progreso_por_topico_' . time() . '.xls';
2464
 
2465
            $tempFilename = tempnam(sys_get_temp_dir(), 'reporte_progreso_por_topico_' . time());
2466
 
2467
 
2468
 
2469
 
2470
 
2471
            $writer = IOFactory::createWriter($spreadsheet, 'Xls');
2472
            $writer->save($tempFilename);
2473
 
2474
            $content = file_get_contents($tempFilename);
2475
            @unlink($tempFilename);
2476
 
2477
            return new JsonModel([
2478
                'success' => true,
2479
                'data' => [
2480
                    'content' => base64_encode($content),
2481
                    'basename' => $fileName
2482
 
2483
                ]
2484
            ]);
2485
 
2486
 
2487
 
2488
 
2489
        } else {
2490
            return new JsonModel([
2491
                'success' => false,
2492
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
2493
            ]);
2494
        }
2495
    }
483 efrain 2496
 
15386 efrain 2497
 
2498
    public function progressForStudentAction()
2499
    {
2500
        $currentUserPlugin = $this->plugin('currentUserPlugin');
2501
        $currentUser = $currentUserPlugin->getUser();
2502
        $currentCompany = $currentUserPlugin->getCompany();
2503
 
2504
        $request = $this->getRequest();
2505
 
2506
        if($request->isGet())
2507
        {
2508
 
2509
            $headers  = $request->getHeaders();
2510
 
2511
            $isJson = false;
2512
            if($headers->has('Accept')) {
2513
                $accept = $headers->get('Accept');
2514
 
2515
                $prioritized = $accept->getPrioritized();
2516
 
2517
                foreach($prioritized as $key => $value) {
2518
                    $raw = trim($value->getRaw());
2519
 
2520
                    if(!$isJson) {
2521
                        $isJson = strpos($raw, 'json');
2522
                    }
2523
 
2524
                }
2525
            }
2526
 
2527
 
2528
            if($isJson) {
2529
 
2530
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
2531
                $allowDownload = $acl->isAllowed($currentUser->usertype_id, 'microlearning/reports/progress-for-student/excel');
2532
 
16766 efrain 2533
                $student_uuid     = Functions::sanitizeFilterString($this->params()->fromQuery('student_uuid'));
15386 efrain 2534
 
2535
                $userMapper = UserMapper::getInstance($this->adapter);
2536
                $user = $userMapper->fetchOneByUuidAndNetworkId($student_uuid, $currentUser->network_id);
2537
 
2538
 
2539
                if(!$user) {
2540
                    return new JsonModel([
2541
                        'success' => false,
2542
                        'data' => 'ERROR_USER_NOT_FOUND'
2543
                    ]);
2544
                }
2545
 
2546
 
17002 efrain 2547
                $microlearningCapsuleUserMapper = MicrolearningCapsuleUserMapper::getInstance($this->adapter);
2548
                $count = $microlearningCapsuleUserMapper->fetchCountByCompanyIdAndUserId($currentCompany->id, $user->id);
15386 efrain 2549
 
2550
 
2551
                if(!$count) {
2552
                    return new JsonModel([
2553
                        'success' => false,
2554
                        'data' => 'ERROR_UNAUTHORIZED'
2555
                    ]);
2556
                }
2557
 
2558
 
2559
                $data = [
2560
                    'items' => [],
2561
                ];
2562
 
2563
 
2564
                $queryMapper = QueryMapper::getInstance($this->adapter);
2565
                $sql = $queryMapper->getSql();
2566
                $select = $sql->select();
15389 efrain 2567
                $select->columns(['capsule_id', 'access', 'paid_from', 'paid_to' ]);
17002 efrain 2568
                $select->from(['tb1' => MicrolearningCapsuleUserMapper::_TABLE] );
2569
                $select->join(['tb2' => MicrolearningTopicMapper::_TABLE], 'tb1.company_id = tb2.company_id AND tb1.topic_id = tb2.id', ['topic' => 'name']);
2570
                $select->join(['tb3' => MicrolearningCapsuleMapper::_TABLE], 'tb1.company_id = tb3.company_id AND tb1.topic_id = tb3.topic_id AND tb1.capsule_id = tb3.id', ['capsule' => 'name']);
15386 efrain 2571
                $select->where->equalTo('tb1.company_id', $currentCompany->id);
2572
                $select->where->equalTo('tb1.user_id', $user->id);
2573
                $select->order('tb2.name ASC, tb3.name ASC');
15389 efrain 2574
 
15386 efrain 2575
 
2576
                $items = [];
2577
                $records = $queryMapper->fetchAll($select);
2578
                foreach($records as $record)
2579
                {
15389 efrain 2580
                    $capsule_id = $record['capsule_id'];
2581
 
15386 efrain 2582
 
2583
                    $item = [
15387 efrain 2584
                        'topic' => ucwords(strtolower($record['topic'])),
2585
                        'capsule' => ucwords(strtolower($record['capsule'])),
15389 efrain 2586
                        'progress' => 0,
2587
                        'total_slides' => 0,
2588
                        'view_slides' => 0,
2589
                        'completed' => 'No',
2590
                        'added_on' => '',
2591
                        'updated_on' => '',
15386 efrain 2592
 
2593
                    ];
2594
 
15389 efrain 2595
                    $items[ $record['capsule_id'] ] =  $item;
15386 efrain 2596
                }
15389 efrain 2597
 
15386 efrain 2598
 
15389 efrain 2599
 
2600
                $queryMapper = QueryMapper::getInstance($this->adapter);
2601
                $sql = $queryMapper->getSql();
17002 efrain 2602
                $select = $sql->select(MicrolearningUserProgressMapper::_TABLE);
15389 efrain 2603
                $select->columns(['capsule_id', 'progress', 'total_slides' , 'view_slides', 'completed', 'added_on','updated_on']);
2604
                $select->where->equalTo('company_id', $currentCompany->id);
2605
                $select->where->equalTo('user_id', $user->id);
17002 efrain 2606
                $select->where->equalTo('type', MicrolearningUserProgress::TYPE_CAPSULE);
15389 efrain 2607
 
2608
 
2609
 
2610
 
2611
                $records = $queryMapper->fetchAll($select);
2612
 
2613
 
2614
 
2615
                foreach($records as $record)
2616
                {
2617
                    $capsule_id = $record['capsule_id'];
2618
                    $dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);
2619
                    $added_on = $dt_added_on->format('d/m/Y h:i a');
2620
 
2621
                    $dt_updated_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['updated_on']);
2622
                    $updated_on = $dt_updated_on->format('d/m/Y h:i a');
2623
 
2624
 
2625
                    $items[ $capsule_id ]['progress'] = $record['progress'];
2626
                    $items[ $capsule_id ]['total_slides'] = $record['total_slides'];
2627
                    $items[ $capsule_id ]['view_slides'] = $record['view_slides'];
15390 efrain 2628
                    $items[ $capsule_id ]['completed'] = $record['completed'] == 1 ? 'Si' : 'No';
15389 efrain 2629
                    $items[ $capsule_id ]['added_on'] = $added_on;
2630
                    $items[ $capsule_id ]['updated_on'] = $updated_on;
2631
                }
2632
 
2633
 
15386 efrain 2634
                $data['items'] = array_values($items);
2635
 
2636
                if($allowDownload) {
2637
                    $data['link_download'] = $this->url()->fromRoute('microlearning/reports/progress-for-student/excel', [], ['query' => ['student_uuid' => $user->uuid] ]);
2638
                }
2639
 
2640
 
2641
 
2642
                return new JsonModel([
2643
                    'success' => true,
2644
                    'data' => $data
2645
                ]);
2646
            } else {
2647
 
2648
 
2649
                $form = new StudentReportForm($this->adapter, $currentCompany->id);
2650
 
2651
 
2652
 
2653
                $this->layout()->setTemplate('layout/layout-backend');
2654
                $viewModel = new ViewModel();
2655
                $viewModel->setTemplate('leaders-linked/microlearning-reports/progress-for-student.phtml');
2656
                $viewModel->setVariables([
2657
                    'form' => $form,
2658
                ]);
2659
 
2660
                return $viewModel ;
2661
            }
2662
 
2663
        } else {
2664
            return new JsonModel([
2665
                'success' => false,
2666
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
2667
            ]);
2668
        }
2669
    }
2670
 
2671
    public function progressForStudentExcelAction()
2672
    {
2673
        $currentUserPlugin = $this->plugin('currentUserPlugin');
2674
        $currentUser = $currentUserPlugin->getUser();
2675
        $currentCompany = $currentUserPlugin->getCompany();
2676
 
2677
        $request = $this->getRequest();
2678
 
2679
        if($request->isGet())
2680
        {
2681
 
16766 efrain 2682
            $student_uuid     = Functions::sanitizeFilterString($this->params()->fromQuery('student_uuid'));
15386 efrain 2683
 
2684
            $userMapper = UserMapper::getInstance($this->adapter);
2685
            $user = $userMapper->fetchOneByUuidAndNetworkId($student_uuid, $currentUser->network_id);
2686
 
2687
 
2688
            if(!$user) {
2689
                return new JsonModel([
2690
                    'success' => false,
2691
                    'data' => 'ERROR_USER_NOT_FOUND'
2692
                ]);
2693
            }
2694
 
17002 efrain 2695
            $microlearningCapsuleUserMapper = MicrolearningCapsuleUserMapper::getInstance($this->adapter);
2696
            $count = $microlearningCapsuleUserMapper->fetchCountByCompanyIdAndUserId($currentCompany->id, $user->id);
15386 efrain 2697
 
2698
 
2699
            if(!$count) {
2700
                return new JsonModel([
2701
                    'success' => false,
2702
                    'data' => 'ERROR_UNAUTHORIZED'
2703
                ]);
2704
            }
2705
 
2706
 
2707
 
2708
 
2709
            $queryMapper = QueryMapper::getInstance($this->adapter);
2710
            $sql = $queryMapper->getSql();
2711
            $select = $sql->select();
15389 efrain 2712
            $select->columns(['capsule_id', 'access', 'paid_from', 'paid_to' ]);
17002 efrain 2713
            $select->from(['tb1' => MicrolearningCapsuleUserMapper::_TABLE] );
2714
            $select->join(['tb2' => MicrolearningTopicMapper::_TABLE], 'tb1.company_id = tb2.company_id AND tb1.topic_id = tb2.id', ['topic' => 'name']);
2715
            $select->join(['tb3' => MicrolearningCapsuleMapper::_TABLE], 'tb1.company_id = tb3.company_id AND tb1.topic_id = tb3.topic_id AND tb1.capsule_id = tb3.id', ['capsule' => 'name']);
15386 efrain 2716
            $select->where->equalTo('tb1.company_id', $currentCompany->id);
2717
            $select->where->equalTo('tb1.user_id', $user->id);
2718
            $select->order('tb2.name ASC, tb3.name ASC');
2719
 
2720
 
2721
            $items = [];
2722
            $records = $queryMapper->fetchAll($select);
2723
            foreach($records as $record)
2724
            {
15389 efrain 2725
                $capsule_id = $record['capsule_id'];
15386 efrain 2726
 
2727
 
2728
                $item = [
15389 efrain 2729
                    'topic' => ucwords(strtolower($record['topic'])),
2730
                    'capsule' => ucwords(strtolower($record['capsule'])),
2731
                    'progress' => 0,
2732
                    'total_slides' => 0,
2733
                    'view_slides' => 0,
2734
                    'completed' => 'No',
2735
                    'added_on' => '',
2736
                    'updated_on' => '',
15386 efrain 2737
 
2738
                ];
2739
 
15389 efrain 2740
                $items[ $record['capsule_id'] ] =  $item;
15386 efrain 2741
            }
2742
 
2743
 
2744
 
15389 efrain 2745
            $queryMapper = QueryMapper::getInstance($this->adapter);
2746
            $sql = $queryMapper->getSql();
17002 efrain 2747
            $select = $sql->select(MicrolearningUserProgressMapper::_TABLE);
15389 efrain 2748
            $select->columns(['capsule_id', 'progress', 'total_slides' , 'view_slides', 'completed', 'added_on','updated_on']);
2749
            $select->where->equalTo('company_id', $currentCompany->id);
2750
            $select->where->equalTo('user_id', $user->id);
17002 efrain 2751
            $select->where->equalTo('type', MicrolearningUserProgress::TYPE_CAPSULE);
15389 efrain 2752
 
2753
 
2754
 
2755
 
2756
            $records = $queryMapper->fetchAll($select);
2757
 
2758
 
2759
 
2760
            foreach($records as $record)
2761
            {
2762
                $capsule_id = $record['capsule_id'];
2763
                $dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);
2764
                $added_on = $dt_added_on->format('d/m/Y h:i a');
2765
 
2766
                $dt_updated_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['updated_on']);
2767
                $updated_on = $dt_updated_on->format('d/m/Y h:i a');
2768
 
2769
 
2770
                $items[ $capsule_id ]['progress'] = $record['progress'];
2771
                $items[ $capsule_id ]['total_slides'] = $record['total_slides'];
2772
                $items[ $capsule_id ]['view_slides'] = $record['view_slides'];
2773
                $items[ $capsule_id ]['completed'] = $record['completed'];
2774
                $items[ $capsule_id ]['added_on'] = $added_on;
2775
                $items[ $capsule_id ]['updated_on'] = $updated_on;
2776
            }
2777
 
2778
 
2779
 
2780
 
2781
            $records = array_values($items);
2782
 
2783
 
15386 efrain 2784
            $spreadsheet = new Spreadsheet();
2785
            $spreadsheet->getProperties()->setTitle("Progreso por Tópico");
2786
 
2787
 
2788
 
2789
            $spreadsheet->setActiveSheetIndex(0);
2790
            $spreadsheet->getActiveSheet()->SetCellValue('A1', 'Nombre:');
2791
            $spreadsheet->getActiveSheet()->SetCellValue('A2', ucwords(trim(strtolower($user->first_name))));
2792
            $spreadsheet->getActiveSheet()->SetCellValue('B1', 'Apellido:');
2793
            $spreadsheet->getActiveSheet()->SetCellValue('B2', ucwords(trim(strtolower($user->last_name))));
2794
            $spreadsheet->getActiveSheet()->SetCellValue('C1', 'Correo electrónco:');
2795
            $spreadsheet->getActiveSheet()->SetCellValue('C2', trim(strtolower($user->email)));
2796
            $spreadsheet->getActiveSheet()->SetCellValue('D1', 'Fecha:');
2797
            $spreadsheet->getActiveSheet()->SetCellValue('D2', date('d/m/Y h:i a'));
2798
 
2799
 
2800
 
2801
            $spreadsheet->getActiveSheet()->SetCellValue('A4', 'Tópico');
2802
            $spreadsheet->getActiveSheet()->SetCellValue('B4', 'Cápsula');
2803
            $spreadsheet->getActiveSheet()->SetCellValue('C4', 'Progreso');
2804
            $spreadsheet->getActiveSheet()->SetCellValue('D4', 'Diapositivas Totales');
2805
            $spreadsheet->getActiveSheet()->SetCellValue('E4', 'Diapositivas Vistas');
2806
            $spreadsheet->getActiveSheet()->SetCellValue('F4', 'Cápsula Completada');
2807
            $spreadsheet->getActiveSheet()->SetCellValue('G4', 'Inicio');
2808
            $spreadsheet->getActiveSheet()->SetCellValue('H4', 'Ultima vez');
2809
 
2810
            $i = 5;
2811
            foreach($records as $record)
2812
            {
2813
                $spreadsheet->getActiveSheet()->SetCellValue('A' . $i, ucwords(strtolower(trim($record['topic']))));
2814
                $spreadsheet->getActiveSheet()->SetCellValue('B' . $i, ucwords(strtolower(trim($record['capsule']))));
2815
                $spreadsheet->getActiveSheet()->SetCellValue('C' . $i, $record['progress']);
2816
                $spreadsheet->getActiveSheet()->SetCellValue('D' . $i, $record['total_slides']);
2817
                $spreadsheet->getActiveSheet()->SetCellValue('E' . $i, $record['view_slides']);
2818
                $spreadsheet->getActiveSheet()->SetCellValue('F' . $i, $record['completed'] == 1 ? 'Si' : 'No');
2819
                $spreadsheet->getActiveSheet()->SetCellValue('G' . $i, $record['added_on']);
2820
                $spreadsheet->getActiveSheet()->SetCellValue('H' . $i, $record['updated_on']);
2821
                $i++;
2822
            }
2823
 
2824
 
2825
            $fileName = 'reporte_progreso_por_estudiante_' . time() . '.xls';
2826
 
2827
            $tempFilename = tempnam(sys_get_temp_dir(), 'reporte_progreso_por_estudiante_' . time());
2828
 
2829
 
2830
 
2831
 
2832
 
2833
            $writer = IOFactory::createWriter($spreadsheet, 'Xls');
2834
            $writer->save($tempFilename);
2835
 
2836
            $content = file_get_contents($tempFilename);
2837
            @unlink($tempFilename);
2838
 
2839
            return new JsonModel([
2840
                'success' => true,
2841
                'data' => [
2842
                    'content' => base64_encode($content),
2843
                    'basename' => $fileName
2844
 
2845
                ]
2846
            ]);
2847
 
2848
 
2849
 
2850
 
2851
        } else {
2852
            return new JsonModel([
2853
                'success' => false,
2854
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
2855
            ]);
2856
        }
2857
    }
2858
 
2859
 
2860
}