public void AddTransacao(Produto current, TypeTransacaoProduto type, decimal estoque)
        {
            if (type == TypeTransacaoProduto.Saida)
            {
                var traAjuste = new TransacoesProduto(DateTime.Now, TypeTransacaoProduto.Saida,
                                                      0M, 0M, estoque, "Retirada para ajuste de estoque",
                                                      current.IdProduto, 1);
                current.TransacoesProduto.Add(traAjuste);
            }
            else if (type == TypeTransacaoProduto.Entrada)
            {
                var traAdicao = new TransacoesProduto(DateTime.Now, TypeTransacaoProduto.Entrada,
                                                      0M, 0M, estoque,
                                                      "Adição para ajustar o estoque",
                                                      current.IdProduto, 1);

                current.TransacoesProduto.Add(traAdicao);
            }

            else if (type == TypeTransacaoProduto.Alteracao)
            {
                if (current.QuantidadeProduto > 0)
                {
                    var traAjuste = new TransacoesProduto(DateTime.Now, TypeTransacaoProduto.Alteracao,
                                                          0M, 0M, estoque,
                                                          "Zeragem de estoque",
                                                          current.IdProduto, 1);
                    current.TransacoesProduto.Add(traAjuste);
                }
            }
        }
示例#2
0
        public void AddMovimentacaoProduto(Venda venda, bool updateTra = false)
        {
            using (var ctx = new BalcaoContext())
            {
                if (updateTra)
                {
                    ctx.TransacoesProdutoDao.Delete(t => t.IdVenda == venda.IdVenda);
                }

                if (venda != null && venda.TipoMovimento == TypeVenda.Venda)
                {
                    foreach (var item in venda.ItensVendas)
                    {
                        var p = ctx.ProdutoDao.Find(item.IdProduto);
                        if (p.TipoItemProduto == TypeItemProduto.Produto)
                        {
                            var obs            = "Venda " + venda.IdVenda; //task 94
                            var localEstoque   = venda.LocalEstoque;
                            int idLocalEstoque = localEstoque != null ? idLocalEstoque = localEstoque.IdLocalEstoque : 1;

                            var traSai = new TransacoesProduto(venda.DataVenda.Date, TypeTransacaoProduto.Saida,
                                                               item.ValorUnitario, item.TotalItem, item.Quantidade, obs, item.IdProduto, idLocalEstoque, venda.IdVenda);

                            ctx.TransacoesProdutoDao.Save(traSai);
                            SetQuantidadeAtualProduto(item.IdProduto);
                        }
                    }
                }
            }
        }
示例#3
0
        public void AddMovimentacaoProduto(Movimento notaFiscal, int idCapa, bool updateTra = false)
        {
            using (var ctx = new BalcaoContext())
            {
                var notaFiscalCurrent = ctx.MovimentoDao.Find(idCapa);
                if (updateTra)
                {
                    ctx.TransacoesProdutoDao.Delete(t => t.IdMovimento == notaFiscalCurrent.IdMovimento);
                }

                if (notaFiscal != null)
                {
                    var tipoMov = notaFiscal.TipoMovimento == null?ctx.TipoMovimentoDao.Find(notaFiscal.IdTipoMovimento) : null;

                    if (tipoMov != null)
                    {
                        notaFiscal.TipoMovimento = tipoMov;
                    }

                    if (notaFiscal.TipoMovimento != null)
                    {
                        //verifica se o tipo de movimento escolhido movimenta estoque..
                        if (notaFiscal.TipoMovimento.MovimentarEstoque)
                        {
                            foreach (var item in notaFiscalCurrent.ItensMovimento)
                            {
                                //busca o item do banco
                                var current_Item = ctx.ItemMovimentoDao.Find(item.IdItem);
                                var tipo         = notaFiscal.DirecaoMovimento == TypeDirecao.Saída ? TypeTransacaoProduto.Saida : TypeTransacaoProduto.Entrada;

                                var obs    = "NF " + notaFiscal.NumeroMovimento + " " + tipo.ToString(); //task 94
                                var traEnt = new TransacoesProduto(notaFiscal.DataEntrada, tipo,
                                                                   item.ValorUnitario, item.TotalItem, item.Quantidade,
                                                                   obs, item.IdProduto, notaFiscal.IdLocalEstoque.Value, null, idCapa);

                                ctx.TransacoesProdutoDao.Save(traEnt);
                                SetQuantidadeAtualProduto(item.IdProduto);
                            }
                        }
                    }
                }
            }
        }
示例#4
0
        /// <summary>
        /// Anula a saída originada da venda que está sendo cancelada
        /// </summary>
        /// <param name="venda"></param>
        /// <param name="updateTra"></param>
        public void EstornarMovimentacaoProduto(Venda venda, bool updateTra = false)
        {
            using (var ctx = new BalcaoContext())
            {
                if (updateTra)
                {
                    ctx.TransacoesProdutoDao.Delete(t => t.IdVenda == venda.IdVenda);
                }

                if (venda != null && venda.TipoMovimento == TypeVenda.Venda)
                {
                    foreach (var item in venda.ItensVendas.Where(p => p.Produto.TipoItemProduto == TypeItemProduto.Produto))
                    {
                        var obsEstorno = "Cancelamento de venda: " + venda.IdVenda;
                        var traSai     = new TransacoesProduto(venda.DataVenda.Date, TypeTransacaoProduto.Estorno,
                                                               item.ValorUnitario, item.TotalItem, item.Quantidade, obsEstorno, item.IdProduto, 1, venda.IdVenda);

                        ctx.TransacoesProdutoDao.Save(traSai);
                        SetQuantidadeAtualProduto(item.IdProduto);
                    }
                }
            }
        }
示例#5
0
        public decimal GetNewQtdAjustarEstoqueProduto(Produto produto, decimal newQtde)
        {
            try
            {
                var estoqueAtual = GetQuantidadeAtualProdutoCache(produto);

                produto.QuantidadeProduto = GetQuantidadeAtualProdutoCache(produto);
                //se houver estoque, retire tudo e mantenha somente a qtd informada na tela para ajuste do estoque
                if (estoqueAtual > 0)
                {
                    var obsAjuste = "Retirada para ajuste de estoque";
                    var traAjuste = new TransacoesProduto(DateTime.Now, TypeTransacaoProduto.Saida,
                                                          0M, 0M, estoqueAtual, obsAjuste,
                                                          produto.IdProduto, 1);

                    //12/01/17, gercy: se o estoque estiver acima de 0, nao preciso fazer uma transacao de entrada.
                    obsAjuste = "Adição para ajustar o estoque";
                    var traAdicao = new TransacoesProduto(DateTime.Now, TypeTransacaoProduto.Entrada,
                                                          0M, 0M, newQtde, obsAjuste,
                                                          produto.IdProduto, 1);

                    produto.TransacoesProduto.Add(traAdicao);

                    //aqui sim eu retiro o estoque atual
                    produto.TransacoesProduto.Add(traAjuste);

                    estoqueAtual = GetQuantidadeAtualProdutoCache(produto);
                    return(estoqueAtual);
                }
                //se estoque estiquer negativo, 'zerar' a qtd e adicionar a transacao de entrada para compor a quantidade informada
                else if (estoqueAtual < 0)
                {
                    //zerar primeiro
                    var obsAjuste = "Adição zerar o estoque";
                    var traAjuste = new TransacoesProduto(DateTime.Now, TypeTransacaoProduto.Entrada,
                                                          0M, 0M, estoqueAtual * -1, obsAjuste,
                                                          produto.IdProduto, 1);
                    //somente dps que estiver zerado eu lanco a transacao com a nova quantidade
                    obsAjuste = "Adição para ajustar o estoque";
                    var traAdicao = new TransacoesProduto(DateTime.Now, TypeTransacaoProduto.Entrada,
                                                          0M, 0M, newQtde, obsAjuste,
                                                          produto.IdProduto, 1);

                    produto.TransacoesProduto.Add(traAjuste);
                    produto.TransacoesProduto.Add(traAdicao);
                    estoqueAtual = GetQuantidadeAtualProdutoCache(produto);
                    return(estoqueAtual);
                }
                //Se o estoque já estiver como 0, adicione uma nova tra para compor o saldo do prd
                else if (estoqueAtual == 0)
                {
                    var obsAjuste = "Adição para ajuste de estoque";
                    var traAjuste = new TransacoesProduto(DateTime.Now, TypeTransacaoProduto.Entrada,
                                                          0M, 0M, newQtde, obsAjuste,
                                                          produto.IdProduto, 1);
                    produto.TransacoesProduto.Add(traAjuste);
                    estoqueAtual = GetQuantidadeAtualProdutoCache(produto);
                    return(estoqueAtual);
                }
                else
                {
                    return(0M);
                }
            }
            catch (Exception)
            {
                return(0M);
            }
        }
示例#6
0
        public Boolean RecalculaEstoqueProduto(Produto p)
        {
            var ctx       = new BalcaoContext();
            var idProduto = p.IdProduto;
            List <TransacoesProduto> traList = new List <TransacoesProduto>();
            var entradasitem = ctx.ItemMovimentoDao.FindAll().Where(itmEnt => itmEnt.IdProduto == idProduto);
            var saidasItem   = ctx.ItemVendaDao.FindAll().Where(itmSai => itmSai.IdProduto == idProduto);

            //limpar as transacoes antigas, recalcular tudo de novo
            ctx.TransacoesProdutoDao.Delete(tra => tra.IdProduto == idProduto);

            var mergeEntradas = (from items in entradasitem /*Entradas*/
                                                            //where items.IdProduto == idProduto
                                 group items by items.Movimento.DataEmissao.Date into c
                                 select new
            {
                c.Key.Date,
                VlrUnitario = c.Sum(itm => itm.ValorUnitario),
                VlrTotal = c.Sum(itm => itm.TotalItem),
                Quantidade = c.Sum(itm => itm.Quantidade),
            });


            var mergeSaidas = (from items in saidasItem /*Saidas*/
                                                        //where items.IdProduto == idProduto
                               group items by items.Venda.DataVenda.Date into c
                               select new
            {
                c.Key.Date,
                VlrUnitario = c.Sum(itm => itm.ValorUnitario),
                VlrTotal = c.Sum(itm => itm.TotalItem),
                Quantidade = c.Sum(itm => itm.Quantidade) * -1,
            });

            var saidas = ctx.ItensVendas.Where(it => it.IdProduto == idProduto);
            var i      = 0;

            foreach (var produtoEntrada in mergeEntradas)
            {
                var traEnt = new TransacoesProduto(produtoEntrada.Date, TypeTransacaoProduto.Entrada,
                                                   produtoEntrada.VlrUnitario, produtoEntrada.VlrTotal, produtoEntrada.Quantidade, String.Empty, idProduto, 1);
                traList.Add(traEnt);
            }

            foreach (var produtoSaida in mergeSaidas)
            {
                var traSai = new TransacoesProduto(produtoSaida.Date, TypeTransacaoProduto.Saida,
                                                   produtoSaida.VlrUnitario, produtoSaida.VlrTotal, produtoSaida.Quantidade, String.Empty, idProduto, 1);
                traList.Add(traSai);
            }

            foreach (var tra in traList)
            {
                ctx.TransacoesProdutoDao.Save(tra);
                i++;
            }

            if (i == traList.Count)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }