This commit is contained in:
Mauricio Baeza 2021-05-31 13:01:03 -05:00
commit a518278b55
15 changed files with 449 additions and 27 deletions

View File

@ -1,3 +1,8 @@
v 1.42.1 [00-Jun-2021]
----------------------
- Error - Ticket #5
v 1.42.0 [24-May-2021] v 1.42.0 [24-May-2021]
---------------------- ----------------------
- Opción para que solo un admin pueda cancelar. - Opción para que solo un admin pueda cancelar.

View File

@ -1,2 +1,2 @@
1.42.0 1.42.1

View File

@ -464,8 +464,17 @@ class CFDI(object):
if 'ine' in datos: if 'ine' in datos:
atributos = {'Version': SAT['ine']['version']} atributos = {'Version': SAT['ine']['version']}
ine_key_entidad = datos['ine'].pop('ClaveEntidad', '')
ine_ambito = datos['ine'].pop('Ambito', '')
if ine_key_entidad:
ine_id_conta = datos['ine'].pop('IdContabilidad', '')
atributos.update(datos['ine']) atributos.update(datos['ine'])
ET.SubElement(self._complemento, 'ine:INE', atributos) node_ine = ET.SubElement(self._complemento, 'ine:INE', atributos)
if ine_key_entidad:
attr = {'ClaveEntidad': ine_key_entidad, 'Ambito': ine_ambito}
node_entidad = ET.SubElement(node_ine, 'ine:Entidad', attr)
attr = {'IdContabilidad': ine_id_conta}
ET.SubElement(node_entidad, 'ine:Contabilidad', attr)
if 'pagos' in datos: if 'pagos' in datos:
datos = datos.pop('pagos') datos = datos.pop('pagos')

View File

@ -648,3 +648,19 @@ class AppCert(object):
req.context['result'] = self._db.cert_post(values) req.context['result'] = self._db.cert_post(values)
resp.status = falcon.HTTP_200 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

@ -1897,7 +1897,31 @@ def _ine(doc, version):
) )
data = CaseInsensitiveDict(node.attrib.copy()) data = CaseInsensitiveDict(node.attrib.copy())
for k, v in values: for k, v in values:
data[k] = v.format(data[k]) if k in data:
data[k] = v.format(data[k])
try:
node = node[0]
attr = CaseInsensitiveDict(node.attrib.copy())
values = (
('ClaveEntidad', 'Clave de la Entidad: {}'),
('Ambito', 'Ámbito: {}'),
)
for k, v in values:
if k in attr:
data[k] = v.format(attr[k])
node = node[0]
attr = CaseInsensitiveDict(node.attrib.copy())
values = (
('IdContabilidad', 'ID de Contabilidad: {}'),
)
for k, v in values:
if k in attr:
data[k] = v.format(attr[k])
except Exception as e:
print(e)
return data return data

View File

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

View File

@ -472,6 +472,12 @@ class StorageEngine(object):
def cert_post(self, values): def cert_post(self, values):
return main.Certificado.post(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 # Companies only in MV
def _get_empresas(self, values): def _get_empresas(self, values):
return main.companies_get() return main.companies_get()

View File

@ -545,6 +545,10 @@ class Configuracion(BaseModel):
data['pass'] = token data['pass'] = token
return data return data
def _get_admin_sucursales(cls, args):
rows = Folios.get_for_sucursales()
return rows
@classmethod @classmethod
def get_(cls, keys): def get_(cls, keys):
if isinstance(keys, str): if isinstance(keys, str):
@ -565,8 +569,10 @@ class Configuracion(BaseModel):
'admin_config_users', 'admin_config_users',
'pac_auth', 'pac_auth',
'auth_by_pac', 'auth_by_pac',
'admin_sucursales',
) )
opt = keys['fields'] opt = keys['fields']
if opt in options: if opt in options:
return getattr(cls, f'_get_{opt}')(cls, keys) return getattr(cls, f'_get_{opt}')(cls, keys)
@ -806,6 +812,58 @@ class Sucursales(BaseModel):
class Meta: class Meta:
order_by = ('nombre',) 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 _delete(cls, args):
values = utils.loads(args)
id = values['id']
try:
q = Sucursales.delete().where(Sucursales.id==id)
r = bool(q.execute())
result = {'ok': r}
except Exception as e:
log.error(e)
result = {'ok': False, 'msg': 'Ocurrio un error al intentar eliminar'}
return result
@classmethod
def post(cls, values):
opt = values['opt']
args = values['values']
return getattr(cls, f'_{opt}')(args)
class Roles(BaseModel): class Roles(BaseModel):
nombre = TextField(default='') nombre = TextField(default='')
@ -1275,6 +1333,18 @@ class Folios(BaseModel):
) )
return tuple(rows) 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 @classmethod
def get_(cls): def get_(cls):
rows = (Folios rows = (Folios
@ -4593,6 +4663,8 @@ class Facturas(BaseModel):
q.execute() q.execute()
q = FacturasRelacionadas.delete().where(FacturasRelacionadas.factura==obj) q = FacturasRelacionadas.delete().where(FacturasRelacionadas.factura==obj)
q.execute() q.execute()
q = FacturasComplementos.delete().where(FacturasComplementos.factura==obj)
q.execute()
Tickets.uncancel(obj) Tickets.uncancel(obj)
m = 'B {}'.format(obj.id) m = 'B {}'.format(obj.id)
@ -4776,7 +4848,6 @@ class Facturas(BaseModel):
def _guardar_ine(self, invoice, valores): def _guardar_ine(self, invoice, valores):
if not valores: if not valores:
return return
data = { data = {
'factura': invoice, 'factura': invoice,
'nombre': 'ine', 'nombre': 'ine',

View File

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

View File

@ -144,14 +144,17 @@ var controllers = {
$$('lst_pac').attachEvent('onChange', lst_pac_on_change) $$('lst_pac').attachEvent('onChange', lst_pac_on_change)
$$('cmd_save_pac').attachEvent('onItemClick', cmd_save_pac_click) $$('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) $$('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) $$('up_cfdixml').attachEvent('onUploadComplete', up_cfdixml_upload_complete)
$$('grid_admin_bancos').attachEvent('onAfterEditStart', grid_admin_bancos_after_edit_start) $$('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('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)
$$('grid_sucursales').attachEvent('onItemClick', grid_sucursales_click)
} }
} }
@ -470,11 +473,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){ function get_config_values(opt){
if(opt == undefined){ if(opt == undefined){
return return
} }
if(opt == 'admin_sucursales'){
set_config_admin_sucursales()
return
}
if(opt == 'templates'){ if(opt == 'templates'){
set_config_templates() set_config_templates()
} }
@ -1230,6 +1255,7 @@ function tab_options_change(nv, ov){
tab_admin_products: 'admin_products', tab_admin_products: 'admin_products',
tab_admin_complements: 'complements', tab_admin_complements: 'complements',
tab_admin_otros: 'configotros', tab_admin_otros: 'configotros',
tab_admin_sucursales: 'admin_sucursales',
} }
get_config_values(cv[nv]) get_config_values(cv[nv])
} }
@ -2739,3 +2765,148 @@ 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)
}
}
})
}
}
})
}
function grid_sucursales_click(id, e, node){
if(id.column != 'delete'){
return
}
var data = {
opt: 'delete',
values: {id: id.row},
}
msg = '¿Estás seguro de borrar la sucursal seleccionado?<BR><BR>ESTA ACCIÓN NO SE PUEDE DESHACER'
webix.confirm({
title: 'Borrar 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){
$$('grid_sucursales').remove(id.row)
msg_ok('Sucursal eliminada correctamente')
}else{
msg_error(values.msg)
}
}
})
}
}
})
}

View File

@ -452,9 +452,9 @@ function validate_invoice(values){
return false return false
} }
if(id_contabilidad.length != 6){ if(id_contabilidad.length > 6){
$$('tv_invoice').getTabbar().setValue('INE') $$('tv_invoice').getTabbar().setValue('INE')
msg = 'El ID de contabilidad deben ser 6 digitos' msg = 'El ID de contabilidad deben tener máximo seis digitos'
msg_error(msg) msg_error(msg)
return false return false
} }
@ -666,10 +666,15 @@ function guardar_y_timbrar(values){
var usar_ine = $$('chk_cfdi_usar_ine').getValue() var usar_ine = $$('chk_cfdi_usar_ine').getValue()
if(usar_ine){ if(usar_ine){
ine_type_comite = $$('lst_ine_tipo_comite').getValue()
var valores = { var valores = {
TipoProceso: $$('lst_ine_tipo_proceso').getValue(), TipoProceso: $$('lst_ine_tipo_proceso').getValue(),
TipoComite: $$('lst_ine_tipo_comite').getValue(),
IdContabilidad: $$('txt_ine_idcontabilidad').getValue(), IdContabilidad: $$('txt_ine_idcontabilidad').getValue(),
ClaveEntidad: $$('lst_ine_key_entidad').getValue(),
Ambito: $$('lst_ine_ambito').getValue(),
}
if(ine_type_comite){
valores['TipoComite'] = ine_type_comite
} }
data['ine'] = valores data['ine'] = valores
} }

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){ function set_value(control, value){
obj = $$(control) obj = $$(control)
obj.blockEvent() obj.blockEvent()
@ -610,3 +616,11 @@ function set_value(control, value){
obj.unblockEvent() 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 = { var tab_options = {
view: 'tabview', view: 'tabview',
id: 'tab_options', id: 'tab_options',
@ -845,24 +895,14 @@ var tab_options = {
view: 'scrollview', body: {rows: options_admin_complements}}}, view: 'scrollview', body: {rows: options_admin_complements}}},
{header: 'Otros', body: {id: 'tab_admin_otros', view: 'scrollview', {header: 'Otros', body: {id: 'tab_admin_otros', view: 'scrollview',
body: {rows: options_admin_otros}}}, body: {rows: options_admin_otros}}},
{header: 'Sucursales', body: {id: 'tab_admin_sucursales', view: 'scrollview',
body: {rows: options_admin_sucursales}}},
], ],
} }
var utilidades_archivos = [ var utilidades_archivos = [
{maxHeight: 15}, {maxHeight: 5},
{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},
{template: 'Importar archivo CFDI (XML)', type: 'section'}, {template: 'Importar archivo CFDI (XML)', type: 'section'},
{view: 'form', id: 'form_upload_cfdixml', rows: [ {view: 'form', id: 'form_upload_cfdixml', rows: [
{cols: [{}, {cols: [{},

View File

@ -707,12 +707,63 @@ var opt_tipo_proceso = [
var opt_tipo_comite = [ var opt_tipo_comite = [
{id: '', value: ''},
{id: 'Ejecutivo Nacional', value: 'Ejecutivo Nacional'}, {id: 'Ejecutivo Nacional', value: 'Ejecutivo Nacional'},
{id: 'Ejecutivo Estatal', value: 'Ejecutivo Estatal'}, {id: 'Ejecutivo Estatal', value: 'Ejecutivo Estatal'},
{id: 'Directivo Estatal', value: 'Directivo Estatal'}, {id: 'Directivo Estatal', value: 'Directivo Estatal'},
] ]
var opt_ine_ambito = [
{id: '', value: ''},
{id: 'Local', value: 'Local'},
{id: 'Federal', value: 'Federal'},
]
var opt_clave_entidad = [
{id: '', value: ''},
{id: 'AGU', value: 'Aguascalientes'},
{id: 'BCN', value: 'Baja California'},
{id: 'BCS', value: 'Baja California Sur'},
{id: 'CAM', value: 'Campeche'},
{id: 'CHP', value: 'Chiapas'},
{id: 'CHH', value: 'Chihuahua'},
{id: 'COA', value: 'Coahuila'},
{id: 'COL', value: 'Colima'},
{id: 'CR1', value: 'Circunscripción 1'},
{id: 'CR2', value: 'Circunscripción 2'},
{id: 'CR3', value: 'Circunscripción 3'},
{id: 'CR4', value: 'Circunscripción 4'},
{id: 'CR5', value: 'Circunscripción 5'},
{id: 'DIF', value: 'Ciudad de México'},
{id: 'DUR', value: 'Durango'},
{id: 'GUA', value: 'Guanajuato'},
{id: 'GRO', value: 'Guerrero'},
{id: 'HID', value: 'Hidalgo'},
{id: 'JAL', value: 'Jalisco'},
{id: 'MEX', value: 'México'},
{id: 'MIC', value: 'Michoacán'},
{id: 'MOR', value: 'Morelos'},
{id: 'NAC', value: 'Nacional'},
{id: 'NAY', value: 'Nayarit'},
{id: 'NLE', value: 'Nuevo León'},
{id: 'OAX', value: 'Oaxaca'},
{id: 'PUE', value: 'Puebla'},
{id: 'QUE', value: 'Querétaro'},
{id: 'ROO', value: 'Quintana Roo'},
{id: 'SLP', value: 'San Luis Potosí'},
{id: 'SIN', value: 'Sinaloa'},
{id: 'SON', value: 'Sonora'},
{id: 'TAB', value: 'Tabasco'},
{id: 'TAM', value: 'Tamaulipas'},
{id: 'TLA', value: 'Tlaxcala'},
{id: 'VER', value: 'Veracruz'},
{id: 'YUC', value: 'Yucatán'},
{id: 'ZAC', value: 'Zacatecas'},
]
var controls_ine = [ var controls_ine = [
{maxHeight: 15}, {maxHeight: 15},
{cols: [{maxWidth: 15}, {cols: [{maxWidth: 15},
@ -728,14 +779,23 @@ var controls_ine = [
{maxHeight: 10}, {maxHeight: 10},
{cols: [{maxWidth: 15}, {cols: [{maxWidth: 15},
{view: 'richselect', id: 'lst_ine_tipo_comite', labelWidth: 150, {view: 'richselect', id: 'lst_ine_tipo_comite', labelWidth: 150,
label: 'Tipo de Comite', options: opt_tipo_comite, label: 'Tipo de Comite', options: opt_tipo_comite, value: ''},
value: 'Ejecutivo Nacional'},
{}]}, {}]},
{maxHeight: 10}, {maxHeight: 10},
{cols: [{maxWidth: 15}, {cols: [{maxWidth: 15},
{view: 'text', id: 'txt_ine_idcontabilidad', name: 'ine_idcontabilidad', {view: 'text', id: 'txt_ine_idcontabilidad', name: 'ine_idcontabilidad',
label: 'ID de Contabilidad: ', labelWidth: 150}, label: 'ID de Contabilidad: ', labelWidth: 150},
{}]}, {}]},
{maxHeight: 10},
{cols: [{maxWidth: 15},
{view: 'richselect', id: 'lst_ine_key_entidad', name: 'ine_key_entidad',
label: 'Clave Entidad: ', labelWidth: 150, options: opt_clave_entidad},
{}]},
{maxHeight: 10},
{cols: [{maxWidth: 15},
{view: 'richselect', id: 'lst_ine_ambito', name: 'ine_ambito',
label: 'Ámbito: ', labelWidth: 150, options: opt_ine_ambito},
{}]},
] ]