2017-12-19 00:56:55 -06:00
|
|
|
var query = []
|
|
|
|
var msg = ''
|
2017-12-31 00:17:20 -06:00
|
|
|
var cfg_ticket = new Object()
|
2018-01-01 22:14:49 -06:00
|
|
|
var last_forma_pago = ''
|
2017-12-19 00:56:55 -06:00
|
|
|
|
|
|
|
|
|
|
|
var tickets_controllers = {
|
|
|
|
init: function(){
|
|
|
|
$$('cmd_nuevo_ticket').attachEvent('onItemClick', cmd_nuevo_ticket_click)
|
2021-10-29 22:06:53 -05:00
|
|
|
$$('cmd_ticket_from_ticket').attachEvent('onItemClick', cmd_ticket_from_ticket_click)
|
2017-12-24 23:54:19 -06:00
|
|
|
$$('cmd_ticket_to_invoice').attachEvent('onItemClick', cmd_ticket_to_invoice_click)
|
2018-01-01 13:31:01 -06:00
|
|
|
$$('cmd_ticket_report_pdf').attachEvent('onItemClick', cmd_ticket_report_pdf_click)
|
|
|
|
$$('cmd_ticket_report_xls').attachEvent('onItemClick', cmd_ticket_report_xls_click)
|
2017-12-19 00:56:55 -06:00
|
|
|
$$('cmd_generar_ticket').attachEvent('onItemClick', cmd_generar_ticket_click)
|
|
|
|
$$('cmd_cerrar_ticket').attachEvent('onItemClick', cmd_cerrar_ticket_click)
|
2017-12-24 23:54:19 -06:00
|
|
|
$$('cmd_new_invoice_from_ticket').attachEvent('onItemClick', cmd_new_invoice_from_ticket_click)
|
|
|
|
$$('cmd_close_ticket_invoice').attachEvent('onItemClick', cmd_cerrar_ticket_click)
|
2017-12-21 01:13:28 -06:00
|
|
|
$$('cmd_cancelar_ticket').attachEvent('onItemClick', cmd_cancelar_ticket_click)
|
2017-12-25 23:30:34 -06:00
|
|
|
$$('cmd_move_tickets_right').attachEvent('onItemClick', cmd_move_tickets_right_click)
|
|
|
|
$$('cmd_move_tickets_left').attachEvent('onItemClick', cmd_move_tickets_left_click)
|
2017-12-30 15:17:12 -06:00
|
|
|
$$('cmd_ticket_notes').attachEvent('onItemClick', cmd_ticket_notes_click)
|
2017-12-20 01:15:48 -06:00
|
|
|
$$('tsearch_product_key').attachEvent('onKeyPress', tsearch_product_key_press)
|
2017-12-31 00:17:20 -06:00
|
|
|
$$('grid_tickets').attachEvent('onItemClick', grid_tickets_click)
|
2017-12-20 01:15:48 -06:00
|
|
|
$$('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)
|
2018-01-01 10:25:30 -06:00
|
|
|
$$('cmd_ticket_filter_today').attachEvent('onItemClick', cmd_ticket_filter_today_click)
|
2018-01-01 10:37:16 -06:00
|
|
|
$$('filter_year_ticket').attachEvent('onChange', filter_year_ticket_change)
|
2017-12-21 01:13:28 -06:00
|
|
|
$$('filter_month_ticket').attachEvent('onChange', filter_month_ticket_change)
|
2018-01-01 10:37:16 -06:00
|
|
|
$$('filter_dates_ticket').attachEvent('onChange', filter_dates_ticket_change)
|
2017-12-24 23:54:19 -06:00
|
|
|
$$('chk_is_invoice_day').attachEvent('onChange', chk_is_invoice_day_change)
|
2017-12-25 23:30:34 -06:00
|
|
|
$$('grid_tickets_active').attachEvent('onItemDblClick', grid_tickets_active_double_click)
|
|
|
|
$$('grid_tickets_invoice').attachEvent('onItemDblClick', grid_tickets_invoice_double_click)
|
|
|
|
$$('tsearch_client_key').attachEvent('onKeyPress', tsearch_client_key_press)
|
|
|
|
$$('grid_ticket_clients_found').attachEvent('onValueSuggest', grid_ticket_clients_found_click)
|
2018-01-10 01:35:11 -06:00
|
|
|
$$('grid_tdetails').attachEvent('onAfterRender', grid_tdetails_render)
|
2017-12-21 01:13:28 -06:00
|
|
|
|
|
|
|
webix.extend($$('grid_tickets'), webix.ProgressBar)
|
2017-12-25 23:30:34 -06:00
|
|
|
webix.extend($$('grid_tickets_active'), webix.ProgressBar)
|
2017-12-19 00:56:55 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-12-21 01:13:28 -06:00
|
|
|
function current_dates_tickets(){
|
|
|
|
var fy = $$('filter_year_ticket')
|
|
|
|
var fm = $$('filter_month_ticket')
|
|
|
|
var d = new Date()
|
|
|
|
|
|
|
|
fy.blockEvent()
|
|
|
|
fm.blockEvent()
|
|
|
|
|
|
|
|
fm.setValue(d.getMonth() + 1)
|
|
|
|
webix.ajax().sync().get('/values/filteryearsticket', function(text, data){
|
|
|
|
var values = data.json()
|
|
|
|
fy.getList().parse(values)
|
|
|
|
fy.setValue(d.getFullYear())
|
|
|
|
})
|
|
|
|
|
|
|
|
fy.unblockEvent()
|
|
|
|
fm.unblockEvent()
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function get_tickets(filters){
|
|
|
|
if(filters == undefined){
|
|
|
|
filters = {'opt': 'today'}
|
|
|
|
}
|
|
|
|
|
|
|
|
var grid = $$('grid_tickets')
|
|
|
|
grid.showProgress({type: 'icon'})
|
|
|
|
|
|
|
|
webix.ajax().get('/tickets', filters, {
|
|
|
|
error: function(text, data, xhr) {
|
|
|
|
msg_error('Error al consultar')
|
|
|
|
},
|
|
|
|
success: function(text, data, xhr) {
|
|
|
|
var values = data.json();
|
|
|
|
grid.clearAll();
|
|
|
|
if (values.ok){
|
|
|
|
grid.parse(values.rows, 'json')
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2018-01-01 10:25:30 -06:00
|
|
|
function cmd_ticket_filter_today_click(){
|
|
|
|
get_tickets()
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-12-21 01:13:28 -06:00
|
|
|
function filter_year_ticket_change(nv, ov){
|
|
|
|
var fm = $$('filter_month_ticket')
|
2018-01-01 10:37:16 -06:00
|
|
|
filters = {'opt': 'yearmonth', 'year': nv, 'month': fm.getValue()}
|
2017-12-21 01:13:28 -06:00
|
|
|
get_tickets(filters)
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function filter_month_ticket_change(nv, ov){
|
|
|
|
var fy = $$('filter_year_ticket')
|
2018-01-01 10:37:16 -06:00
|
|
|
filters = {'opt': 'yearmonth', 'year': fy.getValue(), 'month': nv}
|
2017-12-21 01:13:28 -06:00
|
|
|
get_tickets(filters)
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2018-01-01 10:37:16 -06:00
|
|
|
function filter_dates_ticket_change(range){
|
|
|
|
if(range.start != null && range.end != null){
|
|
|
|
filters = {'opt': 'dates', 'range': range}
|
|
|
|
get_tickets(filters)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-12-20 01:15:48 -06:00
|
|
|
function configuracion_inicial_ticket(){
|
2017-12-21 01:13:28 -06:00
|
|
|
current_dates_tickets()
|
|
|
|
get_tickets()
|
2017-12-31 00:17:20 -06:00
|
|
|
|
|
|
|
webix.ajax().sync().get('/values/configticket', function(text, data){
|
|
|
|
var values = data.json()
|
|
|
|
//~ showvar(values)
|
|
|
|
cfg_ticket['open_pdf'] = values.open_pdf
|
2018-01-01 22:14:49 -06:00
|
|
|
cfg_ticket['direct_print'] = values.direct_print
|
2018-01-03 00:26:44 -06:00
|
|
|
cfg_ticket['edit_cant'] = values.edit_cant
|
2018-01-10 01:35:11 -06:00
|
|
|
cfg_ticket['total_up'] = values.total_up
|
2017-12-31 00:17:20 -06:00
|
|
|
})
|
2017-12-21 01:13:28 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-12-25 23:30:34 -06:00
|
|
|
function get_active_tickets(grid){
|
|
|
|
filters = {'opt': 'active'}
|
|
|
|
grid.showProgress({type: 'icon'})
|
|
|
|
|
|
|
|
webix.ajax().get('/tickets', filters, {
|
|
|
|
error: function(text, data, xhr) {
|
|
|
|
msg_error('Error al consultar')
|
|
|
|
},
|
|
|
|
success: function(text, data, xhr) {
|
|
|
|
var values = data.json();
|
|
|
|
grid.clearAll();
|
|
|
|
if (values.ok){
|
|
|
|
grid.parse(values.rows, 'json')
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-12-24 23:54:19 -06:00
|
|
|
function configuracion_inicial_ticket_to_invoice(){
|
2017-12-25 23:30:34 -06:00
|
|
|
var grid = $$('grid_tickets_active')
|
|
|
|
var gridt = $$('grid_tickets_invoice')
|
|
|
|
var form = $$('form_ticket_invoice')
|
|
|
|
|
|
|
|
get_active_tickets(grid)
|
|
|
|
form.setValues({id_partner: 0, lbl_tclient: 'Ninguno'})
|
|
|
|
gridt.attachEvent('onAfterAdd', function(id, index){
|
|
|
|
gridt.adjustColumn('index')
|
|
|
|
gridt.adjustColumn('folio', 'all')
|
|
|
|
gridt.adjustColumn('fecha', 'all')
|
|
|
|
});
|
|
|
|
gridt.clearAll()
|
2017-12-24 23:54:19 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-12-21 01:13:28 -06:00
|
|
|
function configuracion_inicial_nuevo_ticket(){
|
|
|
|
var grid = $$('grid_tdetails')
|
|
|
|
|
2017-12-20 01:15:48 -06:00
|
|
|
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')
|
2017-12-21 01:13:28 -06:00
|
|
|
grid.clearAll()
|
2017-12-20 01:15:48 -06:00
|
|
|
table_pt.clear()
|
|
|
|
table_totals.clear()
|
2018-01-10 01:35:11 -06:00
|
|
|
show('grid_ticket_total_up', cfg_ticket['total_up'])
|
2018-01-01 22:14:49 -06:00
|
|
|
$$('form_new_ticket').setValues({notas: '', forma_pago: last_forma_pago})
|
2017-12-20 01:15:48 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-12-19 00:56:55 -06:00
|
|
|
function cmd_nuevo_ticket_click(){
|
2017-12-21 01:13:28 -06:00
|
|
|
configuracion_inicial_nuevo_ticket()
|
2017-12-19 00:56:55 -06:00
|
|
|
$$('multi_tickets').setValue('tickets_new')
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2021-10-29 22:06:53 -05:00
|
|
|
function cmd_ticket_from_ticket_click(){
|
|
|
|
var grid = $$('grid_tickets')
|
|
|
|
|
|
|
|
if(grid.count() == 0){
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
var row = grid.getSelectedItem()
|
|
|
|
if (row == undefined){
|
|
|
|
msg_error('Selecciona un ticket')
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2021-10-30 15:08:32 -05:00
|
|
|
configuracion_inicial_nuevo_ticket()
|
|
|
|
$$('multi_tickets').setValue('tickets_new')
|
|
|
|
$$('grid_tdetails').load('ticketsdetails?opt=by_ticket_id&id=' + row.id)
|
2021-10-29 22:06:53 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-12-24 23:54:19 -06:00
|
|
|
function cmd_ticket_to_invoice_click(){
|
|
|
|
configuracion_inicial_ticket_to_invoice()
|
|
|
|
$$('multi_tickets').setValue('tickets_invoice')
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-12-20 01:15:48 -06:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2018-01-03 11:43:43 -06:00
|
|
|
var values = $$('form_new_ticket').getValues()
|
|
|
|
if(!values.forma_pago){
|
|
|
|
msg = 'La forma de pago es requerida'
|
|
|
|
msg_error(msg)
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
2017-12-20 01:15:48 -06:00
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-12-31 00:17:20 -06:00
|
|
|
function get_ticket_pdf(id){
|
|
|
|
window.open('/doc/tpdf/' + id, '_blank')
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-12-20 01:15:48 -06:00
|
|
|
function guardar_ticket(values){
|
2017-12-21 01:13:28 -06:00
|
|
|
var gd = $$('grid_tdetails')
|
|
|
|
var grid = $$('grid_tickets')
|
2017-12-20 01:15:48 -06:00
|
|
|
|
2017-12-21 01:13:28 -06:00
|
|
|
var rows = gd.data.getRange()
|
2017-12-20 01:15:48 -06:00
|
|
|
for (i = 0; i < rows.length; i++) {
|
2018-02-10 10:57:40 -06:00
|
|
|
delete rows[i]['id']
|
2017-12-20 01:15:48 -06:00
|
|
|
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'])
|
|
|
|
}
|
|
|
|
|
2018-01-01 22:14:49 -06:00
|
|
|
last_forma_pago = values.forma_pago
|
2017-12-20 01:15:48 -06:00
|
|
|
var data = new Object()
|
|
|
|
data['opt'] = 'add'
|
|
|
|
data['productos'] = rows
|
|
|
|
data['forma_pago'] = values.forma_pago
|
2017-12-30 15:17:12 -06:00
|
|
|
data['notas'] = values.notas
|
2017-12-20 01:15:48 -06:00
|
|
|
|
|
|
|
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({})
|
2017-12-21 01:13:28 -06:00
|
|
|
gd.clearAll()
|
|
|
|
grid.add(values.row)
|
2017-12-20 01:15:48 -06:00
|
|
|
$$('multi_tickets').setValue('tickets_home')
|
2017-12-31 00:17:20 -06:00
|
|
|
if(cfg_ticket.open_pdf){
|
|
|
|
get_ticket_pdf(values.row.id)
|
|
|
|
}
|
2018-01-01 22:14:49 -06:00
|
|
|
if(cfg_ticket.direct_print){
|
|
|
|
print_ticket(values.row.id)
|
|
|
|
}
|
2017-12-20 01:15:48 -06:00
|
|
|
}else{
|
|
|
|
msg_error(values.msg)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-12-19 00:56:55 -06:00
|
|
|
function cmd_generar_ticket_click(){
|
2018-01-03 11:43:43 -06:00
|
|
|
var form = $$('form_new_ticket')
|
2017-12-20 01:15:48 -06:00
|
|
|
|
|
|
|
if(!form.validate()) {
|
|
|
|
msg_error('Valores inválidos')
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
var values = form.getValues()
|
|
|
|
if(!validar_ticket()){
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
msg = '¿Todos los datos son correctos?<BR><BR>'
|
|
|
|
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)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
2017-12-19 00:56:55 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function cmd_cerrar_ticket_click(){
|
|
|
|
$$('multi_tickets').setValue('tickets_home')
|
2017-12-20 01:15:48 -06:00
|
|
|
}
|
|
|
|
|
2017-12-24 23:54:19 -06:00
|
|
|
|
2017-12-20 01:15:48 -06:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2018-01-10 22:52:17 -06:00
|
|
|
function edit_cant(id){
|
2018-01-03 00:26:44 -06:00
|
|
|
if(!cfg_ticket['edit_cant']){
|
|
|
|
return
|
|
|
|
}
|
2018-01-10 22:52:17 -06:00
|
|
|
$$('grid_tdetails').edit({row: id, column: 'cantidad'})
|
2018-01-03 00:26:44 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-12-20 01:15:48 -06:00
|
|
|
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']
|
2021-06-01 19:45:42 -05:00
|
|
|
//~ var id = grid.add(producto, 0)
|
|
|
|
//~ edit_cant(id)
|
2017-12-20 01:15:48 -06:00
|
|
|
}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)
|
2021-06-01 19:45:42 -05:00
|
|
|
//~ grid.updateItem(row.id, producto)
|
2017-12-20 01:15:48 -06:00
|
|
|
}
|
|
|
|
form.setValues({tsearch_product_key: '', tsearch_product_name: ''}, true)
|
2021-06-01 19:45:42 -05:00
|
|
|
|
|
|
|
//~ Validate stock
|
|
|
|
if(producto.inventario){
|
|
|
|
if(producto.cantidad > producto.existencia){
|
|
|
|
msg_error('No hay suficiente existencia de este producto')
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if(row == undefined){
|
|
|
|
var id = grid.add(producto, 0)
|
|
|
|
edit_cant(id)
|
|
|
|
}else{
|
|
|
|
grid.updateItem(row.id, producto)
|
|
|
|
}
|
2017-12-20 01:15:48 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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<BR><BR>' + 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')
|
2018-02-01 18:50:33 -06:00
|
|
|
pause(500)
|
2017-12-20 01:15:48 -06:00
|
|
|
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
|
2019-04-01 23:09:32 -06:00
|
|
|
}else if(cantidad <= 0){
|
|
|
|
msg = 'La cantidad no puede cero o menor'
|
|
|
|
msg_error(msg)
|
|
|
|
grid.blockEvent()
|
|
|
|
state.value = state.old
|
|
|
|
grid.editCancel()
|
|
|
|
grid.unblockEvent()
|
|
|
|
return true
|
2017-12-20 01:15:48 -06:00
|
|
|
}
|
2021-06-01 19:45:42 -05:00
|
|
|
|
|
|
|
//~ Validate stock
|
|
|
|
if(row['inventario']){
|
|
|
|
if(cantidad > row['existencia']){
|
|
|
|
msg = 'No hay suficiente existencia de este producto'
|
|
|
|
msg_error(msg)
|
|
|
|
grid.blockEvent()
|
|
|
|
state.value = state.old
|
|
|
|
grid.editCancel()
|
|
|
|
grid.unblockEvent()
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-12-20 01:15:48 -06:00
|
|
|
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
|
2019-04-01 23:09:32 -06:00
|
|
|
}else if(valor_unitario <= 0){
|
|
|
|
msg = 'El valor unitario no puede cero o menor'
|
|
|
|
msg_error(msg)
|
|
|
|
grid.blockEvent()
|
|
|
|
state.value = state.old
|
|
|
|
grid.editCancel()
|
|
|
|
grid.unblockEvent()
|
|
|
|
return true
|
2017-12-20 01:15:48 -06:00
|
|
|
}
|
|
|
|
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()
|
2018-01-20 18:48:46 -06:00
|
|
|
if(cfg_ticket['edit_cant']){
|
|
|
|
focus('tsearch_product_name')
|
|
|
|
}
|
2017-12-20 01:15:48 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function gt_productos_found_click(obj){
|
|
|
|
buscar_producto_key(obj.clave)
|
|
|
|
}
|
|
|
|
|
2017-12-21 01:13:28 -06:00
|
|
|
|
|
|
|
function cancel_ticket(id){
|
|
|
|
var grid = $$('grid_tickets')
|
|
|
|
var data = new Object()
|
|
|
|
data['opt'] = 'cancel'
|
|
|
|
data['id'] = id
|
|
|
|
|
|
|
|
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){
|
|
|
|
grid.updateItem(id, values.row)
|
|
|
|
msg_ok(values.msg)
|
|
|
|
}else{
|
|
|
|
msg_error(values.msg)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function cmd_cancelar_ticket_click(){
|
|
|
|
var grid = $$('grid_tickets')
|
|
|
|
|
|
|
|
if(grid.count() == 0){
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
var row = grid.getSelectedItem()
|
|
|
|
if (row == undefined){
|
|
|
|
msg_error('Selecciona un ticket')
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2018-03-07 23:52:03 -06:00
|
|
|
if(row['estatus']=='Cancelado'){
|
|
|
|
msg_error('El ticket ya esta cancelado')
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if(row['estatus']=='Facturado'){
|
|
|
|
msg_error('El ticket esta facturado')
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2017-12-21 01:13:28 -06:00
|
|
|
msg = '¿Estás seguro de cancelar el siguiente Ticket?<BR><BR>'
|
|
|
|
msg += 'Folio: ' + row['folio']
|
|
|
|
msg += '<BR><BR>ESTA ACCIÓN NO SE PUEDE DESHACER'
|
|
|
|
webix.confirm({
|
|
|
|
title:'Cancelar Ticket',
|
|
|
|
ok:'Si',
|
|
|
|
cancel:'No',
|
|
|
|
type:'confirm-error',
|
|
|
|
text:msg,
|
|
|
|
callback:function(result){
|
|
|
|
if (result){
|
|
|
|
cancel_ticket(row['id'])
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
2017-12-24 23:54:19 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function chk_is_invoice_day_change(new_value, old_value){
|
|
|
|
var value = Boolean(new_value)
|
|
|
|
show('fs_ticket_search_client', !value)
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-12-25 23:30:34 -06:00
|
|
|
function send_timbrar_invoice(id){
|
2018-06-03 00:00:04 -05:00
|
|
|
//~ webix.ajax().get('/values/timbrar', {id: id, update: false}, function(text, data){
|
|
|
|
webix.ajax().post('invoices', {opt: 'timbrar', id: id, update: false}, function(text, data){
|
2017-12-25 23:30:34 -06:00
|
|
|
var values = data.json()
|
|
|
|
if(values.ok){
|
|
|
|
msg_ok(values.msg)
|
|
|
|
}else{
|
|
|
|
webix.alert({
|
|
|
|
title: 'Error al Timbrar',
|
|
|
|
text: values.msg,
|
|
|
|
type: 'alert-error'
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function save_ticket_to_invoice(data){
|
|
|
|
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(values.msg)
|
|
|
|
send_timbrar_invoice(values.id)
|
|
|
|
$$('multi_tickets').setValue('tickets_home')
|
|
|
|
}else{
|
|
|
|
msg_error(values.msg)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-12-24 23:54:19 -06:00
|
|
|
function cmd_new_invoice_from_ticket_click(){
|
2017-12-25 23:30:34 -06:00
|
|
|
var form = this.getFormView();
|
|
|
|
var chk = $$('chk_is_invoice_day')
|
|
|
|
var grid = $$('grid_tickets_invoice')
|
|
|
|
var values = form.getValues()
|
|
|
|
var tickets = []
|
|
|
|
|
|
|
|
if(!chk.getValue()){
|
|
|
|
if(values.id_partner == 0){
|
|
|
|
webix.UIManager.setFocus('tsearch_client_name')
|
|
|
|
msg = 'Selecciona un cliente'
|
|
|
|
msg_error(msg)
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if(!grid.count()){
|
|
|
|
msg = 'Agrega al menos un ticket a facturar'
|
|
|
|
msg_error(msg)
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
grid.eachRow(function(row){
|
|
|
|
tickets.push(row)
|
|
|
|
})
|
|
|
|
|
|
|
|
var data = new Object()
|
|
|
|
data['client'] = values.id_partner
|
|
|
|
data['tickets'] = tickets
|
|
|
|
data['is_invoice_day'] = chk.getValue()
|
|
|
|
data['opt'] = 'invoice'
|
|
|
|
|
|
|
|
msg = 'Todos los datos son correctos.<BR><BR>¿Estás seguro de generar esta factura?'
|
|
|
|
webix.confirm({
|
|
|
|
title: 'Generar Factura',
|
|
|
|
ok: 'Si',
|
|
|
|
cancel: 'No',
|
|
|
|
type: 'confirm-error',
|
|
|
|
text: msg,
|
|
|
|
callback:function(result){
|
|
|
|
if(result){
|
|
|
|
save_ticket_to_invoice(data)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function grid_tickets_active_double_click(id, e, node){
|
|
|
|
this.move(id.row, -1, $$('grid_tickets_invoice'))
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function grid_tickets_invoice_double_click(id, e, node){
|
|
|
|
this.move(id.row, -1, $$('grid_tickets_active'))
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function cmd_move_tickets_right_click(){
|
|
|
|
$$('grid_tickets_active').eachRow(
|
|
|
|
function(row){
|
|
|
|
this.copy(row, -1, $$('grid_tickets_invoice'))
|
|
|
|
}
|
|
|
|
)
|
|
|
|
$$('grid_tickets_active').clearAll()
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function cmd_move_tickets_left_click(){
|
|
|
|
$$('grid_tickets_invoice').eachRow(
|
|
|
|
function(row){
|
|
|
|
this.copy(row, -1, $$('grid_tickets_active'))
|
|
|
|
}
|
|
|
|
)
|
|
|
|
$$('grid_tickets_invoice').clearAll()
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function ticket_set_client(row){
|
|
|
|
var form = $$('form_ticket_invoice')
|
|
|
|
var html = '<span class="webix_icon fa-user"></span><span class="lbl_partner">'
|
|
|
|
form.setValues({
|
|
|
|
id_partner: row.id,
|
|
|
|
tsearch_client_key: '',
|
|
|
|
tsearch_client_name: ''}, true)
|
|
|
|
html += row.nombre + ' (' + row.rfc + ')</span>'
|
|
|
|
$$('lbl_tclient').setValue(html)
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function ticket_search_client_by_id(id){
|
|
|
|
webix.ajax().get('/values/client', {'id': id}, {
|
|
|
|
error: function(text, data, xhr) {
|
|
|
|
msg_error('Error al consultar')
|
|
|
|
},
|
|
|
|
success: function(text, data, xhr){
|
|
|
|
var values = data.json()
|
|
|
|
if (values.ok){
|
|
|
|
ticket_set_client(values.row)
|
|
|
|
}else{
|
|
|
|
msg = 'No se encontró un cliente con la clave: ' + id
|
|
|
|
msg_error(msg)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function tsearch_client_key_press(code, e){
|
|
|
|
var value = this.getValue()
|
|
|
|
if(code == 13 && value.length > 0){
|
|
|
|
var id = parseInt(value, 10)
|
|
|
|
if (isNaN(id)){
|
|
|
|
msg_error('Captura una clave válida')
|
|
|
|
}else{
|
|
|
|
ticket_search_client_by_id(id)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function grid_ticket_clients_found_click(obj){
|
|
|
|
ticket_set_client(obj)
|
2017-12-30 15:17:12 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function cmd_ticket_notes_click(){
|
|
|
|
win_ticket_notes.init()
|
|
|
|
var values = $$('form_new_ticket').getValues()
|
|
|
|
$$('ticket_notes').setValue(values.notas)
|
|
|
|
$$('win_ticket_notes').show()
|
2018-01-10 22:52:17 -06:00
|
|
|
to_end('ticket_notes')
|
2017-12-30 15:17:12 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2018-01-10 22:03:46 -06:00
|
|
|
function cmd_ticket_save_note_click(){
|
|
|
|
var value = $$('ticket_notes').getValue()
|
2017-12-30 15:17:12 -06:00
|
|
|
$$('form_new_ticket').setValues({notas: value}, true)
|
2018-01-10 22:03:46 -06:00
|
|
|
$$('win_ticket_notes').close()
|
|
|
|
|
2017-12-31 00:17:20 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2018-01-01 02:14:30 -06:00
|
|
|
function print_ticket(id){
|
|
|
|
var data = new Object()
|
|
|
|
data['opt'] = 'print'
|
|
|
|
data['id'] = id
|
|
|
|
|
|
|
|
webix.ajax().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(values.msg)
|
|
|
|
}else{
|
|
|
|
msg_error(values.msg)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-12-31 00:17:20 -06:00
|
|
|
function grid_tickets_click(id, e, node){
|
|
|
|
if(id.column == 'pdf'){
|
|
|
|
//~ window.open('/doc/tpdf/' + id, '_blank')
|
2018-01-01 02:14:30 -06:00
|
|
|
get_ticket_pdf(id.row)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if(id.column == 'print'){
|
|
|
|
print_ticket(id.row)
|
|
|
|
return
|
2017-12-31 00:17:20 -06:00
|
|
|
}
|
2018-01-01 13:17:36 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2018-01-01 13:31:01 -06:00
|
|
|
function cmd_ticket_report_pdf_click(){
|
2018-01-01 13:17:36 -06:00
|
|
|
webix.toPDF($$('grid_tickets'), {
|
|
|
|
ignore: {'pdf': true, 'print': true},
|
|
|
|
filename: 'Reporte_Tickets',
|
2018-01-01 21:23:32 -06:00
|
|
|
width: 612,
|
|
|
|
height: 792,
|
2018-01-01 13:17:36 -06:00
|
|
|
columns:{
|
|
|
|
index: true,
|
|
|
|
serie: {width: 50},
|
|
|
|
folio: {width: 50},
|
|
|
|
fecha: {width: 125},
|
|
|
|
estatus: true,
|
|
|
|
total: {css: 'right'},
|
|
|
|
}
|
|
|
|
})
|
2018-01-01 13:31:01 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function cmd_ticket_report_xls_click(){
|
2018-01-01 21:23:32 -06:00
|
|
|
webix.toExcel($$('grid_tickets'), {
|
|
|
|
filename: 'Reporte_Tickets',
|
|
|
|
name: 'Tickets',
|
|
|
|
ignore: {'pdf': true, 'print': true},
|
2018-01-01 22:14:49 -06:00
|
|
|
rawValues: true,
|
2018-01-01 21:23:32 -06:00
|
|
|
})
|
2018-01-10 01:35:11 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function grid_tdetails_render(data){
|
|
|
|
var total = 0.0
|
|
|
|
this.eachRow(function(id){
|
|
|
|
var item = this.getItem(id)
|
|
|
|
total += item.importe
|
|
|
|
})
|
|
|
|
var id = $$('grid_ticket_total_up').getFirstId()
|
|
|
|
$$('grid_ticket_total_up').updateItem(id, {total: total})
|
2019-04-01 23:09:32 -06:00
|
|
|
}
|