USE [Clinica]
GO
/****** Object:  View [Clinica].[VWAgendaClinica]    Script Date: 18-08-2025 21:38:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE view [Clinica].[VWAgendaClinica]
as

WITH SemanaActual AS (
    SELECT 
        -- Calculamos el primer día de la semana actual (Lunes) en formato DATE
        DATEADD(DAY, 
            CASE WHEN DATEPART(WEEKDAY, GETDATE()) = 1 THEN -6 ELSE 2 - DATEPART(WEEKDAY, GETDATE()) END,
            CAST(GETDATE() AS DATE)
        ) AS PrimerDiaSemanaActual
)
SELECT
    IdAgendaDisponibleCentroMedico,
	cm.Descripcion,
    adc.IdCentroMedico,
    DiaSemana,
    Hora,
    DuracionMinutos,
    adc.IndVigente,
    adc.IndEliminado,
    -- FechaDesde muestra solo la hora de la columna Hora en formato HH:MM:SS
    CONVERT(VARCHAR(8), CAST(Hora AS TIME), 108) AS FechaDesde,
    -- FechaHasta muestra la hora de la columna Hora más DuracionMinutos en formato HH:MM:SS
    CONVERT(VARCHAR(8), DATEADD(MINUTE, DuracionMinutos, CAST(Hora AS TIME)), 108) AS FechaHasta,
    -- Calculamos la FechaSemana en formato YYYYMMDD usando el día de la semana actual
    FORMAT(
        DATEADD(DAY, DiaSemana - 1, (SELECT PrimerDiaSemanaActual FROM SemanaActual)), 
        'yyyy-MM-dd'
    ) AS FechaSemana,
    -- Concatenación de FechaSemana y FechaDesde para FechaHoraDesde
    CONCAT(
        FORMAT(
            DATEADD(DAY, DiaSemana - 1, (SELECT PrimerDiaSemanaActual FROM SemanaActual)), 
            'yyyy-MM-dd'
        ),
        ' ',
        CONVERT(VARCHAR(8), CAST(Hora AS TIME), 108)
    ) AS FechaHoraDesde,
    -- Concatenación de FechaSemana y FechaHasta para FechaHoraHasta
    CONCAT(
        FORMAT(
            DATEADD(DAY, DiaSemana - 1, (SELECT PrimerDiaSemanaActual FROM SemanaActual)), 
            'yyyy-MM-dd'
        ),
        ' ',
        CONVERT(VARCHAR(8), DATEADD(MINUTE, cm.MinutosConsulta, CAST(Hora AS TIME)), 108)
    ) AS FechaHoraHasta
FROM
    [Clinica].[AgendaDisponibleCentroMedico] adc
	join Clinica.CentroMedico cm on cm.IdCentroMedico = adc.IdCentroMedico
WHERE
    adc.IndVigente = 1
    AND adc.IndEliminado = 0;
GO
