diff --git a/source/app/controllers/main.py b/source/app/controllers/main.py
index 03b46d8..4cce715 100644
--- a/source/app/controllers/main.py
+++ b/source/app/controllers/main.py
@@ -258,7 +258,7 @@ class AppCuentasBanco(object):
def on_get(self, req, resp):
values = req.params
session = req.env['beaker.session']
- #~ req.context['result'] = self._db.get_emisor(session['rfc'])
+ req.context['result'] = self._db.get_cuentasbanco(values)
resp.status = falcon.HTTP_200
def on_post(self, req, resp):
diff --git a/source/app/controllers/util.py b/source/app/controllers/util.py
index fce597b..1a1e82d 100644
--- a/source/app/controllers/util.py
+++ b/source/app/controllers/util.py
@@ -1535,6 +1535,8 @@ class ImportFacturaLibre(object):
new = {t: row[s] for s, t in fields}
if not new['uuid']:
new['uuid'] = None
+ if new['xml'] is None:
+ new['xml'] = ''
if row['estatus'] == 'Pagada':
new['pagada'] = True
elif row['estatus'] == 'Cancelada':
diff --git a/source/app/models/db.py b/source/app/models/db.py
index c0b498b..ce8e278 100644
--- a/source/app/models/db.py
+++ b/source/app/models/db.py
@@ -217,6 +217,9 @@ class StorageEngine(object):
def cuentasbanco(self, values):
return main.CuentasBanco.add(values)
+ def get_cuentasbanco(self, values):
+ return main.CuentasBanco.get_(values)
+
def get_folios(self):
return main.Folios.get_()
diff --git a/source/app/models/main.py b/source/app/models/main.py
index 0fb1e0b..dd78974 100644
--- a/source/app/models/main.py
+++ b/source/app/models/main.py
@@ -914,6 +914,21 @@ class CuentasBanco(BaseModel):
def __str__(self):
return '{} ({})'.format(self.banco.name, self.cuenta[-4:])
+ @classmethod
+ def get_(cls, values):
+ if values['tipo'] == '1':
+ rows = (CuentasBanco
+ .select(
+ CuentasBanco.id,
+ str(CuentasBanco))
+ .where(CuentasBanco.de_emisor==True)
+ .dicts()
+ )
+ print (tuple(rows))
+ return {'ok': True, 'rows': tuple(rows)}
+
+ return
+
@classmethod
def emisor(cls):
rows = (CuentasBanco
@@ -968,6 +983,52 @@ class CuentasBanco(BaseModel):
return data
+class BancoMovimientos(BaseModel):
+ cuenta = ForeignKeyField(CuentasBanco)
+ fecha = DateTimeField(default=util.now, formats=['%Y-%m-%d %H:%M:%S'])
+ movimiento = IntegerField(default=0)
+ descripcion = TextField(default='')
+ forma_pago = ForeignKeyField(SATFormaPago)
+ retiro = DecimalField(default=0.0, max_digits=20, decimal_places=6,
+ auto_round=True)
+ deposito = DecimalField(default=0.0, max_digits=20, decimal_places=6,
+ auto_round=True)
+ saldo = DecimalField(default=0.0, max_digits=20, decimal_places=6,
+ auto_round=True)
+ moneda = TextField(default='MXN') # Complemento de pagos
+ tipo_cambio = DecimalField(default=1.0, max_digits=15, decimal_places=6,
+ auto_round=True)
+ numero_operacion = TextField(default='')
+ origen_rfc = TextField(default='')
+ origen_nombre = TextField(default='')
+ origen_cuenta = TextField(default='')
+ destino_rfc = TextField(default='')
+ destino_cuenta = TextField(default='')
+ tipo_cadena_pago = TextField(default='')
+ certificado_pago = TextField(default='')
+ cadena_pago = TextField(default='')
+ sello_pago = TextField(default='')
+
+ class Meta:
+ order_by = ('fecha',)
+ indexes = (
+ (('cuenta', 'movimiento'), True),
+ )
+
+
+class CfdiPagos(BaseModel):
+ movimiento = ForeignKeyField(BancoMovimientos)
+ xml = TextField(default='')
+ uuid = UUIDField(null=True)
+ estatus = TextField(default='Guardado')
+ estatus_sat = TextField(default='')
+ notas = TextField(default='')
+ cancelado = BooleanField(default=False)
+
+ class Meta:
+ order_by = ('movimiento',)
+
+
class SATUsoCfdi(BaseModel):
key = TextField(index=True, unique=True)
name = TextField(default='', index=True)
@@ -2523,6 +2584,17 @@ class FacturasRelacionadas(BaseModel):
return [str(r.factura_origen.uuid) for r in query]
+class CfdiPagosFacturas(BaseModel):
+ pago = ForeignKeyField(CfdiPagos)
+ factura = ForeignKeyField(Facturas)
+
+ class Meta:
+ order_by = ('pago',)
+ indexes = (
+ (('pago', 'factura'), True),
+ )
+
+
class PreFacturasRelacionadas(BaseModel):
factura = ForeignKeyField(PreFacturas, related_name='original')
factura_origen = ForeignKeyField(PreFacturas, related_name='relacion')
@@ -2665,6 +2737,23 @@ class FacturasImpuestos(BaseModel):
)
+class FacturasPagos(BaseModel):
+ factura = ForeignKeyField(Facturas)
+ numero = IntegerField(default=1)
+ saldo_anterior = DecimalField(default=0.0, max_digits=20, decimal_places=6,
+ auto_round=True)
+ importe = DecimalField(default=0.0, max_digits=18, decimal_places=6,
+ auto_round=True)
+ saldo = DecimalField(default=0.0, max_digits=18, decimal_places=6,
+ auto_round=True)
+
+ class Meta:
+ order_by = ('factura',)
+ indexes = (
+ (('factura', 'numero'), True),
+ )
+
+
class PreFacturasImpuestos(BaseModel):
factura = ForeignKeyField(PreFacturas)
impuesto = ForeignKeyField(SATImpuestos)
@@ -2815,13 +2904,15 @@ def _init_values(rfc):
def _crear_tablas(rfc):
tablas = [Addendas, Categorias, Certificado, CondicionesPago, Configuracion,
- Emisor, Facturas, FacturasDetalle, FacturasImpuestos, Folios,
+ Folios,
+ Emisor, Facturas, FacturasDetalle, FacturasImpuestos, FacturasPagos,
FacturasRelacionadas, Productos,
PreFacturas, PreFacturasDetalle, PreFacturasImpuestos,
PreFacturasRelacionadas,
SATAduanas, SATFormaPago, SATImpuestos, SATMonedas, SATRegimenes,
SATTipoRelacion, SATUnidades, SATUsoCfdi, SATBancos,
- Socios, Tags, Usuarios, CuentasBanco, TipoCambio,
+ Socios, Tags, Usuarios, CuentasBanco, TipoCambio, BancoMovimientos,
+ CfdiPagos, CfdiPagosFacturas,
Emisor.regimenes.get_through_model(),
Socios.tags.get_through_model(),
Productos.impuestos.get_through_model(),
@@ -3092,7 +3183,8 @@ def _importar_facturas(rows):
'importe': impuesto['importe'],
}
FacturasImpuestos.create(**new)
- except IntegrityError:
+ except IntegrityError as e:
+ print (e)
msg = '\tFactura: id: {}'.format(row['serie'] + str(row['folio']))
log.error(msg)
log.info('\tFacturas importadas...')
diff --git a/source/static/js/controller/admin.js b/source/static/js/controller/admin.js
index dfabde5..9bb5cbd 100644
--- a/source/static/js/controller/admin.js
+++ b/source/static/js/controller/admin.js
@@ -184,7 +184,7 @@ function get_certificado(){
}
-function get_cuentas_banco(){
+function get_admin_cuentas_banco(){
webix.ajax().get('/values/monedasid', function(text, data){
var values = data.json()
@@ -310,7 +310,7 @@ function multi_admin_change(prevID, nextID){
$$('tab_emisor').setValue('Datos Fiscales')
get_emisor()
get_certificado()
- get_cuentas_banco()
+ get_admin_cuentas_banco()
return
}
diff --git a/source/static/js/controller/bancos.js b/source/static/js/controller/bancos.js
new file mode 100644
index 0000000..9d5a3f4
--- /dev/null
+++ b/source/static/js/controller/bancos.js
@@ -0,0 +1,41 @@
+var msg = ''
+
+var bancos_controllers = {
+ init: function(){
+ $$('lst_cuentas_banco').attachEvent('onChange', lst_cuentas_banco_change)
+ $$('cmd_agregar_retiro').attachEvent('onItemClick', cmd_agregar_retiro_click)
+ $$('cmd_agregar_deposito').attachEvent('onItemClick', cmd_agregar_deposito_click)
+ }
+}
+
+
+function get_cuentas_banco(){
+ webix.ajax().get('/cuentasbanco', {'tipo': 1}, {
+ 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){
+ $$('lst_cuentas_banco').getList().parse(values.rows)
+ $$('lst_cuentas_banco').setValue(values.rows[0].id)
+ }
+ }
+ })
+}
+
+
+function lst_cuentas_banco_change(nv, ov){
+ show('Cuenta change')
+}
+
+
+function cmd_agregar_retiro_click(){
+ show('Retiro')
+}
+
+
+function cmd_agregar_deposito_click(){
+ show('Depósito')
+}
diff --git a/source/static/js/controller/main.js b/source/static/js/controller/main.js
index f7c287e..d44948d 100644
--- a/source/static/js/controller/main.js
+++ b/source/static/js/controller/main.js
@@ -65,6 +65,8 @@ var controllers = {
$$('grid_preinvoices').attachEvent('onItemClick', grid_preinvoices_click)
webix.extend($$('grid_invoices'), webix.ProgressBar)
+
+ bancos_controllers.init()
}
}
@@ -166,6 +168,14 @@ function multi_change(prevID, nextID){
return
}
+ if(nextID == 'app_bancos'){
+ active = $$('multi_bancos').getActiveId()
+ if(active == 'bancos_home'){
+ get_cuentas_banco()
+ }
+ return
+ }
+
if(nextID == 'app_invoices'){
active = $$('multi_invoices').getActiveId()
if(active == 'invoices_home'){
diff --git a/source/static/js/controller/util.js b/source/static/js/controller/util.js
index dd607ee..ac5ca32 100644
--- a/source/static/js/controller/util.js
+++ b/source/static/js/controller/util.js
@@ -15,6 +15,23 @@ var table_usocfdi = db.addCollection('usocfdi')
var table_relaciones = db.addCollection('relaciones')
+var months = [
+ {id: -1, value: 'Todos'},
+ {id: 1, value: 'Enero'},
+ {id: 2, value: 'Febrero'},
+ {id: 3, value: 'Marzo'},
+ {id: 4, value: 'Abril'},
+ {id: 5, value: 'Mayo'},
+ {id: 6, value: 'Junio'},
+ {id: 7, value: 'Julio'},
+ {id: 8, value: 'Agosto'},
+ {id: 9, value: 'Septiembre'},
+ {id: 10, value: 'Octubre'},
+ {id: 11, value: 'Noviembre'},
+ {id: 12, value: 'Diciembre'},
+]
+
+
function show(values){
webix.message(JSON.stringify(values, null, 2))
}
diff --git a/source/static/js/ui/bancos.js b/source/static/js/ui/bancos.js
new file mode 100644
index 0000000..a17157a
--- /dev/null
+++ b/source/static/js/ui/bancos.js
@@ -0,0 +1,78 @@
+
+
+var toolbar_banco = [
+ {view: 'richselect', id: 'lst_cuentas_banco', label: 'Cuenta',
+ labelWidth: 100, options: []},
+ {view: 'text', id: 'txt_cuenta_moneda', label: 'Moneda', readonly: true},
+ {view: 'currency', id: 'txt_cuenta_saldo', label: 'Saldo', readonly: true,
+ inputAlign: 'right', value: 0}
+]
+
+
+var toolbar_filtro_cuenta = [
+ {view: 'richselect', id: 'filtro_cuenta_year', label: 'Año',
+ labelAlign: 'right', labelWidth: 50, width: 150, options: []},
+ {view: 'richselect', id: 'filtro_cuenta_mes', label: 'Mes',
+ labelAlign: 'right', labelWidth: 50, width: 200, options: months},
+ {view: 'daterangepicker', id: 'filtro_cuenta_fechas', label: 'Fechas',
+ labelAlign: 'right', width: 300},
+ {},
+ {view: 'button', id: 'cmd_agregar_retiro', label: 'Retiro',
+ type: 'iconButton', autowidth: true, icon: 'minus'},
+ {view: 'button', id: 'cmd_agregar_deposito', label: 'Depósito',
+ type: 'iconButton', autowidth: true, icon: 'plus'},
+]
+
+
+var grid_cuentabanco_cols = [
+ {id: 'id', header:'ID', hidden: true},
+ {id: 'fecha', header: 'Fecha', width: 150},
+ {id: 'numero_operacion', header: 'Referencia'},
+ {id: 'descripcion', header: ['Descripción', {content: 'textFilter'}],
+ fillspace:true},
+ {id: 'retiro', header: ['Retiro', {content: 'numberFilter'}],
+ width: 125, format: webix.i18n.priceFormat, css: 'right'},
+ {id: 'deposito', header: ['Depósito', {content: 'numberFilter'}],
+ width: 125, format: webix.i18n.priceFormat, css: 'right'},
+ {id: 'saldo', header: ['Saldo'],
+ width: 125, format: webix.i18n.priceFormat, css: 'right'},
+]
+
+
+var grid_cuentabanco = {
+ view: 'datatable',
+ id: 'grid_cuentabanco',
+ select: 'row',
+ adjust: true,
+ footer: true,
+ resizeColumn: true,
+ headermenu: true,
+ columns: grid_cuentabanco_cols,
+}
+
+
+var multi_bancos = {
+ id: 'multi_bancos',
+ animate: true,
+ cells:[
+ {id: 'bancos_home', rows:[
+ {view: 'toolbar', elements: toolbar_banco},
+ {view: 'toolbar', elements: toolbar_filtro_cuenta},
+ grid_cuentabanco,
+ ]}
+ //~ {id: 'partners_new', rows:[form_partner]}
+ ],
+}
+
+
+var title_partners = 'Administración de Bancos'
+var app_bancos = {
+ id: 'app_bancos',
+ rows:[
+ {view: 'template', id: 'th_bancos', type: 'header',
+ template: title_partners},
+ multi_bancos
+ ]
+}
+
+
diff --git a/source/static/js/ui/invoices.js b/source/static/js/ui/invoices.js
index 5da23ca..6fc27f3 100644
--- a/source/static/js/ui/invoices.js
+++ b/source/static/js/ui/invoices.js
@@ -1,20 +1,4 @@
-var months = [
- {id: -1, value: 'Todos'},
- {id: 1, value: 'Enero'},
- {id: 2, value: 'Febrero'},
- {id: 3, value: 'Marzo'},
- {id: 4, value: 'Abril'},
- {id: 5, value: 'Mayo'},
- {id: 6, value: 'Junio'},
- {id: 7, value: 'Julio'},
- {id: 8, value: 'Agosto'},
- {id: 9, value: 'Septiembre'},
- {id: 10, value: 'Octubre'},
- {id: 11, value: 'Noviembre'},
- {id: 12, value: 'Diciembre'},
-]
-
var grid_cfdi_cliente_cols = [
{id: 'index', header: '#', adjust: 'data', css: 'right',
@@ -253,15 +237,15 @@ var grid_details_cols = [
fillspace: true, editor: 'text'},
{id: "unidad", header:{text: 'Unidad', css: 'center'}, width: 100},
{id: 'cantidad', header: {text: 'Cantidad', css: 'center'}, width: 100,
- format: webix.i18n.numberFormat, css:'right', editor: 'text'},
+ format: webix.i18n.numberFormat, css: 'right', editor: 'text'},
{id: "valor_unitario", header:{text: 'Valor Unitario', css: 'center'},
- width: 100, format: webix.i18n.priceFormat, css:'right', editor: 'text'},
+ width: 100, format: webix.i18n.priceFormat, css: 'right', editor: 'text'},
{id: 'descuento', header:{text: 'Descuento', css: 'center'},
- width: 80, format: webix.i18n.priceFormat, css:'right', editor: 'text'},
+ width: 80, format: webix.i18n.priceFormat, css: 'right', editor: 'text'},
{id: 'precio_final', hidden: true, header: 'precio_final', width: 80,
- format: webix.i18n.priceFormat, css:'right'},
+ format: webix.i18n.priceFormat, css: 'right'},
{id: "importe", header:{text: 'Importe', css: 'center'}, width: 150,
- format: webix.i18n.priceFormat, css:'right'},
+ format: webix.i18n.priceFormat, css: 'right'},
]
diff --git a/source/static/js/ui/main.js b/source/static/js/ui/main.js
index 9ba1099..2e61ebb 100644
--- a/source/static/js/ui/main.js
+++ b/source/static/js/ui/main.js
@@ -1,10 +1,12 @@
+
var menu_data = [
{id: 'app_home', icon: 'dashboard', value: 'Inicio'},
{id: 'app_partners', icon: 'users', value: 'Clientes y Proveedores'},
{id: 'app_products', icon: 'server', value: 'Productos y Servicios'},
+ {id: 'app_bancos', icon: 'university', value: 'Bancos'},
{id: 'app_invoices', icon: 'cart-plus', value: 'Facturas'},
-];
+]
var sidebar = {
@@ -18,8 +20,8 @@ var sidebar = {
onAfterSelect: function(id){
$$('multi').setValue(id)
}
- }
-};
+ },
+}
var multi_main = {
@@ -33,9 +35,10 @@ var multi_main = {
},
app_partners,
app_products,
+ app_bancos,
app_invoices,
- ]
-};
+ ],
+}
var menu_user = {
@@ -49,7 +52,8 @@ var menu_user = {
type: {
subsign: true,
},
-};
+}
+
var ui_main = {
rows: [
diff --git a/source/templates/main.html b/source/templates/main.html
index 2312e84..8c95768 100644
--- a/source/templates/main.html
+++ b/source/templates/main.html
@@ -7,11 +7,13 @@
+
+