- ArregloPago: Se guardan los arreglos de pago que el usuario genera. (id, idPropiedad, idComprobante, MontoOriginal, Saldo, TasaInetersAnual, PlazoOriginal, PlazoResta, Cuota, insertedAt, updatedAt)
- MovimientosAP: Se guardan todos los movimientos que se hacen en la tabla de arreglos de pago.(id, idAP, idTipoMov, Monto, interesDelMes, plazoResta, nuevoSaldo, fecha, insertedAt)
- RecibosAP: heredan de recibos.(id, descripcion, idMovP)
- tipoMovAP: me dice el tipo de movimiento que se esta haciendo en el arreglo.(id,nombre)
Se crearon los siguientes SPs:
- SP_completarPagoRecibos: Si el usuario despues de ver el total de monto de los recibos decide pagar entonces se llama a este SP el cual simplemente cambia el estado de los recibos, crea un comprobante de pago y crea una relacion enre estas dos entidades:
CREATE PROC [dbo].[SP_completarPagoRecibos]
DECLARE @montoComprobante MONEY
BEGIN TRAN
--ACTUALIZA EL ESTADO A PAGADOS
UPDATE [dbo].[Recibos]
SET estado = 1
FROM [dbo].[Recibos] R
INNER JOIN ##idRecibosPagar idRP ON R.id = idRP.idRecibo
--GUARDA EL MONTO TOTAL
SET @montoComprobante = (SELECT SUM(monto)
FROM [dbo].[Recibos] R
INNER JOIN ##idRecibosPagar idRP ON R.id =idRP.idRecibo)
--CREA UN COMPROBANTE DE PAGO
INSERT INTO [dbo].[ComprobantePago](fecha,total,medioDePago)
SELECT GETDATE(),@montoComprobante,'Corriente'
--INSERTA LOS RECIBOS EN RECIBOS PAGADOS
INSERT INTO [dbo].[ReciboPagado](id_Recibo,id_Comprobante)
SELECT idRP.idRecibo,IDENT_CURRENT('[dbo].[ComprobantePago]')
FROM ##idRecibosPagar idRP
DROP TABLE ##idRecibosPagar
- SP_pagarRecibos: Recibe un json con los id de los recibos que el usuario decidio pagar, se generan recibo moratorios si es que hay y se retornan para mostrarlos al usuario:
DECLARE @idMenor INT, @idMayor INT, @montoRecibo MONEY,
@montoMoratorio MONEY,@fechaOperacion DATE, @montoTotal MONEY,
@fechaVence DATE, @tasaMoratoria FLOAT,@idPropiedad int
CREATE TABLE ##idRecibosPagar (id INT IDENTITY(1,1),idRecibo INT);
--GUARDA LOS IDS DE LOS RECIBOS QUE QUIERO PAGAR
INSERT INTO ##idRecibosPagar(idRecibo)
SELECT id
FROM OPENJSON(@inIdRecibos)
WITH(id INT)
SET @montoTotal = 0
SELECT @idMenor = MIN([id]), @idMayor=MAX([id]) FROM ##idRecibosPagar-- 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 ##idRecibosPagar idRP ON idRP.idRecibo = R.id
WHERE @idMenor = idRP.id)
SET @fechaVence = (SELECT fechaVence FROM [dbo].[Recibos] R
INNER JOIN ##idRecibosPagar idRP ON idRP.idRecibo = R.id
WHERE @idMenor = idRP.id)
SET @montoRecibo = (SELECT R.monto FROM [dbo].[Recibos] R
INNER JOIN ##idRecibosPagar 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 ##idRecibosPagar 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,@fechaOperacion)
FROM [dbo].[ConceptoDeCobro] CC
WHERE CC.id = 11
--GUARDA ADEMAS LOS RECIBOS MORATORIOS A PAGAR
INSERT INTO ##idRecibosPagar(idRecibo)
SELECT IDENT_CURRENT('[dbo].[Recibos]')
END
SET @montoTotal += @montoMoratorio+@montoRecibo
SET @idMenor += 1
END
COMMIT
SELECT [id_CC],[monto],[fecha],[fechaVence] FROM [dbo].[Recibos] R
INNER JOIN ##idRecibosPagar RP ON R.id = RP.idRecibo
- SP_cancelarPagoRecibos: Si el usuario decide no pagar los recibos entonces los recibos moratorios que se generaron se anulan:
CREATE PROC [dbo].[SP_cancelarPagoRecibos]
UPDATE [dbo].[Recibos]
SET estado = 2
FROM [dbo].[Recibos] R
INNER JOIN ##idRecibosPagar AS idRP ON R.id = idRP.idRecibo
WHERE R.id_CC = 11
Se trabajo por 4horas
Referencias:
No hay comentarios:
Publicar un comentario