Proyectos de Subversion LeadersLinked - Backend

Rev

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