public void NovaRequisicao(RequisicaoDeCompraVm requisicaoDeCompraVm) { try { _unitOfWork.BeginTransaction(); Usuario criador = _usuarios.BuscaPorLogin(requisicaoDeCompraVm.Criador); Fornecedor fornecedorPretendido = _fornecedores.BuscaPeloCodigo(requisicaoDeCompraVm.FornecedorPretendido); Produto material = _produtos.BuscaPeloCodigo(requisicaoDeCompraVm.Material); UnidadeDeMedida unidadeDeMedida = _unidadesDeMedida.BuscaPeloCodigoInterno(requisicaoDeCompraVm.UnidadeMedida).Single(); var requisicaoDeCompra = new RequisicaoDeCompra(criador, requisicaoDeCompraVm.Requisitante, fornecedorPretendido, Convert.ToDateTime(requisicaoDeCompraVm.DataDeRemessa), Convert.ToDateTime(requisicaoDeCompraVm.DataDeLiberacao), Convert.ToDateTime(requisicaoDeCompraVm.DataDeSolicitacao), requisicaoDeCompraVm.Centro, unidadeDeMedida, requisicaoDeCompraVm.Quantidade, material, requisicaoDeCompraVm.Descricao, requisicaoDeCompraVm.NumeroItem, requisicaoDeCompraVm.NumeroRequisicao, requisicaoDeCompraVm.CodigoGrupoDeCompra, requisicaoDeCompraVm.Mrp.ToUpper().Equals("B")); //var processoDeCotacaoDeMaterial = requisicaoDeCompra.GerarProcessoDeCotacaoDeMaterial(); _requisicoesDeCompra.Save(requisicaoDeCompra); //_processosDeCotacao.Save(processoDeCotacaoDeMaterial); _unitOfWork.Commit(); } catch (Exception) { _unitOfWork.RollBack(); throw; } }
public void AtualizarItens(int idProcessoCotacao, IList <int> idsDasRequisicoesDeCompra) { try { _unitOfWork.BeginTransaction(); var processoDeCotacao = (ProcessoDeCotacaoDeMaterial)_processosDeCotacao.BuscaPorId(idProcessoCotacao).Single(); //busca todos os itens que devem ser removidos: são os itens que estão no processo de cotação mas não estão na lista de ids recebidas por parâmetro. IList <ProcessoDeCotacaoItem> itensParaRemover = processoDeCotacao.Itens.Where(x => idsDasRequisicoesDeCompra.All(id => id != ((ProcessoDeCotacaoDeMaterialItem)x).RequisicaoDeCompra.Id)).ToList(); foreach (var processoDeCotacaoItem in itensParaRemover) { var itemMaterial = (ProcessoDeCotacaoDeMaterialItem)processoDeCotacaoItem; var requisicaoDeCompra = itemMaterial.RequisicaoDeCompra; processoDeCotacao.RemoverItem(processoDeCotacaoItem); //o método processoDeCotacao.RemoverItem(processoDeCotacaoItem) remove o vinculo entre a requisição de compra e o item. //após fazer isso tem que salvar a requisição de compra _requisicoesDeCompra.Save(requisicaoDeCompra); } //busca todos os itens que devem ser adicionados: são os itens que estão na lista de ids recebidas por parâmetro e não estão no processo de cotação int[] itensParaAdicionar = idsDasRequisicoesDeCompra.Where(r => processoDeCotacao.Itens.All(item => ((ProcessoDeCotacaoDeMaterialItem)item).RequisicaoDeCompra.Id != r)).ToArray(); //carrega lista de requisições que devem ser adicionadas IList <RequisicaoDeCompra> requisicoesDeComprasSelecionadas = _requisicoesDeCompra.FiltraPorIds(itensParaAdicionar); foreach (var requisicaoDeCompra in requisicoesDeComprasSelecionadas) { processoDeCotacao.AdicionarItem(requisicaoDeCompra); } _processosDeCotacao.Save(processoDeCotacao); foreach (var requisicaoDeCompra in requisicoesDeComprasSelecionadas) { //o método processoDeCotacao.AdicionarItem(requisicaoDeCompra) cria um vinculo com o item na Requisição de Compra //após fazer isso tem que salvar a requisição. Isto tem que ser feito após salvar o processo de cotação, pois é o //processo que salvar o item (gerando sua chave) que fica relacionada com a requisição de compra. _requisicoesDeCompra.Save(requisicaoDeCompra); } _unitOfWork.Commit(); } catch (Exception) { _unitOfWork.RollBack(); throw; } }
public void Bloquear(int idRequisicaoDeCompra) { try { _unitOfWork.BeginTransaction(); int quantidadeDeProcessosVinculados = _processosDeCotacaoDeMaterial.GeradosPelaRequisicaoDeCompra(idRequisicaoDeCompra).Count(); if (quantidadeDeProcessosVinculados > 0) { throw new RequisicaoDeCompraComProcessoDeCotacaoBloqueioException(); } RequisicaoDeCompra requisicaoDeCompra = _requisicoesDeCompra.BuscaPeloId(idRequisicaoDeCompra); requisicaoDeCompra.Bloquear(); _requisicoesDeCompra.Save(requisicaoDeCompra); _unitOfWork.Commit(); } catch (Exception) { _unitOfWork.RollBack(); throw; } }