class ManterConvenioItemContratoON extends BaseBusiness {

	public void gravar(List<ScoConvItensContrato> _listaConvenios,
			List<ScoConvItensContratoId> _listaIdConveniosExcluidos,
			BigDecimal _valorTotal) throws BaseException {
		ScoConvItensContratoDAO scoConvItensContratoDAO = this.getScoConvItensContratoDAO();
		
		if ((_listaConvenios == null) || (_valorTotal == null)) {
			throw new BaseException(
					ManterConvenioItemContratoONExceptionCode.MENSAGEM_PARAM_OBRIG);
		}

		BigDecimal somatorio = BigDecimal.ZERO;

		for (ScoConvItensContrato convItem : _listaConvenios) {
			somatorio = somatorio.add(convItem.getValorRateio());
		}
		
		// RN01 - valor total dos itens de convênio não pode ser diferente do valor do item
		validarValorTotal(somatorio, _valorTotal);
		
		// Exclusão de Registros
		try {
			ScoConvItensContrato item;
			for (ScoConvItensContratoId itemId : _listaIdConveniosExcluidos) {
				item = scoConvItensContratoDAO.obterPorChavePrimaria(itemId);
				if (item != null){
					scoConvItensContratoDAO.remover(item);
				}
			}
			scoConvItensContratoDAO.flush();
			
		} catch (ConstraintViolationException ise) {
			String mensagem = "Valor inválido para o campo ";
			throw new ApplicationBusinessException(
					ManterConvenioItemContratoONExceptionCode.MENSAGEM_ERRO_HIBERNATE_VALIDATION,
					mensagem);
		}


		// Inclusão/Edição de Registros
		try {
			for (ScoConvItensContrato item : _listaConvenios) {
				
				if (item.getVersion() == null){
					// Inclusão de convênio
					scoConvItensContratoDAO.persistir(item);
				} else {
					// Atualização de convênio
					scoConvItensContratoDAO.atualizar(item);
				}
			}
			scoConvItensContratoDAO.flush();
		} catch (ConstraintViolationException ise) {
			String mensagem = "Valor inválido para o campo";
			throw new ApplicationBusinessException(
					ManterConvenioItemContratoONExceptionCode.MENSAGEM_ERRO_HIBERNATE_VALIDATION,
					mensagem);
		}	
	}

}