Exemplo n.º 1
0
        /// <summary>
        /// Inicia uma nova instância da classe <see cref="ListaDto"/>.
        /// </summary>
        /// <param name="movimentacaoEstoqueReal">A model de movimentação do estoque real.</param>
        internal ListaDto(MovEstoque movimentacaoEstoqueReal)
        {
            this.Id         = (int)movimentacaoEstoqueReal.IdMovEstoque;
            this.Referencia = movimentacaoEstoqueReal.Referencia;
            this.Produto    = new IdNomeDto
            {
                Id   = (int)movimentacaoEstoqueReal.IdProd,
                Nome = movimentacaoEstoqueReal.DescrProduto,
            };

            this.Fornecedor  = movimentacaoEstoqueReal.NomeFornec;
            this.Funcionario = movimentacaoEstoqueReal.NomeFunc;
            this.Datas       = new DataCadastroMovimentacaoDto
            {
                Cadastro     = movimentacaoEstoqueReal.DataCad,
                Movimentacao = movimentacaoEstoqueReal.DataMov,
            };

            this.DadosEstoque = new DadosEstoqueDto
            {
                TipoMovimentacao = movimentacaoEstoqueReal.DescrTipoMov,
                Unidade          = movimentacaoEstoqueReal.CodUnidade,
                Quantidade       = movimentacaoEstoqueReal.QtdeMov,
                SaldoQuantidade  = movimentacaoEstoqueReal.SaldoQtdeMov,
                Valor            = movimentacaoEstoqueReal.ValorMov,
                SaldoValor       = movimentacaoEstoqueReal.SaldoValorMov,
            };

            this.Observacao = movimentacaoEstoqueReal.Obs;
            this.Permissoes = new PermissoesDto
            {
                Excluir       = movimentacaoEstoqueReal.DeleteVisible,
                LogAlteracoes = LogAlteracaoDAO.Instance.TemRegistro(LogAlteracao.TabelaAlteracao.MovEstoque, movimentacaoEstoqueReal.IdMovEstoque, null),
            };

            this.CorLinha = this.ObterCorLinha();
        }
Exemplo n.º 2
0
 /// <summary>
 /// Cria o Log de Cancelamento para a movimentação de estoque.
 /// </summary>
 /// <param name="movEstoque"></param>
 /// <param name="motivo"></param>
 /// <param name="manual"></param>
 public void LogMovEstoque(GDASession sessao, MovEstoque movEstoque, string motivo, bool manual)
 {
     InserirLog(sessao, UserInfo.GetUserInfo.CodUser, LogCancelamento.TabelaCancelamento.MovEstoque,
                movEstoque.IdMovEstoque, movEstoque, motivo, manual);
 }
Exemplo n.º 3
0
        private string GetCriterio(uint idCliente, uint idLoja, string codInternoProd, string descrProd, string ncm, int?numeroNfe, string codOtimizacao, string dataIni,
                                   string dataFim, int tipoMov, int situacaoProd, uint idCfop, string idsGrupoProd, string idsSubgrupoProd, uint idCorVidro, uint idCorFerragem,
                                   uint idCorAluminio, bool fiscal, bool cliente)
        {
            StringBuilder criterio = new StringBuilder();

            if (cliente && idCliente > 0)
            {
                criterio.AppendFormat("Cliente: {0}    ", ClienteDAO.Instance.GetNome(idCliente));
            }

            if (idLoja > 0)
            {
                criterio.AppendFormat("Loja: {0}    ", LojaDAO.Instance.GetNome(idLoja));
            }

            if (!String.IsNullOrEmpty(codInternoProd) || !String.IsNullOrEmpty(descrProd))
            {
                if (!String.IsNullOrEmpty(descrProd))
                {
                    criterio.AppendFormat("Produto: {0}    ", descrProd);
                }
                else
                {
                    criterio.AppendFormat("Produto: {0}    ", ProdutoDAO.Instance.ObtemDescricao(codInternoProd));
                }
            }

            if (!string.IsNullOrEmpty(ncm))
            {
                criterio.AppendFormat("NCM: {0}    ", ncm);
            }

            if (numeroNfe > 0)
            {
                criterio.AppendFormat("Nota Fiscal: {0}    ", numeroNfe);
            }

            if (!String.IsNullOrEmpty(codOtimizacao))
            {
                criterio.AppendFormat("Cod. Otimização: {0}    ", codOtimizacao);
            }

            if (!String.IsNullOrEmpty(dataIni) && DateTime.Parse(dataIni).Year != 2000)
            {
                criterio.AppendFormat("Data início: {0}    ", dataIni);
            }

            if (!String.IsNullOrEmpty(dataFim))
            {
                criterio.AppendFormat("Data término: {0}    ", dataFim);
            }

            if (tipoMov > 0)
            {
                MovEstoque me = new MovEstoque();
                me.TipoMov = tipoMov;
                criterio.AppendFormat("Tipo: {0}    ", me.DescrTipoMov);
            }

            if (situacaoProd > 0)
            {
                criterio.AppendFormat("Situação: {0}    ", situacaoProd == 1 ? "Ativos" : "Inativos");
            }

            if ((fiscal || cliente) && idCfop > 0)
            {
                criterio.AppendFormat("CFOP: {0}    ", CfopDAO.Instance.ObtemCodInterno(idCfop));
            }

            if (!String.IsNullOrEmpty(idsGrupoProd))
            {
                var grupos = String.Empty;

                foreach (var id in idsGrupoProd.Split(','))
                {
                    grupos += GrupoProdDAO.Instance.GetDescricao(Conversoes.StrParaInt(id)) + ", ";
                }

                criterio.AppendFormat("Grupo(s): {0}    ", grupos.TrimEnd(' ', ','));
            }

            if (!string.IsNullOrEmpty(idsSubgrupoProd))
            {
                var subgrupos = string.Empty;
                foreach (var id in idsSubgrupoProd.Split(','))
                {
                    subgrupos += SubgrupoProdDAO.Instance.GetDescricao(Conversoes.StrParaInt(id)) + ", ";
                }

                criterio.AppendFormat("Subgrupo(s): {0}    ", subgrupos.TrimEnd(' ', ','));
            }

            if (idCorVidro > 0)
            {
                criterio.AppendFormat("Cor Vidro: {0}    ", CorVidroDAO.Instance.GetNome(idCorVidro));
            }

            if (idCorFerragem > 0)
            {
                criterio.AppendFormat("Cor Ferragem: {0}    ", CorFerragemDAO.Instance.GetNome(idCorFerragem));
            }

            if (idCorAluminio > 0)
            {
                criterio.AppendFormat("Cor Alumínio: {0}    ", CorAluminioDAO.Instance.GetNome(idCorAluminio));
            }

            return(criterio.ToString());
        }
Exemplo n.º 4
0
        private void Movimentar(GDASession sessao, MovimentacaoDto movimentacao)
        {
            movimentacao.Usuario = movimentacao.Usuario != null ? movimentacao.Usuario : UserInfo.GetUserInfo;

            if (!GrupoProdDAO.Instance.AlterarEstoque(sessao, (int)movimentacao.IdProduto) && !movimentacao.LancamentoManual)
            {
                return;
            }

            if (movimentacao.IdLoja == 0)
            {
                throw new InvalidOperationException("A loja da movimentação de estoque não foi informada.");
            }

            uint idMovEstoque = 0;

            try
            {
                ProdutoBaixaEstoque[] produtosBaixaEstoque;

                if (movimentacao.AlterarMateriaPrima)
                {
                    produtosBaixaEstoque = ProdutoBaixaEstoqueDAO.Instance.GetByProd(
                        sessao,
                        movimentacao.IdProduto,
                        movimentacao.BaixarProprioProdutoSeNaoTiverMateriaPrima);
                }
                else
                {
                    produtosBaixaEstoque = new ProdutoBaixaEstoque[]
                    {
                        new ProdutoBaixaEstoque {
                            IdProd      = (int)movimentacao.IdProduto,
                            IdProdBaixa = (int)movimentacao.IdProduto,
                            Qtde        = 1,
                        },
                    };
                }

                foreach (var item in produtosBaixaEstoque)
                {
                    var tipoSubgrupo = SubgrupoProdDAO.Instance.ObtemTipoSubgrupo(sessao, (int)movimentacao.IdProduto);

                    // Se não for lançamento manual, não for mov. de produção e o produto for chapa de vidro mov. a matéria-prima
                    if (!movimentacao.LancamentoManual &&
                        movimentacao.AlterarProdutoBase &&
                        (tipoSubgrupo == TipoSubgrupoProd.ChapasVidro || tipoSubgrupo == TipoSubgrupoProd.ChapasVidroLaminado))
                    {
                        var m2Chapa    = ProdutoDAO.Instance.ObtemM2Chapa(sessao, item.IdProdBaixa);
                        var idProdBase = ProdutoDAO.Instance.ObterProdutoBase(sessao, item.IdProdBaixa);

                        if (idProdBase == item.IdProdBaixa)
                        {
                            throw new InvalidOperationException("O produto base não pode ser o próprio produto.");
                        }

                        if (idProdBase.HasValue)
                        {
                            var movimentacaoDto = movimentacao;
                            movimentacaoDto.IdProduto  = (uint)idProdBase.Value;
                            movimentacaoDto.Quantidade = movimentacaoDto.Quantidade * m2Chapa;
                            movimentacaoDto.BaixarProprioProdutoSeNaoTiverMateriaPrima = true;

                            this.Movimentar(sessao, movimentacaoDto);
                        }
                    }

                    var     qtde = movimentacao.Quantidade * (decimal)item.Qtde;
                    decimal saldoQtdeAnterior = 0, saldoValorAnterior = 0, saldoQtdeValidar = 0;

                    MovEstoqueDAO.Instance.ValidarMovimentarEstoque(
                        sessao,
                        item.IdProdBaixa,
                        (int)movimentacao.IdLoja,
                        movimentacao.Data,
                        movimentacao.Tipo,
                        qtde,
                        ref saldoQtdeAnterior,
                        ref saldoValorAnterior,
                        ref saldoQtdeValidar,
                        false);

                    // Registra a alteração do estoque
                    MovEstoque movEstoque = new MovEstoque();
                    movEstoque.IdProd            = (uint)item.IdProdBaixa;
                    movEstoque.IdLoja            = movimentacao.IdLoja;
                    movEstoque.IdFunc            = movimentacao.Usuario?.CodUser ?? 0;
                    movEstoque.IdPedido          = movimentacao.IdPedido;
                    movEstoque.IdCompra          = movimentacao.IdCompra;
                    movEstoque.IdLiberarPedido   = movimentacao.IdLiberarPedido;
                    movEstoque.IdProdPedProducao = movimentacao.IdProdPedProducao;
                    movEstoque.IdTrocaDevolucao  = movimentacao.IdTrocaDevolucao;
                    movEstoque.IdNf                 = movimentacao.IdNf;
                    movEstoque.IdPedidoInterno      = movimentacao.IdPedidoInterno;
                    movEstoque.IdProdPed            = movimentacao.IdProdPed;
                    movEstoque.IdProdCompra         = movimentacao.IdProdCompra;
                    movEstoque.IdProdLiberarPedido  = movimentacao.IdProdLiberarPedido;
                    movEstoque.IdProdTrocaDev       = movimentacao.IdProdTrocaDev;
                    movEstoque.IdProdTrocado        = movimentacao.IdProdTrocado;
                    movEstoque.IdProdNf             = movimentacao.IdProdNf;
                    movEstoque.IdProdPedInterno     = movimentacao.IdProdPedInterno;
                    movEstoque.IdRetalhoProducao    = movimentacao.IdRetalhoProducao;
                    movEstoque.IdPerdaChapaVidro    = movimentacao.IdPerdaChapaVidro;
                    movEstoque.IdCarregamento       = movimentacao.IdCarregamento;
                    movEstoque.IdVolume             = movimentacao.IdVolume;
                    movEstoque.IdInventarioEstoque  = movimentacao.IdInventarioEstoque;
                    movEstoque.IdProdImpressaoChapa = movimentacao.IdProdImpressaoChapa;
                    movEstoque.LancManual           = movimentacao.LancamentoManual;
                    movEstoque.TipoMov              = (int)movimentacao.Tipo;
                    movEstoque.DataMov              = movimentacao.Data.AddSeconds(1);
                    movEstoque.QtdeMov              = qtde;
                    movEstoque.Obs          = movimentacao.Observacao;
                    movEstoque.SaldoQtdeMov = Math.Round(saldoQtdeAnterior + (movimentacao.Tipo == MovEstoque.TipoMovEnum.Entrada ? qtde : -qtde), Configuracoes.Geral.NumeroCasasDecimaisTotM);

                    if (movimentacao.Data.Date != DateTime.Now.Date)
                    {
                        movEstoque.DataCad = DateTime.Now;
                    }

                    if (movEstoque.SaldoQtdeMov < 0)
                    {
                        movEstoque.ValorMov      = 0;
                        movEstoque.SaldoValorMov = 0;
                    }
                    else if (movimentacao.Tipo == MovEstoque.TipoMovEnum.Entrada && movimentacao.Total > 0)
                    {
                        var saldoQuantidadeMovimentada = movEstoque.SaldoQtdeMov > 0 ? movEstoque.SaldoQtdeMov : 1;
                        var perc = movimentacao.Quantidade > movEstoque.SaldoQtdeMov ? movimentacao.Quantidade / saldoQuantidadeMovimentada : 1;

                        movEstoque.ValorMov      = Math.Abs(movimentacao.Total);
                        movEstoque.SaldoValorMov = saldoValorAnterior + (movEstoque.ValorMov * perc);
                    }
                    else
                    {
                        var valorUnit = saldoValorAnterior / (saldoQtdeAnterior > 0 ? saldoQtdeAnterior : 1);

                        movEstoque.ValorMov      = Math.Abs(valorUnit * qtde);
                        movEstoque.SaldoValorMov = saldoValorAnterior - (valorUnit * qtde);
                    }

                    idMovEstoque = MovEstoqueDAO.Instance.Insert(sessao, movEstoque);

                    MovEstoqueDAO.Instance.AtualizaSaldo(sessao, movEstoque.IdMovEstoque);
                    ProdutoLojaDAO.Instance.AtualizarProdutoLoja(sessao, (int)movEstoque.IdProd, (int)movEstoque.IdLoja);

                    if (ProdutoDAO.Instance.IsProdutoProducao(sessao, item.IdProdBaixa))
                    {
                        var metroQuadrado = ProdutoDAO.Instance.ObtemM2BoxPadrao(sessao, item.IdProdBaixa);

                        if (metroQuadrado > 0)
                        {
                            ProdutoLojaDAO.Instance.AtualizarTotalM2(sessao, item.IdProdBaixa, (int)movimentacao.IdLoja, metroQuadrado);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ErroDAO.Instance.InserirFromException($"MovEstoque - IdMovEstoque:{idMovEstoque}' IdProd:{movimentacao.IdProduto}' IdLoja:{movimentacao.IdLoja}", ex);
                throw;
            }
        }