Proyectos de Subversion LeadersLinked - Backend

Rev

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