class SceItemRmsRN extends BaseBusiness {

	public void validarAlteracaoSceItemRms(SceItemRms sceItemRms, boolean isInserir) throws ApplicationBusinessException{

		final SceItemRms sceItemRmsOriginal = this.getSceItemRmsDAO().obterPorChavePrimaria(sceItemRms.getId());

		// Testa se o evento é: INSERIR
		if(isInserir){

			// SCE_00417 Verifica se a situação do material de requisão é G (Gerada) e se possuí estoque
			if(DominioSituacaoRequisicaoMaterial.G.equals(sceItemRms.getSceReqMateriais().getIndSituacao()) 
					&& !sceItemRms.getIndTemEstoque()){
				throw new ApplicationBusinessException(SceItemRmsRNExceptionCode.SCE_00417);
			}

		} else{ // Caso o evento é uma ATUALIZAÇÃO

			// SCE_00324 Verifica se a situação do material de requisão é C (Confirmada)
			if(DominioSituacaoRequisicaoMaterial.C.equals(sceItemRms.getSceReqMateriais().getIndSituacao())){

				final Integer qtdeRequisitadaOriginal = sceItemRmsOriginal.getQtdeRequisitada();
				final Integer ealSeqOriginal = sceItemRmsOriginal.getId().getEalSeq();
				final ScoUnidadeMedida scoUnidadeMedidaOriginal = sceItemRmsOriginal.getScoUnidadeMedida();

				// Verifica modificações na quantidade requisitada, estoque almoxarifado e unidade de medida
				if((!qtdeRequisitadaOriginal.equals(sceItemRms.getQtdeRequisitada()) && !this.habilitarEdicao(sceItemRms)) ||
						!ealSeqOriginal.equals(sceItemRms.getId().getEalSeq()) ||
						!scoUnidadeMedidaOriginal.equals(sceItemRms.getScoUnidadeMedida())){

					throw new ApplicationBusinessException(SceItemRmsRNExceptionCode.SCE_00324);
				}
			}

			// SCE_00383 Verifica se a situação do material de requisão é G (Gerada)
			if(DominioSituacaoRequisicaoMaterial.G.equals(sceItemRms.getSceReqMateriais().getIndSituacao())){

				final Integer qtdeEntregueOriginal = sceItemRmsOriginal.getQtdeEntregue();

				// Verifica modificações na quantidade requisitada, estoque almoxarifado e unidade de medida
				if(qtdeEntregueOriginal != null && !qtdeEntregueOriginal.equals(sceItemRms.getQtdeEntregue())){

					throw new ApplicationBusinessException(SceItemRmsRNExceptionCode.SCE_00383);
				}
			}	

		}

		/**
		 * As validações a seguir são compartilhadas por ambos tipos de eventos (Inserir/Alterar)
		 */

		//  SCE_00325 Verifica se a situação do material de requisão é A (Cancelada)
		if(DominioSituacaoRequisicaoMaterial.A.equals(sceItemRms.getSceReqMateriais().getIndSituacao())){
			throw new ApplicationBusinessException(SceItemRmsRNExceptionCode.SCE_00325);
		}

		// SCE_00379 Verifica se NÃO possuí estoque e se a quantidade entregue é nula
		if(!sceItemRms.getIndTemEstoque() && sceItemRms.getQtdeEntregue() == null){
			throw new ApplicationBusinessException(SceItemRmsRNExceptionCode.SCE_00379);
		}

	}

}