USE [TryNFeOnline]
GO

ALTER TABLE [dbo].[NFProduto] ADD 
[percReducaoBcPisCofins] [decimal] (18,4) NULL
GO
ALTER TABLE [dbo].[produtoimposto] ADD 
[percReducaoBaseCalculoPisCofins] [decimal] (18,4) NULL
GO
ALTER FUNCTION [dbo].[AgendamentoHorarios] 
(
	@dataConsulta date
)
RETURNS 
@Resultado TABLE 
(
		idAgendamentoHorario int,
		dscAgendamento varchar(300),
		diaSemana int,
		idAgendamento int,
		horaInicio time(7),
		horaFim time(7),
		idnDesativado bit,
		valorReserva decimal(18,4),
		motivoBloqueio varchar(300),
		idAgendamentoHorarioBloqueio int,
		bloqueioValidoAte date,
		idAgendamentoReserva int,
		idParceiro int,
		razaosocial varchar(60)

)
AS
BEGIN

	

	declare @diaSemana int = (select datepart(WEEKDAY, @dataConsulta)) -1;

	declare @ResultadoTemp TABLE
	(
		idAgendamentoHorarioInf int,
		dscAgendamento varchar(300),
		diaSemana int,
		idAgendamento int,
		horaInicio time(7),
		horaFim time(7),
		idnDesativado bit,
		valorReserva decimal(18,4),
		motivoBloqueio varchar(300),
		idAgendamentoHorarioBloqueio int,
		bloqueioValidoAte date,
		idAgendamentoReserva int,
		idParceiro int,
		razaosocial varchar(60)
	)
	--select @diaSemana
	INSERT into @ResultadoTemp
	select ah.id as idAgendamentoHorario, ag.descricao as dscAgendamento, ah.diaSemana, ah.idAgendamento,
	ah.horaInicio, ah.horaFim, ah.idnDesativado, 
	(case when coalesce(ah.valorReserva, 0) > 0 then ah.valorReserva else coalesce(ag.valorReserva, 0) end) as valorReserva,
	agb.motivoBloqueio, agb.id as idAgendamentoHorarioBloqueio, agb.validoAte,
	null, null, null
	from AgendamentoHorario ah
	inner join Agendamento ag on ag.id = ah.idAgendamento
	left join AgendamentoHorarioBloqueios agb on agb.idAgendamentoHorario = ah.id and agb.validoAte >= @dataConsulta
	where (ah.diaSemana = @diaSemana)
	and (coalesce(ah.idnDesativado, 0) = 0)
	and (coalesce(ag.idnBaixado, 0) = 0)

	update @ResultadoTemp set
	idAgendamentoReserva = (
	select arh.idAgendamentoReserva 
	from AgendamentoReservaHorarios arh 
	inner join AgendamentoReserva ar on ar.id = arh.idAgendamentoReserva
	where (arh.idAgendamentoHorario = idAgendamentoHorarioInf)
	and (coalesce(ar.idnCancelado, 0) = 0)
	and (((cast(ar.dataHora as date) = @dataConsulta) and (ar.reservadoAte  is null)) or ((ar.reservadoAte is not null) and ((cast(ar.dataHora as date) <= @dataConsulta) and (cast(ar.reservadoAte as date) >= @dataConsulta)))) 
	)

	INSERT into @Resultado
	select r.idAgendamentoHorarioInf as idAgendamentoHorario, r.dscAgendamento, r.diaSemana, r.idAgendamento,
	r.horaInicio, r.horaFim, r.idnDesativado, 
	r.valorReserva,
	r.motivoBloqueio, r.idAgendamentoHorarioBloqueio, r.bloqueioValidoAte,
	r.idAgendamentoReserva, pa.id as idParceiro, pa.razaosocial
	from @ResultadoTemp r
	left join AgendamentoReserva ar on ar.id = r.idAgendamentoReserva
	left join parceiro pa on pa.id = ar.idParceiro
	
RETURN 
END
GO
INSERT INTO VERSAO(VERSAO, VERSAOATUALIZACAO, DATAATUALIZACAO, REVISAO) VALUES(496, 754, GETDATE(),1);