Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 12315 | Rev 15461 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

<?php
$acl = $this->viewModel()->getRoot()->getVariable('acl');
$currentUser = $this->currentUserHelper();

$roleName = $currentUser->getUserTypeId();

$routeDashboard = $this->url('dashboard');
$routeDatatable = $this->url('recruitment-and-selection/vacancies');
$routeAdd       = $this->url('recruitment-and-selection/vacancies/add');


$allowAdd = $acl->isAllowed($roleName, 'recruitment-and-selection/vacancies/add') ? 1 : 0;
$allowEdit = $acl->isAllowed($roleName, 'recruitment-and-selection/vacancies/edit') ? 1 : 0;
$allowDelete = $acl->isAllowed($roleName, 'recruitment-and-selection/vacancies/delete') ? 1 : 0;


$this->inlineScript()->appendFile('https://maps.googleapis.com/maps/api/js?key=' . $google_map_key . '&libraries=places');


$this->inlineScript()->appendFile($this->basePath('plugins/ckeditor/ckeditor.js'));


$this->headLink()->appendStylesheet($this->basePath('plugins/nprogress/nprogress.css'));
$this->inlineScript()->appendFile($this->basePath('plugins/nprogress/nprogress.js'));


$this->inlineScript()->appendFile($this->basePath('plugins/jquery-validation/jquery.validate.js'));
$this->inlineScript()->appendFile($this->basePath('plugins/jquery-validation/additional-methods.js'));
$this->inlineScript()->appendFile($this->basePath('plugins/jquery-validation/localization/messages_es.js'));

$this->headLink()->appendStylesheet($this->basePath('plugins/datatables-bs4/css/dataTables.bootstrap4.min.css'));
$this->headLink()->appendStylesheet($this->basePath('plugins/datatables-responsive/css/responsive.bootstrap4.min.css'));

$this->inlineScript()->appendFile($this->basePath('plugins/datatables/jquery.dataTables.min.js'));
$this->inlineScript()->appendFile($this->basePath('plugins/datatables-bs4/js/dataTables.bootstrap4.min.js'));
$this->inlineScript()->appendFile($this->basePath('plugins/datatables-responsive/js/dataTables.responsive.min.js'));
$this->inlineScript()->appendFile($this->basePath('plugins/datatables-responsive/js/responsive.bootstrap4.min.js'));


$this->headLink()->appendStylesheet($this->basePath('plugins/select2/css/select2.min.css'));
$this->headLink()->appendStylesheet($this->basePath('plugins/select2-bootstrap4-theme/select2-bootstrap4.min.css'));

$this->inlineScript()->appendFile($this->basePath('plugins/select2/js/select2.full.min.js'));

$this->inlineScript()->appendFile($this->basePath('plugins/moment/moment-with-locales.min.js'));
$this->headLink()->appendStylesheet($this->basePath('plugins/bootstrap-datetimepicker/css/bootstrap-datetimepicker.css'));
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js'));


$this->headLink()->appendStylesheet($this->basePath('plugins/bootstrap4-toggle/css/bootstrap4-toggle.min.css'));
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap4-toggle/js/bootstrap4-toggle.min.js'));

$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap-confirmation/dist/bootstrap-confirmation.js'));
$this->headLink()->appendStylesheet($this->basePath('plugins/bootstrap-checkbox/awesome-bootstrap-checkbox.css'));
$this->inlineScript()->appendFile($this->basePath('plugins/jquery-input-number/input-number-format.jquery.js'));

// bootbox Alert //
$this->inlineScript()->appendFile($this->basePath('plugins/bootbox/bootbox.min.js'));

// JsRender //
$this->inlineScript()->appendFile($this->basePath('plugins/jsrender/jsrender.min.js'));


// Page Styles
$this->headLink()->appendStylesheet($this->basePath('css/pages/self-evaluation.css'));


$status_active = \LeadersLinked\Model\RecruitmentSelectionVacancy::STATUS_ACTIVE;
$status_inactive = \LeadersLinked\Model\RecruitmentSelectionVacancy::STATUS_INACTIVE;

$this->inlineScript()->captureStart();
echo <<<JS
jQuery(document).ready(function($) {
    var allowEdit = $allowEdit;
    var allowDelete = $allowDelete;

    var gridTable = $('#gridTable').dataTable({
        'processing': true,
        'serverSide': true,
        'searching': true,
        'order': [
            [0, 'asc']
        ],
        'ordering': true,
        'ordenable': true,
        'responsive': true,
        'select': false,
        'paging': true,
        'pagingType': 'simple_numbers',
        'ajax': {
            'url': '$routeDatatable',
            'type': 'get',
            'beforeSend': function(request) {
                NProgress.start();
            },
            'dataFilter': function(response) {
                var response = jQuery.parseJSON(response);
                var json = {};
                json.recordsTotal = 0;
                json.recordsFiltered = 0;
                json.data = [];
                if (response.success) {
                    json.recordsTotal = response.data.total;
                    json.recordsFiltered = response.data.total;
                    json.data = response.data.items;
                } else {
                    $.fn.showError(response.data)
                }
                return JSON.stringify(json);
            }
        },
        'language': {
            'sProcessing': 'LABEL_DATATABLE_SPROCESSING',
            'sLengthMenu': 'LABEL_DATATABLE_SLENGTHMENU',
            'sZeroRecords': 'LABEL_DATATABLE_SZERORECORDS',
            'sEmptyTable': 'LABEL_DATATABLE_SEMPTYTABLE',
            'sInfo': 'LABEL_DATATABLE_SINFO',
            'sInfoEmpty': 'LABEL_DATATABLE_SINFOEMPTY',
            'sInfoFiltered': 'LABEL_DATATABLE_SINFOFILTERED',
            'sInfoPostFix': '',
            'sSearch': 'LABEL_DATATABLE_SSEARCH',
            'sUrl': '',
            'sInfoThousands': ',',
            'sLoadingRecords': 'LABEL_DATATABLE_SLOADINGRECORDS',
            'oPaginate': {
                'sFirst': 'LABEL_DATATABLE_SFIRST',
                'sLast': 'LABEL_DATATABLE_SLAST',
                'sNext': 'LABEL_DATATABLE_SNEXT',
                'sPrevious': 'LABEL_DATATABLE_SPREVIOUS'
            },
            'oAria': {
                'sSortAscending': ': LABEL_DATATABLE_SSORTASCENDING',
                'sSortDescending': ':LABEL_DATATABLE_SSORTDESCENDING'
            },
        },
        'drawCallback': function(settings) {
            NProgress.done();
            $('button.btn-delete').confirmation({
                rootSelector: 'button.btn-delete',
                title: 'LABEL_ARE_YOU_SURE',
                singleton: true,
                btnOkLabel: 'LABEL_YES',
                btnCancelLabel: 'LABEL_NO',
                onConfirm: function(value) {
                    action = $(this).data('href');
                    NProgress.start();
                    $.ajax({
                        'dataType': 'json',
                        'accept': 'application/json',
                        'method': 'post',
                        'url': action,
                    }).done(function(response) {
                        if (response['success']) {
                            $.fn.showSuccess(response['data']);
                            gridTable.api().ajax.reload(null, false);
                        } else {
                            $.fn.showError(response['data']);
                        }
                    }).fail(function(jqXHR, textStatus, errorThrown) {
                        $.fn.showError(textStatus);
                    }).always(function() {
                        NProgress.done();
                    });
                },
            });
        },
         'aoColumns': [
                { 'mDataProp': 'name' },
                { 'mDataProp': 'job_description' },
                { 'mDataProp': 'last_date' },
                { 'mDataProp': 'status' },
                { 'mDataProp': 'actions' },
            ],
        'columnDefs': [
            {
                'targets': 0,
                'className': 'text-vertical-middle',
            },
            {
                'targets': 1,
                'className': 'text-vertical-middle',
            },
            {
                'targets': 2,
                'className': 'text-vertical-middle',
            },
             {
                'targets': 3,
                'className': 'text-vertical-middle',
            },
            {
                'targets': -1,
                'orderable': false,
                'render': function(data, type, row) {
                    s = '';
                    if (allowEdit) {
                        s = s + '<button class="btn btn-primary btn-edit" data-href="' + data['link_edit'] + '" data-toggle="tooltip" title="LABEL_EDIT"><i class="fa fa-pencil"></i> LABEL_EDIT </button>&nbsp;';
                    }
                    if (allowDelete) {
                        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;';
                    }
                    return s;
                }
            }
        ],
    });


    $('body').on('click', 'button.btn-edit', function(e) {
        e.preventDefault();
        form_id = $(this).data('id')
        var action = $(this).data('href');
        $.ajax({
            'dataType': 'json',
            'accept': 'application/json',
            'method': 'get',
            'url': action,
        }).done(function(response) {
            if (response['success']) {
                const lastDate = new Date(Date.parse(response['data']['last_date'] + " 00:00:00"));

                $("#rows").html('');
                sections = [];
                $('#form-main').attr('action', action);
                $('#form-main #name').val(response['data']['name']);
                $('#form-main #job_description_id').val(response['data']['job_description_id']).trigger('change');
                $('#form-main #location_search').val(response['data']['location_search']);
                $('#form-main #formatted_address').val(response['data']['formatted_address']);
                $('#form-main #address1').val(response['data']['address1']);
                $('#form-main #address2').val(response['data']['address2']);
                $('#form-main #city1').val(response['data']['city1']);
                $('#form-main #city2').val(response['data']['city2']);
                $('#form-main #state').val(response['data']['state']);
                $('#form-main #country').val(response['data']['country']);
                $('#form-main #postal_code').val(response['data']['postal_code']);
                $('#form-main #latitude').val(response['data']['latitude']);
                $('#form-main #longitude').val(response['data']['longitude']);
                $('#form-main #job_category_id').val(response['data']['job_category_id']).trigger('change');
                $('#form-main #industry_id').val(response['data']['industry_id']).trigger('change');
                $('#form-main #last_date').val(
                    lastDate.getDate() + "/" + String(lastDate.getMonth() + 1).padStart(2, '0') + "/" + lastDate.getFullYear()
                ).trigger('change');
                $('#form-main #status').val(response['data']['status']);
                CKEDITOR.instances['description'].setData(response['data']['description']);
                $('#row-list').hide();
                $('#row-form').show();
                
            } else {
                $.fn.showError(response['message']);
            }
        }).fail(function(jqXHR, textStatus, errorThrown) {
            $.fn.showError(textStatus);
        });
    });
  
    $('#form-main #last_date').datetimepicker({
        locale: 'es',
        format: 'DD/MM/YYYY'
    });

    $('button.btn-add').click(function(e) {

        $('#form-main').attr('action', '$routeAdd');
        $('#form-main #name').val('');
        $('#form-main #job_description_id').val('').trigger('change');
        $('#form-main #location_search').val('');
        $('#form-main #job_category_id').val('').trigger('change');
        $('#form-main #industry_id').val('').trigger('change');
        $('#form-main #last_date').val('');
        $('#form-main #status').val('$status_active');

        CKEDITOR.instances['description'].setData('');
       
        $('#row-list').hide();
        $('#row-form').show();
        $('#form-main #name').focus();
        return;
    });


    $.validator.addMethod('checkLocation', function (value, element, param) {
        var otherElement = $(param);

        return $.trim(otherElement.val()).length > 0;
    }, 'ERROR_PLACED_AUTOCOMPLETE_DOES_NOT_CONTAIN_GEOMETRY');

    var autocompleteLocation = new google.maps.places.Autocomplete(
        (document.getElementById('location_search')),
        {types: ['(cities)']}
    );

    $.fn.fillInAddressLocation = function() {
        var place = autocompleteLocation.getPlace();
        if (!place.geometry) {
            $.fn.showError('ERROR_PLACED_AUTOCOMPLETE_DOES_NOT_CONTAIN_GEOMETRY')
            return;
        } else {
            address1 = '';
            address2 = '';
            city1 = '';
            city2 = '';
            state = '';
            country = '';
            postal_code = '';
            
            formatted_address = place.formatted_address;
            latitude = place.geometry.location.lat();
            longitude = place.geometry.location.lng();
            var arrAddress = place.address_components;
            
            $.each(arrAddress, function(i, address_component) {
                if (address_component.types[0] == "route") {
                    address1 = address_component.long_name;
                }
                if (address_component.types[0] == "sublocality") {
                    address2 = address_component.long_name;
                }
                if (address_component.types[0] == "locality") {
                    city1 = address_component.long_name;
                }
                if (address_component.types[0] == "administrative_area_level_2") {
                    city2 = address_component.long_name;
                }
                if (address_component.types[0] == "administrative_area_level_1") {
                    state = address_component.long_name;
                }
                if (address_component.types[0] == "country") {
                    country = address_component.long_name;
                }
                if (address_component.types[0] == "postal_code") {
                    postal_code = address_component.long_name;
                }
            });
            
            $('#form-main #formatted_address').val(formatted_address);
            $('#form-main #address1').val(address1);
            $('#form-main #address2').val(address2);
            $('#form-main #city1').val(city1);
            $('#form-main #city2').val(city2);
            $('#form-main #state').val(state);
            $('#form-main #country').val(country);
            $('#form-main #postal_code').val(postal_code);
            $('#form-main #latitude').val(latitude);
            $('#form-main #longitude').val(longitude);
        }
    }

    
    $('button.btn-edit-cancel').click(function(e) {
        $('#row-form').hide();
        $('#row-list').show();
        return;
    });

    $('body').on('click', 'button.btn-refresh', function (e) {
        e.preventDefault();
        gridTable.api().ajax.reload(null, false);

    });

    $('#job_description_id').select2({
        theme: 'bootstrap4',
        width: '100%',
    });
    

    $('#job_category_id').select2({
        theme: 'bootstrap4',
        width: '100%',
    });


    $('#industry_id').select2({
        theme: 'bootstrap4',
        width: '100%',
    });


    $('#status').bootstrapToggle({
        'on': 'LABEL_ACTIVE',
        'off': 'LABEL_INACTIVE',
        'width': '160px',
        'height': '40px'
    });
   

    var validatorLocation = $('#location_search').validate({
        debug: true,
        onclick: false,
        onkeyup: false,
        onfocusout: false,
        ignore: [],
        rules: {
            'location_search': {
                required: true,
                checkLocation: '#location_search #latitude'
            }
        },
        submitHandler: function(form)
        {
            NProgress.start();
            $.ajax({
                'dataType'  : 'json',
                'accept'    : 'application/json',
                'method'    : 'post',
                'url'       :  route_location,
                'data'      :  $('#location_search').serialize(),
            }).done(function(response) {



                if(response['success']) {
                    $('#overview-location').html(response.data);
                    $("#location-box").modal('hide');
                } else {
                    validatorLocation.resetForm();
                    $.fn.showError(response['data']);
                }
            }).fail(function( jqXHR, textStatus, errorThrown) {
                $.fn.showError(textStatus);
            }).always(function() {
                NProgress.done();
            });
            return false;
        },
        invalidHandler: function(form, validator) {
        
        }
    });

    $('body').on('click', 'a.btn-location-edit', function(e) {
        e.preventDefault();
        
        $('#form-main #location_search').val('');
        $('#form-main #formatted_address').val('');
        $('#form-main #address1').val('');
        $('#form-main #address2').val('');
        $('#form-main #country').val('');
        $('#form-main #state').val('');
        $('#form-main #city1').val('');
        $('#form-main #city2').val('');
        $('#form-main #postal_code').val('');
        $('#form-main #latitude').val('');
        $('#form-main #longitude').val('');
        validatorLocation.resetForm();
        
        $("#location-box").modal('show');
    });
    
    $('.btn-location-close').on("click", function(e){
        e.preventDefault();
        
        $("#location-box").modal('hide');
        return false;
    });

    autocompleteLocation.addListener('place_changed', $.fn.fillInAddressLocation);


    CKEDITOR.replace('description', {
        toolbar: [
                    { name: 'editing', items: ['Scayt'] },
                    { name: 'links', items: ['Link', 'Unlink'] },
                    { name: 'paragraph', items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', 'Blockquote'] },
                    { name: 'basicstyles', items: ['Bold', 'Italic', 'Strike', 'RemoveFormat'] },
                    '/',
                    { name: 'insert', items: ['Image', 'Table', 'HorizontalRule', 'SpecialChar'] },
                    { name: 'styles', items: ['Styles', 'Format'] },
                    { name: 'tools', items: ['Maximize'] }
                ],
                removePlugins: 'elementspath,Anchor',
                heigth: 100
    });
  });
JS;

$this->inlineScript()->captureEnd();

?>
<!-- Content Header (Page header) -->

<div id="recruitment_and_selection-vacancies">
</div>
<section class="content-header">
   <div class="container-fluid">
      <div class="row mb-2">
         <div class="col-sm-12">
            <h1>LABEL_RECRUITMENT_AND_SELECTION</h1>
         </div>
      </div>
   </div>
   <!-- /.container-fluid -->
</section>
<section class="content">
    <div class="container-fluid" id="row-list">
                <div class="row">
                <div class="col-12">
                <div class="card">
                        <div class="card-body">
                                <table id="gridTable" class="table   table-hover">
                                <thead>
                                        <tr>
                                        <th>LABEL_NAME</th>
                                        <th>LABEL_JOB_DESCRIPTION</th>
                                        <th>LABEL_LAST_DATE</th>
                                        <th>LABEL_STATUS</th>
                                        <th>LABEL_ACTIONS</th>
                                        </tr>
                                </thead>
                                <tbody>
                                </tbody>
                                </table>
                        </div>
                        <div class="card-footer clearfix">
                                <div style="float:right;">
                                <button type="button" class="btn btn-info btn-refresh"><i class="fa fa-refresh"></i> LABEL_REFRESH </button>
                                <?php if ($allowAdd) : ?>
                                <button type="button" class="btn btn-primary btn-add"><i class="fa fa-plus"></i> LABEL_ADD </button>
                                <?php endif; ?>
                                </div>
                        </div>
                </div>
                        </div>
                </div>
        </div>
    
    
<!-- Create/Edit Form -->
<div class="row" id="row-form" style="display: none; padding: 16px;">
   <div class="col-xs-12 col-md-12">
        <?php 
        $form = $this->form;
        $form->setAttributes([
            'method'    => 'post',
            'name'      => 'form-main',
            'id'        => 'form-main'
        ]);
    
        $form->prepare();
        echo $this->form()->openTag($form);
        
        $fields = ['formatted_address',
        'address1',
        'address2',
        'country',
        'state',
        'city1',
        'city2',
        'postal_code',
        'latitude',
        'longitude',
        ];
        
        foreach($fields as $field) 
        {
            $element = $form->get($field);
            echo $this->formHidden($element);
        }
                    
     ?>
        <div class="form-group">
                 <?php 
             $element = $form->get('name');
             $element->setAttributes(['class' => 'form-control']);    
             $element->setOptions(['label' => 'LABEL_NAME']);
                                                            
             echo $this->formLabel($element);
             echo $this->formText($element);
            ?>
          </div>
                 <div class="form-group">
                 <?php 
             $element = $form->get('job_description_id');
             $element->setAttributes(['class' => 'form-control']);    
             $element->setOptions(['label' => 'LABEL_POSITION_EVALUATED']);
                                                            
             echo $this->formLabel($element);
             echo $this->formSelect($element);
            ?>
          </div>
            <div class="form-group">
                 <?php 
             $element = $form->get('job_category_id');
             $element->setAttributes(['class' => 'form-control']);    
             $element->setOptions(['label' => 'LABEL_JOB_CATEGORY']);
                                                            
             echo $this->formLabel($element);
             echo $this->formSelect($element);
            ?>
          </div>
                 <div class="form-group">
                 <?php 
             $element = $form->get('location_search');
             $element->setAttributes(['class' => 'form-control']);    
             $element->setOptions(['label' => 'LABEL_LOCATION']);
                                                            
             echo $this->formLabel($element);
             echo $this->formText($element);
            ?>
          </div>
                  <div class="form-group">
                 <?php 
             $element = $form->get('industry_id');
             $element->setAttributes(['class' => 'form-control']);    
             $element->setOptions(['label' => 'LABEL_INDUSTRY']);
                                                            
             echo $this->formLabel($element);
             echo $this->formSelect($element);
            ?>
          </div>
                 <div class="form-group">
                 <?php 
             $element = $form->get('last_date');
             $element->setAttributes(['class' => 'form-control']);    
             $element->setOptions(['label' => 'LABEL_LAST_DATE_OF_APPLICATION']);
                                                            
             echo $this->formLabel($element);
             echo $this->formText($element);
            ?>
          </div>
           <div class="form-group">
                 <?php 
             $element = $form->get('description');
             $element->setAttributes(['class' => 'form-control']);    
             $element->setOptions(['label' => 'LABEL_DESCRIPTION']);
                                                            
             echo $this->formLabel($element);
             echo $this->formTextArea($element);
            ?>
          </div>
                  <div class="form-group">
                 <?php 
             $element = $form->get('status');
             $element->setAttributes(['class' => 'form-control']);    
             $element->setOptions(['label' => 'LABEL_STATUS']);
                                                            
             echo $this->formLabel($element);
             echo $this->formCheckbox($element);
            ?>
          </div>



          <div class="form-group">
              <button type="button" class="btn btn-primary btn-form-save-close">LABEL_SAVE</button>
             <button type="button" class="btn btn-secondary btn-edit-cancel">LABEL_CANCEL</button>
          </div>
      <?php echo $this->form()->closeTag($form); ?>
   </div>
</div>
<!-- Create/Edit Form-->

</section>