var query = [] var cfg_nomina = new Object() var nomina_controllers = { init: function(){ $$('cmd_nomina_import').attachEvent('onItemClick', cmd_nomina_import_click) $$('cmd_empleados').attachEvent('onItemClick', cmd_empleados_click) $$('cmd_close_empleados').attachEvent('onItemClick', cmd_close_empleados_click) $$('cmd_delete_empleado').attachEvent('onItemClick', cmd_delete_empleado_click) $$('cmd_import_empleados').attachEvent('onItemClick', cmd_import_empleados_click) $$('cmd_nomina_without_stamp').attachEvent('onItemClick', cmd_nomina_without_stamp_click) $$('cmd_nomina_delete').attachEvent('onItemClick', cmd_nomina_delete_click) $$('cmd_nomina_timbrar').attachEvent('onItemClick', cmd_nomina_timbrar_click) $$('cmd_nomina_sat').attachEvent('onItemClick', cmd_nomina_sat_click) $$('cmd_nomina_log').attachEvent('onItemClick', cmd_nomina_log_click) $$('cmd_nomina_download').attachEvent('onItemClick', cmd_nomina_download_click) $$('cmd_nomina_cancel').attachEvent('onItemClick', cmd_nomina_cancel_click) $$('grid_nomina').attachEvent('onItemClick', grid_nomina_click) $$('filter_year_nomina').attachEvent('onChange', filter_year_nomina_change) $$('filter_month_nomina').attachEvent('onChange', filter_month_nomina_change) $$('filter_dates_nomina').attachEvent('onChange', filter_dates_nomina_change) $$('grid_nomina').attachEvent('onSelectChange', grid_nomina_on_select_change) webix.extend($$('grid_nomina'), webix.ProgressBar) } } function default_config_nomina(){ current_dates_nomina() get_nomina() } function current_dates_nomina(){ var fy = $$('filter_year_nomina') var fm = $$('filter_month_nomina') var d = new Date() fy.blockEvent() fm.blockEvent() fm.setValue(d.getMonth() + 1) webix.ajax().sync().get('/values/filteryearsnomina', function(text, data){ var values = data.json() fy.getList().parse(values) fy.setValue(d.getFullYear()) }) fy.unblockEvent() fm.unblockEvent() } function get_nomina(filters){ var grid = $$('grid_nomina') grid.showProgress({type: 'icon'}) webix.ajax().get('/nomina', filters, { error: function(text, data, xhr) { msg = 'Error al consultar' msg_error(msg) }, success: function(text, data, xhr) { var values = data.json(); if (values.ok){ grid.clearAll(); grid.parse(values.rows, 'json'); }else{ msg_error(values.msg) } } }) } function cmd_nomina_import_click(){ win_import_nomina.init() $$('win_import_nomina').show() } function cmd_import_template_nomina_click(){ var form = $$('form_upload_nomina') var values = form.getValues() if(!$$('lst_upload_nomina').count()){ $$('win_import_nomina').close() return } if($$('lst_upload_nomina').count() > 1){ msg = 'Selecciona solo un archivo' msg_error(msg) return } var template = $$('up_nomina').files.getItem($$('up_nomina').files.getFirstId()) if(template.type.toLowerCase() != 'ods'){ msg = 'Archivo inválido.\n\nSe requiere un archivo ODS' msg_error(msg) return } msg = '¿Estás seguro de importar este archivo?' webix.confirm({ title: 'Importar Nómina', ok: 'Si', cancel: 'No', type: 'confirm-error', text: msg, callback:function(result){ if(result){ $$('up_nomina').send() } } }) } function up_nomina_upload_complete(response){ if(response.status != 'server'){ msg = 'Ocurrio un error al subir el archivo' msg_error(msg) return } msg = 'Archivo subido correctamente.\n\nComenzando importación.' msg_ok(msg) $$('win_import_nomina').close() webix.ajax().get('/nomina', {opt: 'import'}, { error: function(text, data, xhr) { msg = 'Error al importar' msg_error(msg) }, success: function(text, data, xhr) { var values = data.json(); if (values.ok){ msg_ok(values.msg) get_nomina() }else{ msg_error(values.msg) } } }) } function get_employees(){ webix.ajax().get('/employees', { error: function(text, data, xhr) { msg = 'Error al consultar' msg_error(msg) }, success: function(text, data, xhr) { var values = data.json(); if (values.ok){ $$('grid_employees').clearAll(); $$('grid_employees').parse(values.rows, 'json'); }else{ msg_error(values.msg) } } }) } function cmd_empleados_click(){ get_employees() $$('multi_nomina').setValue('nomina_empleados') } function cmd_close_empleados_click(){ $$('multi_nomina').setValue('nomina_home') } function cmd_import_empleados_click(){ win_import_employees.init() $$('win_import_employees').show() } function cmd_import_employees_click(){ var form = $$('form_upload_employees') var values = form.getValues() if(!$$('lst_upload_employees').count()){ $$('win_import_employees').close() return } if($$('lst_upload_employees').count() > 1){ msg = 'Selecciona solo un archivo' msg_error(msg) return } var template = $$('up_employees').files.getItem($$('up_employees').files.getFirstId()) if(template.type.toLowerCase() != 'ods'){ msg = 'Archivo inválido.\n\nSe requiere un archivo ODS' msg_error(msg) return } msg = '¿Estás seguro de importar este archivo?' webix.confirm({ title: 'Importar Empleados', ok: 'Si', cancel: 'No', type: 'confirm-error', text: msg, callback:function(result){ if(result){ $$('up_employees').send() } } }) } function up_employees_upload_complete(response){ if(response.status != 'server'){ msg = 'Ocurrio un error al subir el archivo' msg_error(msg) return } msg = 'Archivo subido correctamente.\n\nComenzando importación.' msg_ok(msg) $$('win_import_employees').close() webix.ajax().get('/employees', {opt: 'import'}, { error: function(text, data, xhr) { msg = 'Error al importar' msg_error(msg) }, success: function(text, data, xhr) { var values = data.json(); if (values.ok){ msg_ok(values.msg) get_employees() }else{ msg_error(values.msg) } } }) } function delete_empleado(id){ webix.ajax().del('/employees', {id: id}, function(text, xml, xhr){ var msg = 'Empleado eliminado correctamente' if(xhr.status == 200){ $$('grid_employees').remove(id); msg_ok(msg) }else{ msg = 'El Empleado tiene recibos timbrados' msg_error(msg) } }) } function cmd_delete_empleado_click(){ var row = $$('grid_employees').getSelectedItem() if (row == undefined){ msg = 'Selecciona un Empleado' msg_error(msg) return } msg = '¿Estás seguro de eliminar al Empleado?

' msg += row['nombre_completo'] + ' (' + row['rfc'] + ')' msg += '

ESTA ACCIÓN NO SE PUEDE DESHACER

' webix.confirm({ title: 'Eliminar Empleado', ok: 'Si', cancel: 'No', type: 'confirm-error', text: msg, callback:function(result){ if (result){ delete_empleado(row['id']) } } }) } function cmd_nomina_without_stamp_click(){ get_nomina() } function cmd_nomina_delete_click(){ var rows = $$('grid_nomina').getSelectedItem() if (rows == undefined){ msg = 'Selecciona al menos un registro' msg_error(msg) return } var ids = [] if(Array.isArray(rows)){ for(var i in rows){ ids.push(rows[i].id) } }else{ ids.push(rows.id) } msg = '¿Estás seguro de eliminar los recibos seleccionado?

' msg += 'ESTA ACCIÓN NO SE PUEDE DESHACER

' msg += 'Solo se eliminan recibos no timbrados' webix.confirm({ title: 'Eliminar Nomina', ok: 'Si', cancel: 'No', type: 'confirm-error', text: msg, callback:function(result){ if (result){ delete_nomina(ids) } } }) } function delete_nomina(ids){ webix.ajax().del('/nomina', {id: ids}, function(text, xml, xhr){ var msg = 'Registros eliminados correctamente' if (xhr.status == 200){ get_nomina() msg_ok(msg) } else { msg = 'No se pudo eliminar.' msg_error(msg) } }) } function cmd_nomina_timbrar_click(){ get_nomina() msg = 'Se enviarán a timbrar todos los recibos sin timbrar

' msg += '¿Estás seguro de continuar?

' webix.confirm({ title: 'Enviar a timbrar', ok: 'Si', cancel: 'No', type: 'confirm-error', text: msg, callback:function(result){ if (result){ timbrar_nomina() } } }) } function timbrar_nomina(){ webix.ajax().get('/nomina', {opt: 'stamp'}, { error: function(text, data, xhr) { msg = 'Error al timbrar' msg_error(msg) }, success: function(text, data, xhr) { var values = data.json(); if(values.ok){ cmd_update_timbres_click() get_nomina() msg_ok(values.msg_ok) } if(values.error){ webix.alert({ title: 'Error al Timbrar', text: values.msg_error, type: 'alert-error' }) } } }) } function send_mail(row){ if(!row.uuid){ msg_error('La nómina no esta timbrada') return } var data = {'opt': 'send_mail', 'id': row.id} msg = '¿Estás seguro de enviar por correo este Recibo de Nómina?' webix.confirm({ title: 'Enviar Recibo de Nómina', ok: 'Si', cancel: 'No', type: 'confirm-error', text: msg, callback:function(result){ if(result){ webix.ajax().post('/nomina', data, { error:function(text, data, XmlHttpRequest){ msg = 'Ocurrio un error, consulta a soporte técnico' msg_error(msg) }, success:function(text, data, XmlHttpRequest){ values = data.json(); if(values.ok){ msg_ok(values.msg) }else{ msg_error(values.msg) } } }) } } }) } function grid_nomina_click(id, e, node){ var row = this.getItem(id) if(id.column == 'xml'){ location = '/doc/nomxml/' + row.id }else if(id.column == 'pdf'){ window.open('/doc/nompdf/' + row.id, '_blank') }else if(id.column == 'email'){ send_mail(row) } } function filter_year_nomina_change(nv, ov){ var fm = $$('filter_month_nomina') filters = {'opt': 'yearmonth', 'year': nv, 'month': fm.getValue()} get_nomina(filters) } function filter_month_nomina_change(nv, ov){ var fy = $$('filter_year_nomina') filters = {'opt': 'yearmonth', 'year': fy.getValue(), 'month': nv} get_nomina(filters) } function filter_dates_nomina_change(range){ if(range.start != null && range.end != null){ filters = {'opt': 'dates', 'range': range} get_nomina(filters) } } function cmd_nomina_cancel_click(){ var row = $$('grid_nomina').getSelectedItem() if(row == undefined){ msg = 'Selecciona un registro' msg_error(msg) return } if(Array.isArray(row)){ msg = 'Selecciona solo un registro' msg_error(msg) return } if(row['estatus'] != 'Timbrado'){ msg = 'Solo se pueden cancelar recibos timbrados' msg_error(msg) return } win_invoice_cancel_nomina.init() $$('win_invoice_cancel_nomina').show() } function cmd_win_cancel_nomina_close_click(){ $$('win_invoice_cancel_nomina').close() } function cmd_invoice_cancel_nomina_click(){ var reason = $$('lst_reasons_cancel').getValue() var uuid = $$('txt_cancel_uuid').getValue() if(!reason){ msg = 'Selecciona un motivo para esta cancelación' msg_error(msg) return } if(reason=='01' & !uuid){ msg = 'Debes de capturar el UUID que reemplaza a este CFDI' msg_error(msg) return } $$('win_invoice_cancel_nomina').close() send_cancel_nomina(reason, uuid) } function send_cancel_nomina(reason, uuid){ var grid = $$('grid_nomina') var row = grid.getSelectedItem() var data = new Object() data['opt'] = 'cancel' data['id'] = row.id data['args'] = {reason: reason, uuid: uuid} webix.ajax().sync().post('nomina', data, { error:function(text, data, XmlHttpRequest){ msg = 'Ocurrio un error, consulta a soporte técnico' msg_error(msg) }, success:function(text, data, XmlHttpRequest){ values = data.json(); if(values.ok){ grid.updateItem(row.id, values.row) msg_ok(values.msg) }else{ msg_error(values.msg) } } }) } function cmd_nomina_log_click(){ location = '/doc/nomlog/0' } function cmd_nomina_download_click(){ var grid = $$('grid_nomina') if(!grid.count()){ msg = 'Sin documentos a descargar' msg_error(msg) return } var ids = [] grid.eachRow(function(row){ var r = grid.getItem(row) ids.push(r.id) }) var filters = {'by': 'download', 'ids': ids} webix.ajax().response('blob').get('/nomina', filters, function(text, data){ webix.html.download(data, 'nomina.zip'); }); } function grid_nomina_on_select_change(){ var g = $$('grid_nomina') var rows = g.getSelectedItem(true) var total = 0 for (i = 0; i < rows.length; i++) { if(typeof(rows[i].total) == 'string'){ total += rows[i].total.to_float() }else{ total += rows[i].total } } g.getColumnConfig('empleado').footer[0].text = webix.i18n.priceFormat(total) g.refreshColumns() } function cmd_nomina_sat_click(){ var g = $$('grid_nomina') if(g.count() == 0){ return } var row = g.getSelectedItem() if (row == undefined){ msg_error('Selecciona un recibo de nómina') return } if (row instanceof Array){ msg_error('Selecciona solo un recibo de nómina') return } if(!row.uuid){ msg_error('La factura no esta timbrada, solo es posible consultar \ el estatus en el SAT de facturas timbradas') return } var options = {opt: 'status_sat', id: row.id} webix.ajax().get('/nomina', options, function(text, data){ var value = data.json() if(value == 'Vigente'){ msg_ok(value) }else if(value == 'uncancel'){ ask_invoice_uncancel(row.id) }else{ msg_error(value) } }) }