180 lines
7.3 KiB
Python
Executable File
180 lines
7.3 KiB
Python
Executable File
from django.db import transaction
|
|
from django.db import connection
|
|
|
|
from .models import AcumuladoMes, Registro, CuotasCondominio, Movimiento, Condomino, CuentaBanco, Asiento
|
|
|
|
from catalogos.models import CuentaContable, PeriodoCorte
|
|
|
|
from ciec.procesos import dictfetchall, execsql
|
|
|
|
from datetime import datetime, timedelta
|
|
|
|
def run_acum_balcones(condominio, shortname):
|
|
print(" generando acumulados %s " % shortname)
|
|
with transaction.atomic():
|
|
borrado = ''
|
|
nq1 = ''
|
|
nq2 = ''
|
|
#
|
|
# Borra acumulados
|
|
if shortname == "BALCONES":
|
|
borrado = 'delete from condominio_balcones_acumulado_mes'
|
|
nq1 = '''
|
|
select nombre, clabe as cuenta, cb.saldo_inicial, min(fecha_movimiento) as fecha
|
|
from condominio_balcones_movimiento m,
|
|
condominio_balcones_cuenta_banco cb,
|
|
periodo_corte p,
|
|
condominio c
|
|
where cb.id = m.cuenta_banco_id
|
|
and m.fecha_movimiento >= p.fecha_inicial
|
|
and m.fecha_movimiento <= p.fecha_final
|
|
and c.nombre = 'BALCONES'
|
|
and p.id = 8
|
|
group by 1,2,3
|
|
order by 4,2
|
|
'''
|
|
nq2 = '''
|
|
select 'Condominio' as nombre, clabe as cuenta, to_char(fecha_movimiento,'MM-YYYY') as mes,
|
|
min(fecha_movimiento) as fec_ini,
|
|
max(fecha_movimiento) as fec_fin,
|
|
round(sum(deposito),2) as depositos,
|
|
round(sum(retiro),2) as retiros,
|
|
round(sum(deposito)-sum(retiro),2) as diferencia
|
|
from condominio_balcones_movimiento m,
|
|
condominio_balcones_cuenta_banco cb,
|
|
periodo_corte p
|
|
where cb.id = m.cuenta_banco_id
|
|
and fecha_movimiento >= p.fecha_inicial
|
|
and fecha_movimiento <= p.fecha_final
|
|
and p.id = 8
|
|
group by 1,2,3
|
|
order by 2,4,3
|
|
'''
|
|
#print(borrado,nq1,nq2)
|
|
n = execsql(borrado)
|
|
#
|
|
# Trae saldo inicial de cada cuenta
|
|
saldo_condominio = 0
|
|
rows = execsql(nq1)
|
|
print(rows)
|
|
#
|
|
# Por cada cuenta
|
|
for r in rows:
|
|
saldo = float(r['saldo_inicial'])
|
|
#
|
|
# Agrega depositos y retiros por cuenta y mes
|
|
rows2 = execsql(nq2)
|
|
for r2 in rows2:
|
|
if r2['cuenta'] == r['cuenta']:
|
|
saldo = round(saldo + float(r2['depositos']) - float(r2['retiros']), 2)
|
|
|
|
#print(r2['cuenta'], r2['mes'], r2['fec_ini'], r2['fec_fin'], r2['depositos'], r2['retiros'], saldo)
|
|
|
|
reg = AcumuladoMes(cuenta_banco=r2['cuenta'], \
|
|
mes=r2['mes'], \
|
|
fecha_inicial=r2['fec_ini'], \
|
|
fecha_final=r2['fec_fin'], \
|
|
depositos=r2['depositos'], \
|
|
retiros=r2['retiros'], \
|
|
saldo=saldo)
|
|
print(' previo salva registro ')
|
|
reg.save()
|
|
if r['cuenta'] != '000000000000000000':
|
|
saldo_condominio = saldo_condominio + saldo
|
|
#print('actualiza saldo con ', saldo_condominio)
|
|
#
|
|
# Actualiza saldo en periodos
|
|
oPer = PeriodoCorte.objects.get(id=8)
|
|
oPer.saldo_final = saldo_condominio
|
|
oPer.save()
|
|
|
|
def run_determinacionSaldos_balcones(condomino):
|
|
print(" determinando saldos %s " % condomino.depto)
|
|
with transaction.atomic():
|
|
# tipo = TipoMovimiento.objects.get(id=21)
|
|
# prop = TipoMovimiento.objects.get(id=30)
|
|
cuenta = CuentaContable.objects.get(id=82)
|
|
# prove = Proveedore.objects.get(id=1)
|
|
#
|
|
# Borra asientos
|
|
n = execsql('delete from condominio_balcones_registro where condomino_id = %s' % condomino.id)
|
|
#
|
|
# Agrega adeudo inicial
|
|
if not condomino.depto == '0000':
|
|
ade = condomino.adeudo_inicial
|
|
sal = 0
|
|
deb = 0
|
|
sal = sal + deb - ade
|
|
# adeudo = condomino.adeudo_inicial
|
|
reg_i = Registro(fecha=condomino.fecha_adeudo_inicial, \
|
|
descripcion='SALDO INICIAL A LA FECHA', \
|
|
debe=deb, \
|
|
haber=ade, \
|
|
saldo=sal, \
|
|
cuenta_contable=cuenta, \
|
|
condomino=condomino)
|
|
reg_i.save()
|
|
#
|
|
# Agrega adeudos por cuotas
|
|
rows = CuotasCondominio.objects.all().order_by('mes_inicial')
|
|
for r in rows:
|
|
delta = (r.mes_final - r.mes_inicial)
|
|
# print(r.descripcion,r.mes_inicial,r.mes_final,r.monto,r.cuenta_contable,delta.days)
|
|
condom = r.condomino.filter(depto__contains=condomino.depto)
|
|
if condom:
|
|
base = r.mes_inicial
|
|
for x in range(0, delta.days + 1):
|
|
fecha = base + timedelta(days=x)
|
|
if fecha.day == 1:
|
|
reg_a = Registro(fecha=fecha, \
|
|
descripcion='CARGO {}'.format(r.descripcion), \
|
|
debe=0, \
|
|
haber=r.monto, \
|
|
saldo=0, \
|
|
cuenta_contable=r.cuenta_contable, \
|
|
condomino=condomino)
|
|
reg_a.save()
|
|
#
|
|
# Agrega depositos por movimiento de banco
|
|
if not condomino.depto == '0000':
|
|
movtos = Movimiento.objects.filter(condomino__id=condomino.id).order_by('fecha_movimiento', 'id')
|
|
for m in movtos:
|
|
reg_m = Registro(fecha=m.fecha_movimiento, \
|
|
descripcion=m.descripcion, \
|
|
debe=m.deposito, \
|
|
haber=0, \
|
|
saldo=0, \
|
|
cuenta_contable=r.cuenta_contable, \
|
|
condomino=condomino)
|
|
reg_m.save()
|
|
asientos = Asiento.objects.filter(condomino_id=condomino.id).order_by('fecha', 'id')
|
|
for a in asientos:
|
|
reg_a = Registro(fecha=a.fecha, \
|
|
descripcion=a.descripcion, \
|
|
debe=a.debe, \
|
|
haber=a.haber, \
|
|
saldo=a.saldo, \
|
|
cuenta_contable=a.cuenta_contable, \
|
|
condomino=condomino)
|
|
reg_a.save()
|
|
# Recalcula saldos
|
|
if not condomino.depto == '0000':
|
|
sal = 0
|
|
car = 0
|
|
dep = 0
|
|
rec = Registro.objects.filter(condomino__id=condomino.id).order_by('fecha', 'id')
|
|
for rr in rec:
|
|
car = car + rr.haber
|
|
dep = dep + rr.debe
|
|
sal = sal + rr.haber - rr.debe
|
|
rr.saldo = sal
|
|
rr.save()
|
|
|
|
reg_c = Condomino.objects.get(id=condomino.id)
|
|
reg_c.cargos = car
|
|
reg_c.abonos = dep
|
|
reg_c.saldo = sal
|
|
reg_c.save()
|
|
|
|
|