Proyectos de Subversion LeadersLinked - Backend

Rev

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