Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
16822 efrain 1
<?php
1 www 2
$acl            = $this->viewModel()->getRoot()->getVariable('acl');
3
$currentUser    = $this->currentUserHelper();
4
 
5
$roleName = $currentUser->getUserTypeId();
6
 
7
$routeAdd       = $this->url('settings/company-sizes/add');
8
$routeDatatable = $this->url('settings/company-sizes');
9
$routeDashboard = $this->url('dashboard');
10
 
11
$allowAdd               = $acl->isAllowed($roleName, 'settings/company-sizes/add') ? 1 : 0;
12
$allowEdit              = $acl->isAllowed($roleName, 'settings/company-sizes/edit') ? 1 : 0;
13
$allowDelete            = $acl->isAllowed($roleName, 'settings/company-sizes/delete') ? 1 : 0;
14
 
15
 
16822 efrain 16
$this->inlineScript()->appendFile($this->basePath('assets/vendors/jquery-input-number/input-number-format.jquery.min.js'));
1 www 17
 
16822 efrain 18
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/nprogress/nprogress.css'));
19
$this->inlineScript()->appendFile($this->basePath('assets/vendors/nprogress/nprogress.js'));
1 www 20
 
21
 
16822 efrain 22
$this->inlineScript()->appendFile($this->basePath('assets/vendors/jquery-validation/jquery.validate.js'));
23
$this->inlineScript()->appendFile($this->basePath('assets/vendors/jquery-validation/additional-methods.js'));
24
$this->inlineScript()->appendFile($this->basePath('assets/vendors/jquery-validation/localization/messages_es.js'));
1 www 25
 
16822 efrain 26
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/datatables.net-bs5/dataTables.bootstrap5.css'));
27
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/datatables.net-bs5-responsive/responsive.bootstrap5.css'));
1 www 28
 
16822 efrain 29
$this->inlineScript()->appendFile($this->basePath('assets/vendors/datatables.net/jquery.dataTables.js'));
30
$this->inlineScript()->appendFile($this->basePath('assets/vendors/datatables.net-bs5/dataTables.bootstrap5.js'));
31
$this->inlineScript()->appendFile($this->basePath('assets/vendors/datatables.net-bs5-responsive/dataTables.responsive.min.js'));
32
$this->inlineScript()->appendFile($this->basePath('assets/vendors/datatables.net-bs5-responsive/responsive.bootstrap5.min.js'));
1 www 33
 
34
 
16822 efrain 35
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/select2/css/select2.min.css'));
16918 efrain 36
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/select2-bootstrap5-theme/select2-bootstrap-5-theme.css'));
1 www 37
 
16822 efrain 38
$this->inlineScript()->appendFile($this->basePath('assets/vendors/select2/js/select2.full.min.js'));
1 www 39
 
16822 efrain 40
$this->inlineScript()->appendFile($this->basePath('assets/vendors/moment/moment-with-locales.min.js'));
41
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/bootstrap-datetimepicker/css/bootstrap-datetimepicker.css'));
42
$this->inlineScript()->appendFile($this->basePath('assets/vendors/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.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
 
48
 
16822 efrain 49
 
50
 
51
 
4805 stevensc 52
$status_active = \LeadersLinked\Model\CompanySize::STATUS_ACTIVE;
4802 stevensc 53
 
1 www 54
$this->inlineScript()->captureStart();
55
echo <<<JS
56
    jQuery( document ).ready(function( $ ) {
16822 efrain 57
 
1 www 58
        $.validator.addMethod('greaterThan', function (value, element, param) {
59
            var otherElement = $(param);
60
            return parseInt(value, 10) > parseInt(otherElement.val(), 10);
61
        }, 'ERROR_INVALID_MINIMUM');
16822 efrain 62
 
1 www 63
        $.validator.setDefaults({
64
            debug: true,
65
            highlight: function(element) {
66
                $(element).addClass('is-invalid');
67
            },
68
            unhighlight: function(element) {
69
                $(element).removeClass('is-invalid');
70
            },
71
            errorElement: 'span',
72
            errorClass: 'error invalid-feedback',
73
            errorPlacement: function(error, element) {
16822 efrain 74
                error.insertAfter(element.parent());
75
 
1 www 76
            }
77
        });
78
 
79
 
80
        $.fn.showFormErrorValidator = function(fieldname, errors) {
81
            var field = $(fieldname);
82
            if(field) {
83
                $(field).addClass('is-invalid');
84
 
85
 
86
                var error = $('<span id="' + fieldname +'-error" class="error invalid-feedback">' + errors + '</div>');
16822 efrain 87
                error.insertAfter(field.parent());
88
 
1 www 89
            }
90
        };
16822 efrain 91
 
92
 
93
 
94
 
1 www 95
        var allowEdit   = $allowEdit;
96
        var allowDelete = $allowDelete;
97
 
16822 efrain 98
        var gridTable = $('#gridTable').dataTable( {
1 www 99
            'processing': true,
100
            'serverSide': true,
101
            'searching': true,
102
            'order': [[ 0, 'asc' ]],
103
            'ordering':  true,
104
            'ordenable' : true,
105
            'responsive': true,
106
            'select' : false,
107
        	'paging': true,
108
            'pagingType': 'simple_numbers',
109
    		'ajax': {
110
    			'url' : '$routeDatatable',
111
    			'type' : 'get',
112
                'beforeSend': function (request) {
113
                    NProgress.start();
114
                },
115
                'dataFilter': function(response) {
116
                    var response = jQuery.parseJSON( response );
117
 
118
                    var json                = {};
119
                    json.recordsTotal       = 0;
120
                    json.recordsFiltered    = 0;
121
                    json.data               = [];
122
 
123
 
124
                    if(response.success) {
125
                        json.recordsTotal       = response.data.total;
126
                        json.recordsFiltered    = response.data.total;
127
                        json.data               = response.data.items;
128
                    } else {
129
                        $.fn.showError(response.data)
130
                    }
131
 
132
                    return JSON.stringify( json );
133
                }
134
    		},
135
            'language' : {
136
                'sProcessing':     'LABEL_DATATABLE_SPROCESSING',
137
                'sLengthMenu':     'LABEL_DATATABLE_SLENGTHMENU',
138
                'sZeroRecords':    'LABEL_DATATABLE_SZERORECORDS',
139
                'sEmptyTable':     'LABEL_DATATABLE_SEMPTYTABLE',
140
                'sInfo':           'LABEL_DATATABLE_SINFO',
141
                'sInfoEmpty':      'LABEL_DATATABLE_SINFOEMPTY',
142
                'sInfoFiltered':   'LABEL_DATATABLE_SINFOFILTERED',
143
                'sInfoPostFix':    '',
144
                'sSearch':         'LABEL_DATATABLE_SSEARCH',
145
                'sUrl':            '',
146
                'sInfoThousands':  ',',
147
                'sLoadingRecords': 'LABEL_DATATABLE_SLOADINGRECORDS',
148
                'oPaginate': {
149
                    'sFirst':    'LABEL_DATATABLE_SFIRST',
150
                    'sLast':     'LABEL_DATATABLE_SLAST',
151
                    'sNext':     'LABEL_DATATABLE_SNEXT',
152
                    'sPrevious': 'LABEL_DATATABLE_SPREVIOUS'
153
                },
154
                'oAria': {
155
                    'sSortAscending':  ': LABEL_DATATABLE_SSORTASCENDING',
156
                    'sSortDescending': ':LABEL_DATATABLE_SSORTDESCENDING'
157
                },
158
            },
159
            'drawCallback': function( settings ) {
160
                NProgress.done();
16822 efrain 161
 
1 www 162
            },
163
            'aoColumns': [
164
                { 'mDataProp': 'name' },
165
    	        { 'mDataProp': 'minimum_no_of_employee'},
166
                { 'mDataProp': 'maximum_no_of_employee'},
167
                { 'mDataProp': 'status' },
168
                { 'mDataProp': 'actions' },
169
    	    ],
170
            'columnDefs': [
171
                {
172
                    'targets': 0,
173
                    'className' : 'text-vertical-middle',
174
                },
175
                {
176
                    'targets': 1,
177
                    'className' : 'text-right text-vertical-middle',
178
                },
179
                {
180
                    'targets':2,
181
                    'className' : 'text-right text-vertical-middle',
182
                },
183
                {
16822 efrain 184
                    'targets':3,
185
                    'className' : 'text-center text-vertical-middle',
186
                },
187
                {
1 www 188
                    'targets': -2,
189
                    'orderable': false,
190
                    'className' : 'text-center',
16822 efrain 191
                      'render' : function ( data, type, row ) {
1 www 192
 
16822 efrain 193
                        checked = data == 'a' ? 'checked' : '';
16841 efrain 194
                        return '<div class="">' +
16822 efrain 195
                            '<input class="form-check-input" type="checkbox" ' + checked + ' disabled="disabled">' +
1 www 196
                            '<label ></label></div>';
197
                    }
198
                },
199
                {
200
                    'targets': -1,
201
                    'orderable': false,
202
                    'render' : function ( data, type, row ) {
203
                        s = '';
204
 
205
                        if(allowEdit) {
16906 efrain 206
                            s = s + '<button class="btn btn-primary btn-edit" data-href="' + data['link_edit']+ '" data-toggle="tooltip" title="LABEL_EDIT"><i class="fa fa-pen"></i> LABEL_EDIT </button>&nbsp;';
1 www 207
                        }
208
                        if(allowDelete) {
209
                            s = s + '<button class="btn btn-danger btn-delete" data-href="' + data['link_delete']+ '" data-toggle="tooltip" title="LABEL_DELETE"><i class="fa fa-trash"></i> LABEL_DELETE </button>&nbsp;';
210
                        }
211
                        return s;
212
                    }
213
                }
16822 efrain 214
              ],
215
        });
216
 
217
 
218
        var validator = $('#form').validate({
1 www 219
            debug: true,
220
            onclick: false,
221
            onkeyup: false,
222
            ignore: [],
223
            rules: {
224
                'name': {
225
                    required: true,
226
                    maxlength: 64,
227
                },
228
                'minimum_no_of_employee': {
229
                    required: true,
230
                    min: 0
231
                },
232
                'maximum_no_of_employee': {
233
                    required: true,
234
                    min: 1,
235
                    greaterThan : '#minimum_no_of_employee'
236
                },
237
            },
238
            submitHandler: function(form)
239
            {
240
                $.ajax({
241
                    'dataType'  : 'json',
242
                    'accept'    : 'application/json',
243
                    'method'    : 'post',
244
                    'url'       :  $('#form').attr('action'),
245
                    'data'      :  $('#form').serialize()
246
                }).done(function(response) {
247
                    NProgress.start();
248
                    if(response['success']) {
249
                        $.fn.showSuccess(response['data']);
250
 
251
                        $('#modal').modal( 'hide');
252
 
253
                         gridTable.api().ajax.reload(null, false);
254
                    } else {
255
                        validator.resetForm();
256
                        if(jQuery.type(response['data']) == 'string') {
257
                            $.fn.showError(response['data']);
258
                        } else  {
259
                            $.each(response['data'], function( fieldname, errors ) {
260
                                $.fn.showFormErrorValidator('#form #' + fieldname, errors);
261
                            });
262
                        }
263
                    }
264
                }).fail(function( jqXHR, textStatus, errorThrown) {
16822 efrain 265
                   $.fn.showError(textStatus);
1 www 266
                }).always(function() {
267
                    NProgress.done();
268
                });
269
                return false;
270
            },
271
            invalidHandler: function(form, validator) {
272
 
273
            }
16822 efrain 274
        });
275
 
276
        $('body').on('click', 'button.btn-add', function(e) {
277
            e.preventDefault();
5312 stevensc 278
 
16840 efrain 279
 
16822 efrain 280
            $('#form').attr('action', '$routeAdd');
281
            $('#form #name').val('');
282
            $('#form #minimum_no_of_employee').val('');
283
            $('#form #maximum_no_of_employee').val('');
284
            $('#form #status').bootstrapToggle('on');
285
 
286
 
287
            validator.resetForm();
288
            $('#modal').modal('show');
289
        });
1 www 290
 
16822 efrain 291
        $('body').on('click', 'button.btn-edit', function(e) {
292
            e.preventDefault();
293
            NProgress.start();
294
            var action = $(this).data('href');
295
 
296
            $.ajax({
297
                'dataType'  : 'json',
298
                'accept'    : 'application/json',
299
                'method'    : 'get',
300
                'url'       :  action,
301
            }).done(function(response) {
302
                if(response['success']) {
303
 
16840 efrain 304
 
16822 efrain 305
                    $('#form').attr('action', action);
306
                    $('#form #name').val(response['data']['name']);
307
                    $('#form #minimum_no_of_employee').val(response['data']['minimum_no_of_employee']);
308
                    $('#form #maximum_no_of_employee').val(response['data']['maximum_no_of_employee']);
309
                    $('#form #status').bootstrapToggle(response['data']['status'] == '$status_active' ? 'on' : 'off')
310
                    validator.resetForm();
311
 
312
                    $('#modal').modal('show');
313
                } else {
314
                    $.fn.showError(response['data']);
315
                }
316
            }).fail(function( jqXHR, textStatus, errorThrown) {
317
                $.fn.showError(textStatus);
318
            }).always(function() {
319
                NProgress.done();
320
            });
321
        });
322
 
323
 
324
        $('body').on('click', 'button.btn-delete', function(e) {
325
            e.preventDefault();
326
            var action = $(this).data('href');
327
 
328
            Swal.fire({
329
                title: 'LABEL_ARE_YOU_SURE',
330
                icon: 'question',
331
                iconHtml: '',
332
                confirmButtonText:  'LABEL_YES',
333
                cancelButtonText: 'LABEL_NO',
334
                showCancelButton: true,
335
                showCloseButton: true
336
            }).then((result) => {
337
                /* Read more about isConfirmed, isDenied below */
338
                if (result.isConfirmed) {
339
                    NProgress.start();
340
 
341
                    $.ajax({
342
                        'dataType'  : 'json',
343
                        'method'    : 'post',
344
                        'url'       :  action,
345
                    }).done(function(response) {
346
                        if(response['success']) {
347
                            $.fn.showSuccess(response['data']);
348
                            gridTable.api().ajax.reload(null, false);
349
 
350
                        } else {
351
                            $.fn.showError(response['data']);
352
                        }
353
                    }).fail(function( jqXHR, textStatus, errorThrown) {
354
                        $.fn.showError(textStatus);
355
                    }).always(function() {
356
                        NProgress.done();
357
                    });
358
                }
359
 
360
            });
361
        });
362
 
363
        $('body').on('click', 'button.btn-refresh', function(e) {
364
            e.preventDefault();
365
            gridTable.api().ajax.reload(null, false);
366
        });
367
 
368
 
369
        $('body').on('click', 'button.btn-cancel', function(e) {
370
            e.preventDefault();
371
            $('#modal').modal('hide');
372
        });
373
 
1 www 374
        $('#form #status').bootstrapToggle({'on' : 'LABEL_ACTIVE',  'off' : 'LABEL_INACTIVE', 'width' : '160px', 'height' : '40px'});
5436 stevensc 375
 
16822 efrain 376
        $('#form #minimum_no_of_employee').inputNumberFormat({decimal : 0});
377
        $('#form #maximum_no_of_employee').inputNumberFormat({decimal : 0});
1 www 378
    });
379
JS;
380
$this->inlineScript()->captureEnd();
16822 efrain 381
?>
382
 
4808 stevensc 383
 
16822 efrain 384
    	<div class="row">
16891 efrain 385
        	<div class="col-12 mt-3">
16822 efrain 386
				<div class="card">
387
					<div class="card-body">
388
						<h6 class="card-title">LABEL_COMPANY_SIZES</h6>
389
						<div class="row">
16841 efrain 390
							<div class="col-12  mt-3">
16912 efrain 391
                	    		<table id="gridTable" class="table  table-bordered">
16822 efrain 392
                              		<thead>
393
                						<tr>
394
                                        	<th>LABEL_NAME</th>
395
                                          	<th>LABEL_MINIMUM</th>
396
                                          	<th>LABEL_MAXIMUM</th>
397
                                          	<th>LABEL_ACTIVE</th>
398
                                          	<th>LABEL_ACTIONS</th>
399
                                        </tr>
400
                               		</thead>
401
                                 	<tbody>
402
                                 	</tbody>
403
                            	</table>
404
                            </div>
405
                        </div>
406
                   	</div>
407
                   	<div class="card-footer text-right">
408
                   		<button type="button" class="btn btn-info btn-refresh"><i class="fa fa-refresh"></i> LABEL_REFRESH </button>
409
						<?php if($allowAdd) : ?>
410
						<button type="button" class="btn btn-primary btn-add"><i class="fa fa-plus"></i> LABEL_ADD </button>
411
						<?php endif; ?>
412
						</div>
413
                 	</div>
414
          		</div>
415
           	</div>
416
        </div>
4811 stevensc 417
 
418
 
16822 efrain 419
<!-- The Modal -->
420
<div class="modal" id="modal">
421
	<div class="modal-dialog  modal-xl">
422
    	<div class="modal-content">
4802 stevensc 423
 
16822 efrain 424
            <!-- Modal Header -->
425
      		<div class="modal-header">
16845 efrain 426
        		<h6 class="modal-title">LABEL_COMPANY_SIZES</h6>
16822 efrain 427
        		<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="btn-close"></button>
428
      		</div>
429
 
430
            <!-- Modal body -->
431
             <?php
432
                    $form = $this->form;
433
            		$form->setAttributes([
434
                        'method'    => 'post',
435
                        'name'      => 'form',
436
                        'id'        => 'form'
437
                    ]);
438
 
439
                    $form->prepare();
440
                    echo $this->form()->openTag($form);
441
                    ?>
442
      		<div class="modal-body">
443
 
444
    					<div class="row">
16841 efrain 445
    						<div class="col-12  mt-3">
16822 efrain 446
        					<?php
447
                            $element = $form->get('name');
448
                            $element->setOptions(['label' => 'LABEL_NAME']);
449
                            $element->setAttributes(['class' => 'form-control']);
450
 
451
                            echo $this->formLabel($element);
452
                            echo $this->formText($element);
453
                            ?>
454
							</div>
455
						</div>
456
    					<div class="row">
16841 efrain 457
    						<div class="col-12  mt-3">
16822 efrain 458
                    	<?php
459
                            $element = $form->get('minimum_no_of_employee');
460
                            $element->setOptions(['label' => 'LABEL_MINIMUM']);
461
                            $element->setAttributes(['class' => 'form-control']);
462
 
463
                            echo $this->formLabel($element);
464
                            echo $this->formText($element);
465
                        ?>
466
							</div>
467
						</div>
468
    					<div class="row">
16841 efrain 469
    						<div class="col-12  mt-3">
16822 efrain 470
                    	<?php
471
                            $element = $form->get('maximum_no_of_employee');
472
                            $element->setOptions(['label' => 'LABEL_MAXIMUM']);
473
                            $element->setAttributes(['class' => 'form-control']);
474
 
475
                            echo $this->formLabel($element);
476
                            echo $this->formText($element);
477
                        ?>
478
						</div>
479
    					<div class="row">
16841 efrain 480
    						<div class="col-12  mt-3">
16822 efrain 481
                      	<?php
482
                            $element = $form->get('status');
483
                            echo $this->formCheckbox($element);
484
                        ?>
485
							</div>
486
						</div>
487
 
16843 efrain 488
 
16822 efrain 489
 
490
      		</div>
491
 
492
            <!-- Modal footer -->
493
      		<div class="modal-footer text-right">
494
        		<button type="submit" class="btn btn-primary">LABEL_SAVE</button>
495
              	<button type="button" class="btn btn-light btn-cancel">LABEL_CANCEL</button>
496
      		</div>
497
      		<?php echo $this->form()->closeTag($form); ?>
498
 
499
    	</div>
500
	</div>
501
</div>
502
 
503
 
504
 
505
 
506
 
507