jueves, 23 de julio de 2020

22/07/2020

Se implementaron SPs referentes al proceso de los APs:


  • SP_ProcesaAPs: Este SP procesa los nodos que vienen en el xml, recibe una finca y unos meses, entonces saca los recibos pendientes, los moratorios y genera un AP, aun estoy con dudas sobre como generar el AP, ya que ya existe un SP que lo genera.(APs,fechaOperacion)
            CREATE PROC [dbo].[SP_ProcesaAPs] @APs APTipo READONLY, @fechaOperacion DATE

                    SELECT @idMenor = min([id]), @idMayor=max([id]) FROM @APs
--PRIMERO ITERO POR LAS PROPIEDADES PARA GENERAR APS
WHILE @idMenor<=@idMayor
BEGIN
SET @montoAP = 0
SET @idPropiedad = (SELECT P.id
FROM @APs APs
INNER JOIN [dbo].[Propiedad] P ON P.numFinca = APs.numFinca 
WHERE APs.id = @idMenor)
SET @meses = (SELECT plazo 
FROM @APs
WHERE id = @idMenor)

--GUARDO TODOS LOS RECIBOS PENDIENTES
INSERT INTO @idRecibosAP(idRecibo,visitado)
SELECT R.id,0
FROM [dbo].[Recibos] R
WHERE R.estado = 0 AND R.id_Propiedad = @idPropiedad

--WHILE PARA RECORRER LOS RECIBOS Y VERIFICAR SI ES NECESARIO CREAR MORATORIOS
--SI ES NECESARIO ENTONCES LOS GUARDO EN LA TABLA DE IDS
WHILE EXISTS(SELECT * FROM @idRecibosAP WHERE visitado = 0)
BEGIN
--PONE EL RECIBO COMO VISITADO PORQUE LO ESTAMOS VISITANDO EN ESTE MOMENTO
UPDATE @idRecibosAP
SET visitado = 1
WHERE id = @indice

SET @fechaVence = (SELECT fechaVence FROM [dbo].[Recibos] R
   INNER JOIN @idRecibosAP idRAP ON idRAP.idRecibo = R.id
   WHERE @indice = idRAP.id AND idRAP.visitado = 0)
SET @montoRecibo = (SELECT R.monto FROM [dbo].[Recibos] R
INNER JOIN @idRecibosAP idRAP ON R.id = idRAP.idRecibo
WHERE @indice = idRAP.id AND idRAP.visitado = 0)
SET @montoAP += @montoRecibo
IF @fechaVence < @fechaOperacion
BEGIN
--SACA LA TASA MORATORIA DEL RECIBO
SET @tasaMoratoria = (SELECT CC.tasaImpuestoMoratorio FROM [dbo].[ConceptoDeCobro] CC
INNER JOIN [dbo].[Recibos] R ON R.id_CC = CC.id 
INNER JOIN  @idRecibosAP idRAP ON idRAP.idRecibo = R.id
WHERE @indice = idRAP.id AND idRAP.visitado = 0)

SET @montoMoratorio = (@montoRecibo*@tasaMoratoria/365)*ABS(DATEDIFF(d,@fechaVence,@fechaOperacion))
SET @montoAP += @montoMoratorio
--CREA UN RECIBO DE TIPO MORATORIO
INSERT INTO [dbo].[Recibos](id_CC,monto,estado,id_Propiedad,fecha,fechaVence)
SELECT CC.id,@montoMoratorio,0,@idPropiedad,@fechaOperacion,DATEADD(d,CC.diasParaVencer,@fechaOperacion)
FROM [dbo].[ConceptoDeCobro] CC
WHERE CC.id = 11

--GUARDA ADEMAS LOS RECIBOS MORATORIOS A PAGAR
INSERT INTO @idRecibosAP(idRecibo,visitado)
SELECT IDENT_CURRENT('[dbo].[Recibos]'),1
SET @indice += 1 --INCREMENTO EN INDICE PARA IR GUARANDO POR DONDE VOY 
END
END
--GENERO EL AP
SET @tasaInteres = convert(float,(SELECT valor FROM [dbo].[ValoresConfig] WHERE nombre = 'TasaInteres AP'))
SET @cuota = @montoAP*((@tasaInteres*POWER((1+@tasaInteres),@meses))/(POWER((1+@tasaInteres),@meses)-1))

--PODRIA LLAMAR AL SP PARA CREAR APs PERO TENDRIA QUE GUARDAR LOS IDS EN LA TABLA TEMPORAL

--CREAR EL AP AQUI MISMO 

SET @idMenor += 1

  • SP_GenerarRecibosAP: Genera los recibos de los Aps de manera diaria revisa si ese dia se deberia genrar un AP.(inFecha)
        CREATE PROC [dbo].[SP_GenerarRecibosAP] @inFecha DATE
        
        --GUARDA LOS IDS DE LOS APS QUE SE GENERARON ESTE DIA
INSERT INTO @idAPs(idAP)
SELECT id 
FROM [dbo].[ArregloPago]
WHERE DAY(insertedAt) = @dia AND PlazoResta != 0
--GUARDA LOS IDS MENOR Y MAYOR PARA ITERAR
SELECT @idMenor = MIN(id), @idMayor = MAX(id) FROM @idAPs
BEGIN TRAN
WHILE @idMenor<=@idMayor
BEGIN
SET @interesDelMes = (SELECT AP.Saldo 
FROM [dbo].[ArregloPago] AP
INNER JOIN @idAPs idAPs ON AP.id = idAPs.idAP
WHERE idAPs.id = @idMenor)*@TasaInteresAnual/12
SET @amortizacion = (SELECT AP.Cuota
FROM [dbo].[ArregloPago] AP
INNER JOIN @idAPs idAPs ON AP.id = idAPs.idAP
WHERE idAPs.id = @idMenor)-@interesDelMes
--SE ACTUALIZA EL AP
UPDATE [dbo].[ArregloPago]
SET Saldo = Saldo - @amortizacion,
PlazoResta = PlazoResta-1
FROM [dbo].[ArregloPago] AP 
INNER JOIN [dbo].[ValoresConfig] Config ON Config.nombre = 'TasaInteres AP' 
INNER JOIN @idAPs idAPs ON AP.id = idAPs.idAP
WHERE idAPs.id = @idMenor

SET @plazoRestante = (SELECT AP.PlazoResta 
FROM [dbo].[ArregloPago] AP
INNER JOIN @idAPs idAPs ON AP.id = idAPs.idAP
WHERE idAPs.id = @idMenor)
SET @nuevoSaldo = (SELECT AP.saldo
FROM [dbo].[ArregloPago] AP
INNER JOIN @idAPs idAPs ON AP.id = idAPs.idAP
WHERE idAPs.id = @idMenor )
--SE GENERA EL MOVIMIENTO
INSERT INTO [dbo].[MovimientosAP](idAP,idTipoMov,Monto,interesDelMes,plazoResta,nuevoSaldo,fecha,insertedAt)
SELECT AP.id,1,@amortizacion,@interesDelMes,@plazoRestante,@nuevoSaldo,@inFecha,@inFecha
FROM [dbo].[ArregloPago] AP
INNER JOIN @idAPs idAPs ON AP.id = idAPs.idAP
WHERE idAPs.id = @idMenor
SET @idMov = IDENT_CURRENT('[dbo].[MovimientosAP]')

--SE GENERA EL RECIBOS DEL AP
INSERT INTO [dbo].[Recibos](id_CC,monto,estado,id_Propiedad,fecha,fechaVence)
SELECT CC.id,AP.Cuota,0,AP.IdPropiedad,@inFecha,DATEADD(D,CC.diasParaVencer,@inFecha)
FROM @idAPs idAPs 
INNER JOIN[dbo].[ConceptoDeCobro] CC ON CC.id = 12
INNER JOIN [ArregloPago] AP ON AP.id = idAPs.idAP
WHERE idAPs.id = @idMenor
SET @idRecibo = IDENT_CURRENT('[dbo].[Recibos]')

INSERT INTO [dbo].[RecibosAP](id,descripcion,idMovAP)
SELECT @idRecibo
,'Interes mensual:'+CAST(@interesDelMes AS VARCHAR(30))
+', amortizacion:'+CAST(@amortizacion AS VARCHAR(30))
+', plazo resta:'+CAST(@plazoRestante AS VARCHAR(30))
,@idMov
SET @idMenor += 1
END
COMMIT

Se trabajo por 4.5 horas

Referencias:


No hay comentarios:

Publicar un comentario