Evitar cancelar movimiento con factura de pago

This commit is contained in:
Mauricio Baeza 2018-09-10 00:00:52 -05:00
parent 0ec7989c75
commit 1ee3f81dcc
7 changed files with 99 additions and 18 deletions

View File

@ -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.

View File

@ -1 +1 @@
1.12.0
1.13.0

View File

@ -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):

View File

@ -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)

View File

@ -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:

View File

@ -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)

View File

@ -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?<BR><BR>EL MOVIMIENTO YA NO PODRÁ SER MODIFICADO'
if (!validate_cfdi_pay(form)){
return