Agregar y eliminar series

This commit is contained in:
Mauricio Baeza 2017-10-09 23:34:16 -05:00
parent f525ced698
commit e9ffa41697
7 changed files with 211 additions and 10 deletions

View File

@ -173,3 +173,26 @@ class AppEmisor(object):
resp.status = falcon.HTTP_200
else:
resp.status = falcon.HTTP_204
class AppFolios(object):
def __init__(self, db):
self._db = db
def on_get(self, req, resp):
values = req.params
req.context['result'] = self._db.get_folios()
resp.status = falcon.HTTP_200
def on_post(self, req, resp):
values = req.params
req.context['result'] = self._db.add_folios(values)
resp.status = falcon.HTTP_200
def on_delete(self, req, resp):
values = req.params
if self._db.delete('folios', values['id']):
resp.status = falcon.HTTP_200
else:
resp.status = falcon.HTTP_204

View File

@ -14,7 +14,7 @@ from middleware import (
from models.db import StorageEngine
from controllers.main import (
AppLogin, AppLogout, AppAdmin, AppEmisor,
AppMain, AppValues, AppPartners, AppProducts, AppInvoices
AppMain, AppValues, AppPartners, AppProducts, AppInvoices, AppFolios
)
from settings import DEBUG
@ -34,6 +34,7 @@ api.add_route('/', AppLogin(db))
api.add_route('/logout', AppLogout(db))
api.add_route('/admin', AppAdmin(db))
api.add_route('/emisor', AppEmisor(db))
api.add_route('/folios', AppFolios(db))
api.add_route('/main', AppMain(db))
api.add_route('/values/{table}', AppValues(db))
api.add_route('/partners', AppPartners(db))

View File

@ -51,7 +51,7 @@ class StorageEngine(object):
return main.SATMonedas.get_activos()
def _get_regimenes(self, values):
return main.Emisor.get_regimenes(values)
return main.Emisor.get_regimenes()
def _get_usocfdi(self, values):
return main.SATUsoCfdi.get_activos(values)
@ -63,6 +63,8 @@ class StorageEngine(object):
return main.Productos.remove(id)
if table == 'invoice':
return main.Facturas.remove(id)
if table == 'folios':
return main.Folios.remove(id)
return False
def _get_client(self, values):
@ -107,4 +109,9 @@ class StorageEngine(object):
def emisor(self, values):
return main.Emisor.add(values)
def get_folios(self):
return main.Folios.get_()
def add_folios(self, values):
return main.Folios.add(values)

View File

@ -4,6 +4,7 @@ import sqlite3
import click
from peewee import *
from playhouse.fields import PasswordField, ManyToManyField
from playhouse.shortcuts import case
if __name__ == '__main__':
@ -314,7 +315,7 @@ class Folios(BaseModel):
serie = TextField(unique=True)
inicio = IntegerField(default=1)
default = BooleanField(default=False)
usar_con = TextField(default='')
usarcon = TextField(default='')
class Meta:
order_by = ('-default', 'serie', 'inicio')
@ -328,12 +329,69 @@ class Folios(BaseModel):
.select(
Folios.id,
Folios.serie.alias('value'),
Folios.usar_con,
Folios.usarcon,
)
.dicts()
)
return tuple(rows)
@classmethod
def get_(cls):
rows = (Folios
.select(
Folios.id,
SQL(" '-' AS 'delete' "),
Folios.serie,
Folios.inicio,
case(Folios.usarcon, (
('I', 'Ingreso'),
('E', 'Egreso'),
('T', 'Traslado'),
), 'Todos').alias('usarcon'),
case(Folios.default, (
(True, 'Si'),
(False, 'No'),
)).alias('pre')
)
.dicts()
)
return tuple(rows)
@classmethod
def add(cls, values):
uc = {
'': 'Todos',
'I': 'Ingreso',
'E': 'Egreso',
'T': 'Traslado',
}
pre = {
True: 'Si',
False: 'No',
}
if 'default' in values:
values['default'] = True
try:
obj = Folios.create(**values)
except IntegrityError:
msg = 'Serie ya existe'
return {'ok': False, 'msg': msg}
row = {
'id': obj.id,
'delete' : '-',
'serie' : obj.serie,
'inicio' : obj.inicio,
'usarcon' : uc[obj.usarcon],
'pre' : pre[obj.default],
}
return {'ok': True, 'row': row}
@classmethod
def remove(cls, id):
q = Folios.delete().where(Folios.id==id)
return bool(q.execute())
class Categorias(BaseModel):
categoria = TextField()
@ -369,7 +427,7 @@ class SATUnidades(BaseModel):
default = BooleanField(default=False)
class Meta:
order_by = ('name',)
order_by = ('-default', 'name')
indexes = (
(('key', 'name'), True),
)

View File

@ -1,6 +1,5 @@
var msg = ''
var reg = /^[a-z]+$/i
//~ reg.test("somethingELSE")
var controllers = {
init: function(){
@ -15,6 +14,8 @@ var controllers = {
$$('chk_ong').attachEvent('onChange', chk_ong_change)
$$('cmd_subir_certificado').attachEvent('onItemClick', cmd_subir_certificado_click)
$$('up_cert').attachEvent('onUploadComplete', up_cert_upload_complete)
$$('cmd_agregar_serie').attachEvent('onItemClick', cmd_agregar_serie_click)
$$('grid_folios').attachEvent('onItemClick', grid_folios_click)
}
}
@ -159,6 +160,21 @@ function get_certificado(){
}
function get_table_folios(){
webix.ajax().get("/folios", {}, {
error: function(text, data, xhr) {
msg = 'Error al consultar'
msg_error(msg)
},
success: function(text, data, xhr) {
var values = data.json()
$$('grid_folios').parse(values)
}
})
}
function multi_admin_change(prevID, nextID){
//~ webix.message(nextID)
if(nextID == 'app_emisor'){
@ -168,6 +184,10 @@ function multi_admin_change(prevID, nextID){
return
}
if(nextID == 'app_folios'){
get_table_folios()
return
}
}
@ -336,3 +356,93 @@ function up_cert_upload_complete(response){
}
})
}
function cmd_agregar_serie_click(){
var form = $$('form_folios')
var grid = $$('grid_folios')
if (!form.validate()){
msg = 'Valores inválidos'
msg_error(msg)
return
}
var values = form.getValues()
var reg = /^[a-z]+$/i
if(!reg.test(values.folio_serie)){
msg = 'Introduce una serie válida. Solo letras.'
msg_error(msg)
return
}
var pre = '1'
if(grid.count() > 0){
pre = ''
}
var usarcon = ''
if(values.folio_usarcon != 'S'){
usarcon = values.folio_usarcon
}
var values = {
serie: values.folio_serie.trim().toUpperCase(),
inicio: values.folio_inicio,
usarcon: usarcon,
default: pre,
}
webix.ajax().post('/folios', values, {
error:function(text, data, XmlHttpRequest){
msg = 'Ocurrio un error, consulta a soporte técnico'
msg_error(msg)
},
success:function(text, data, XmlHttpRequest){
var values = data.json()
if(values.ok){
form.setValues(
{folio_serie: '', folio_inicio: 1, folio_usarcon: 'S'})
grid.add(values.row)
msg = 'Serie agregada correctamente'
msg_sucess(msg)
}else{
msg_error(values.msg)
}
}
})
}
function grid_folios_click(id, e, node){
if(id.column != 'delete'){
return
}
msg = '¿Estás seguro de borrar esta serie?<BR><BR>ESTA ACCIÓN NO SE PUEDE DESHACER'
webix.confirm({
title: 'Borrar Serie',
ok: 'Si',
cancel: 'No',
type: 'confirm-error',
text: msg,
callback:function(result){
if(result){
webix.ajax().del('/folios', {id: id.row}, function(text, xml, xhr){
msg = 'Serie eliminada correctamente'
if(xhr.status == 200){
$$('grid_folios').remove(id.row)
msg_sucess(msg)
}else{
msg = 'No se pudo eliminar'
msg_error(msg)
}
})
}
}
})
}

View File

@ -170,7 +170,7 @@ var grid_folios_cols = [
{id: 'serie', header: 'Serie', fillspace: 1},
{id: 'inicio', header: 'Inicio', fillspace: 1},
{id: 'usarcon', header: 'Usar Con', fillspace: 1},
{id: 'default', header: 'Predeterminado', fillspace: 1}
{id: 'pre', header: 'Predeterminado', fillspace: 1}
]
@ -190,7 +190,7 @@ var emisor_folios = [
{view: 'text', id: 'folio_serie', name: 'folio_serie', label: 'Serie: ',
required: true, attributes: {maxlength: 15}},
{view: 'counter', id: 'folio_inicio', name: 'folio_inicio', value: 1,
required: true, label: 'Inicio: ', step: 5, min: 1},
required: true, label: 'Inicio: ', step: 1, min: 1},
{view: 'richselect', id: 'folio_usarcon', name: 'folio_usarcon',
label: 'Usar Con: ', value: 'S', required: true,
options: options_usarcon},
@ -232,7 +232,8 @@ var form_folios = {
},
autoheight: true,
rules: {
serie: function(value){return value.trim() != ''},
folio_serie: function(value){return value.trim() != ''},
folio_inicio: function(value){return value > 0},
}
}]
}

View File

@ -2,6 +2,7 @@
<%block name="media">
<link rel="stylesheet" href="/static/css/sidebar_air.css" type="text/css">
<link rel="stylesheet" href="/static/css/app.css" type="text/css">
<script src="/static/js/sidebar.js" type="text/javascript" ></script>
<script src="/static/js/controller/util.js" type="text/javascript" ></script>