sp consulta recibo finalizado

aproximadamente 5 horas



se termina el sp de conuslta por abonado y se consultó por el calculo de la moroidad el cual está correcto y se procede a guardar el sp, este sp obtiene los recibos aún no pagos asociados a un abonado por medio de su id y procede a iterar por dichos recibos calculando subtotal de servicios morosidad en caso de existir con la fecha del día en el que se hace la consulta y los ordena por fecha descendiente de manera que quede como esta en la especificación.

ALTER PROCEDURE [dbo].[spRecibosPendientesAbonado]
@idAbonado int = 0
as
Begin

--se declaran las tablas
--recibo consulta que va a contener los datos de los recibos aún no pagados por el abonado
--resultado en el que se le va a ingresar el calculo del monto de los recibos a pagar
DECLARE @reciboConsulta table (sec int identity(1,1), idRecibo int, numeroFinca int, idmuni int, idAbonado int, valor int, nombre varchar(30), fechaEmision dateTime, fechaLimite dateTime, fechaPagado dateTime, valorMAgua float, tasaInteres int)
DECLARE @resultado table (sec int identity(1,1), idRecibo int, montoAgua float, montoAlumbrado float, montoBasura float, montoParques float, montoPatente float, intMoratorio float, morosidad float, impuestoPropiedad float, subTotal float)


--obtiene los recibos que aún no han sido pagados = null por el abonado
Insert into @reciboConsulta Select Recibo.ID, Recibo.NumeroFinca, IdMunicipalidad, IdAbonado, Valor, Abonado.Nombre, FechaEmision, FechaLimite, FechaPagado, ValorMAgua, TasaInteres from Propiedad join Abonado on Propiedad.IdAbonado = Abonado.ID
join Recibo on Propiedad.NumeroFinca = Recibo.NumeroFinca
join Municipalidad on Propiedad.IdMunicipalidad = Municipalidad.ID where Propiedad.IdAbonado = @idAbonado and FechaPagado is null ORDER BY FechaEmision desc

--se declaran variables para obtener los datos
DECLARE @low int = 1
DECLARE @high int = 0

DECLARE @montoAgua float = 0
DECLARE @montoAlumbrado float = 0
DECLARE @montoBasura float = 0
DECLARE @montoParques float = 0
DECLARE @montoPatente float = 0
DECLARE @intMoratorio float = 0
DECLARE @subTotal float = 0
DECLARE @morosidad float = 0
DECLARE @numFinca int = 0
DECLARE @idRecibo int = 0

DECLARE @fechalimite dateTime
DECLARE @interesMoratorio float = 0
DECLARE @impuestoPropiedad float = 0

Print 'comienza loop------------------------------'

Select @high = max(T.sec) from @reciboConsulta T
--procede a iterar por los recibos para obtener el valor a pagar del agua,alumbrado,parques,patente,interesMoratiorio en caso de que el servicio no sea solicitado settea un 0 en la tabla
while @low <= @high
Begin

--obtiene numero de finca e id recibo a pagar
Set @numFinca = (Select numeroFinca from @reciboConsulta where sec = @low)

Set @idRecibo = (Select idRecibo from @reciboConsulta where sec = @low)

--obtiene el valor del pago correspondiente al recibo del agua por medio del id del recibo
Execute dbo.spGetCalculoAguaPorRecibo @idRecibo,@montoAgua out
--obtiene los servicios que paga la finca al mes, en caso de no haber solicitado algún servicio se settea un 0 al valor para no afectar el subtotal
Execute spGetPagos @numFinca,@montoAlumbrado out,@montoBasura out,@montoParques out,@montoPatente out

--suma subtotal

Set @subtotal = @montoAlumbrado + @montoBasura +  @montoParques + @montoPatente + @montoAgua

--obtiene el id de la municipalidad por medio del numero de finca para sacar el interes moratorio
Set @interesMoratorio = (Select Municipalidad.TasaInteres from Municipalidad where Municipalidad.ID = (Select Municipalidad.ID from Propiedad join Municipalidad on Propiedad.IdMunicipalidad = Municipalidad.ID where Propiedad.NumeroFinca = @numFinca))


Set @fechalimite = (Select FechaLimite from Recibo where Recibo.ID = @idRecibo)

Set @impuestoPropiedad = (Select Valor from Propiedad where Propiedad.NumeroFinca = @numFinca)
Set @impuestoPropiedad = @impuestoPropiedad * 0.5

--datediff = dias de atraso
if(DATEDIFF(DAY,@fechalimite,GETDATE()) > 0)
Set @morosidad = @subtotal * (@interesMoratorio/360) * DATEDIFF(DAY,@fechalimite,GETDATE())

Insert into @resultado values (@idRecibo,@montoAgua,@montoAlumbrado,@montoBasura,@montoParques,@montoPatente,@interesMoratorio,@morosidad,@impuestoPropiedad,@subTotal)


Set @low = @low + 1
end


Select idRecibo, subTotal, intMoratorio from @resultado

end

Comentarios

Entradas populares de este blog

XML y carga de datos (actualización)

Última reunión

actualización