Filtrar tickets. Cancelar tickets
This commit is contained in:
parent
9b4d0bffd7
commit
f430947708
|
@ -235,6 +235,10 @@ def now():
|
|||
return datetime.datetime.now().replace(microsecond=0)
|
||||
|
||||
|
||||
def today():
|
||||
return datetime.date.today()
|
||||
|
||||
|
||||
def get_token():
|
||||
return _get_hash(uuid.uuid4().hex)
|
||||
|
||||
|
|
|
@ -77,6 +77,9 @@ class StorageEngine(object):
|
|||
years2 = main.PreFacturas.filter_years()
|
||||
return [years1, years2]
|
||||
|
||||
def _get_filteryearsticket(self, values):
|
||||
return main.Tickets.filter_years()
|
||||
|
||||
def _get_cuentayears(self, values):
|
||||
return main.CuentasBanco.get_years()
|
||||
|
||||
|
@ -258,6 +261,11 @@ class StorageEngine(object):
|
|||
opt = values.pop('opt')
|
||||
if opt == 'add':
|
||||
return main.Tickets.add(values)
|
||||
if opt == 'cancel':
|
||||
return main.Tickets.cancel(values)
|
||||
|
||||
def get_tickets(self, values):
|
||||
return main.Tickets.get_by(values)
|
||||
|
||||
def get_invoices(self, values):
|
||||
return main.Facturas.get_(values)
|
||||
|
|
|
@ -3972,6 +3972,73 @@ class Tickets(BaseModel):
|
|||
data = {'ok': True, 'row': row}
|
||||
return data
|
||||
|
||||
@classmethod
|
||||
def cancel(cls, values):
|
||||
id = int(values['id'])
|
||||
msg = 'Ticket cancelado correctamente'
|
||||
u = {'cancelado': True, 'estatus': 'Cancelado'}
|
||||
obj = Tickets.update(**u).where(Tickets.id==id)
|
||||
result = bool(obj.execute())
|
||||
row = {'estatus': 'Cancelado'}
|
||||
return {'ok': result, 'row': row, 'msg': msg}
|
||||
|
||||
def _get_filters(self, values):
|
||||
opt = values.get('opt', '')
|
||||
if not opt:
|
||||
return
|
||||
|
||||
if opt == 'today':
|
||||
t = util.today()
|
||||
filters = (
|
||||
(Tickets.fecha.day == t.day) &
|
||||
(Tickets.fecha.month == t.month) &
|
||||
(Tickets.fecha.year == t.year)
|
||||
)
|
||||
return filters
|
||||
|
||||
if opt == 'yearmonth':
|
||||
if values['year'] == '-1':
|
||||
fy = (Tickets.fecha.year > 0)
|
||||
else:
|
||||
fy = (Tickets.fecha.year == int(values['year']))
|
||||
if values['month'] == '-1':
|
||||
fm = (Tickets.fecha.month > 0)
|
||||
else:
|
||||
fm = (Tickets.fecha.month == int(values['month']))
|
||||
filters = (fy & fm)
|
||||
return filters
|
||||
|
||||
return
|
||||
|
||||
@classmethod
|
||||
def get_by(cls, values):
|
||||
filters = cls._get_filters(cls, values)
|
||||
|
||||
rows = tuple(Tickets
|
||||
.select(
|
||||
Tickets.id,
|
||||
Tickets.serie,
|
||||
Tickets.folio,
|
||||
Tickets.fecha,
|
||||
Tickets.estatus,
|
||||
Tickets.total)
|
||||
.where(filters)
|
||||
.dicts()
|
||||
)
|
||||
return {'ok': True, 'rows': rows}
|
||||
|
||||
@classmethod
|
||||
def filter_years(cls):
|
||||
data = [{'id': -1, 'value': 'Todos'}]
|
||||
rows = (Tickets
|
||||
.select(Tickets.fecha.year.alias('year'))
|
||||
.group_by(Tickets.fecha.year)
|
||||
.order_by(Tickets.fecha.year)
|
||||
)
|
||||
if not rows is None:
|
||||
data += [{'id': int(r.year), 'value': int(r.year)} for r in rows]
|
||||
return tuple(data)
|
||||
|
||||
|
||||
class TicketsDetalle(BaseModel):
|
||||
ticket = ForeignKeyField(Tickets)
|
||||
|
|
|
@ -54,6 +54,10 @@
|
|||
color: red;
|
||||
}
|
||||
|
||||
.cancel {
|
||||
color: red;
|
||||
}
|
||||
|
||||
|
||||
.cmd_close_partner div button {
|
||||
background-color: red !important;
|
||||
|
|
|
@ -206,7 +206,10 @@ function multi_change(prevID, nextID){
|
|||
}
|
||||
|
||||
if(nextID == 'app_tickets'){
|
||||
|
||||
active = $$('multi_tickets').getActiveId()
|
||||
if(active == 'tickets_home'){
|
||||
configuracion_inicial_ticket()
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -7,28 +7,99 @@ var tickets_controllers = {
|
|||
$$('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)
|
||||
$$('cmd_cancelar_ticket').attachEvent('onItemClick', cmd_cancelar_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)
|
||||
$$('filter_year_ticket').attachEvent('onChange', filter_year_ticket_change)
|
||||
$$('filter_month_ticket').attachEvent('onChange', filter_month_ticket_change)
|
||||
|
||||
webix.extend($$('grid_tickets'), webix.ProgressBar)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
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')
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
function filter_year_ticket_change(nv, ov){
|
||||
var fm = $$('filter_month_ticket')
|
||||
filters = {'opt': 'yearmonth','year': nv, 'month': fm.getValue()}
|
||||
get_tickets(filters)
|
||||
}
|
||||
|
||||
|
||||
function filter_month_ticket_change(nv, ov){
|
||||
var fy = $$('filter_year_ticket')
|
||||
filters = {'opt': 'yearmonth','year': fy.getValue(), 'month': nv}
|
||||
get_tickets(filters)
|
||||
}
|
||||
|
||||
|
||||
function configuracion_inicial_ticket(){
|
||||
current_dates_tickets()
|
||||
get_tickets()
|
||||
}
|
||||
|
||||
|
||||
function configuracion_inicial_nuevo_ticket(){
|
||||
var grid = $$('grid_tdetails')
|
||||
|
||||
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')
|
||||
grid.clearAll()
|
||||
table_pt.clear()
|
||||
table_totals.clear()
|
||||
}
|
||||
|
||||
|
||||
function cmd_nuevo_ticket_click(){
|
||||
configuracion_inicial_ticket()
|
||||
configuracion_inicial_nuevo_ticket()
|
||||
$$('multi_tickets').setValue('tickets_new')
|
||||
}
|
||||
|
||||
|
@ -48,10 +119,10 @@ function validar_ticket(){
|
|||
|
||||
|
||||
function guardar_ticket(values){
|
||||
var grid = $$('grid_tdetails')
|
||||
//~ showvar(values)
|
||||
var gd = $$('grid_tdetails')
|
||||
var grid = $$('grid_tickets')
|
||||
|
||||
var rows = grid.data.getRange()
|
||||
var rows = gd.data.getRange()
|
||||
for (i = 0; i < rows.length; i++) {
|
||||
delete rows[i]['delete']
|
||||
delete rows[i]['clave']
|
||||
|
@ -77,6 +148,8 @@ function guardar_ticket(values){
|
|||
if(values.ok){
|
||||
msg_ok('Ticket generado correctamente')
|
||||
$$('form_new_ticket').setValues({})
|
||||
gd.clearAll()
|
||||
grid.add(values.row)
|
||||
$$('multi_tickets').setValue('tickets_home')
|
||||
}else{
|
||||
msg_error(values.msg)
|
||||
|
@ -264,3 +337,58 @@ function gt_productos_found_click(obj){
|
|||
buscar_producto_key(obj.clave)
|
||||
}
|
||||
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
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'])
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
}
|
|
@ -39,7 +39,7 @@ function get_icon(tipo){
|
|||
pdf: 'fa-file-pdf-o',
|
||||
zip: 'fa-file-zip-o',
|
||||
email: 'fa-envelope-o',
|
||||
print: 'print',
|
||||
print: 'fa-print',
|
||||
}
|
||||
return "<span class='webix_icon " + icons[tipo] + "'></span>"
|
||||
}
|
||||
|
|
|
@ -216,6 +216,13 @@ var grid_invoices = {
|
|||
resizeColumn: true,
|
||||
headermenu: true,
|
||||
columns: grid_invoices_cols,
|
||||
scheme:{
|
||||
$change:function(item){
|
||||
if (item.estatus == 'Cancelada'){
|
||||
item.$css = 'cancel'
|
||||
}
|
||||
}
|
||||
},
|
||||
on:{
|
||||
'data->onStoreUpdated':function(){
|
||||
this.data.each(function(obj, i){
|
||||
|
|
|
@ -12,7 +12,7 @@ var toolbar_partners = [
|
|||
|
||||
var grid_partners_cols = [
|
||||
{id: 'index', header:'#', css: 'right',
|
||||
footer: {content: 'rowCount', colspan: 2, css: 'right'}},
|
||||
footer: {content: 'countRows', colspan: 2, css: 'right'}},
|
||||
{id: 'id', header: 'Clave', sort: 'int', css: 'right'},
|
||||
{id: 'rfc', header: ['RFC', {content: 'textFilter'}], adjust: 'data',
|
||||
sort: 'string', footer: {text: 'Clientes y Proveedores', colspan: 2}},
|
||||
|
@ -143,7 +143,7 @@ var toolbar_contacts = [
|
|||
|
||||
var grid_contacts_cols = [
|
||||
{id: 'index', header: '#', adjust:'data', css:'right',
|
||||
footer: {content: 'rowCount'}},
|
||||
footer: {content: 'countRows'}},
|
||||
{id: 'id', header: '', hidden: true},
|
||||
{id: 'title', header: 'Título', adjust:'data', sort: 'string',
|
||||
footer: 'Contactos'},
|
||||
|
|
|
@ -24,8 +24,8 @@ var grid_tickets_cols = [
|
|||
footer: {content: 'countRows', colspan: 3, css: 'right'}},
|
||||
{id: "id", header:"ID", hidden:true},
|
||||
{id: "serie", header: ["Serie", {content: "selectFilter"}], adjust: "data",
|
||||
sort:"string"},
|
||||
{id: 'folio', header: ['Folio', {content: 'numberFilter'}], adjust: 'data',
|
||||
sort:"string", hidden: true},
|
||||
{id: 'folio', header: ['Folio', {content: 'numberFilter'}], adjust: 'header',
|
||||
sort: 'int', css: 'right', footer: {text: 'Tickets', colspan: 3}},
|
||||
{id: "fecha", header: ["Fecha y Hora"],
|
||||
adjust: "data", sort: "date"},
|
||||
|
@ -37,7 +37,6 @@ var grid_tickets_cols = [
|
|||
fillspace:true, sort:"string", hidden: true},
|
||||
{id: 'pdf', header: 'PDF', adjust: 'data', template: get_icon('pdf')},
|
||||
{id: 'print', header: 'I', adjust: 'data', template: get_icon('print')},
|
||||
{id: 'email', header: '', adjust: 'data', template: get_icon('email')}
|
||||
]
|
||||
|
||||
|
||||
|
@ -50,6 +49,13 @@ var grid_tickets = {
|
|||
resizeColumn: true,
|
||||
headermenu: true,
|
||||
columns: grid_tickets_cols,
|
||||
scheme:{
|
||||
$change:function(item){
|
||||
if (item.estatus == 'Cancelado'){
|
||||
item.$css = 'cancel'
|
||||
}
|
||||
}
|
||||
},
|
||||
on:{
|
||||
'data->onStoreUpdated':function(){
|
||||
this.data.each(function(obj, i){
|
||||
|
|
Loading…
Reference in New Issue