lunes, 28 de mayo de 2018

Fecha Inicial : 28/05/2018
Fecha Final :  28/05/2018
Hora Inicio: 9:28 am
Hora Final: 10:58
Horas invertidas(Minutos): 388
Colaboradores: Wilson Lopez


Actividad :

Continuación con la creación de proceso masivo y la simulación , después de realizar un par de consultas a un compañero decidimos hacer algunos cambios con la idea de realizar correctamente la simulación de datos.
Creación de las facturas en la simulación , para este proceso se crea una tabla temporal con las propiedades de n municipalidad , se calcula el dia de cierre y se crea una factura luego se determinan que servicios se le ofrecen  a cada propiedad y se genera un cargo por cada propiedad , se calcula el ultimo consumo de agua y se aplica a la operación de propiedades.

Pausa: 
A eso de 12 a 5 salgo a una actividad de la U , retomo labores a eso de las 7:30

Código:

-----Generar recibos
CREATE PROCEDURE [dbo].[generar_recibos] @IDMuni int , @Fecha date
AS
BEGIN
    DECLARE @Propiedades table (ID int,NumeroFinca int)
    DECLARE @Servicios table (ID int, FKServicio int, Nombre VARCHAR(30),valor FLOAT)
    DECLARE @DAY int
    DECLARE @MONTH int
    DECLARE @YEAR int
   DECLARE @FechaLimite date
    DECLARE @MontoTotal Money = 0
    DECLARE @ConsumoDeAgua float
    DECLARE @ValorAgua float
    DECLARE @FacturaID int
    BEGIN TRY
        begin tran
        --Calcular la fecha limite de pago
        SELECT @DAY = m.DiaLimite FROM Municipalidad m WHERE m.ID = @IDMuni 
        SELECT @YEAR = DATEPART ( YEAR , @Fecha)
        SELECT @MONTH = DATEPART ( MONTH , @Fecha)
        SELECT @FechaLimite = dateadd(mm, (@YEAR - 1900) * 12 + @MONTH - 1 , @DAY - 1)
    INSERT INTO @Propiedades(ID,NumeroFinca) SELECT p.ID,p.NumeroFinca FROM Propiedad p WHERE p.FK_Municipalidad = @IDMuni
    DECLARE @PropiedadId int = 0
    WHILE(1 = 1)
        BEGIN
            SELECT @PropiedadId = MIN(ID)FROM @Propiedades WHERE ID > @PropiedadId

            IF @PropiedadId IS NULL BREAK
                BEGIN   
                 --Calcular monto propiedades
                    --Llenar una tabla con lo servicios por cada propiedad.
                    INSERT INTO @Servicios(ID,FKServicio, Nombre ,valor) SELECT dbo.TipoServicio.ID,dbo.ServicioXPropiedad.FK_Servicio, dbo.TipoServicio.Nombre, dbo.TipoServicio.Valor
                    FROM dbo.ServicioXPropiedad INNER JOIN dbo.TipoServicio ON dbo.ServicioXPropiedad.FK_Servicio = dbo.TipoServicio.ID WHERE FK_Propiedad = @PropiedadId

                    --CREAR EL NUEVO RECIBO
                    INSERT INTO Recibo (FK_Propiedad,FechaEmision,PagoTotalNoIntereses,InteresMoratorio,TotalPagado,FechaLimite,FechaPagado)
                    VALUES ( @PropiedadId,@Fecha,0,0,0,@FechaLimite,NULL)

                    --Asigno el ID de factura
                    SELECT @FacturaID = MAX(ID) FROM Recibo
                    SELECT @FacturaID

                    --Recorremos cada uno de los servicios de la propiedad
                    DECLARE @ServiciosId int = 0
                        WHILE(1 = 1)
                        BEGIN
                            SELECT @ServiciosId = MIN(ID)FROM @Servicios WHERE ID > @ServiciosId
                            IF @ServiciosId IS NULL BREAK
                                BEGIN
                                    DECLARE @Monto float = 0
                                    DECLARE @IDServicio int;
                                    SELECT @IDServicio = ID FROM @Servicios WHERE ID = @ServiciosId
                                    IF(@IDServicio=1)
                                    BEGIN
                                         --Sumar el valor del agua multiplicado por el precio de la ultima lectura
                                         SELECT @ValorAgua = ts.Valor FROM @Servicios ts WHERE ts.ID = @IDServicio
                                         SELECT TOP 1 @ConsumoDeAgua = Q FROM ConsumoAgua ca WHERE ca.FK_Propiedad = @PropiedadId ORDER BY ca.FechaLectura DESC
                                         SET @MontoTotal = @MontoTotal+CAST(@ConsumoDeAgua*@ValorAgua AS MONEY)
                                    END
                                    ELSE
                                    BEGIN
                                        --Sumar el valor de todos los servicios de una propiedad
                                        SELECT @Monto = s.valor FROM @Servicios s WHERE s.ID = @IDServicio;
                                        SET @MontoTotal = @MontoTotal+CAST(@Monto AS MONEY)
                                    END
                                END
                         END

                    
                    UPDATE Recibo SET PagoTotalNoIntereses = @MontoTotal WHERE ID = @FacturaID
                    --CREAR LINEAS
                    
                END
                DELETE FROM @Servicios
                SET @MontoTotal = 0
                
        END
    commit tran
            return 1
    END TRY
    BEGIN CATCH
            IF @@TRANCOUNT > 0 ROLLBACK;
            SELECT ERROR_MESSAGE() --MOSTRAR EL ERROR
            return 0 --failed
    END CATCH
END





No hay comentarios.:

Publicar un comentario