Proyectos de Subversion LeadersLinked - Backend

Rev

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

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