Add sucursales

This commit is contained in:
Mauricio Baeza 2021-05-25 20:36:27 -05:00
parent 7062151e79
commit 348be949ac
10 changed files with 285 additions and 19 deletions

View File

@ -1,3 +1,8 @@
v 1.43.0 [00-Jun-2021]
----------------------
- Multialmacen
v 1.42.0 [24-May-2021]
----------------------
- Opción para que solo un admin pueda cancelar.

View File

@ -1,2 +1,2 @@
1.42.0
1.43.0

View File

@ -648,3 +648,19 @@ class AppCert(object):
req.context['result'] = self._db.cert_post(values)
resp.status = falcon.HTTP_200
class AppSucursales(object):
def __init__(self, db):
self._db = db
def on_get(self, req, resp):
values = req.params
req.context['result'] = self._db.sucursales_get(values)
resp.status = falcon.HTTP_200
def on_post(self, req, resp):
values = req.params
req.context['result'] = self._db.sucursales_post(values)
resp.status = falcon.HTTP_200

View File

@ -17,7 +17,7 @@ from controllers.main import (AppEmpresas,
AppDocumentos, AppFiles, AppPreInvoices, AppCuentasBanco,
AppMovimientosBanco, AppTickets, AppStudents, AppEmployees, AppNomina,
AppInvoicePay, AppCfdiPay, AppSATBancos, AppSociosCuentasBanco,
AppSATFormaPago, AppSATLeyendaFiscales, AppCert
AppSATFormaPago, AppSATLeyendaFiscales, AppCert, AppSucursales
)
@ -63,6 +63,7 @@ api.add_route('/satformapago', AppSATFormaPago(db))
api.add_route('/socioscb', AppSociosCuentasBanco(db))
api.add_route('/leyendasfiscales', AppSATLeyendaFiscales(db))
api.add_route('/cert', AppCert(db))
api.add_route('/sucursales', AppSucursales(db))
session_options = {

View File

@ -472,6 +472,12 @@ class StorageEngine(object):
def cert_post(self, values):
return main.Certificado.post(values)
def sucursales_get(self, values):
return main.Sucursales.get_data(values)
def sucursales_post(self, values):
return main.Sucursales.post(values)
# Companies only in MV
def _get_empresas(self, values):
return main.companies_get()

View File

@ -545,6 +545,10 @@ class Configuracion(BaseModel):
data['pass'] = token
return data
def _get_admin_sucursales(cls, args):
rows = Folios.get_for_sucursales()
return rows
@classmethod
def get_(cls, keys):
if isinstance(keys, str):
@ -565,8 +569,10 @@ class Configuracion(BaseModel):
'admin_config_users',
'pac_auth',
'auth_by_pac',
'admin_sucursales',
)
opt = keys['fields']
if opt in options:
return getattr(cls, f'_get_{opt}')(cls, keys)
@ -806,6 +812,43 @@ class Sucursales(BaseModel):
class Meta:
order_by = ('nombre',)
@classmethod
def _get_for_admin(cls, args):
rows = (Sucursales
.select(
Sucursales.id,
Sucursales.nombre.alias('name'),
Sucursales.serie_facturas.alias('serie_invoice'),
Sucursales.serie_tickets,
)
.dicts()
)
return tuple(rows)
@classmethod
def get_data(cls, values):
opt = values['opt']
return getattr(cls, f'_get_{opt}')(values)
@classmethod
def _create(cls, args):
try:
values = utils.loads(args)
Sucursales.create(**values)
result = {'ok': True}
except Exception as e:
log.error(e)
msg = 'Ocurrio un error al agregar la sucursal'
result = {'ok': False, 'msg': msg}
return result
@classmethod
def post(cls, values):
opt = values['opt']
args = values['values']
return getattr(cls, f'_{opt}')(args)
class Roles(BaseModel):
nombre = TextField(default='')
@ -1275,6 +1318,18 @@ class Folios(BaseModel):
)
return tuple(rows)
@classmethod
def get_for_sucursales(cls):
rows = (Folios
.select(
Folios.serie.alias('id'),
Folios.serie.alias('value'),
)
.where(Folios.usarcon == '')
.dicts()
)
return tuple(rows)
@classmethod
def get_(cls):
rows = (Folios

View File

@ -42,7 +42,7 @@ except ImportError:
DEBUG = DEBUG
VERSION = '1.42.0'
VERSION = '1.43.0'
EMAIL_SUPPORT = ('soporte@empresalibre.mx',)
TITLE_APP = '{} v{}'.format(TITLE_APP, VERSION)

View File

@ -144,14 +144,16 @@ var controllers = {
$$('lst_pac').attachEvent('onChange', lst_pac_on_change)
$$('cmd_save_pac').attachEvent('onItemClick', cmd_save_pac_click)
$$('cmd_subir_bdfl').attachEvent('onItemClick', cmd_subir_bdfl_click)
//~ $$('cmd_subir_bdfl').attachEvent('onItemClick', cmd_subir_bdfl_click)
$$('cmd_subir_cfdixml').attachEvent('onItemClick', cmd_subir_cfdixml_click)
$$('up_bdfl').attachEvent('onUploadComplete', up_bdfl_upload_complete)
//~ $$('up_bdfl').attachEvent('onUploadComplete', up_bdfl_upload_complete)
$$('up_cfdixml').attachEvent('onUploadComplete', up_cfdixml_upload_complete)
$$('grid_admin_bancos').attachEvent('onAfterEditStart', grid_admin_bancos_after_edit_start)
$$('grid_admin_bancos').attachEvent('onBeforeEditStop', grid_admin_bancos_before_edit_stop)
//~ $$('grid_admin_bancos').attachEvent('onAfterEditStop', grid_admin_bancos_after_edit_stop)
//~ Sucursales
$$('cmd_add_sucursal').attachEvent('onItemClick', cmd_add_sucursal_click)
}
}
@ -470,11 +472,33 @@ function set_config_templates(){
}
function set_config_admin_sucursales(){
webix.ajax().get('/config', {'fields': 'admin_sucursales'}, {
error: function(text, data, xhr) {
msg = 'Error al consultar'
msg_error(msg)
},
success: function(text, data, xhr) {
var values = data.json()
lst_parse2('lst_sucursal_add_invoice', values)
}
})
get_admin_sucursales()
}
function get_config_values(opt){
if(opt == undefined){
return
}
if(opt == 'admin_sucursales'){
set_config_admin_sucursales()
return
}
if(opt == 'templates'){
set_config_templates()
}
@ -1230,6 +1254,7 @@ function tab_options_change(nv, ov){
tab_admin_products: 'admin_products',
tab_admin_complements: 'complements',
tab_admin_otros: 'configotros',
tab_admin_sucursales: 'admin_sucursales',
}
get_config_values(cv[nv])
}
@ -2739,3 +2764,107 @@ function validate_cert(values){
})
}
function get_admin_sucursales(){
webix.ajax().get('/sucursales', {'opt': 'for_admin'}, {
error: function(text, data, xhr) {
msg = 'Error al consultar'
msg_error(msg)
},
success: function(text, data, xhr) {
var values = data.json()
grid_parse('grid_sucursales', values)
}
})
}
function cmd_add_sucursal_click(){
var form = $$('form_add_sucursal')
if (!form.validate()){
msg = 'Faltan datos o son inválidos'
msg_error(msg)
return
}
var values = form.getValues()
sucursal_name = values.sucursal_add_name.trim()
sucursal_invoice = values.sucursal_add_invoice
sucursal_ticket = values.sucursal_add_ticket.trim()
if(!sucursal_name){
msg = 'El campo Nombre de la sucursal no puede estar vacío'
msg_error(msg)
return
}
if(!sucursal_invoice){
msg = 'Selecciona un valor para Serie Factura'
msg_error(msg)
return
}
if(!sucursal_ticket){
msg = 'El campo Serie Ticket no puede estar vacío'
msg_error(msg)
return
}
var rows = $$('grid_sucursales').data.getRange()
for (i = 0; i < rows.length; i++) {
if(rows[i]['name'] == sucursal_name){
msg = 'El nombre de sucursal ya existe'
msg_error(msg)
return
}
}
var values = {
nombre: sucursal_name,
serie_facturas: sucursal_invoice,
serie_tickets: sucursal_ticket,
}
var data = {
opt: 'create',
values: values,
}
var clean = {
txt_sucursal_add_name: '',
lst_sucursal_add_invoice: '',
txt_sucursal_add_ticket: '',
}
msg = 'Datos correctos.<BR><BR>¿Estás seguro de agregar la nueva sucursal?'
webix.confirm({
title: 'Agregar Sucursal',
ok: 'Si',
cancel: 'No',
type: 'confirm-error',
text: msg,
callback:function(result){
if(result){
webix.ajax().post('/sucursales', data, {
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){
get_admin_sucursales()
form.setValues(clean)
msg_ok('Sucursal agregada correctamente')
}else{
msg_error(values.msg)
}
}
})
}
}
})
}

View File

@ -603,6 +603,12 @@ function lst_parse(lst, values){
}
function lst_parse2(lst_name, values){
obj = $$(lst_name)
obj.getList().parse(values)
}
function set_value(control, value){
obj = $$(control)
obj.blockEvent()
@ -610,3 +616,11 @@ function set_value(control, value){
obj.unblockEvent()
}
function grid_parse(grid_name, values){
obj = $$(grid_name)
obj.clearAll()
obj.parse(values)
}

View File

@ -830,6 +830,56 @@ var options_admin_complements = [
]
var controls_add_sucursal = [{cols: [
{maxWidth: 20},
{view: 'text', id: 'txt_sucursal_add_name', name: 'sucursal_add_name',
label: 'Nombre: ', labelPosition: 'top', required: true},
{view: 'richselect', id: 'lst_sucursal_add_invoice', name: 'sucursal_add_invoice',
label: 'Serie Facturas: ', labelPosition: 'top', required: true, options: []},
{view: 'text', id: 'txt_sucursal_add_ticket', name: 'sucursal_add_ticket',
required: true, label: 'Serie Tickets: ', labelPosition: 'top'},
{view: 'button', id: 'cmd_add_sucursal', label: 'Agregar',
autowidth: true, type: 'iconButton', icon: 'plus'},
{maxWidth: 20},
]}]
var grid_sucursales_cols = [
{id: 'id', header: 'ID', hidden: true},
{id: 'delete', header: '', width: 30, css: 'delete'},
{id: 'name', header: 'Nombre', fillspace: 1},
{id: 'serie_invoice', header: 'Serie Facturas', fillspace: 1},
{id: 'serie_tickets', header: 'Serie Tickets', fillspace: 1},]
var grid_sucursales = {
view: 'datatable',
id: 'grid_sucursales',
select: 'row',
adjust: true,
headermenu: true,
footer: true,
columns: grid_sucursales_cols,
on:{
'data->onStoreUpdated':function(){
this.data.each(function(obj, i){
obj.delete = '-'
})
}
},
}
var options_admin_sucursales = [
{maxHeight: 10},
{template: 'Agregar Sucursal', type: 'section'},
{view: 'form', id: 'form_add_sucursal', rows: controls_add_sucursal},
{template: 'Sucursales', type: 'section'},
{cols: [{maxWidth: 10}, grid_sucursales, {maxWidth: 10}]},
{maxHeight: 20},
]
var tab_options = {
view: 'tabview',
id: 'tab_options',
@ -845,24 +895,14 @@ var tab_options = {
view: 'scrollview', body: {rows: options_admin_complements}}},
{header: 'Otros', body: {id: 'tab_admin_otros', view: 'scrollview',
body: {rows: options_admin_otros}}},
{header: 'Sucursales', body: {id: 'tab_admin_sucursales', view: 'scrollview',
body: {rows: options_admin_sucursales}}},
],
}
var utilidades_archivos = [
{maxHeight: 15},
{template: 'Cargar Base de Datos de Factura Libre', type: 'section'},
{view: 'form', id: 'form_upload_bdfl', rows: [
{cols: [{},
{view: 'uploader', id: 'up_bdfl', autosend: false, link: 'lst_bdfl',
value: 'Seleccionar base de datos', upload: '/files/bdfl'}, {}]},
{cols: [{},
{view: 'list', id: 'lst_bdfl', name: 'bdfl',
type: 'uploader', autoheight: true, borderless: true}, {}]},
{cols: [{}, {view: 'button', id: 'cmd_subir_bdfl',
label: 'Subir base de datos de Factura Libre'}, {}]},
]},
{maxHeight: 15},
{maxHeight: 5},
{template: 'Importar archivo CFDI (XML)', type: 'section'},
{view: 'form', id: 'form_upload_cfdixml', rows: [
{cols: [{},