var query = [] var msg = '' var tickets_controllers = { init: function(){ $$('cmd_nuevo_ticket').attachEvent('onItemClick', cmd_nuevo_ticket_click) $$('cmd_generar_ticket').attachEvent('onItemClick', cmd_generar_ticket_click) $$('cmd_cerrar_ticket').attachEvent('onItemClick', cmd_cerrar_ticket_click) $$('tsearch_product_key').attachEvent('onKeyPress', tsearch_product_key_press) $$('grid_tdetails').attachEvent('onItemClick', grid_ticket_details_click) $$('grid_tdetails').attachEvent('onBeforeEditStop', grid_tickets_details_before_edit_stop) $$('gt_productos_found').attachEvent('onValueSuggest', gt_productos_found_click) } } function configuracion_inicial_ticket(){ webix.ajax().sync().get('/values/taxes', function(text, data){ var values = data.json() table_taxes.clear() table_taxes.insert(values) }) get_forma_pago('lst_ticket_forma_pago') table_pt.clear() table_totals.clear() } function cmd_nuevo_ticket_click(){ configuracion_inicial_ticket() $$('multi_tickets').setValue('tickets_new') } function validar_ticket(){ var grid = $$('grid_tdetails') if(!grid.count()){ webix.UIManager.setFocus('tsearch_product_key') msg = 'Agrega al menos un producto' msg_error(msg) return false } return true } function guardar_ticket(values){ var grid = $$('grid_tdetails') //~ showvar(values) var rows = grid.data.getRange() for (i = 0; i < rows.length; i++) { delete rows[i]['delete'] delete rows[i]['clave'] delete rows[i]['clave_sat'] delete rows[i]['unidad'] delete rows[i]['importe'] rows[i]['valor_unitario'] = parseFloat(rows[i]['valor_unitario']) rows[i]['descuento'] = parseFloat(rows[i]['descuento']) } var data = new Object() data['opt'] = 'add' data['productos'] = rows data['forma_pago'] = values.forma_pago webix.ajax().sync().post('tickets', 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('Ticket generado correctamente') $$('form_new_ticket').setValues({}) $$('multi_tickets').setValue('tickets_home') }else{ msg_error(values.msg) } } }) } function cmd_generar_ticket_click(){ var form = this.getFormView(); if(!form.validate()) { msg_error('Valores inválidos') return } var values = form.getValues() if(!validar_ticket()){ return } msg = '¿Todos los datos son correctos?

' msg += '¿Estás seguro de generar este Ticket?' webix.confirm({ title: 'Generar Ticket', ok: 'Si', cancel: 'No', type: 'confirm-error', text: msg, callback:function(result){ if(result){ guardar_ticket(values) } } }) } function cmd_cerrar_ticket_click(){ $$('multi_tickets').setValue('tickets_home') } function calcular_precio_con_impuestos(precio, taxes){ var precio_final = precio for(var tax of taxes){ impuesto = table_taxes.findOne({'id': tax.tax}) if(impuesto.tipo == 'E'){ continue } var base = precio if(impuesto.tipo == 'R'){ base = (precio * -1).round(DECIMALES) } precio_final += (impuesto.tasa * base).round(DECIMALES) } return precio_final } function agregar_producto(values){ var taxes = values.taxes var producto = values.row var form = $$('form_new_ticket') var grid = $$('grid_tdetails') var row = grid.getItem(producto.id) var precio_final = 0.0 if(row == undefined){ producto['cantidad'] = 1 producto['valor_unitario'] = calcular_precio_con_impuestos( parseFloat(producto['valor_unitario']), taxes) producto['importe'] = producto['valor_unitario'] grid.add(producto) }else{ producto['cantidad'] = parseFloat(row.cantidad) + 1 producto['descuento'] = parseFloat(row.descuento) producto['valor_unitario'] = parseFloat(row.valor_unitario) precio_final = producto['valor_unitario'] - producto['descuento'] producto['importe'] = (precio_final * producto['cantidad']).round(DECIMALES) grid.updateItem(row.id, producto) } form.setValues({tsearch_product_key: '', tsearch_product_name: ''}, true) } function buscar_producto_key(key){ webix.ajax().get('/values/productokey', {'key': key}, { error: function(text, data, xhr) { msg_error('Error al consultar') }, success: function(text, data, xhr){ var values = data.json() if (values.ok){ agregar_producto(values) } else { msg = 'No se encontró la clave

' + key msg_error(msg) } } }) } function tsearch_product_key_press(code, e){ var value = this.getValue() if(code == 13 && value.trim().length > 0){ buscar_producto_key(value.trim()) } } function grid_ticket_details_click(id, e, node){ if(id.column != 'delete'){ return } var grid = $$('grid_tdetails') grid.remove(id.row) } function grid_tickets_details_before_edit_stop(state, editor){ var grid = $$('grid_tdetails') var row = grid.getItem(editor.row) if(editor.column == 'cantidad'){ var cantidad = parseFloat(state.value) if(isNaN(cantidad)){ msg = 'La cantidad debe ser un número' msg_error(msg) grid.blockEvent() state.value = state.old grid.editCancel() grid.unblockEvent() return true } var valor_unitario = parseFloat(row['valor_unitario']) var descuento = parseFloat(row['descuento']) } if(editor.column == 'valor_unitario'){ var valor_unitario = parseFloat(state.value) if(isNaN(valor_unitario)){ msg = 'El valor unitario debe ser un número' msg_error(msg) grid.blockEvent() state.value = state.old grid.editCancel() grid.unblockEvent() return true } var cantidad = parseFloat(row['cantidad']) var descuento = parseFloat(row['descuento']) } if(editor.column == 'descuento'){ var descuento = parseFloat(state.value) if(isNaN(descuento)){ msg = 'El descuento debe ser un número' msg_error(msg) grid.blockEvent() state.value = state.old grid.editCancel() grid.unblockEvent() return true } var cantidad = parseFloat(row['cantidad']) var valor_unitario = parseFloat(row['valor_unitario']) } var precio_final = valor_unitario - descuento row['importe'] = (cantidad * precio_final).round(DECIMALES) grid.refresh() } function gt_productos_found_click(obj){ buscar_producto_key(obj.clave) }