6 de octubre, se trabaja 7 horas en la simulación masiva, se logran agregar los clientes y las cuentas con ayuda del profesor y un compañero, pero se encuentra un problema a la hora de agregar los estados de cuenta.
Este problema se resuelve empleando una tabla de pre-proceso:
declare @EstadosPrimero table(idCuentaN int, fechaCorte date null,saldoInicial money null,saldoFinal money null,cantOpManual int null,cantOpATM int null,saldoMin money null,activo bit null)
dentro del ciclo de fechas se llena con las id de las cuentas recien insertadas y se le agrega el resto de la informacion, sin embargo, esto tiene un problema porque se vuelven a introducir id que ya estan, para corregir eso, se procesan las columnas repetidas y se agrupan por id de la cuenta, luego se eliminan y una vez corregida se insertan:
insert into @EstadosPrimero(idCuentaN, fechaCorte,saldoInicial ,saldoFinal ,cantOpManual ,cantOpATM ,saldoMin ,activo )
select Cu.Id, @FechaOp,15000.00,0,0,0,tc.saldoMinimo,1 from Cuenta Cu, TipoCuenta tc inner join Cuenta as C on C.idTipoCuenta = tc.Id
where Cu.id not in (select idCuentaN from @EstadosPrimero)
Este problema se resuelve empleando una tabla de pre-proceso:
declare @EstadosPrimero table(idCuentaN int, fechaCorte date null,saldoInicial money null,saldoFinal money null,cantOpManual int null,cantOpATM int null,saldoMin money null,activo bit null)
dentro del ciclo de fechas se llena con las id de las cuentas recien insertadas y se le agrega el resto de la informacion, sin embargo, esto tiene un problema porque se vuelven a introducir id que ya estan, para corregir eso, se procesan las columnas repetidas y se agrupan por id de la cuenta, luego se eliminan y una vez corregida se insertan:
insert into @EstadosPrimero(idCuentaN, fechaCorte,saldoInicial ,saldoFinal ,cantOpManual ,cantOpATM ,saldoMin ,activo )
select Cu.Id, @FechaOp,15000.00,0,0,0,tc.saldoMinimo,1 from Cuenta Cu, TipoCuenta tc inner join Cuenta as C on C.idTipoCuenta = tc.Id
where Cu.id not in (select idCuentaN from @EstadosPrimero)
--se elimininan los valores repetidos
;with orderResults as (select idCuentaN, row_number() over (partition by idCuentaN order by idCuentaN) as RowNumber from @EstadosPrimero)
delete orderResults where RowNumber != 1
-- se insertan los estados de cuenta
begin transaction
insert into dbo.EstadoCuenta(idCuenta, fechaCorte,saldoInicial ,saldoFinal ,cantOpManual ,cantOpATM ,saldoMin ,activo)
select idCuentaN, fechaCorte,saldoInicial ,saldoFinal ,cantOpManual ,cantOpATM ,saldoMin ,activo from @EstadosPrimero EP
where EP.idCuentaN not in (select idCuenta from EstadoCuenta)
commit
Se insertan los movimientos y se aplican:
begin transaction
update dbo.Cuenta
set
saldo = (case
when TM.tipoMovimiento = 1 then saldo + TM.monto
when TM.tipoMovimiento = 2 then saldo + TM.monto
when TM.tipoMovimiento = 3 then saldo + (-1*TM.monto)
when TM.tipoMovimiento = 4 then saldo + (-1*TM.monto)
when TM.tipoMovimiento = 5 then saldo + (-1*TM.monto)
else saldo
end)
from @TMovimientos TM inner join Cuenta C on TM.codigoCuenta_Movimiento = C.codigoCuenta
where Tm.fechaMov = @FechaOp
insert into dbo.movimiento(idCuenta,idTipoMov,idEstadoCuenta,fecha,monto,descripcion,PostIn,PostBy,PostIp)
select C.id, tipoMovimiento,EC.id, @FechaOp,monto,descripcion,@postTime,@postBy,@postIp from ((@TMovimientos TM inner join Cuenta as C on codigoCuenta_Movimiento = C.codigoCuenta) inner join EstadoCuenta as EC on EC.idCuenta = C.Id)
where TM.fechaMov = @FechaOp
commit
luego se calculan los intereses diarios y se emplea un proceso similar:
insert into @CalcularIntereses(idCuentaInte,interesDiarioCalc,diaCalc,Csaldo)
select Cu.Id, (Cu.saldo * TC.tasaInteresAnual / 360), @FechaOp, Cu.saldo from Cuenta Cu, TipoCuenta TC inner join Cuenta as C on TC.Id = C.idTipoCuenta
where Cu.Id not in (select idCuentaInte from @CalcularIntereses) and @FechaOp not in (select diaCalc from @CalcularIntereses)
;with orderResults as (select idCuentaInte, row_number() over (partition by idCuentaInte order by idCuentaInte) as RowNumber from @CalcularIntereses)
delete orderResults where RowNumber != 1
Comentarios
Publicar un comentario