public List <Inconsistencia> Exclua(int codigoDaInteracao) { using (var mapeador = new RepositorioDeInteracao()) using (var mapeadorDeNS = new RepositorioDeNumeroDeSerie()) using (var servicoDeProduto = new ServicoDeProduto()) using (var validador = new ValidadorDeInteracao()) { var interacao = Consulte(codigoDaInteracao); var produto = servicoDeProduto.Consulte(interacao.Produto.Codigo); var inconsistencias = validador.ValideExclusao(codigoDaInteracao, produto.Codigo); if (inconsistencias.Count > 0) { return(inconsistencias); } int quantidadeInterada = 0; int quantidadeInteradaAux = 0; switch (interacao.TipoDeInteracao) { case EnumTipoDeInteracao.ENTRADA: quantidadeInterada = interacao.QuantidadeInterada * (-1); break; case EnumTipoDeInteracao.SAIDA: quantidadeInterada = interacao.QuantidadeInterada; break; case EnumTipoDeInteracao.BASE_DE_TROCA: // Entrada quantidadeInterada = interacao.QuantidadeInterada * (-1); // Saída quantidadeInteradaAux = interacao.QuantidadeAuxiliar.GetValueOrDefault(); break; } var NSs = mapeadorDeNS.ConsulteTodosPorInteracao(codigoDaInteracao); NSs.ForEach(x => mapeadorDeNS.Exclua(x, codigoDaInteracao)); var novaQuantidade = produto.QuantidadeEmEstoque + quantidadeInterada + quantidadeInteradaAux; mapeador.Exclua(codigoDaInteracao); servicoDeProduto.AltereQuantidadeDeProduto(produto.Codigo, novaQuantidade); return(new List <Inconsistencia>()); } }
public List <Inconsistencia> Salve(Interacao interacao, EnumTipoDeForm tipoDoForm, DateTime horario) { var listaDeInconsistencias = new List <Inconsistencia>(); using (var validadorDeInteracao = new ValidadorDeInteracao()) { listaDeInconsistencias = validadorDeInteracao.Valide(interacao); } if (listaDeInconsistencias.Count == 0) { using (var mapeadorDeInteracao = new RepositorioDeInteracao()) using (var mapeadorDeNumeroDeSerie = new RepositorioDeNumeroDeSerie()) using (var servicoDeProduto = new ServicoDeProduto()) { interacao.Horario = horario; interacao.Codigo = mapeadorDeInteracao.ObtenhaProximoCodigoDisponivel(); mapeadorDeInteracao.Insira(interacao); foreach (var numeroDeSerie in interacao.NumerosDeSerie) { mapeadorDeNumeroDeSerie.Insira(numeroDeSerie, interacao.Codigo, interacao.Produto.Codigo); } int quantidadeInterada = 0; int quantidadeInteradaAux = 0; switch (interacao.TipoDeInteracao) { case EnumTipoDeInteracao.ENTRADA: quantidadeInterada = interacao.QuantidadeInterada; break; case EnumTipoDeInteracao.SAIDA: quantidadeInterada = interacao.QuantidadeInterada * (-1); break; case EnumTipoDeInteracao.BASE_DE_TROCA: // Entrada quantidadeInterada = interacao.QuantidadeInterada; // Saída quantidadeInteradaAux = interacao.QuantidadeAuxiliar.GetValueOrDefault() * (-1); break; } var produtoConsultado = servicoDeProduto.Consulte(interacao.Produto.Codigo); // Nesse caso atualizamos o produto com o novo valor if (interacao.AtualizarValorDoProdutoNoCatalogo) { var valorDoProduto = interacao.TipoDeInteracao == EnumTipoDeInteracao.ENTRADA ? produtoConsultado.PrecoDeCompra : produtoConsultado.PrecoDeVenda; // Só devemos criar uma nova vigência, caso o valor seja diferente, senão é desnecessário if (interacao.ValorInteracao != valorDoProduto) { if (interacao.TipoDeInteracao == EnumTipoDeInteracao.ENTRADA) { produtoConsultado.PrecoDeCompra = interacao.ValorInteracao; produtoConsultado.PrecoDeVenda = Math.Round(produtoConsultado.PrecoDeCompra * (1 + produtoConsultado.PorcentagemDeLucro), 2); } else { produtoConsultado.PrecoDeVenda = interacao.ValorInteracao; } servicoDeProduto.Salve(produtoConsultado, EnumTipoDeForm.Edicao); } } servicoDeProduto.AltereQuantidadeDeProduto(produtoConsultado.Codigo, produtoConsultado.QuantidadeEmEstoque + quantidadeInterada + quantidadeInteradaAux); } } return(listaDeInconsistencias); }