sábado, 18 de julio de 2020

18/07/2020 || Inicio 3ra parte BD

Se crearon las tablas necesarias para empezar la 3ra parte:

  • 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:
                            CREATE PROC [dbo].[SP_pagarRecibos] @inIdRecibos varchar(MAX)
                                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