Proyectos de Subversion LeadersLinked - Backend

Rev

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