Example #1
0
        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>());
                        }
        }
Example #2
0
        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);
        }