class ManterSumarioRN extends BaseBusiness {

	public void geraDadosSumarioPrescricao(
			Integer seqAtendimento, DominioTipoEmissaoSumario tipoEmissao)
			throws ApplicationBusinessException {
		MpmPrescricaoMedicaDAO mpmPrescricaoMedicaDAO = this.getMpmPrescricaoMedicaDAO();
		MpmDataItemSumarioDAO mpmDataItemSumarioDAO = getMpmDataItemSumarioDAO();
		IPacienteFacade pacienteFacade = getPacienteFacade();
		ManterAltaSumarioRN manterAltaSumarioRN = getManterAltaSumarioRN();
		
		Date dataInicio = null;
		Date dataFim = null;
		Date dataMenorReferencia = null;
		
		Integer apaSeq = pacienteFacade.gerarAtendimentoPaciente(seqAtendimento);

		dataInicio = manterAltaSumarioRN.obterDataInternacao2(seqAtendimento);
		dataFim = getAghuFacade().obterDataFimAtendimento(seqAtendimento);
		if(dataFim == null){
			dataFim = new Date();
		}
		
		if(DominioTipoEmissaoSumario.I.equals(tipoEmissao)){
			MpmPrescricaoMedica pm = mpmPrescricaoMedicaDAO.obterPrescricaoMedicaComMaiorDataReferenciaParaGerarSumario(seqAtendimento, dataInicio, dataFim);
			if(pm == null || pm.getDtReferencia() == null){
				List<MpmPrescricaoMedica> listaPrescricaoMedica = mpmPrescricaoMedicaDAO.listarPrescricoesMedicasDoAtendimentoComDataReferenciaMenorQueDataInicioPrescricao(seqAtendimento, dataInicio);
				
				if(listaPrescricaoMedica != null && !listaPrescricaoMedica.isEmpty() && listaPrescricaoMedica.get(0).getDtReferencia() != null){
					dataMenorReferencia = listaPrescricaoMedica.get(0).getDtReferencia();
				}else{
					dataMenorReferencia = dataInicio;
				}
			} else {
				if(pm.getDtReferencia() != null){
					dataMenorReferencia = DateUtil.adicionaDias(pm.getDtReferencia(), 1);
				} else{
					dataMenorReferencia = dataInicio;
				}
			}
			
			if(dataMenorReferencia.before(dataFim)) {
				List<MpmPrescricaoMedica> listaPrescricaoMed = mpmPrescricaoMedicaDAO.listarPrescricoesMedicasComDataImpSumario(seqAtendimento, dataMenorReferencia, dataFim);
				if(listaPrescricaoMed != null){
					for (MpmPrescricaoMedica prescricaoMedica : listaPrescricaoMed) {
						this.geraItens(prescricaoMedica.getId().getAtdSeq(), apaSeq, prescricaoMedica.getDthrInicio(), prescricaoMedica.getDthrFim(), prescricaoMedica.getDtReferencia());
					}
				}
			}
		}else if(DominioTipoEmissaoSumario.P.equals(tipoEmissao) || DominioTipoEmissaoSumario.C.equals(tipoEmissao)){
			boolean temDados = false;
			
			List<MpmPrescricaoMedica> listaPrescricaoMed = mpmPrescricaoMedicaDAO.listarPrescricoesMedicasParaGerarSumarioDePrescricao(seqAtendimento, dataInicio, dataFim);
			if(listaPrescricaoMed != null){
				for (MpmPrescricaoMedica prescricaoMedica : listaPrescricaoMed) {
					temDados = true;
					if(DateValidator.validaDataMenor(DateUtils.truncate(prescricaoMedica.getDtReferencia(), Calendar.DAY_OF_MONTH), DateUtils.truncate(dataInicio, Calendar.DAY_OF_MONTH))){
						dataInicio = prescricaoMedica.getDtReferencia();
					}
					if(prescricaoMedica.getDataImpSumario() == null){
						this.geraItens(prescricaoMedica.getId().getAtdSeq(), apaSeq, prescricaoMedica.getDthrInicio(), prescricaoMedica.getDthrFim(), prescricaoMedica.getDtReferencia());
					}
				}
					
			}
			if(!temDados){
				Date dataInicioPesq = mpmDataItemSumarioDAO.obterMenorDataDoDataItemSumario(seqAtendimento, apaSeq);
				if(dataInicioPesq != null){
					temDados = true;
					if(DateValidator.validaDataMenor(DateUtils.truncate(dataInicioPesq, Calendar.DAY_OF_MONTH), DateUtils.truncate(dataInicio, Calendar.DAY_OF_MONTH))){
						dataInicio = dataInicioPesq;
					}
				}
			}
		}
		if(seqAtendimento != null && apaSeq != null){			
			AghAtendimentoPacientes atendimentoPacientes = this.getAghuFacade().obterAtendimentoPaciente(seqAtendimento, apaSeq);
			if(atendimentoPacientes != null){				
				atendimentoPacientes.setDtRotinaMedica(new Date());
			}
		}
		mpmPrescricaoMedicaDAO.flush();
	}

}