//DEVELOP const IP = '172.16.2.102'; const PORT = '7070'; const PATH_GENERAL = `http://${IP}:${PORT}/Asistencia/`; const PATH_IP = `http://${IP}:${PORT}/Asistencia/`; //PRODUCCION const PATH_DOMAIN = ''; const CODIGO_PROYECTO = '7'; //const PATH_SERVICIO_REST = 'http://172.16.2.53:8080/security-rest/api/'//'http://app8.sacooliveros.edu.pe:8080/security-rest/api/'; const PATH_SERVICIO_REST = 'http://app9.sacooliveros.edu.pe:8080/security-rest/api/'; //<editor-fold> SERVICIOS REST const baseURLRest = 'http://sistem16:666/'; const baseURLModals = `http://${IP}:${PORT}/Asistencia/vistas/modals/`; const baseURLImages = '' const ajaxWebService = axios.create({ baseURL: baseURLRest }); const ajaxModal = axios.create({ baseURL: baseURLModals }); //<editor-fold> //<editor-fold> MODULO DE POLICIAS const URI_TIPOROL_POLICIA = "tipoRolPolicias"; const URI_FRECUENCIA_ROL_POLICIA = "frecuenciaRolPolicias"; const URI_ESTADO_ASISTENCIA = "estadoAsistencia"; const URI_POLICIAS = "policias"; const URI_ROL_POLICIA = "rolesPolicias"; const URI_POLICIAS_ASISTENCIA = "asistenciaPolicias"; const URI_POLICIA_MONTOS_AMANECIDAS = "montoAmanecidas"; const URI_POLICIA_CONCEPTOSEDES = "conceptoSedes"; const URI_POLICIA_REPORTE_MONTOS = "reporteMontosPolicias"; const URI_POLICIA_PROYECCION = "proyeccion"; const URI_POLICIA_PROYECTADO_COMPARATIVO = "proyectadoComparativo"; const URI_ADMINISTRATIVO_ASISTENCIA = "asistenciaAdministrativa"; const URI_TRABAJADORES = "trabajadores"; const URI_ADMINISTRATIVOS_TOLERANCIA_INDIVIDUAL = "toleranciasIndividuales"; const URI_ADMINISTRATIVOS_ESTADO_TOLERANCIA_INDIVIDUAL = "estadoTolerancias"; const URI_ADMINISTRATIVOS_VACACIONES_INDIVIDUAL = "vacacionesAdministrativasIndividuales"; const URI_CARGOS = "cargoLaboral"; const URI_DOCENTES_PROGRAMACION_SEMINARIO = "programacionSeminario"; const URI_DOCENTES_TIPO_SEMINARIO = "tipoSeminario"; const URI_DOCENTES_GRUPO_ACADEMICO = "grupoAcademico"; const URI_DOCENTES_ASISTENCIAS = "asistenciaDocentes"; const URI_ADMINISTRATIVOS_PERIODO_CIERRE_ASISTENCIA = "periodoCierreAsistencia"; const URI_ADMINISTRATIVOS_DESCUENTO_MENSUAL = "descuentoMensualAdministrativos"; const URI_ADMINISTRATIVOS_DESCUENTO_MENSUAL_DETALLADO = "descuentoAsistenciaAdministrativaDetallado"; //</editor-fold> const URI_SEDES = "sedes"; const URI_JUSTIFICACION_CAUSA = "causaJustificacion" const URI_JUSTIFICACION_TIPO = "tipoJustificacion" const URI_JUSTIFICACION = "justificaciones" const URI_ESTADOJUSTIFICACION = "estadoJustificaciones" const URI_TIPOPERSONAL = "tipoPersonales" const URI_MESESCIERRE = "mesesCierre" const URI_PERIODOCIERRE = "periodoCierreAsistencia" const URI_PERIODOCIERRE_SEDES = "periodoSedes" const URI_JUSTIFICACION_ASISTENCIAS = "asistenciaJustificacion" const URI_DOCENTES_MONTOS = "montosDocentes" const URI_TIPOPLANILLAS = "tipoPlanillaReal" const URI_DOCENTES_DETALLEMONTOS = "detalleMontosDocentes" //</editor-fold> const swalWithBootstrapButtons = swal.mixin({ confirmButtonClass: 'btn btn-success', cancelButtonClass: 'btn btn-danger', buttonsStyling: false, }) $.extend($.fn.dataTable.defaults, { // bSort: false, bFilter: false, // aaSorting: [], ordering: false, bLengthChange: false, bInfo: true, // paging: true, iDisplayLength: 20, // bStateSave: false, // autoWidth: false, // responsive: true, // stateSave: true, scrollX: true, responsive: true, language: { lengthMenu: "Mostrar: _MENU_", zeroRecords: " No se encontraron resultados", info: " Mostrando del _START_ al _END_ de un total de _TOTAL_ registros", infoEmpty: " Mostrando 0 de 0 registros", search: "Filtrar:", loadingRecords: "Cargando...", processing: '<span style="width:100%;"><img src="http://www.snacklocal.com/images/ajaxload.gif"></span>', paginate: { first: "First", last: "Last", next: "Siguiente", previous: "Anterior" } } }); ajaxWebService.interceptors.response.use(function (response) { // Do something with response data let respuesta = { status: response.data.status || true, message: response.data.message || `Operación exitosa`, data: response.data.data || response.data }; // console.log(respuesta, moment().format("YYYY/DD/MM HH:MM:SS s")) return respuesta; }, function (error) { // Do something with response error return Promise.reject(error); }); /*Ajax genral*/ const ajaxRequestSendBody = obj => { let body = JSON.stringify(obj.body); return new Promise((resolve, reject) => { $.ajax({ url: obj.url, type: obj.type, headers: obj.headers, data: {body: body}, beforeSend: (xhr, settings) => { }, success: (response, textStatus, jqXHR) => { resolve(response) }, error: (jqXHR, textStatus, errorThrown) => { reject({ status: jqXHR.status, throw: errorThrown || {}, jqXHR: jqXHR, request: obj }) } }) }) } /*Ajax General*/ /*Ajax genral*/ const ajaxRequestGeneral = obj => { let body = JSON.stringify(obj.body); return new Promise((resolve, reject) => { $.ajax({ url: obj.url, type: obj.type, headers: obj.headers, data: {body: body}, beforeSend: (xhr, settings) => { }, success: (response, textStatus, jqXHR) => { resolve(response) }, error: (jqXHR, textStatus, errorThrown) => { reject({ status: jqXHR.status, throw: errorThrown || {}, jqXHR: jqXHR, request: obj }) } }) }) } let createSelectOptions = (obj, valueName, textName) => { let options = '' obj.forEach((data) => { options += ` < option value = "${data[valueName]}" > ${data[textName]} < /option>` }) return options } let customSwal = { alert(title, text, type) { let colors = { success: '#66BB6A', error: '#EF5350', warning: '#FF7043' } let btnColor = colors[type] return new Promise((resolve, reject) => { swal({ title: title, text: text, confirmButtonColor: btnColor, type: type }, (isConfirm) => { resolve() }) }) } } /** * Get the closest matching element up the DOM tree. * @private * @param {Element} elem Starting element * @param {String} selector Selector to match against * @return {Boolean|Element} Returns null if not match found */ let getClosest = (elem, selector) => { // Element.matches() polyfill if (!Element.prototype.matches) { Element.prototype.matches = Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector || function (s) { var matches = (this.document || this.ownerDocument).querySelectorAll(s), i = matches.length while (--i >= 0 && matches.item(i) !== this) { } return i > -1 } } // Get closest match for (; elem && elem !== document; elem = elem.parentNode) { if (elem.matches(selector)) return elem } return null } let block = () => { $.blockUI({ message: '<i class="icon-spinner4 spinner"></i>', timeout: 2000, //unblock after 2 seconds overlayCSS: { backgroundColor: '#1b2024', opacity: 0.8, cursor: 'wait' }, css: { border: 0, color: '#fff', padding: 0, backgroundColor: 'transparent' } }); } //let logOut = () =>{ // document.querySelector('#logOut').addEventListener('click', (e) => { // window.location.href = 'http://172.16.2.53:8080/proyecto-estandar/vistas/logout' // }) //} //logOut(); //let logOut = () => { // $('.logOut').click(function () { // console.log("redireccionando") // window.location.href = CONSTANTES.PATH_IP + 'vistas/logout'; // }) //} let logOut = () => { document.querySelector('#logOut').addEventListener('click', (e) => { window.location.href = `${contextPath}/vistas/logout`; }); }; function defaultConfigDatePicker() { $('.datepicker').datepicker({ dateFormat: 'dd/mm/yy', showButtonPanel: true, changeMonth: true, changeYear: true, minDate: '-4Y', maxDate: '+1Y', inline: true }); $.datepicker.regional['es'] = { closeText: 'Cerrar', prevText: '<Ant', nextText: 'Sig>', currentText: 'Hoy', monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Setiembre', 'Octubre', 'Noviembre', 'Diciembre'], monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'], dayNames: ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'], dayNamesShort: ['Dom', 'Lun', 'Mar', 'Mie', 'Jue', 'Vie', 'Sáb'], dayNamesMin: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sá'], weekHeader: 'Sm', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: '' }; $.datepicker.setDefaults($.datepicker.regional['es']); ; } //function defaultConfigDateRangePicker() { // $('.daterange-basic').daterangepicker({ // applyClass: 'bg-slate-600', //// "singleDatePicker": true, // cancelClass: 'btn-default', //// showDropdowns: false, //// timePicker: true, //// opens: 'center', //// singleDatePicker: true, // autoApply: true, // locale: { // format: 'DD/MM/YYYY' // } // }); //// $('.calendar.right').hide(); //} (function (a) { a.fn.validCampo = function (b) { a(this).on({keypress: function (a) { var c = a.which, d = a.keyCode, e = String.fromCharCode(c).toLowerCase(), f = b; (-1 != f.indexOf(e) || 9 == d || 37 != c && 37 == d || 39 == d && 39 != c || 8 == d || 46 == d && 46 != c) && 161 != c || a.preventDefault() }}) } })(jQuery); function primeraLetraMayuscula(str) { let strLower = str.toLowerCase(); let caracter = strLower.substr(0, 1).toUpperCase(); let cadena = caracter + strLower.substr(1); return cadena; } const makeDatatable = ( wrapName = ``, forDatatable = { data: [], columns: [], footerFilter: false, footer: false }, className = ``, ) => { if (!wrapName) { return { message: `{wrapName} is empty`, status: false } } if (forDatatable.columns.length <= 0) { return { message: `{columns} is empty`, status: false } } let nameDatatable = `${wrapName}-datatable`; // table let table_head = ` <table id="${nameDatatable}" class="table table-hover ${className}" cellspacing="0" width="100%">`; // headers let table_head_th = ` <thead> <tr>`; forDatatable.columns.forEach((obj) => { let title = `undefined`; if (obj.title) { title = obj.title; } else if (obj.data) { title = obj.data; } table_head_th += ` <th>${title}</th>` }) table_head_th += ` </tr> </thead>` // footers let table_foot_th = ``; if (forDatatable.footer) { table_foot_th = ` <tfoot> <tr>`; forDatatable.columns.forEach((obj) => { let title = `undefined`; if (obj.title) { title = obj.title; } else if (obj.data) { title = obj.data; } table_foot_th += ` <th>${title}</th>` }) table_foot_th += ` </tr> </tfoot> ` } // table let table_foot = `</table>` $(`#${wrapName}`).empty().append(`${table_head}${table_head_th}${table_foot_th}${table_foot}`); if (forDatatable.footerFilter) { // Setup - add a text input to each footer cell $(`#${nameDatatable} tfoot th`).each(function () { var title = $(this).text(); $(this).html(`<input type="text" class="form-control" placeholder="${title}" />`); }); } $(`#${nameDatatable}`) .DataTable(forDatatable); if (forDatatable.footerFilter) { // DataTable let table = $(`#${nameDatatable}`).DataTable(); // Apply the search table.columns().every(function () { var that = this; $('input', this.footer()).on('keyup change', function () { if (that.search() !== this.value) { that .search(this.value) .draw(); } }); }); $(`#${wrapName} .dataTables_scrollBody`).appendTo(`#${wrapName} .dataTables_scroll`); } return Promise.resolve({ datatable: $(`#${nameDatatable}`), container: $(`#${wrapName}`) }); } const randomIntFromInterval = (minimum, maximum) => { return Math.round(Math.random() * (maximum - minimum) + minimum); } const cleanQueryParams = (params = {}) => { for (var key in params) { if (params.hasOwnProperty(key)) { if (!params[key]) { delete params[key]; } } } return params; } const initDatePicker = (...selectorName) => { selectorName.forEach(id => { let options = { format: "dd/mm/yyyy", zIndexOffset: 3000, autoclose: true, language: "es", onSelect: function () { // $(this).valid(); } } $(id).datepicker(options); $(id).datepicker('setDate', 'now'); }); } const initDateRangePicker = (nodeIdentifier) => { let options = { "autoApply": true, "locale": { "format": "DD/MM/YYYY", "separator": " - ", "applyLabel": "Apply", "cancelLabel": "Cancel", "fromLabel": "From", "toLabel": "To", "customRangeLabel": "Custom", "weekLabel": "W", "daysOfWeek": [ "Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa" ], "monthNames": [ "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Setiembre", "Octubre", "Noviembre", "Diciembre" ], "firstDay": 1 }, "startDate": "17/08/2018", "endDate": "23/08/2018" }; $(nodeIdentifier).daterangepicker(options); } const pickersNoConflict = () => { $.fn.datepicker.noConflict = function () { $.fn.datepicker = old; return this; }; } const initSelect2 = (nodeIdentifier, URI, {title, subtitle} = {}) => { $(`${nodeIdentifier}`).select2({ containerCssClass: 'select-xs', ajax: { url: URI, dataType: `json`, delay: 1000, data: function (params) { return { q: params.term, // search term page: params.page }; }, processResults: function (data, params) { // parse the results into the format expected by Select2 // since we are using custom formatting functions we do not need to // alter the remote JSON data, except to indicate that infinite // scrolling can be used params.page = params.page || 1; return { results: data, pagination: { more: (params.page * 30) < data.length } }; }, cache: true }, placeholder: `Buscar`, allowClear: true, escapeMarkup: function (markup) { return markup; }, // let our custom formatter work minimumInputLength: 1, templateResult: formatRepo, templateSelection: formatRepoSelection }); function formatRepo(repo) { if (repo.loading) { return repo.text; } var markup = ` <div class='select2-result-repository clearfix'> <div class='select2-result-repository__title'>${repo[title]}</div>`; markup += ` <div class='select2-result-repository__statistics'> <div class='select2-result-repository__forks'>${repo[subtitle]}</div> </div> </div>` return markup; } function formatRepoSelection(repo) { if (repo.id) { return repo[title]; } else { return repo.text; } } } const generarFechas = (desde, hasta) => { let reverseDesde = desde.split("/").reverse().join("/"); let reverseHasta = hasta.split("/").reverse().join("/"); desde = moment(reverseDesde); hasta = moment(reverseHasta); let diaActual = desde; let fechas = []; while (diaActual.isSameOrBefore(hasta)) { fechas.push(diaActual.format('DD/MM/YYYY')); diaActual.add(1, 'days'); } return fechas; } const listarSedes = (nodeIdentifier, todos = true) => { ajaxWebService.get(URI_SEDES).then((response) => { let sedes = response.data; sedes = _.orderBy(sedes, s => s.descripcion); let html = `<option value="">${todos ? "[TODOS]" : [SELECCIONE]}</option>`; html += sedes.map(sede => `<option value="${sede.codigo}">${sede.descripcion}</option>`) $(nodeIdentifier).html(html).select2(); }); }; const getDataRow = (datatable, e) => datatable.DataTable().row($(e.currentTarget).parents("tr")).data() /*ELIMINAR CUANDO PASE A PROD*/ //$("body").addClass("sidebar-xs") /**/ const llenarCombo = (nodeIdentifier, URI, todos = false, value = "id", texto = "descripcion") => { return ajaxWebService.get(URI).then((response) => { let data = response.data let primeraOpcion = todos ? "[TODOS]" : "[SELECCIONE]" let html = `<option>${primeraOpcion}</option>` html += data.map((obj) => `<option value="${obj[value]}">${obj[texto]}</option>`).join("") $(nodeIdentifier).html(html) return $(nodeIdentifier) }) }