Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
15333 stevensc 1
<?php
2
 
1 www 3
use LeadersLinked\Model\CompanyUser;
4
 
5
$acl            = $this->viewModel()->getRoot()->getVariable('acl');
6
$currentUser    = $this->currentUserHelper();
7
 
8
$roleName = $currentUser->getUserTypeId();
9
 
10
 
11
//$routeAdd       = $this->url('users/add');
12
$routeDatatable = $this->url('users');
13
$routeInvite    = $this->url('users/invite');
14
$routeUpload    = $this->url('users/upload');
15
 
16
 
17
 
18
$allowInvite            = $acl->isAllowed($roleName, 'users/invite') ? 1 : 0;
19
$allowAccept            = $acl->isAllowed($roleName, 'users/accept') ? 1 : 0;
20
$allowCancel            = $acl->isAllowed($roleName, 'users/cancel') ? 1 : 0;
21
$allowReject            = $acl->isAllowed($roleName, 'users/reject') ? 1 : 0;
22
$allowEdit              = $acl->isAllowed($roleName, 'users/edit') ? 1 : 0;
23
$allowUpload            = $acl->isAllowed($roleName, 'users/upload') ? 1 : 0;
24
$allowChangePassword    = $acl->isAllowed($roleName, 'users/change-password') ? 1 : 0;
25
$allowUnblock           = $acl->isAllowed($roleName, 'users/unblock') ? 1 : 0;
26
 
27
 
16822 efrain 28
$this->inlineScript()->appendFile($this->basePath('assets/vendors/popper/umd/popper.js'));
29
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/nprogress/nprogress.css'));
30
$this->inlineScript()->appendFile($this->basePath('assets/vendors/nprogress/nprogress.js'));
1 www 31
 
16822 efrain 32
$this->inlineScript()->appendFile($this->basePath('assets/vendors/ckeditor/ckeditor.js'));
1 www 33
 
34
 
35
 
16912 efrain 36
 
16929 efrain 37
 
38
 
39
 
16822 efrain 40
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/datatables.net-bs5/dataTables.bootstrap5.css'));
16912 efrain 41
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/datatables.net-bs5-responsive/responsive.bootstrap5.css'));
1 www 42
 
16822 efrain 43
$this->inlineScript()->appendFile($this->basePath('assets/vendors/datatables.net/jquery.dataTables.js'));
44
$this->inlineScript()->appendFile($this->basePath('assets/vendors/datatables.net-bs5/dataTables.bootstrap5.js'));
16912 efrain 45
$this->inlineScript()->appendFile($this->basePath('assets/vendors/datatables.net-bs5-responsive/dataTables.responsive.min.js'));
46
$this->inlineScript()->appendFile($this->basePath('assets/vendors/datatables.net-bs5-responsive/responsive.bootstrap5.min.js'));
1 www 47
 
48
 
16822 efrain 49
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/bootstrap4-toggle/css/bootstrap4-toggle.min.css'));
50
$this->inlineScript()->appendFile($this->basePath('assets/vendors/bootstrap4-toggle/js/bootstrap4-toggle.min.js'));
1 www 51
 
52
 
16926 efrain 53
$this->inlineScript()->appendFile($this->basePath('assets/vendors/typeahead.js/typeahead.bundle.min.js'));
1 www 54
 
55
 
16822 efrain 56
$this->inlineScript()->appendFile($this->basePath('assets/vendors/bootstrap-autocomplete/bootstrap-autocomplete.js'));
1 www 57
 
58
 
16822 efrain 59
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/bootstrap-fileinput/css/fileinput.min.css'));
60
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/bootstrap-fileinput/themes/explorer-fa/theme.css'));
61
 
16843 efrain 62
$this->inlineScript()->appendFile($this->basePath('assets/vendors/bootstrap-fileinput/js/plugins/piexif.js'));
63
$this->inlineScript()->appendFile($this->basePath('assets/vendors/bootstrap-fileinput/js/plugins/sortable.js'));
16822 efrain 64
$this->inlineScript()->appendFile($this->basePath('assets/vendors/bootstrap-fileinput/js/fileinput.js'));
65
$this->inlineScript()->appendFile($this->basePath('assets/vendors/bootstrap-fileinput/js/locales/es.js'));
66
$this->inlineScript()->appendFile($this->basePath('assets/vendors/bootstrap-fileinput/themes/fa/theme.js'));
67
$this->inlineScript()->appendFile($this->basePath('assets/vendors/bootstrap-fileinput/themes/explorer-fa/theme.js'));
68
 
16954 efrain 69
 
1 www 70
$this->headStyle()->captureStart();
16954 efrain 71
echo <<<CSS
1 www 72
 
16954 efrain 73
 
74
#gridTableUsers {
75
    display: flex;
76
    flex-flow: column;
77
    width: 100%;
78
}
79
 
80
#gridTableUsers thead {
81
    flex: 0 0 auto;
82
}
83
 
84
#gridTableUsers tbody {
85
    flex: 1 1 auto;
86
    display: block;
87
    overflow-y: auto;
88
    overflow-x: hidden;
89
}
90
 
91
#gridTableUsers tr {
92
    width: 100%;
93
    display: table;
94
    table-layout: fixed;
95
}
96
 
97
CSS;
98
$this->headStyle()->captureEnd();
99
 
1 www 100
$this->inlineScript()->captureStart();
101
echo <<<JS
102
    jQuery( document ).ready(function( $ ) {
103
        $.validator.addMethod('passwordStrengthCheck', function(value) {
104
            return /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$^x%x*-]).{6,16}$/.test(value)
105
        }, 'ERROR_PASSWORD_STRENGTH');
106
 
107
        $.validator.setDefaults({
108
            debug: true,
109
            highlight: function(element) {
110
                $(element).closest('.sn-field').addClass('sn-field-has-error');
111
            },
112
            unhighlight: function(element) {
113
                $(element).closest('.sn-field').removeClass('sn-field-has-error');
114
            },
115
            errorElement: 'div',
116
            errorClass: 'sn-field-invalid-feedback',
117
            errorPlacement: function(error, element) {
118
 
119
                if(element.parent('.sn-field').length) {
120
                    error.insertAfter(element.parent());
121
                } else if (element.parent('.fgt-sec').length) {
122
                    error.insertAfter(element.parent());
123
                } else {
124
                    error.insertAfter(element);
125
                }
126
            }
127
        });
128
 
129
 
130
        var allowInvite = $allowInvite;
131
        var allowAccept = $allowAccept;
132
        var allowCancel = $allowCancel;
133
        var allowReject = $allowReject;
134
        var allowEdit  = $allowEdit;
135
        var allowUpload = $allowUpload;
136
        var allowChangePassword = $allowChangePassword;
137
        var allowUnblock = $allowUnblock;
138
 
139
        var gridTable = $('#gridTable').dataTable( {
140
            'processing': true,
141
            'serverSide': true,
142
            'searching': true,
143
            'order': [[ 0, 'asc' ]],
144
            'ordering':  true,
145
            'ordenable' : true,
146
            'responsive': true,
147
            'select' : false,
148
        	'paging': true,
149
            'pagingType': 'simple_numbers',
150
    		'ajax': {
151
    			'url' : '$routeDatatable',
152
    			'type' : 'get',
153
                'data' : function(data) {
154
                    data.status = $('#form-filter #status').val();
155
                } ,
156
                'beforeSend': function (request) {
157
                  NProgress.start();
158
                },
159
                'dataFilter': function(response) {
160
                    var response = jQuery.parseJSON( response );
161
 
162
                    var json                = {};
163
                    json.recordsTotal       = 0;
164
                    json.recordsFiltered    = 0;
165
                    json.data               = [];
166
 
167
 
168
                    if(response.success) {
169
                        json.recordsTotal       = response.data.total;
170
                        json.recordsFiltered    = response.data.total;
171
                        json.data               = response.data.items;
172
                    } else {
173
                        $.fn.showError(response.data)
174
                    }
175
 
176
                    return JSON.stringify( json );
177
                }
178
    		},
179
            'language' : {
180
                'sProcessing':     'LABEL_DATATABLE_SPROCESSING',
181
                'sLengthMenu':     'LABEL_DATATABLE_SLENGTHMENU',
182
                'sZeroRecords':    'LABEL_DATATABLE_SZERORECORDS',
183
                'sEmptyTable':     'LABEL_DATATABLE_SEMPTYTABLE',
184
                'sInfo':           'LABEL_DATATABLE_SINFO',
185
                'sInfoEmpty':      'LABEL_DATATABLE_SINFOEMPTY',
186
                'sInfoFiltered':   'LABEL_DATATABLE_SINFOFILTERED',
187
                'sInfoPostFix':    '',
188
                'sSearch':         'LABEL_DATATABLE_SSEARCH',
189
                'sUrl':            '',
190
                'sInfoThousands':  ',',
191
                'sLoadingRecords': 'LABEL_DATATABLE_SLOADINGRECORDS',
192
                'oPaginate': {
193
                    'sFirst':    'LABEL_DATATABLE_SFIRST',
194
                    'sLast':     'LABEL_DATATABLE_SLAST',
195
                    'sNext':     'LABEL_DATATABLE_SNEXT',
196
                    'sPrevious': 'LABEL_DATATABLE_SPREVIOUS'
197
                },
198
                'oAria': {
199
                    'sSortAscending':  ': LABEL_DATATABLE_SSORTASCENDING',
200
                    'sSortDescending': ':LABEL_DATATABLE_SSORTDESCENDING'
201
                },
202
            },
203
            'drawCallback': function( settings ) {
204
                NProgress.done();
16822 efrain 205
 
1 www 206
            },
207
            'aoColumns': [
208
                { 'mDataProp': 'first_name' },
209
                { 'mDataProp': 'last_name' },
210
                { 'mDataProp': 'email' },
211
                { 'mDataProp': 'details' },
212
                { 'mDataProp': 'actions' },
213
    	    ],
214
            'columnDefs': [
215
                {
216
                    'targets': 0,
217
                    'className' : 'text-vertical-middle',
218
                },
219
                {
220
                    'targets': 1,
221
                    'className' : 'text-vertical-middle',
222
                },
223
                {
224
                    'targets': 2,
225
                    'className' : 'text-vertical-middle',
226
                },
227
                {
228
                    'targets': -2,
229
                    'orderable': false,
230
                    'render' : function ( data, type, row ) {
231
                        var s =  '';
232
                        s = s + 'LABEL_STATUS : <br>' + data['status'] + '<br>';
233
                        s = s + 'LABEL_ACCESS_BACKEND : ' + data['backend'] + '<br>';
234
                        s = s + 'LABEL_CREATOR : ' + data['creator'] + '<br>';
235
 
236
                        s = s + 'LABEL_EDIT : <br>';
237
 
238
                        $.each(data['roles'], function(i, role) {
239
                            s = s + role + '<br>';
240
                        });
241
 
242
                        s = s + 'LABEL_BLOCKED : ' + data['blocked'] + '<br>';
243
                        s = s + 'LABEL_EMAIL_VERIFIED : ' + data['email_verified'] + '<br>';
244
                        s = s + 'LABEL_LOGIN_ATTEMP : ' + data['login_attempt'] + '<br>';
245
                        return s;
246
                    }
247
                },
248
                {
249
                    'targets': -1,
250
                    'orderable': false,
251
                    'render' : function ( data, type, row ) {
252
                        s = '';
15333 stevensc 253
 
254
                        $('#gridTable_wrapper .row:nth-child(2) .col-sm-12').addClass( "table table-responsive" );
1 www 255
 
256
                        if(allowAccept && data['link_accept']) {
16822 efrain 257
                            s = s + '<button class="btn btn-sm btn-accept btn-primary" style="margin-top: 5px" data-href="' + data['link_accept']+ '" data-toggle="tooltip" title="LABEL_ACCEPT"><i class="fa fa-check"></i> LABEL_ACCEPT </button><br>';
1 www 258
                        }
15261 stevensc 259
                        if(allowEdit && data['link_edit']) {
16906 efrain 260
                            s = s + '<button class="btn btn-sm btn-edit btn-primary" style="margin-top: 5px" data-href="' + data['link_edit']+ '" data-toggle="tooltip" title="LABEL_EDIT"><i class="fa fa-pen"></i> LABEL_EDIT </button><br>';
15261 stevensc 261
                        }
1 www 262
                        if(allowCancel && data['link_cancel']) {
16822 efrain 263
                            s = s + '<button class="btn btn-sm btn-cancel btn-danger" style="margin-top: 5px" data-href="' + data['link_cancel']+ '" data-toggle="tooltip" data-singleton="true" title="LABEL_CANCEL"><i class="fa fa-times"></i> LABEL_CANCEL </button><br>';
1 www 264
                        }
265
                        if(allowReject && data['link_reject']) {
16822 efrain 266
                            s = s + '<button class="btn btn-sm btn-reject btn-danger" style="margin-top: 5px" data-href="' + data['link_reject']+ '" data-toggle="tooltip" title="LABEL_REJECT"><i class="fa fa-times"></i> LABEL_REJECT </button><br>';
1 www 267
                        }
268
 
269
                        if(allowChangePassword && data['link_change_password']) {
16822 efrain 270
                            s = s + '<button class="btn btn-sm btn-primary btn-change-password" style="margin-top: 5px" data-href="' + data['link_change_password']+ '" data-toggle="tooltip" title="LABEL_CHANGE_PASSWORD"><i class="fa fa-key"></i> LABEL_PASSWORD </button><br>';
1 www 271
                        }
272
                        if(allowUnblock && data['link_unblock']) {
16822 efrain 273
                            s = s + '<button class="btn btn-sm btn-info btn-unblock" style="margin-top: 5px" data-href="' + data['link_unblock']+ '" data-toggle="tooltip" title="LABEL_UNBLOCK"><i class="fa fa-unlock"></i> LABEL_UNBLOCK </button><br>';
1 www 274
                        }
275
 
276
 
277
                        return s;
278
                    }
279
                }
280
 
281
            ],
282
        });
283
 
284
 
285
        $('#form-filter #status').change(function(e) {
286
            e.preventDefault();
287
            gridTable.api().ajax.reload(null, false);
288
        });
289
 
290
 
291
        $('body').on('click', 'button.btn-refresh', function(e) {
292
            e.preventDefault();
293
            gridTable.api().ajax.reload(null, false);
294
        });
295
 
16822 efrain 296
    $('body').on('click', 'button.btn-unblock', function(e) {
297
        e.preventDefault();
298
        var action = $(this).data('href');
1 www 299
 
300
 
16822 efrain 301
          swal.fire({
302
            title: 'LABEL_ARE_YOU_SURE',
303
            icon: 'question',
304
            cancelButtonText: 'LABEL_NO',
305
            showCancelButton: true,
306
            confirmButtonText: 'LABEL_YES'
307
          }).then((result) => {
308
            if (result.isConfirmed) {
1 www 309
 
16822 efrain 310
                    NProgress.start();
311
                    $.ajax({
312
                        'dataType'  : 'json',
313
                        'accept'    : 'application/json',
314
                        'method'    : 'post',
315
                        'url'       :  action,
316
                    }).done(function(response) {
317
                        if(response['success']) {
318
                            $.fn.showSuccess(response['data']);
319
                            gridTable.api().ajax.reload(null, false);
320
                        } else {
321
                            $.fn.showError(response['data']);
322
                        }
323
                    }).fail(function( jqXHR, textStatus, errorThrown) {
324
                        $.fn.showError(textStatus);
325
                    }).always(function() {
326
                        NProgress.done();
327
                    });
328
            }
329
       });
330
    });
1 www 331
 
16822 efrain 332
 $('body').on('click', 'button.btn-reject', function(e) {
333
        e.preventDefault();
334
        var action = $(this).data('href');
335
 
336
 
337
          swal.fire({
338
            title: 'LABEL_ARE_YOU_SURE',
339
            icon: 'question',
340
            cancelButtonText: 'LABEL_NO',
341
            showCancelButton: true,
342
            confirmButtonText: 'LABEL_YES'
343
          }).then((result) => {
344
            if (result.isConfirmed) {
345
 
346
                    NProgress.start();
347
                    $.ajax({
348
                        'dataType'  : 'json',
349
                        'accept'    : 'application/json',
350
                        'method'    : 'post',
351
                        'url'       :  action,
352
                    }).done(function(response) {
353
                        if(response['success']) {
354
                            $.fn.showSuccess(response['data']);
355
                            gridTable.api().ajax.reload(null, false);
356
                        } else {
357
                            $.fn.showError(response['data']);
358
                        }
359
                    }).fail(function( jqXHR, textStatus, errorThrown) {
360
                        $.fn.showError(textStatus);
361
                    }).always(function() {
362
                        NProgress.done();
363
                    });
364
            }
365
       });
366
    });
367
 
368
 $('body').on('click', 'button.btn-cancel', function(e) {
369
        e.preventDefault();
370
        var action = $(this).data('href');
371
 
372
 
373
          swal.fire({
374
            title: 'LABEL_ARE_YOU_SURE',
375
            icon: 'question',
376
            cancelButtonText: 'LABEL_NO',
377
            showCancelButton: true,
378
            confirmButtonText: 'LABEL_YES'
379
          }).then((result) => {
380
            if (result.isConfirmed) {
381
 
382
                    NProgress.start();
383
                    $.ajax({
384
                        'dataType'  : 'json',
385
                        'accept'    : 'application/json',
386
                        'method'    : 'post',
387
                        'url'       :  action,
388
                    }).done(function(response) {
389
                        if(response['success']) {
390
                            $.fn.showSuccess(response['data']);
391
                            gridTable.api().ajax.reload(null, false);
392
                        } else {
393
                            $.fn.showError(response['data']);
394
                        }
395
                    }).fail(function( jqXHR, textStatus, errorThrown) {
396
                        $.fn.showError(textStatus);
397
                    }).always(function() {
398
                        NProgress.done();
399
                    });
400
            }
401
       });
402
    });
403
 
404
 
1 www 405
        $('body').on('click', 'button.btn-invite', function(e) {
406
            e.preventDefault();
16926 efrain 407
 
1 www 408
            $('#form-invite #user_uuid').autoComplete('clear');
409
            $('#form-invite #user_uuid_selected').val('');
410
            $('#modalInvite').modal('show');
411
        });
412
 
413
        $('body').on('click', 'button.btn-accept', function(e) {
414
            e.preventDefault();
415
            action = $(this).data('href');
416
            NProgress.start();
417
            $.ajax({
418
                'dataType'  : 'json',
419
                'accept'    : 'application/json',
420
                'method'    : 'post',
421
                'url'       :  action
422
            }).done(function(response) {
423
                if(response['success']) {
424
                    $.fn.showSuccess(response['data']);
425
                    gridTable.api().ajax.reload(null, false);
426
                } else {
427
                    $.fn.showError(response['data']);
428
                }
429
            }).fail(function( jqXHR, textStatus, errorThrown) {
430
                $.fn.showError(textStatus);
431
            }).always(function() {
432
                NProgress.done();
433
            });
434
        });
435
 
436
        $('#form-invite #user_uuid').autoComplete({
437
            resolver: 'custom',
438
            events: {
439
 
440
                search: function (qry, callback) {
441
                    NProgress.start();
442
                    $.ajax({
443
                        'url' : '$routeInvite',
444
                        'method': 'get',
445
				        'data': { 'search': qry }
446
				    }).done(function (response) {
447
                        if(response['success']) {
448
                            callback(response['data'])
449
                        } else {
450
                            $.fn.showError(response['data']);
451
                        }
452
					}).fail(function( jqXHR, textStatus, errorThrown) {
453
                        $.fn.showError(textStatus);
454
                    }).always(function() {
455
                        NProgress.done();
456
                    });
457
                }
458
            }
459
        });
460
 
461
	    $('#form-invite #user_uuid').on('autocomplete.select', function (evt, item) {
462
            $('#form-invite #user_uuid_selected').val(item['value']);
463
        });
464
 
465
        var validatorFormInvite = $('#form-invite').validate({
466
            debug: true,
467
            onclick: false,
468
            onkeyup: false,
469
            ignore: [':hidden'],
470
            rules: {
471
 
472
                'user_uuid': {
473
                    required: true,
474
                },
475
            },
476
            submitHandler: function(form)
477
            {
478
                NProgress.start();
479
                $.ajax({
480
                    'dataType'  : 'json',
481
                    'accept'    : 'application/json',
482
                    'method'    : 'post',
483
                    'url'       : '$routeInvite',
484
                    'data'      : {
485
                        'id' : $('#form-invite #user_uuid_selected').val(),
486
                    }
487
                 }).done(function(response) {
488
                    if(response.success) {
489
                        $.fn.showSuccess(response.data);
490
 
491
                        $('#modalInvite').modal('hide');
492
                         gridTable.api().ajax.reload(null, false);
493
                    } else {
494
                        if(jQuery.type(response.data) == 'string') {
495
                            $.fn.showError(response.data)
496
                        } else  {
497
                            $.each(response.data, function( fieldname, errors ) {
498
                                $.fn.showFormErrorValidator('#form-invite #' + fieldname, errors);
499
                            });
500
                        }
501
                    }
502
                }).fail(function( jqXHR, textStatus, errorThrown) {
503
                    $.fn.showError(textStatus)
504
 
505
                }).always(function() {
506
                    NProgress.done();
507
                })
508
            },
509
            invalidHandler: function(form, validator) {
510
            }
511
        });
512
 
15460 efrain 513
    var validatorUploadUsers = $('#form-upload-users').validate({
1 www 514
        debug: true,
515
        onclick: false,
516
        onkeyup: false,
517
        onfocusout: false,
518
        ignore: [],
519
        rules: {
520
            'file' : {
521
                required: true,
522
                extension: 'xls|xlsx',
523
                accept: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel'
524
            },
525
        },
526
 
527
        submitHandler: function(form)
528
        {
529
            NProgress.start();
530
            var formdata = false;
531
            if (window.FormData){
532
                formdata = new FormData(form);
533
            }
534
            formdata.append('step','validation');
535
 
536
 
537
            $.ajax({
538
                'dataType'  : 'json',
539
                'accept'    : 'application/json',
540
                'method'    : 'post',
541
                'url'       : '$routeUpload',
542
                'data'      :  formdata,
543
                'processData': false,
544
                'contentType': false,
545
            }).done(function(response) {
546
                if(response['success']) {
547
 
548
                    $('#table-upload-users-key').val(response['data']['key']);
549
 
550
                    $('#gridTableUploadUsers tbody').empty();
551
 
552
                    $.each(response['data']['items'], function(index, item) {
553
 
554
 
555
                        var s = '<tr>';
556
                        s = s + '<td>' + item['first_name'] + '</td>';
557
                        s = s + '<td>' + item['last_name'] + '</td>';
558
                        s = s + '<td>' + item['email'] + '</td>';
559
                        s = s + '<td>' + item['password'] + '</td>';
15460 efrain 560
                        s = s + '<td>' + item['is_adult'] + '</td>';
1 www 561
                        s = s + '</tr>';
562
 
563
                        $('#gridTableUploadUsers tbody').append(s);
564
 
565
 
566
                    });
567
 
568
                    $('#modalFormUploadUsers').modal('hide');
569
                    $('#modalUploadUsers').modal('show');
570
 
571
 
572
 
573
                } else {
15460 efrain 574
                    validatorUploadUsers.resetForm();
1 www 575
                    if(jQuery.type(response['data']) == 'string') {
576
                        $.fn.showError(response['data']);
577
                    } else  {
578
                        $.each(response['data'], function( fieldname, errors ) {
579
                            $.fn.showFormErrorValidator('#form-upload-users #' + fieldname, errors);
580
                        });
581
                    }
582
                }
583
            }).fail(function( jqXHR, textStatus, errorThrown) {
584
                $.fn.showError(textStatus);
585
            }).always(function() {
586
 
587
                NProgress.done();
588
            });
589
            return false;
590
        },
591
        invalidHandler: function(form, validator) {
592
 
593
        }
594
    });
595
 
596
 
597
    $('#form-upload-users #file').fileinput({
15460 efrain 598
        theme: 'fa',
1 www 599
        language: 'es',
600
        showUpload: false,
601
        dropZoneEnabled: false,
602
        maxFileCount: 1,
603
        allowedFileExtensions: ['xls', 'xlsx'],
604
    });
605
 
606
    $('body').on('click', 'button.btn-upload', function(e) {
607
        e.preventDefault();
608
 
609
        $('#form-upload-users #file').fileinput('reset');
610
        $('#form-upload-users #file').val('');
611
 
612
        $('#modalFormUploadUsers').modal('show');
613
    });
614
 
615
    $('body').on('click', 'button.btn-upload-users-step2', function(e) {
616
        e.preventDefault();
617
        NProgress.start();
618
 
619
        $.ajax({
620
            'dataType'  : 'json',
621
            'accept'    : 'application/json',
622
            'method'    : 'post',
623
            'url'       : '$routeUpload',
624
            'data'      :  {
625
                'step' : 'process',
626
                'key' : $('#table-upload-users-key').val(),
627
            }
628
        }).done(function(response) {
629
            if(response['success']) {
15460 efrain 630
                if(response['data']['users_created'] == 1) {
631
                    $.fn.showSuccess(response['data']['users_created'] + ' LABEL_USER_CREATED');
1 www 632
                } else {
15460 efrain 633
                    $.fn.showSuccess(response['data']['users_created'] + ' LABEL_USERS_CREATED');
1 www 634
                }
635
                 gridTable.api().ajax.reload(null, false);
636
                $('#modalUploadUsers').modal('hide');
637
            } else {
638
                $.fn.showError(response['data']);
639
            }
640
        }).fail(function( jqXHR, textStatus, errorThrown) {
641
            $.fn.showError(textStatus);
642
        }).always(function() {
643
            NProgress.done();
644
        });
645
        return false;
646
    });
647
 
648
    $('body').on('click', 'button.btn-edit', function(e) {
649
        e.preventDefault();
650
 
651
        var href = $(this).data('href');
652
        $('#form-edit').attr('action', href);
653
 
654
        NProgress.start();
655
        $.ajax({
656
            'dataType'  : 'json',
657
            'accept'    : 'application/json',
658
            'method'    : 'get',
659
            'url'       :  href,
660
        }).done(function(response) {
661
            if(response['success']) {
662
                $('#form-edit #backend').prop('checked', response['data']['backend'] );
663
                $('#table-roles tbody').empty();
664
 
665
                $.each(response['data']['roles'], function(index, role) {
666
 
667
                    var checked = role['checked'] ? ' checked="checked" ' : '';
668
                    var s = '<tr>';
669
                    s = s + '<td>' + role['name'] + '</td>';
16927 efrain 670
                    s = s + '<td><div class="form-check mb-3">';
16943 efrain 671
                    s = s + '<input type="checkbox" value="1" class="form-check-input" id="checked' + role['id'] + '" name="checked' + role['id'] + '" ' + checked + '> ';
16927 efrain 672
					s = s + '<label class="form-check-label" >&nbsp;</label>';
673
			        s = s + '</div></td>';
1 www 674
                    s = s + '</tr>';
675
 
676
                    $('#table-roles tbody').append(s);
677
 
678
                });
679
 
680
                $('#modalEdit').modal('show');
681
 
16926 efrain 682
 
16927 efrain 683
 
1 www 684
            } else {
685
                $.fn.showError(response['data']);
686
            }
687
        }).fail(function( jqXHR, textStatus, errorThrown) {
688
            $.fn.showError(textStatus);
689
        }).always(function() {
690
            NProgress.done();
691
        });
692
 
693
    });
694
 
695
    $('#form-edit').submit(function (e) {
696
        e.preventDefault();
697
        NProgress.start();
698
        $.ajax({
699
            'dataType'  : 'json',
700
            'accept'    : 'application/json',
701
            'method'    : 'post',
702
            'url'       : $('#form-edit').attr('action'),
703
            'data'      : $('#form-edit').serialize(),
704
        }).done(function(response) {
705
            if(response['success']) {
706
 
707
                $.fn.showSuccess(response['data']);
708
                $('#modalEdit').modal('hide');
709
                gridTable.api().ajax.reload(null, false);
710
 
711
            } else {
712
                $.fn.showError(response['data']);
713
            }
714
        }).fail(function( jqXHR, textStatus, errorThrown) {
715
            $.fn.showError(textStatus);
716
        }).always(function() {
717
            NProgress.done();
718
        });
719
        return false;
720
 
721
    });
722
 
723
    $('body').on('click', 'button.btn-cancel-modal', function(e) {
724
        e.preventDefault();
725
        $('#modalInvite').modal('hide');
726
        $('#modalFormUploadUsers').modal('hide');
727
        $('#modalEdit').modal('hide');
728
        $('#modalChangePassword').modal('hide');
729
    });
730
 
731
    var validatorChangePassword = $('#form-change-password').validate({
732
        debug: true,
733
        onclick: false,
734
        onkeyup: false,
735
        ignore: [':hidden'],
736
            rules: {
737
 
738
                'password': {
739
                    required: true,
740
                    minlength: 6,
741
                    maxlength: 16,
742
                    passwordStrengthCheck: true,
743
                },
744
                'confirmation' : {
745
                    required: true,
746
                    minlength: 6,
747
                    maxlength: 16,
748
                    equalTo: '#form-change-password #password'
749
                },
750
            },
751
            submitHandler: function(form)
752
            {
753
                NProgress.start();
754
                $.ajax({
755
                    'dataType'  : 'json',
756
                    'accept'    : 'application/json',
757
                    'method'    : 'post',
758
                    'url'       : $('#form-change-password').attr('action'),
759
                    'data'      : $('#form-change-password').serialize()
760
                 }).done(function(response) {
761
                    if(response.success) {
762
                        $.fn.showSuccess(response.data);
763
 
764
                        $('#modalChangePassword').modal('hide');
765
                         gridTable.api().ajax.reload(null, false);
766
                    } else {
767
                        if(jQuery.type(response.data) == 'string') {
768
                            $.fn.showError(response.data)
769
                        } else  {
770
                            $.each(response.data, function( fieldname, errors ) {
771
                                $.fn.showFormErrorValidator('#form-change-password #' + fieldname, errors);
772
                            });
773
                        }
774
                    }
775
                }).fail(function( jqXHR, textStatus, errorThrown) {
776
                    $.fn.showError(textStatus)
777
 
778
                }).always(function() {
779
                    NProgress.done();
780
                })
781
            },
782
            invalidHandler: function(form, validator) {
783
            }
784
        });
785
 
786
        $('body').on('click', 'button.btn-change-password', function(e) {
787
            e.preventDefault();
788
 
789
            NProgress.start();
790
            var action = $(this).data('href');
791
 
792
            $.ajax({
793
                'dataType'  : 'json',
794
                'accept'    : 'application/json',
795
                'method'    : 'get',
796
                'url'       :  action,
797
            }).done(function(response) {
798
                if(response['success']) {
799
 
800
                    $('#form-change-password').attr('action', action);
801
                    $('#form-change-password #first_name').val(response['data']['first_name']);
802
                    $('#form-change-password #last_name').val(response['data']['last_name']);
803
                    $('#form-change-password #email').val(response['data']['email']);
804
                    $('#form-change-password #password').val('');
805
                    $('#form-change-password #confirmation').val('');
806
                    validatorChangePassword.resetForm();
807
 
808
                    $('#modalChangePassword').modal('show');
809
                } else {
810
                    $.fn.showError(response['data']);
811
                }
812
            }).fail(function( jqXHR, textStatus, errorThrown) {
813
                $.fn.showError(textStatus);
814
            }).always(function() {
815
                NProgress.done();
816
            });
817
 
818
        });
819
 
820
 
821
 
822
    });
823
JS;
824
$this->inlineScript()->captureEnd();
15333 stevensc 825
?>
826
 
1 www 827
 
828
 
16840 efrain 829
<div class="container">
17328 ariadna 830
    <div class="card">
831
        <div class="card-header">
832
            <h6 class="card-title">LABEL_USERS_FOR_COMPANY</h6>
833
        </div>
834
        <div class="card-body">
835
 
836
 
837
            <form name="form-filter" id="form-filter">
838
                <div class="row">
839
                    <div class="col-12  mt-3">
840
                        <label for="status">LABEL_STATUS</label>
841
                        <select id="status" name="status" class="form-control">
842
                            <option value="">LABEL_ALL</option>
843
                            <option value="<?php echo CompanyUser::STATUS_PENDING ?>">LABEL_PENDING</option>
844
                            <option value="<?php echo CompanyUser::STATUS_ACCEPTED ?>">LABEL_ACCEPTED</option>
845
                            <option value="<?php echo CompanyUser::STATUS_ADMIN_WILL_ADD ?>">LABEL_ADMIN_WILL_ADD</option>
846
                            <option value="<?php echo CompanyUser::STATUS_SENT ?>">LABEL_INVITED</option>
16912 efrain 847
                            <option value="<?php echo CompanyUser::STATUS_CANCELLED ?>">LABEL_CANCELLED</option>
17328 ariadna 848
                            <option value="<?php echo CompanyUser::STATUS_REJECTED ?>">LABEL_REJECTED</option>
849
                        </select>
850
                    </div>
851
                </div>
852
            </form>
853
            <div class="row">
854
                <div class="col-12  mt-3">
855
                    <table id="gridTable" class="table table-bordered">
16912 efrain 856
                        <thead>
17328 ariadna 857
                            <tr>
858
                                <th>LABEL_FIRST_NAME</th>
859
                                <th>LABEL_LAST_NAME</th>
860
                                <th>LABEL_EMAIL</th>
861
                                <th>LABEL_DETAILS</th>
862
                                <th>LABEL_ACTIONS</th>
863
                            </tr>
864
                        </thead>
865
                        <tbody>
866
                        </tbody>
867
                    </table>
868
                </div>
16912 efrain 869
            </div>
15333 stevensc 870
        </div>
17328 ariadna 871
        <div class="card-footer text-right">
872
            <button type="button" class="btn btn-sm btn-info btn-refresh"><i class="fa fa-sync"></i> LABEL_REFRESH</button>
873
            <?php if ($allowUpload) : ?>
874
                <button type="button" class="btn btn-sm btn-primary btn-upload"><i class="fa fa-upload"></i> LABEL_UPLOAD </button>
875
            <?php endif; ?>
876
            <?php if ($allowInvite) : ?>
877
                <button type="button" class="btn btn-sm btn-primary btn-invite"><i class="fa fa-plus"></i> LABEL_INVITE </button>
878
            <?php endif; ?>
879
        </div>
880
    </div>
16840 efrain 881
</div>
15333 stevensc 882
 
883
 
1 www 884
<!-- The Modal -->
885
<div class="modal" id="modalInvite">
15333 stevensc 886
    <div class="modal-dialog  modal-xl">
887
        <div class="modal-content">
1 www 888
 
889
            <!-- Modal Header -->
15333 stevensc 890
            <div class="modal-header">
16935 efrain 891
                <h6 class="modal-title">LABEL_INVITE</h6>
15333 stevensc 892
            </div>
1 www 893
 
894
            <!-- Modal body -->
16840 efrain 895
            <form name="form-invite" id="form-invite">
17328 ariadna 896
                <div class="modal-body">
897
 
15333 stevensc 898
                    <input type="hidden" name="user_uuid_selected" id="user_uuid_selected" />
16840 efrain 899
                    <div class="row">
17328 ariadna 900
                        <div class="col-12  mt-3">
901
                            <label for="user_uuid">LABEL_USER (LABEL_MIN_LENGTH_3)</label>
902
                            <br />
903
                            <input autocomplete="off" type="text" name="user_uuid" id="user_uuid" class="form-control" data-noresults-text="LABEL_AUTOCOMPLETE_USERS_NOT_FOUND">
904
                        </div>
905
                    </div>
1 www 906
 
907
 
17328 ariadna 908
 
909
 
910
                </div>
911
                <div class="modal-footer text-right">
912
                    <button type="submit" class="btn btn-sm btn-primary">LABEL_INVITE</button>
913
                    <button type="button" class="btn btn-sm btn-light btn-cancel-modal">LABEL_CANCEL</button>
914
                </div>
16840 efrain 915
            </form>
15333 stevensc 916
        </div>
917
    </div>
918
</div>
1 www 919
 
920
 
15333 stevensc 921
 
1 www 922
<!-- The Modal -->
923
<div class="modal" id="modalFormUploadUsers">
15333 stevensc 924
    <div class="modal-dialog  modal-xl">
925
        <div class="modal-content">
1 www 926
 
927
            <!-- Modal Header -->
15333 stevensc 928
            <div class="modal-header">
16935 efrain 929
                <h6 class="modal-title">LABEL_UPLOAD</h6>
15333 stevensc 930
            </div>
1 www 931
 
17328 ariadna 932
            <?php
933
            $form = $this->formUploadUsers;
934
            $form->setAttributes([
935
                'method'    => 'post',
936
                'name'      => 'form-upload-users',
937
                'id'        => 'form-upload-users'
938
            ]);
1 www 939
 
17328 ariadna 940
            $form->prepare();
941
            echo $this->form()->openTag($form);
942
            ?>
16840 efrain 943
            <!-- Modal body -->
944
            <div class="modal-body">
15333 stevensc 945
 
17328 ariadna 946
 
16840 efrain 947
                <div class="row">
17328 ariadna 948
                    <div class="col-12  mt-3">
15333 stevensc 949
 
950
 
951
                        <?php
17328 ariadna 952
                        $element = $form->get('file');
953
                        $element->setOptions(['label' => 'LABEL_EXCEL']);
954
                        echo $this->formLabel($element);
955
                        ?>
956
                        <div class="file-loading">
957
                            <?php
16816 stevensc 958
 
17328 ariadna 959
                            $element->setAttributes(['class' => 'form-control', 'accept' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel']);
960
                            echo $this->formFile($element);
961
                            ?>
16840 efrain 962
                        </div>
15333 stevensc 963
                    </div>
964
                </div>
1 www 965
 
966
 
967
 
17328 ariadna 968
 
16840 efrain 969
            </div>
17328 ariadna 970
            <div class="modal-footer text-right">
971
                <button type="submit" class="btn btn-sm btn-primary">LABEL_UPLOAD</button>
972
                <button type="button" class="btn btn-sm btn-light btn-cancel-modal">LABEL_CANCEL</button>
973
            </div>
974
            <?php echo $this->form()->closeTag($form); ?>
15333 stevensc 975
        </div>
976
    </div>
977
</div>
1 www 978
 
979
 
15333 stevensc 980
 
1 www 981
<!-- The Modal -->
982
<div class="modal" id="modalUploadUsers">
15333 stevensc 983
    <div class="modal-dialog modal-xl">
984
        <div class="modal-content">
1 www 985
 
986
            <!-- Modal Header -->
15333 stevensc 987
            <div class="modal-header">
16935 efrain 988
                <h6 class="modal-title">LABEL_USERS_FOR_COMPANY</h6>
16822 efrain 989
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="btn-close"></button>
15333 stevensc 990
            </div>
1 www 991
 
992
            <!-- Modal body -->
15333 stevensc 993
            <div class="modal-body">
994
                <form>
995
                    <input type="hidden" name="table-upload-users-key" id="table-upload-users-key">
996
                </form>
16840 efrain 997
                <div class="row">
17328 ariadna 998
                    <div class="col-12  mt-3" style="height: 300px;overflow: scroll;">
999
                        <table id="gridTableUploadUsers" style="width: 100%" class="table table-bordered">
16840 efrain 1000
                            <thead>
1001
                                <tr>
1002
                                    <th>LABEL_FIRST_NAME</th>
1003
                                    <th>LABEL_LAST_NAME</th>
1004
                                    <th>LABEL_EMAIL</th>
1005
                                    <th>LABEL_PASSWORD</th>
1006
                                    <th>LABEL_IS_ADULT</th>
1007
                                </tr>
1008
                            </thead>
1009
                            <tbody>
1010
                            </tbody>
1011
                        </table>
17328 ariadna 1012
 
1013
                    </div>
15333 stevensc 1014
                </div>
1 www 1015
 
16840 efrain 1016
 
15333 stevensc 1017
            </div>
1018
 
1 www 1019
            <!-- Modal footer -->
16891 efrain 1020
            <div class="modal-footer text-right">
15333 stevensc 1021
                <button type="submit" class="btn btn-sm btn-primary btn-upload-users-step2">LABEL_SAVE</button>
1022
                <button type="button" class="btn btn-sm btn-danger" data-dismiss="modal">LABEL_CLOSE</button>
1023
            </div>
1 www 1024
 
15333 stevensc 1025
        </div>
1026
    </div>
1027
</div>
1 www 1028
 
1029
 
1030
<!-- The Modal -->
1031
<div class="modal" id="modalEdit">
15333 stevensc 1032
    <div class="modal-dialog  modal-xl">
1033
        <div class="modal-content">
1 www 1034
 
1035
            <!-- Modal Header -->
15333 stevensc 1036
            <div class="modal-header">
16935 efrain 1037
                <h6 class="modal-title">LABEL_USER_FOR_COMPANY - LABEL_EDIT</h6>
15333 stevensc 1038
            </div>
1 www 1039
 
17328 ariadna 1040
            <form name="form-edit" id="form-edit">
1041
                <!-- Modal body -->
1042
                <div class="modal-body">
1043
 
15333 stevensc 1044
                    <div class="row">
16841 efrain 1045
                        <div class="col-md-12 col-sm-12  mt-3">
17328 ariadna 1046
                            <div class="form-check mb-3">
1047
                                <input type="checkbox" name="backend" id="backend" value="y" class="form-check-input" style="width: 20px; height: 20px"> <label for="backend" class="form-check-label">LABEL_ACCESS_BACKEND</label>
1048
 
15333 stevensc 1049
                            </div>
1050
                        </div>
1051
                    </div>
1052
                    <div class="row">
16841 efrain 1053
                        <div class="col-md-12 col-sm-12  mt-3">
16822 efrain 1054
                            <table id="table-roles" class="table table-bordered">
15333 stevensc 1055
                                <thead>
1056
                                    <tr>
1057
                                        <th>LABEL_NAME</th>
1058
                                        <th>LABEL_ACTIVE</th>
1059
                                    </tr>
1060
                                </thead>
1061
                                <tbody>
1062
                                </tbody>
1063
                            </table>
1 www 1064
 
15333 stevensc 1065
                        </div>
1066
                    </div>
1067
 
17328 ariadna 1068
 
1069
                </div>
1070
                <div class="modal-footer text-right">
1071
                    <button type="submit" class="btn btn-sm btn-primary">LABEL_SAVE</button>
1072
                    <button type="button" class="btn btn-sm btn-light btn-cancel-modal">LABEL_CANCEL</button>
1073
                </div>
1074
            </form>
15333 stevensc 1075
        </div>
1076
    </div>
1 www 1077
</div>
1078
 
1079
 
1080
 
1081
<!-- The Modal -->
1082
<div class="modal" id="modalChangePassword">
15333 stevensc 1083
    <div class="modal-dialog">
1084
        <div class="modal-content">
1 www 1085
 
1086
            <!-- Modal Header -->
15333 stevensc 1087
            <div class="modal-header">
16935 efrain 1088
                <h6 class="modal-title">LABEL_USERS</h6>
15333 stevensc 1089
            </div>
1 www 1090
 
17328 ariadna 1091
            <?php
1092
            $form = $this->formChangePassword;
1093
            $form->setAttributes([
1094
                'method'    => 'post',
1095
                'name'      => 'form-change-password',
1096
                'id'        => 'form-change-password'
1097
            ]);
1 www 1098
 
17328 ariadna 1099
            $form->prepare();
1100
            echo $this->form()->openTag($form);
1101
            ?>
16929 efrain 1102
            <div class="modal-body">
1 www 1103
 
17328 ariadna 1104
                <div class="row">
1105
                    <div class="col-12 mt-3">
1106
                        <?php
1107
                        $element = $form->get('first_name');
1108
                        $element->setOptions(['label' => 'LABEL_FIRST_NAME']);
1109
                        $element->setAttributes(['class' => 'form-control', 'readonly' => 'readonly']);
1110
 
1111
                        echo $this->formLabel($element);
1112
                        echo $this->formText($element);
1113
                        ?>
16929 efrain 1114
                    </div>
15333 stevensc 1115
                </div>
17328 ariadna 1116
                <div class="row">
1117
                    <div class="col-12 mt-3">
1118
                        <?php
1119
                        $element = $form->get('last_name');
1120
                        $element->setOptions(['label' => 'LABEL_LAST_NAME']);
1121
                        $element->setAttributes(['class' => 'form-control', 'readonly' => 'readonly']);
1 www 1122
 
17328 ariadna 1123
                        echo $this->formLabel($element);
1124
                        echo $this->formText($element);
1125
                        ?>
16929 efrain 1126
                    </div>
15333 stevensc 1127
                </div>
17328 ariadna 1128
                <div class="row">
1129
                    <div class="col-12 mt-3">
1130
                        <?php
1131
                        $element = $form->get('email');
1132
                        $element->setOptions(['label' => 'LABEL_EMAIL']);
1133
                        $element->setAttributes(['class' => 'form-control', 'readonly' => 'readonly']);
1 www 1134
 
17328 ariadna 1135
                        echo $this->formLabel($element);
1136
                        echo $this->formText($element);
1137
                        ?>
16929 efrain 1138
                    </div>
15333 stevensc 1139
                </div>
17328 ariadna 1140
                <div class="row">
1141
                    <div class="col-12 mt-3">
1142
                        <?php
1143
                        $element = $form->get('password');
1144
                        $element->setOptions(['label' => 'LABEL_PASSWORD']);
1145
                        $element->setAttributes(['class' => 'form-control']);
1 www 1146
 
17328 ariadna 1147
                        echo $this->formLabel($element);
1148
                        echo $this->formPassword($element);
1149
                        ?>
16929 efrain 1150
                    </div>
15333 stevensc 1151
                </div>
17328 ariadna 1152
                <div class="row">
1153
                    <div class="col-12 mt-3">
1154
                        <?php
1155
                        $element = $form->get('confirmation');
1156
                        $element->setOptions(['label' => 'LABEL_CONFIRMATION']);
1157
                        $element->setAttributes(['class' => 'form-control']);
1 www 1158
 
17328 ariadna 1159
                        echo $this->formLabel($element);
1160
                        echo $this->formPassword($element);
1161
                        ?>
16929 efrain 1162
                    </div>
15333 stevensc 1163
                </div>
1164
 
1165
 
17328 ariadna 1166
 
16929 efrain 1167
            </div>
1168
            <div class="modal-footer text-right">
17328 ariadna 1169
                <button type="submit" class="btn btn-sm btn-primary">LABEL_SAVE</button>
1170
                <button type="button" class="btn btn-sm btn-light btn-cancel-modal">LABEL_CANCEL</button>
1171
            </div>
1172
            <?php echo $this->form()->closeTag($form); ?>
15333 stevensc 1173
 
1174
        </div>
1175
    </div>
1176
</div>