diff --git a/CHANGELOG.md b/CHANGELOG.md
index 78b6c07..593ccbc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,20 @@
+v 1.13.0 [10-sep-2018]
+----------------------
+ - Plantilla para factura de pago
+ - Cancelar factura de pago
+
+* IMPORTANTE: Es necesario realizar una migración, despues de actualizar la rama principal.
+
+```
+git pull origin master
+
+cd source/app/models
+
+python main.py -bk
+
+python main.py -m
+```
+
v 1.12.0 [31-ago-2018]
----------------------
- Soporte para facturas (complemento) de pago.
diff --git a/VERSION b/VERSION
index 0eed1a2..feaae22 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.12.0
+1.13.0
diff --git a/source/app/controllers/main.py b/source/app/controllers/main.py
index 435341b..f677d14 100644
--- a/source/app/controllers/main.py
+++ b/source/app/controllers/main.py
@@ -420,7 +420,8 @@ class AppMovimientosBanco(object):
def on_post(self, req, resp):
values = req.params
- req.context['result'] = self._db.add_movbanco(values)
+ # ~ req.context['result'] = self._db.add_movbanco(values)
+ req.context['result'] = self._db.bankmovement(values)
resp.status = falcon.HTTP_200
def on_delete(self, req, resp):
diff --git a/source/app/models/db.py b/source/app/models/db.py
index 9faffbf..c9e7671 100644
--- a/source/app/models/db.py
+++ b/source/app/models/db.py
@@ -389,8 +389,8 @@ class StorageEngine(object):
def cuentasbanco(self, values):
return main.CuentasBanco.add(values)
- def add_movbanco(self, values):
- return main.MovimientosBanco.add(values)
+ # ~ def add_movbanco(self, values):
+ # ~ return main.MovimientosBanco.add(values)
def get_cuentasbanco(self, values):
return main.CuentasBanco.get_(values)
@@ -422,3 +422,6 @@ class StorageEngine(object):
def cfdipay(self, values):
return main.CfdiPagos.post(values)
+
+ def bankmovement(self, values):
+ return main.MovimientosBanco.post(values)
diff --git a/source/app/models/main.py b/source/app/models/main.py
index 34bdcf5..088c4e2 100644
--- a/source/app/models/main.py
+++ b/source/app/models/main.py
@@ -1856,7 +1856,11 @@ class MovimientosBanco(BaseModel):
return saldo
@classmethod
- def add(cls, values):
+ def post(cls, values):
+ opt = values.pop('opt')
+ return getattr(cls, '_{}'.format(opt))(cls, values)
+
+ def _add(self, values):
ids = values.pop('ids', '')
if ids and not Facturas.validate_count_partners(util.loads(ids)):
@@ -1876,8 +1880,8 @@ class MovimientosBanco(BaseModel):
values['deposito'] = util.get_float(values['deposito'])
values['forma_pago'] = int(values['forma_pago'])
- ultimo_saldo = cls._ultimo_saldo(
- cls, values['cuenta'], values['fecha'])
+ ultimo_saldo = self._ultimo_saldo(
+ self, values['cuenta'], values['fecha'])
values['saldo'] = \
ultimo_saldo - values['retiro'] + values['deposito']
@@ -1889,12 +1893,47 @@ class MovimientosBanco(BaseModel):
return {'ok': False, 'msg': msg}
if actualizar:
- saldo = cls._actualizar_saldos(cls, obj)
+ saldo = self._actualizar_saldos(self, obj)
if ids:
FacturasPagos.add(obj, util.loads(ids))
return {'ok': True, 'saldo': saldo}
+ def _cancel(self, values):
+ id = int(values['id'])
+ try:
+ obj = MovimientosBanco.get(MovimientosBanco.id==id)
+ except MovimientosBanco.DoesNotExist:
+ msg = 'No se encontró el movimiento'
+ return {'ok': False, 'msg': msg}
+
+ if obj.cancelado:
+ msg = 'El movimiento ya esta cancelado'
+ return {'ok': False, 'msg': msg}
+
+ if obj.conciliado:
+ msg = 'El movimiento esta conciliado, no se puede cancelar'
+ return {'ok': False, 'msg': msg}
+
+ filters = (CfdiPagos.movimiento==obj)
+ cp = CfdiPagos.select().where(filters).count()
+ if cp > 0:
+ msg = 'El movimiento tiene Factura de Pago, no se puede cancelar'
+ return {'ok': False, 'msg': msg}
+
+ with database_proxy.transaction():
+ obj.cancelado = True
+ obj.save()
+ FacturasPagos.cancelar(obj)
+
+ obj = self._movimiento_anterior(self, obj.cuenta, obj.fecha)
+ self._actualizar_saldos(self, obj)
+
+ balance = CuentasBanco.get_saldo(obj.cuenta.id)
+
+ msg = 'Movimiento cancelado correctamente'
+ return {'ok': False, 'msg': msg, 'balance': balance}
+
@classmethod
def remove(cls, id):
try:
diff --git a/source/app/settings.py b/source/app/settings.py
index 0c1d15c..dbd9b26 100644
--- a/source/app/settings.py
+++ b/source/app/settings.py
@@ -47,7 +47,7 @@ except ImportError:
DEBUG = DEBUG
-VERSION = '1.12.0'
+VERSION = '1.13.0'
EMAIL_SUPPORT = ('soporte@empresalibre.net',)
TITLE_APP = '{} v{}'.format(TITLE_APP, VERSION)
diff --git a/source/static/js/controller/bancos.js b/source/static/js/controller/bancos.js
index a460135..547d6eb 100644
--- a/source/static/js/controller/bancos.js
+++ b/source/static/js/controller/bancos.js
@@ -282,6 +282,7 @@ function guardar_retiro(values){
var importe = get_float(values.retiro_importe)
var data = new Object()
+ data['opt'] = 'add'
data['cuenta'] = $$('lst_cuentas_banco').getValue()
data['fecha'] = values.retiro_fecha
data['hora'] = $$('time_retiro').getText()
@@ -519,6 +520,7 @@ function guardar_deposito(values){
var grid = $$('grid_cfdi_este_deposito')
var data = new Object()
+ data['opt'] = 'add'
data['cuenta'] = $$('lst_cuentas_banco').getValue()
data['fecha'] = values.deposito_fecha
data['hora'] = $$('time_deposito').getText()
@@ -610,17 +612,36 @@ function cmd_guardar_deposito_click(){
function cancelar_movimiento(id){
- var grid = $$('grid_cuentabanco')
+ //~ var grid = $$('grid_cuentabanco')
- webix.ajax().del('/movbanco', {id: id}, function(text, xml, xhr){
- if(xhr.status == 200){
- get_estado_cuenta()
- get_saldo_cuenta()
- msg_ok('Movimiento cancelado correctamente')
- }else{
- msg_error('No se pudo eliminar')
+ //~ webix.ajax().del('/movbanco', {id: id}, function(text, xml, xhr){
+ //~ if(xhr.status == 200){
+ //~ get_estado_cuenta()
+ //~ get_saldo_cuenta()
+ //~ msg_ok('Movimiento cancelado correctamente')
+ //~ }else{
+ //~ msg_error('No se pudo eliminar')
+ //~ }
+ //~ })
+
+ var data = {'opt': 'cancel', 'id': id}
+ webix.ajax().post('/movbanco', 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_estado_cuenta()
+ $$('txt_cuenta_saldo').setValue(values.balance)
+ msg_ok(values.msg)
+ }else{
+ msg_error(values.msg)
+ }
}
})
+
}
@@ -871,7 +892,7 @@ function save_cfdi_pay(form){
function cmd_pay_stamp_click(){
var form = $$('form_bank_pay')
var title = 'Timbrar Factura de Pago'
- msg = '¿Estás seguro de enviar a timbrar este pago?'
+ msg = '¿Estás seguro de enviar a timbrar este pago?
EL MOVIMIENTO YA NO PODRÁ SER MODIFICADO'
if (!validate_cfdi_pay(form)){
return