Proyectos de Subversion LeadersLinked - Backend

Rev

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

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