class MbcAgendaProcedimentoRN extends BaseBusiness {

	public void verificarDisponibilideDeEquipamentos(
			Integer pciSeq, DominioSituacaoAgendas indSituacao, Integer agdSeq,
			Boolean indGeradoSistema, Date dthrPrevInicio, Date dthrPrevFim,
			Short unfSeq, Date dtAgenda, String procedureChamada) throws BaseException {
		if(!indGeradoSistema && dthrPrevInicio != null) {
			//Verifica se procedimento tem como responsável o agendamento
			if((DominioSituacaoAgendas.ES.equals(indSituacao) && "rn_agdp_ver_utlz_equ".equals(procedureChamada))
					|| "rn_agtp_ver_utlz_equ".equals(procedureChamada)) {
				AghParametros grupoVideo = this.getParametroFacade().buscarAghParametro(AghuParametrosEnum.P_GRUPO_VIDEOLAPAROSCOPIA);
				BigDecimal grupoVideoNum = grupoVideo.getVlrNumerico();
				
				AghParametros equipamentoVideo = this.getParametroFacade().buscarAghParametro(AghuParametrosEnum.P_EQUIPAMENTO_VIDEOLAP);
				BigDecimal equipamentoVideoNum = equipamentoVideo.getVlrNumerico();
				
				//Busca grupo do procedimento e verifica se é igual o do parâmetro
				List<Short> gruposSeq = getMbcProcedimentoPorGrupoDAO().listarGrupoSeqPorProcedimento(pciSeq);
				if(gruposSeq.contains(grupoVideoNum.shortValue())) {
					//Busca quantidade de equipamentos da unidade
					Short quantidade = getMbcEquipamentoCirgPorUnidDAO().obterQuantidadePorId(equipamentoVideoNum.shortValue(),
							unfSeq);
					if(quantidade != null) {
						//Verifica se a quantidade de cirurgias com o procedimento é
						//maior que o número de equipamentos disponíveis na unidade
						Integer qtdeCirgComDetProc = getMbcProcEspPorCirurgiasDAO().buscarQuantidadeCirurgiasComDetProc(
								agdSeq, unfSeq, dtAgenda, grupoVideoNum.shortValue());
						if(qtdeCirgComDetProc >= quantidade) {
							//Verifica colisão de horários das cirurgias com o procedimento
							List<MbcAgendas> listaHorariosColisao = getMbcAgendasDAO().buscarAgendasComProcEquipColisaoHorario(
									dtAgenda, unfSeq, agdSeq, grupoVideoNum.shortValue());
							Integer quantidadeConflitos = 0;
							
							for(MbcAgendas item : listaHorariosColisao) {
								if(!(item.getDthrPrevInicio().compareTo(dthrPrevInicio) < 0
										&& item.getDthrPrevFim().compareTo(dthrPrevInicio) < 0)) {
									if(!(item.getDthrPrevInicio().compareTo(dthrPrevFim) >= 0)) {
										quantidadeConflitos++;
									}
								}
							}
							if(quantidadeConflitos >= quantidade) {
								if("rn_agtp_ver_utlz_equ".equals(procedureChamada)) {
									throw new ApplicationBusinessException(MbcAgendaProcedimentoRNExceptionCode.MBC_00862);
								} else {
									throw new ApplicationBusinessException(MbcAgendaProcedimentoRNExceptionCode.MBC_00858);
								}
							}
							
						}
					}
				}
			}
		}
	}

}