Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16816 | Rev 16840 | 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
 
59
$this->inlineScript()->appendFile($this->basePath('assets/vendors/bootstrap-fileinput/js/assets/vendors/piexif.js'));
60
$this->inlineScript()->appendFile($this->basePath('assets/vendors/bootstrap-fileinput/js/assets/vendors/sortable.js'));
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']) {
16822 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-pencil"></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
<!-- Content Header (Page header) -->
831
<section class="content-header">
15333 stevensc 832
    <div class="container-fluid">
833
        <div class="row mb-2">
834
            <div class="col-sm-12">
15460 efrain 835
                <h1>LABEL_USERS_FOR_COMPANY</h1>
15333 stevensc 836
            </div>
837
        </div>
838
    </div><!-- /.container-fluid -->
1 www 839
</section>
840
 
841
<section class="content">
15333 stevensc 842
    <div class="container-fluid">
843
        <div class="row">
844
            <div class="col-12">
845
                <div class="card">
846
                    <div class="card-body">
847
                        <div class="row">
848
                            <div class="col-md-12 col-sm-12">
1 www 849
                                <form name="form-filter" id="form-filter">
850
                                    <div class="form-group">
851
                                        <label for="status">LABEL_STATUS</label>
852
                                        <select id="status" name="status" class="form-control">
853
                                            <option value="">LABEL_ALL</option>
854
                                            <option value="<?php echo CompanyUser::STATUS_PENDING ?>">LABEL_PENDING</option>
855
                                            <option value="<?php echo CompanyUser::STATUS_ACCEPTED ?>">LABEL_ACCEPTED</option>
856
                                            <option value="<?php echo CompanyUser::STATUS_ADMIN_WILL_ADD ?>">LABEL_ADMIN_WILL_ADD</option>
857
                                            <option value="<?php echo CompanyUser::STATUS_SENT ?>">LABEL_INVITED</option>
858
                                            <option value="<?php echo CompanyUser::STATUS_CANCELLED ?>">LABEL_CANCELLED</option>
859
                                            <option value="<?php echo CompanyUser::STATUS_REJECTED ?>">LABEL_REJECTED</option>
860
                                        </select>
861
                                    </div>
862
                                </form>
15333 stevensc 863
                            </div>
864
                            <div class="col-12 text-right p-2">
1 www 865
                                <div style="float:right;">
866
                                    <button type="button" class="btn btn-sm btn-info btn-refresh"><i class="fa fa-refresh"></i></button>
15333 stevensc 867
                                    <?php if ($allowUpload) : ?>
868
                                        <button type="button" class="btn btn-sm btn-primary btn-upload"><i class="fa fa-upload"></i> LABEL_UPLOAD </button>
1 www 869
                                    <?php endif; ?>
15333 stevensc 870
                                    <?php if ($allowInvite) : ?>
871
                                        <button type="button" class="btn btn-sm btn-primary btn-invite"><i class="fa fa-plus"></i> LABEL_INVITE </button>
1 www 872
                                    <?php endif; ?>
873
                                </div>
15333 stevensc 874
                            </div>
875
                        </div>
876
                        <div class="row">
877
                            <div class="col-md-12 col-sm-12">
16822 efrain 878
                                <table id="gridTable" class="table table-bordered">
15333 stevensc 879
                                    <thead>
880
                                        <tr>
881
                                            <th>LABEL_FIRST_NAME</th>
882
                                            <th>LABEL_LAST_NAME</th>
883
                                            <th>LABEL_EMAIL</th>
884
                                            <th>LABEL_DETAILS</th>
885
                                            <th>LABEL_ACTIONS</th>
1 www 886
                                        </tr>
15333 stevensc 887
                                    </thead>
888
                                    <tbody>
889
                                    </tbody>
890
                                </table>
891
                            </div>
892
                        </div>
1 www 893
 
894
 
15333 stevensc 895
                    </div>
896
                    <div class="card-footer clearfix">
1 www 897
 
15333 stevensc 898
 
899
                    </div>
900
                </div>
901
            </div>
902
        </div>
903
    </div>
904
</section>
905
 
906
 
1 www 907
<!-- The Modal -->
908
<div class="modal" id="modalInvite">
15333 stevensc 909
    <div class="modal-dialog  modal-xl">
910
        <div class="modal-content">
1 www 911
 
912
            <!-- Modal Header -->
15333 stevensc 913
            <div class="modal-header">
914
                <h3 class="modal-title">LABEL_INVITE</h3>
915
            </div>
1 www 916
 
917
            <!-- Modal body -->
15333 stevensc 918
            <div class="modal-body">
919
                <form name="form-invite" id="form-invite">
920
                    <input type="hidden" name="user_uuid_selected" id="user_uuid_selected" />
921
                    <div class="form-group">
922
                        <label for="user_uuid">LABEL_USER (LABEL_MIN_LENGTH_3)</label>
923
                        <input autocomplete="off" type="text" name="user_uuid" id="user_uuid" class="form-control" data-noresults-text="LABEL_AUTOCOMPLETE_USERS_NOT_FOUND">
924
                    </div>
1 www 925
 
926
 
15333 stevensc 927
                    <div class="form-group">
928
                        <button type="submit" class="btn btn-sm btn-primary">LABEL_INVITE</button>
929
                        <button type="button" class="btn btn-sm btn-light btn-cancel-modal">LABEL_CANCEL</button>
930
                    </div>
931
                </form>
932
            </div>
933
        </div>
934
    </div>
935
</div>
1 www 936
 
937
 
15333 stevensc 938
 
1 www 939
<!-- The Modal -->
940
<div class="modal" id="modalFormUploadUsers">
15333 stevensc 941
    <div class="modal-dialog  modal-xl">
942
        <div class="modal-content">
1 www 943
 
944
            <!-- Modal Header -->
15333 stevensc 945
            <div class="modal-header">
946
                <h3 class="modal-title">LABEL_UPLOAD</h3>
947
            </div>
1 www 948
 
949
            <!-- Modal body -->
15333 stevensc 950
            <div class="modal-body">
951
                <?php
952
                $form = $this->formUploadUsers;
953
                $form->setAttributes([
954
                    'method'    => 'post',
955
                    'name'      => 'form-upload-users',
956
                    'id'        => 'form-upload-users'
957
                ]);
1 www 958
 
15333 stevensc 959
                $form->prepare();
960
                echo $this->form()->openTag($form);
961
                ?>
962
 
963
                <div class="form-group">
964
 
965
 
966
                    <?php
967
                    $element = $form->get('file');
968
                    $element->setOptions(['label' => 'LABEL_EXCEL']);
969
                    echo $this->formLabel($element);
970
                    ?>
971
                    <div class="file-loading">
972
                        <?php
16816 stevensc 973
 
974
 
975
 
976
 
16768 efrain 977
                        $element->setAttributes(['class' => 'form-control', 'accept' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel']);
1 www 978
                        echo $this->formFile($element);
979
                        ?>
15333 stevensc 980
                    </div>
981
                </div>
1 www 982
 
983
 
984
 
15333 stevensc 985
                <div class="form-group">
986
                    <button type="submit" class="btn btn-sm btn-primary">LABEL_UPLOAD</button>
987
                    <button type="button" class="btn btn-sm btn-light btn-cancel-modal">LABEL_CANCEL</button>
988
                </div>
989
                <?php echo $this->form()->closeTag($form); ?>
990
            </div>
1 www 991
 
15333 stevensc 992
        </div>
993
    </div>
994
</div>
1 www 995
 
996
 
15333 stevensc 997
 
1 www 998
<!-- The Modal -->
999
<div class="modal" id="modalUploadUsers">
15333 stevensc 1000
    <div class="modal-dialog modal-xl">
1001
        <div class="modal-content">
1 www 1002
 
1003
            <!-- Modal Header -->
15333 stevensc 1004
            <div class="modal-header">
15460 efrain 1005
                <h3 class="modal-title">LABEL_USERS_FOR_COMPANY</h3>
16822 efrain 1006
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="btn-close"></button>
15333 stevensc 1007
            </div>
1 www 1008
 
1009
            <!-- Modal body -->
15333 stevensc 1010
            <div class="modal-body">
1011
                <form>
1012
                    <input type="hidden" name="table-upload-users-key" id="table-upload-users-key">
1013
                </form>
1014
                <div style="height: 300px;overflow: scroll;">
16822 efrain 1015
                    <table id="gridTableUploadUsers" style="width: 100%" class="table table-bordered">
15333 stevensc 1016
                        <thead>
1017
                            <tr>
1018
                                <th>LABEL_FIRST_NAME</th>
1019
                                <th>LABEL_LAST_NAME</th>
1020
                                <th>LABEL_EMAIL</th>
1021
                                <th>LABEL_PASSWORD</th>
15460 efrain 1022
                                <th>LABEL_IS_ADULT</th>
15333 stevensc 1023
                            </tr>
1024
                        </thead>
1025
                        <tbody>
1026
                        </tbody>
1027
                    </table>
1028
                </div>
1 www 1029
 
15333 stevensc 1030
            </div>
1031
 
1 www 1032
            <!-- Modal footer -->
15333 stevensc 1033
            <div class="modal-footer">
1034
                <button type="submit" class="btn btn-sm btn-primary btn-upload-users-step2">LABEL_SAVE</button>
1035
                <button type="button" class="btn btn-sm btn-danger" data-dismiss="modal">LABEL_CLOSE</button>
1036
            </div>
1 www 1037
 
15333 stevensc 1038
        </div>
1039
    </div>
1040
</div>
1 www 1041
 
1042
 
1043
<!-- The Modal -->
1044
<div class="modal" id="modalEdit">
15333 stevensc 1045
    <div class="modal-dialog  modal-xl">
1046
        <div class="modal-content">
1 www 1047
 
1048
            <!-- Modal Header -->
15333 stevensc 1049
            <div class="modal-header">
15460 efrain 1050
                <h3 class="modal-title">LABEL_USER_FOR_COMPANY - LABEL_EDIT</h3>
15333 stevensc 1051
            </div>
1 www 1052
 
1053
            <!-- Modal body -->
15333 stevensc 1054
            <div class="modal-body">
1055
                <form name="form-edit" id="form-edit">
1056
                    <div class="row">
1057
                        <div class="col-md-12 col-sm-12">
1058
                            <div class="form-group">
1059
                                <label for="backend">LABEL_ACCESS_BACKEND</label>
1060
                                <input type="checkbox" name="backend" id="backend" value="y" class="form-control" style="width: 20px; height: 20px">
1061
                            </div>
1062
                        </div>
1063
                    </div>
1064
                    <div class="row">
1065
                        <div class="col-md-12 col-sm-12">
16822 efrain 1066
                            <table id="table-roles" class="table table-bordered">
15333 stevensc 1067
                                <thead>
1068
                                    <tr>
1069
                                        <th>LABEL_NAME</th>
1070
                                        <th>LABEL_ACTIVE</th>
1071
                                    </tr>
1072
                                </thead>
1073
                                <tbody>
1074
                                </tbody>
1075
                            </table>
1 www 1076
 
15333 stevensc 1077
                        </div>
1078
                    </div>
1079
 
1080
                    <div class="form-group">
1081
                        <button type="submit" class="btn btn-sm btn-primary">LABEL_SAVE</button>
1082
                        <button type="button" class="btn btn-sm btn-light btn-cancel-modal">LABEL_CANCEL</button>
1083
                    </div>
1084
                </form>
1085
            </div>
1086
 
1087
        </div>
1088
    </div>
1 www 1089
</div>
1090
 
1091
 
1092
 
1093
<!-- The Modal -->
1094
<div class="modal" id="modalChangePassword">
15333 stevensc 1095
    <div class="modal-dialog">
1096
        <div class="modal-content">
1 www 1097
 
1098
            <!-- Modal Header -->
15333 stevensc 1099
            <div class="modal-header">
1100
                <h3 class="modal-title">LABEL_USERS</h3>
1101
            </div>
1 www 1102
 
1103
            <!-- Modal body -->
15333 stevensc 1104
            <div class="modal-body">
1105
                <?php
1106
                $form = $this->formChangePassword;
1107
                $form->setAttributes([
1108
                    'method'    => 'post',
1109
                    'name'      => 'form-change-password',
1110
                    'id'        => 'form-change-password'
1111
                ]);
1 www 1112
 
15333 stevensc 1113
                $form->prepare();
1114
                echo $this->form()->openTag($form);
1115
                ?>
1116
                <div class="form-group">
1117
                    <?php
1118
                    $element = $form->get('first_name');
1119
                    $element->setOptions(['label' => 'LABEL_FIRST_NAME']);
1120
                    $element->setAttributes(['class' => 'form-control', 'readonly' => 'readonly']);
1 www 1121
 
15333 stevensc 1122
                    echo $this->formLabel($element);
1123
                    echo $this->formText($element);
1124
                    ?>
1125
                </div>
1126
                <div class="form-group">
1127
                    <?php
1128
                    $element = $form->get('last_name');
1129
                    $element->setOptions(['label' => 'LABEL_LAST_NAME']);
1130
                    $element->setAttributes(['class' => 'form-control', 'readonly' => 'readonly']);
1 www 1131
 
15333 stevensc 1132
                    echo $this->formLabel($element);
1133
                    echo $this->formText($element);
1134
                    ?>
1135
                </div>
1136
                <div class="form-group">
1137
                    <?php
1138
                    $element = $form->get('email');
1139
                    $element->setOptions(['label' => 'LABEL_EMAIL']);
1140
                    $element->setAttributes(['class' => 'form-control', 'readonly' => 'readonly']);
1 www 1141
 
15333 stevensc 1142
                    echo $this->formLabel($element);
1143
                    echo $this->formText($element);
1144
                    ?>
1145
                </div>
1146
                <div class="form-group">
1147
                    <?php
1148
                    $element = $form->get('password');
1149
                    $element->setOptions(['label' => 'LABEL_PASSWORD']);
1150
                    $element->setAttributes(['class' => 'form-control']);
1 www 1151
 
15333 stevensc 1152
                    echo $this->formLabel($element);
1153
                    echo $this->formPassword($element);
1154
                    ?>
1155
                </div>
1156
                <div class="form-group">
1157
                    <?php
1158
                    $element = $form->get('confirmation');
1159
                    $element->setOptions(['label' => 'LABEL_CONFIRMATION']);
1160
                    $element->setAttributes(['class' => 'form-control']);
1 www 1161
 
15333 stevensc 1162
                    echo $this->formLabel($element);
1163
                    echo $this->formPassword($element);
1164
                    ?>
1165
                </div>
1166
 
1167
 
1168
                <div class="form-group">
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); ?>
1173
            </div>
1174
 
1175
        </div>
1176
    </div>
1177
</div>