- SP_ConsultarCuota: El cual saca la cuota dependiendo del monto de los recibos y de los metes lo retorna.(inIdRecibos,inMeses)
CREATE PROC [dbo].[SP_ConsultarCuota] @inIdRecibos VARCHAR(MAX), @inMeses INT
DECLARE @idMenor INT, @idMayor INT,@sumaRecibos MONEY=0, @cuota MONEY, @tasaInteres FLOAT,@montoMoratorio MONEY,@fechaOperacion DATE,
@idPropiedad INT,@fechaVence DATE,@montoRecibo MONEY,@tasaMoratoria FLOAT
CREATE TABLE ##idRecibosPagarAP (id INT IDENTITY(1,1),idRecibo INT);
--GUARDA LOS IDS DE LOS RECIBOS QUE QUIERO PAGAR
INSERT INTO ##idRecibosPagarAP(idRecibo)
SELECT id
FROM OPENJSON(@inIdRecibos)
WITH(id INT)
--SET @sumaRecibos = 0
SELECT @idMenor = MIN([id]), @idMayor=MAX([id]) FROM ##idRecibosPagarAP --SACA ID MAYOR Y MENOR PARA ITERAR LA TABLA
BEGIN TRAN
WHILE @idMenor<=@idMayor--RECORRE LOS RECIBOS
BEGIN
SET @montoMoratorio = 0
SET @fechaOperacion = GETDATE()
SET @idPropiedad = (SELECT id_Propiedad FROM [Recibos] R
INNER JOIN ##idRecibosPagarAP idRP ON idRP.idRecibo = R.id
WHERE @idMenor = idRP.id)
SET @fechaVence = (SELECT fechaVence FROM [dbo].[Recibos] R
INNER JOIN ##idRecibosPagarAP idRP ON idRP.idRecibo = R.id
WHERE @idMenor = idRP.id)
SET @montoRecibo = (SELECT R.monto FROM [dbo].[Recibos] R
INNER JOIN ##idRecibosPagarAP idRP ON R.id = idRP.idRecibo
WHERE idRP.id = @idMenor)
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 ##idRecibosPagarAP idRP ON idRP.idRecibo = R.id
WHERE idRP.id = @idMenor)
--AQUI CAMBIA EL MONTO MORATORIO YA QUE SI SE DEBE CREAR RECIBO MORATORIO
SET @montoMoratorio = (@montoRecibo*@tasaMoratoria/365)*ABS(DATEDIFF(d,@fechaVence,@fechaOperacion))
--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,@fech aOperacion)
FROM [dbo].[ConceptoDeCobro] CC
WHERE CC.id = 11
--GUARDA ADEMAS LOS RECIBOS MORATORIOS A PAGAR
INSERT INTO ##idRecibosPagarAP(idRecibo)
SELECT IDENT_CURRENT('[dbo].[Recibos]')
END
SET @sumaRecibos += @montoMoratorio+@montoRecibo
SET @idMenor += 1
END
SET @tasaInteres = convert(float,(SELECT valor FROM [dbo].[ValoresConfig] WHERE nombre = 'TasaInteres AP'))
SET @cuota = @sumaRecibos* ((@tasaInteres*POWER((1+@tasaInteres),@inMeses))/(POWER((1+@tasaInteres),@inMeses)-1))
SELECT @cuota
- SP_CrearAP: Si el usuario desea pagar entonces llama a este SP el cual paga los recibos, genera un comprobante de pago para el ap, genera un AP y un movimiento de debito.(inMeses,inCuota)
CREATE PROC [dbo].[SP_CrearAP] @inMeses INT, @inCuota MONEY
DECLARE @montoAP MONEY, @idPropiedad INT, @idComprobante INT,@TasaInteresAnual FLOAT, @idAP INT
--SACA LA TASA ANUAL DE LA TABLA DE CONFIG
SET @TasaInteresAnual = convert(float,(SELECT valor FROM [dbo].[ValoresConfig] WHERE nombre = 'TasaInteres AP'))
--GUARDA EL ID DE LA PROPIEDAD
SET @idPropiedad = (SELECT DISTINCT id_Propiedad FROM [dbo].[Recibos] R
INNER JOIN ##idRecibosPagarAP idRP ON R.id = idRP.idRecibo)
--GUARDA EL MONTO TOTAL
SET @montoAP = (SELECT SUM(monto)
FROM [dbo].[Recibos] R
INNER JOIN ##idRecibosPagarAP idRP ON R.id = idRP.idRecibo)
BEGIN TRAN
--ACTUALIZA EL ESTADO A PAGADOS
UPDATE [dbo].[Recibos]
SET estado = 1
FROM [dbo].[Recibos] R
INNER JOIN ##idRecibosPagarAP idRP ON R.id = idRP.idRecibo
--CREA UN COMPROBANTE DE PAGO
INSERT INTO [dbo].[ComprobantePago](fecha,total,medioDePago)
SELECT GETDATE(),@montoAP,'AP# '
SET @idComprobante = IDENT_CURRENT('[dbo].[ComprobantePago]')
--INSERTA LOS RECIBOS EN RECIBOS PAGADOS
INSERT INTO [dbo].[ReciboPagado](id_Recibo,id_Comprobante)
SELECT idRP.idRecibo,IDENT_CURRENT('[dbo].[ComprobantePago]')
FROM ##idRecibosPagarAP idRP
DROP TABLE ##idRecibosPagarAP
--CREA UN AP
INSERT INTO [dbo].[ArregloPago](IdPropiedad,IdComprobante,MontoOriginal,Saldo,TasaInteresAnual,PlazoOriginal,PlazoResta,Cuota,insertedAt,updatedAt)
SELECT @idPropiedad,@idComprobante,@montoAP,@montoAP,@TasaInteresAnual,@inMeses,@inMeses,@inCuota,GETDATE(),GETDATE()
SET @idAP = IDENT_CURRENT('[dbo].[ArregloPago]')
--ACTUALIZA EL COMPROBANTE DE PAGO CON EL ID DEL AP
UPDATE [dbo].[ComprobantePago]
SET medioDePago += @idAP
--GENERA UN MOVIMIENTO DE DEBITO, EL UNICO
INSERT INTO [dbo].[MovimientosAP](idAP,idTipoMov,Monto,interesDelMes,plazoResta,nuevoSaldo,fecha,insertedAt)
SELECT @idAP
,1
,@montoAP
,@montoAP*@TasaInteresAnual/12
,@inMeses
,@montoAP
,GETDATE()
,GETDATE()
Referencias:
Se trabajo por 4horas
No hay comentarios:
Publicar un comentario