SpConsulta recibos pendientes para cliente



Duración aproximada 4 horas


Se comenzó a programar el sp para consultar recibos pendientes de cliente para esto se necesita obtener los servicios que pagará la finca de los recibos que tenga la fecha de pago en nulo para esto el más complicado es el valor del agua, ya que se debe obtener la suma de lo consumido en el mes a cobrar y luego multiplicarla por el valor del metro cuadrado de la municipalidad correspondiente, para lo que se hizo un sp el cual obtiene la fecha de emision del recibo y con esta fecha crea otra del mes anterior para filtrar los consumos de agua que se encuentren entre estas fechas pivote de la finca a evaluar con esa sumatoria se multiplica por el valor del metro cuadrado de la municipalidad correspondiente y se retorna dicho valor.

Además durante este tiempo se tuvo que consultar varias páginas para recordar la sintaxis de los if y cómo declarar tablas temporales además de los set para las variables y los sp que tienen valores de retorno:

https://docs.microsoft.com/es-es/sql/t-sql/language-elements/language-elements-transact-sql?view=sql-server-2017

https://www.youtube.com/watch?v=bldBshxuhMk


codigo del sp

ALTER PROCEDURE [dbo].[spGetCalculoAguaPorRecibo]
@idRecibo int,
@calculoAgua  float = 0 output

as
begin

DECLARE @fechaInicio datetime
DECLARE @fechaFinal datetime
DECLARE @numFinca int
DECLARE @valorAgua float = 0
DECLARE @cantidadConsumida float = 0

--obtiene las fechas pivote para hacer la suma del consumo mq3 del mes anterior a la emision del recibo
Set @fechaFinal = (Select Recibo.FechaEmision from Recibo join Propiedad on Recibo.NumeroFinca = Propiedad.NumeroFinca where Recibo.ID = @idRecibo)
Set @fechaInicio = @fechaFinal - 32

--obtiene numero de finca
Set @numFinca = (Select Recibo.NumeroFinca from Recibo where Recibo.ID = @idRecibo)

--dif de fecha lectura con fecha final tiene que ser mayor a 0 para que esté dentro del mes de pago y tiene que ser menor a 0 conforme la fecha inicio para que sea mayor al mes donde comenzó a correr el pago
if((Select SUM(ConsumoAgua.QM3) from ConsumoAgua where ConsumoAgua.NumeroFinca = @numFinca and DATEDIFF(DAY,ConsumoAgua.FechaLectura,@fechaFinal) > 0 and DATEDIFF(DAY,ConsumoAgua.FechaLectura,@fechaInicio) < 0) is not null)
SET @cantidadConsumida = (Select SUM(ConsumoAgua.QM3) from ConsumoAgua where ConsumoAgua.NumeroFinca = @numFinca and DATEDIFF(DAY,ConsumoAgua.FechaLectura,@fechaFinal) > 0 and DATEDIFF(DAY,ConsumoAgua.FechaLectura,@fechaInicio) < 0)
--Select * from ConsumoAgua where ConsumoAgua.NumeroFinca = @numFinca and DATEDIFF(DAY,ConsumoAgua.FechaLectura,@fechaFinal) > 0 and DATEDIFF(DAY,ConsumoAgua.FechaLectura,@fechaInicio) < 0

--obtiene el valor del agua por medio del numero de finca
SET @valorAgua = (Select Municipalidad.ValorMAgua from Municipalidad join Propiedad on Municipalidad.ID = Propiedad.IdMunicipalidad where Propiedad.NumeroFinca = 16035)

SET @calculoAgua = @valorAgua * @cantidadConsumida

end



Luego de crear este sp se prosiguió a crearel sp que devuelve los valores de los demás servicios

codigo del sp:

ALTER PROCEDURE [dbo].[spGetPagos]
@numeroFinca int,
@valorAlumbrado float = 0 output,
@valorBasura float = 0 output,
@valorParques float = 0 output,
@valorPatente float = 0 output
as
begin

DECLARE @tablaValores table (id int, nombre varchar(20) ,valor int)
--obtiene los valores de los pagos que hace la finca
Insert into @tablaValores Select TipoServicio.ID, TipoServicio.Nombre, TipoServicio.Valor from Propiedad
join ServicioXPropiedad on Propiedad.NumeroFinca = ServicioXPropiedad.NumeroFinca
join TipoServicio on ServicioXPropiedad.IDServicio = TipoServicio.ID where Propiedad.NumeroFinca = @numeroFinca

--si los valores no son nulos significa que la finca paga dichos recibos por lo que les settea el valor, de lo contrario quedan en 0 para que no afecte a la suma
if((Select valor from @tablaValores where id = 2 ) is not null)
Set @valorAlumbrado = (Select valor from @tablaValores where id = 2)

if((Select valor from @tablaValores where id = 3 ) is not null)
Set @valorBasura = (Select valor from @tablaValores where id = 3)

if((Select valor from @tablaValores where id = 4 ) is not null)
Set @valorParques = (Select valor from @tablaValores where id = 4)

if((Select valor from @tablaValores where id = 5 ) is not null)
Set @valorPatente = (Select valor from @tablaValores where id = 5)

end


con esto ya se tiene lo principal para crear el sp consulta recibos para cliente

Comentarios

Entradas populares de este blog

XML y carga de datos (actualización)

Última reunión

actualización