class SceReqMateriaisRN extends BaseBusiness {

	@SuppressWarnings("PMD.NPathComplexity")
	protected void verificarAlteracoesRequisicaoMateriais(SceReqMaterial sceReqMateriais, SceReqMaterial sceReqMateriaisOriginal)
			throws ApplicationBusinessException {
		Boolean isRequisicaoMaterialAutomatica = false;
		if (sceReqMateriaisOriginal.getAutomatica() != null && sceReqMateriaisOriginal.getAutomatica()) {
			isRequisicaoMaterialAutomatica = true;
		}

		Calendar dtReqMaterial = Calendar.getInstance();
		Calendar dtReqMaterialOriginal = Calendar.getInstance();
		if (sceReqMateriais.getDtGeracao() != null) {
			dtReqMaterial.setTime(sceReqMateriais.getDtGeracao());
			dtReqMaterial.set(Calendar.MILLISECOND, 0);
		}

		if (sceReqMateriaisOriginal.getDtGeracao() != null) {
			dtReqMaterialOriginal.setTime(sceReqMateriaisOriginal.getDtGeracao());
			dtReqMaterialOriginal.set(Calendar.MILLISECOND, 0);
		}

		if ((sceReqMateriais.getServidor()!=null && !sceReqMateriais.getServidor().equals(sceReqMateriaisOriginal.getServidor()))
				|| (!(dtReqMaterial.equals(dtReqMaterialOriginal)) && sceReqMateriais.getDtGeracao() != null && sceReqMateriaisOriginal
						.getDtGeracao() != null)) {
			throw new ApplicationBusinessException(SceReqMateriaisRNExceptionCode.SCE_00307);
		}

		if (sceReqMateriais.getIndSituacao().equals(DominioSituacaoRequisicaoMaterial.E)
				&& (!isRequisicaoMaterialAutomatica && (sceReqMateriaisOriginal.getIndSituacao()
						.equals(DominioSituacaoRequisicaoMaterial.G) || sceReqMateriaisOriginal.getIndSituacao().equals(
						DominioSituacaoRequisicaoMaterial.A)))) {
			throw new ApplicationBusinessException(SceReqMateriaisRNExceptionCode.SCE_00308);
		}

		if (sceReqMateriais.getIndSituacao().equals(DominioSituacaoRequisicaoMaterial.A)
				&& sceReqMateriaisOriginal.getIndSituacao().equals(DominioSituacaoRequisicaoMaterial.E)) {
			throw new ApplicationBusinessException(SceReqMateriaisRNExceptionCode.SCE_00316);
		}

		if (!sceReqMateriaisOriginal.getIndSituacao().equals(DominioSituacaoRequisicaoMaterial.E) && sceReqMateriais.getEstorno()) {
			throw new ApplicationBusinessException(SceReqMateriaisRNExceptionCode.SCE_00309);
		}

		if ((sceReqMateriais.getServidorConfirmado() != null && !sceReqMateriais.getServidorConfirmado().equals(
				sceReqMateriaisOriginal.getServidorConfirmado()))
				|| (sceReqMateriais.getDtConfirmacao() != null && !DateUtil.isDatasIguais(
						DateUtil.truncaData(sceReqMateriais.getDtConfirmacao()),
						DateUtil.truncaData(sceReqMateriaisOriginal.getDtConfirmacao())))) {

			if (!sceReqMateriais.getIndSituacao().equals(DominioSituacaoRequisicaoMaterial.C)) {
				throw new ApplicationBusinessException(SceReqMateriaisRNExceptionCode.SCE_00311);
			}
		}

		if ((sceReqMateriais.getServidorCancelado() != null && !sceReqMateriais.getServidorCancelado().equals(
				sceReqMateriaisOriginal.getServidorCancelado()))
				|| (sceReqMateriais.getDtCancelamento() != null && !DateUtil.isDatasIguais(
						DateUtil.truncaData(sceReqMateriais.getDtCancelamento()),
						DateUtil.truncaData(sceReqMateriaisOriginal.getDtCancelamento())))) {
			if (!sceReqMateriais.getIndSituacao().equals(DominioSituacaoRequisicaoMaterial.A)) {
				throw new ApplicationBusinessException(SceReqMateriaisRNExceptionCode.SCE_00796);
			}
		}

		if ((sceReqMateriais.getServidorEfetivado() != null && !sceReqMateriais.getServidorEfetivado().equals(
				sceReqMateriaisOriginal.getServidorEfetivado()))
				|| (sceReqMateriais.getDtEfetivacao() != null && !DateUtil.isDatasIguais(
						DateUtil.truncaData(sceReqMateriais.getDtEfetivacao()),
						DateUtil.truncaData(sceReqMateriaisOriginal.getDtEfetivacao())))) {
			if (!sceReqMateriais.getIndSituacao().equals(DominioSituacaoRequisicaoMaterial.E)) {
				throw new ApplicationBusinessException(SceReqMateriaisRNExceptionCode.SCE_00312);
			}
		}

		if ((sceReqMateriais.getServidorEstornado() != null && !sceReqMateriais.getServidorEstornado().equals(
				sceReqMateriaisOriginal.getServidorEstornado()))
				|| (sceReqMateriais.getDtEstorno() != null && !DateUtil.isDatasIguais(DateUtil.truncaData(sceReqMateriais.getDtEstorno()),
						DateUtil.truncaData(sceReqMateriaisOriginal.getDtEstorno())))) {
			if (!sceReqMateriais.getIndSituacao().equals(DominioSituacaoRequisicaoMaterial.E)) {
				throw new ApplicationBusinessException(SceReqMateriaisRNExceptionCode.SCE_00313);
			}
			if (!sceReqMateriais.getEstorno()) {
				throw new ApplicationBusinessException(SceReqMateriaisRNExceptionCode.SCE_00314);
			}
		}

		if ((sceReqMateriais.getIndSituacao().equals(DominioSituacaoRequisicaoMaterial.G) || sceReqMateriais.getIndSituacao().equals(
				DominioSituacaoRequisicaoMaterial.A))
				&& sceReqMateriaisOriginal.getIndSituacao().equals(DominioSituacaoRequisicaoMaterial.C)) {
			sceReqMateriais.setServidorConfirmado(null);
			sceReqMateriais.setDtConfirmacao(null);
		}

		if (!sceReqMateriaisOriginal.getIndSituacao().equals(DominioSituacaoRequisicaoMaterial.G)
				|| !sceReqMateriais.getIndSituacao().equals(DominioSituacaoRequisicaoMaterial.G)) {
			if (sceReqMateriais.getAlmoxarifado()!=null && !sceReqMateriais.getAlmoxarifado().equals(sceReqMateriaisOriginal.getAlmoxarifado())
					|| (sceReqMateriais.getGrupoMaterial() != null && !sceReqMateriais.getGrupoMaterial().equals(
							sceReqMateriaisOriginal.getGrupoMaterial()))
					|| (sceReqMateriais.getCentroCusto()!=null && !sceReqMateriais.getCentroCusto().equals(sceReqMateriaisOriginal.getCentroCusto()))
					|| (sceReqMateriais.getCentroCustoAplica()!=null&&!sceReqMateriais.getCentroCustoAplica().equals(sceReqMateriaisOriginal.getCentroCustoAplica()))
					|| (sceReqMateriais.getTipoMovimento()!=null && !sceReqMateriais.getTipoMovimento().equals(sceReqMateriaisOriginal.getTipoMovimento()))) {

				if (!habilitarEdicao(sceReqMateriais, getServidorLogadoFacade().obterServidorLogado())) {
					throw new ApplicationBusinessException(SceReqMateriaisRNExceptionCode.SCE_00315);
				}

			}
		}

	}

}