Proyectos de Subversion LeadersLinked - Backend

Rev

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