protected void grdProduto_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "addObs")
            {
                try
                {
                    var    prodImpressao = ProdutoImpressaoDAO.Instance.GetElementByPrimaryKey(Glass.Conversoes.StrParaUint(e.CommandArgument.ToString()));
                    uint   idProdPedEsp  = ProdutosPedidoEspelhoDAO.Instance.GetIdProdPedByEtiqueta(prodImpressao.NumEtiqueta);
                    string obsAntiga     = ((HiddenField)grdProduto.Rows[grdProduto.EditIndex].FindControl("hdfObs")).Value;
                    string obsNova       = ((TextBox)grdProduto.Rows[grdProduto.EditIndex].FindControl("txtObs")).Text;

                    if (obsNova != null)
                    {
                        ProdutosPedidoEspelhoDAO.Instance.AtualizaObs(null, idProdPedEsp, obsNova);

                        // Salva no log esta alteração, mesmo que o campo obs não exista nesta tabela

                        // Põe a antiga observação em um objeto
                        prodImpressao.Obs = obsAntiga;

                        // Cria um objeto com a nova observação
                        ProdutoImpressao prodImpressaoNovo = MetodosExtensao.Clonar(prodImpressao);
                        prodImpressaoNovo.Obs = obsNova;

                        LogAlteracaoDAO.Instance.LogProdutoImpressao(prodImpressao, prodImpressaoNovo);
                    }
                }
                catch (Exception ex)
                {
                    Glass.MensagemAlerta.ErrorMsg("Falha ao adicionar observação", ex, Page);
                }
                finally
                {
                    grdProduto.EditIndex = -1;
                    grdProduto.DataBind();
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Realiza a leitura da expedição
        /// </summary>
        public void EfetuaLeitura(int idFunc, int idLiberarPedido, string numEtiqueta, int?idPedidoExp)
        {
            //Verifica se a etiqueta foi informada
            if (string.IsNullOrEmpty(numEtiqueta))
            {
                throw new Exception("Informe a etiqueta.");
            }

            //Verifica se a liberação pode ser expedida.
            Glass.Data.DAL.LiberarPedidoDAO.Instance.ValidaLiberacaoParaExpedicaoBalcao((uint)idLiberarPedido);

            #region Multiplas Leituras com "P"

            if (numEtiqueta.ToUpper().Substring(0, 1).Equals("P"))
            {
                ProdutoPedidoProducaoDAO.Instance.ValidaEtiquetaProducao(null, ref numEtiqueta);

                var etiquetas = ProdutoPedidoProducaoDAO.Instance.GetEtiquetasByPedido(null, numEtiqueta.Substring(1).StrParaUint());

                #region Salva na tabela de controle

                var idLeitura = LeituraEtiquetaPedidoPlanoCorteDAO.Instance.Insert(new LeituraEtiquetaPedidoPlanoCorte()
                {
                    NumEtiquetaLida = numEtiqueta
                });

                foreach (var e in etiquetas)
                {
                    EtiquetaLidaPedidoPlanoCorteDAO.Instance.Insert(new EtiquetaLidaPedidoPlanoCorte()
                    {
                        IdLeituraEtiquetaPedPlanoCorte = idLeitura,
                        NumEtiquetaReal = e
                    });
                }

                #endregion

                var erroEtq = new List <string>();

                foreach (string e in etiquetas)
                {
                    try
                    {
                        this.EfetuaLeitura(idFunc, idLiberarPedido, e, idPedidoExp);
                    }
                    catch
                    {
                        erroEtq.Add(e);
                    }
                }

                if (erroEtq.Count > 0)
                {
                    var erros = string.Join(",", erroEtq.ToArray());

                    ErroDAO.Instance.InserirFromException("Leitura com P", new Exception("Etiqueta: " + numEtiqueta + " Leituras: " + erros));
                    throw new Exception("Algumas leituras não foram efetuadas. Etiquetas: " + erros);
                }

                return;
            }

            #endregion

            if (numEtiqueta.Contains('='))
            {
                var posicao = numEtiqueta.Split('-')[1].Split('/')[0].Split('.')[0].StrParaInt();

                var intervaloEtiquetas = numEtiqueta.Split('/')[1].Split('=');
                var inicioIntervalo    = intervaloEtiquetas[0].StrParaInt();
                var fimIntervalo       = intervaloEtiquetas[1].StrParaInt();

                var produtosImpressao = ProdutoImpressaoDAO.Instance.GetByIdPedido(null, posicao, numEtiqueta.Split('-')[0].StrParaInt()).OrderBy(f => f.ItemEtiqueta);
                var etiquetas         = new List <string>();

                if (inicioIntervalo > fimIntervalo)
                {
                    throw new Exception("item inicial maior que item final.");
                }

                if (fimIntervalo > produtosImpressao.Count())
                {
                    throw new Exception("Número de itens deve maior que a quantidade existente na posição.");
                }

                foreach (var item in produtosImpressao)
                {
                    if (item.ItemEtiqueta >= inicioIntervalo && item.ItemEtiqueta <= fimIntervalo)
                    {
                        etiquetas.Add(item.IdPedido.ToString() + "-" + posicao + "." + item.ItemEtiqueta + "/" + item.QtdeProd);
                    }
                }

                #region Salva na tabela de controle

                var idLeitura = LeituraEtiquetaPedidoPlanoCorteDAO.Instance.Insert(null, new LeituraEtiquetaPedidoPlanoCorte()
                {
                    NumEtiquetaLida = numEtiqueta
                });

                foreach (var e in etiquetas)
                {
                    EtiquetaLidaPedidoPlanoCorteDAO.Instance.Insert(new EtiquetaLidaPedidoPlanoCorte()
                    {
                        IdLeituraEtiquetaPedPlanoCorte = idLeitura,
                        NumEtiquetaReal = e
                    });
                }

                #endregion

                string msg = string.Empty;

                foreach (string e in etiquetas)
                {
                    try
                    {
                        this.EfetuaLeitura(idFunc, idLiberarPedido, e, idPedidoExp);
                    }
                    catch (Exception ex)
                    {
                        msg = Glass.MensagemAlerta.FormatErrorMsg($"Falha ao marcar peça {e}.", ex);
                        break;
                    }
                }

                if (!string.IsNullOrEmpty(msg))
                {
                    throw new Exception(msg);
                }

                return;
            }

            using (var transaction = new GDATransaction())
            {
                try
                {
                    transaction.BeginTransaction();

                    //Verifica se a etiqueta é de chapa ou produção
                    if (numEtiqueta.ToUpper().Substring(0, 1).Equals("N") || numEtiqueta.ToUpper().Substring(0, 1).Equals("R"))
                    {
                        ValidaLeituraChapaRetalho(transaction, idLiberarPedido, numEtiqueta, idPedidoExp);
                    }
                    else if (!numEtiqueta.ToUpper().Substring(0, 1).Equals("V"))
                    {
                        ValidaLeituraPeca(transaction, idLiberarPedido, numEtiqueta, idPedidoExp);
                    }

                    #region Volume

                    if (numEtiqueta.ToUpper().Substring(0, 1).Equals("V"))
                    {
                        ServiceLocator.Current.GetInstance <Glass.PCP.Negocios.IVolumeFluxo>()
                        .MarcaExpedicaoVolume(transaction, numEtiqueta, idLiberarPedido, true);
                    }

                    #endregion

                    #region NF-e / Retalho

                    else if (numEtiqueta.ToUpper().Substring(0, 1).Equals("N") || numEtiqueta.ToUpper().Substring(0, 1).Equals("R"))
                    {
                        var tipoEtiqueta = ProdutoImpressaoDAO.Instance.ObtemTipoEtiqueta(numEtiqueta);

                        var idRetalho = tipoEtiqueta == ProdutoImpressaoDAO.TipoEtiqueta.Retalho ?
                                        Glass.Conversoes.StrParaUint(numEtiqueta.Substring(1, numEtiqueta.IndexOf('-') - 1)) : 0;

                        var idProd = tipoEtiqueta == ProdutoImpressaoDAO.TipoEtiqueta.NotaFiscal ?
                                     ProdutosNfDAO.Instance.GetIdProdByEtiqueta(transaction, numEtiqueta) : RetalhoProducaoDAO.Instance.ObtemIdProd(transaction, idRetalho);

                        if (idPedidoExp.GetValueOrDefault() == 0)
                        {
                            throw new Exception("Pedido não encontrado.");
                        }

                        var prodsPed = Glass.Data.DAL.ProdutosPedidoDAO.Instance.GetByPedidoProdutoForExpCarregamento(transaction, (uint)idPedidoExp.Value, idProd, true);

                        // Agrupa os produtos do pedido pelo produto, buscando apenas aqueles que faltam dar saída
                        var prodPed = MetodosExtensao.Agrupar(prodsPed.Where(f => f.Qtde > f.QtdSaida), new string[] { "IdProd" }, new string[] { "Qtde" }).FirstOrDefault(f => f.IdProd == idProd);
                        var idProdImpressaoChapa = Glass.Data.DAL.ProdutoImpressaoDAO.Instance.ObtemIdProdImpressao(transaction, numEtiqueta, tipoEtiqueta);

                        if (prodPed == null)
                        {
                            if (prodsPed.Count() == 0)
                            {
                                throw new Exception("Todas as peças deste pedido já foram expedidas.");
                            }
                            else
                            {
                                throw new Exception("Produto não encontrado no pedido ou já expedido.");
                            }
                        }

                        //Faz o vinculo da chapa no corte para que a mesma não possa ser usada novamente
                        Glass.Data.DAL.ChapaCortePecaDAO.Instance.Inserir(transaction, numEtiqueta, null, false, true);

                        //Realiza a exp da chapa
                        Glass.Data.DAL.ExpedicaoChapaDAO.Instance.Insert(transaction, new Glass.Data.Model.ExpedicaoChapa()
                        {
                            IdProdImpressaoChapa = (int)idProdImpressaoChapa,
                            IdPedido             = idPedidoExp.Value,
                            SaidaBalcao          = true,
                            DataLeitura          = DateTime.Now,
                            IdFuncLeitura        = idFunc
                        });

                        //Marca no produto_impressão o id do pedido de expedição
                        Glass.Data.DAL.ProdutoImpressaoDAO.Instance.AtualizaPedidoExpedicao(transaction, (uint)idPedidoExp, idProdImpressaoChapa);

                        //Atualiza a chapa_trocada_devolvida marcando a mesma como utilizada
                        ChapaTrocadaDevolvidaDAO.Instance.MarcarChapaComoUtilizada(transaction, numEtiqueta);

                        MovEstoqueDAO.Instance.BaixaEstoqueChapa(transaction, (int)prodPed.IdProdPed, idProdImpressaoChapa);

                        PedidoDAO.Instance.MarcaPedidoEntregue(transaction, prodPed.IdPedido);
                        var idLoja = PedidoDAO.Instance.ObtemIdLoja(transaction, prodPed.IdPedido);

                        if (PedidoDAO.Instance.GetTipoPedido(transaction, prodPed.IdPedido) != Glass.Data.Model.Pedido.TipoPedidoEnum.Producao)
                        {
                            ProdutoLojaDAO.Instance.RecalcularReserva(transaction, (int)idLoja, new List <int> {
                                (int)prodPed.IdProd
                            });
                            ProdutoLojaDAO.Instance.RecalcularLiberacao(transaction, (int)idLoja, new List <int> {
                                (int)prodPed.IdProd
                            });
                        }

                        //Marca o retalho como vendido
                        if (tipoEtiqueta == ProdutoImpressaoDAO.TipoEtiqueta.Retalho)
                        {
                            RetalhoProducaoDAO.Instance.AlteraSituacao(transaction, idRetalho, Glass.Data.Model.SituacaoRetalhoProducao.Vendido);
                        }

                        //Atualiza a situação do pedido
                        PedidoDAO.Instance.AtualizaSituacaoProducao(transaction, (uint)idPedidoExp, null, DateTime.Now);
                    }

                    #endregion

                    #region Pedido

                    else
                    {
                        var idSetorCarregamento = SetorDAO.Instance.ObtemIdSetorExpCarregamento(transaction);
                        var idsSetorEntregue    = SetorDAO.Instance.ObterIdsSetorTipoEntregue(transaction);
                        var idSetorLeitura      = idsSetorEntregue?.Any(f => f > 0) ?? false?idsSetorEntregue.FirstOrDefault(f => f > 0) : 0;

                        if (idSetorLeitura == 0)
                        {
                            throw new Exception("Não foi possível recuperar o setor de expedição de carregamento.");
                        }

                        ProdutoPedidoProducaoDAO.Instance.AtualizaSituacao(transaction, (uint)idFunc, null, numEtiqueta, (uint)idSetorLeitura, false, false, null, null, null, (uint?)idPedidoExp, 0,
                                                                           null, null, false, null, false, 0);
                    }

                    #endregion

                    transaction.Commit();
                    transaction.Close();
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    transaction.Close();

                    ErroDAO.Instance.InserirFromException("Expedição Balcão - Lib: " + idLiberarPedido + " - Etq:" + numEtiqueta, ex);
                    throw ex;
                }
            }
        }
Beispiel #3
0
 public override object Clone()
 {
     return(MetodosExtensao.Clonar(this, retalho));
 }
Beispiel #4
0
        public static string RetornaValorDetalhado(REL_GraficoAtendimentoFiltrosFixos tipoFiltro, string valor)
        {
            string[] codDetalhe = valor.Split(',');
            string   retorno    = string.Empty;

            switch (tipoFiltro)
            {
            case REL_GraficoAtendimentoFiltrosFixos.DetalheDeficiencia:
                List <string> valoresDetalhados = new List <string>();
                foreach (var item in codDetalhe)
                {
                    CFG_DeficienciaDetalhe def = new CFG_DeficienciaDetalhe {
                        dfd_id = Convert.ToInt32(item)
                    };
                    def = CFG_DeficienciaDetalheBO.GetDetalhamento(def);
                    valoresDetalhados.Add(def.dfd_nome);
                }
                codDetalhe = valoresDetalhados.ToArray();

                if (codDetalhe.Length == 1)
                {
                    retorno = codDetalhe[0];
                }
                else if (codDetalhe.Length == 2)
                {
                    retorno = codDetalhe[0] + " e " + codDetalhe[1];
                }
                else if (codDetalhe.Length >= 3)
                {
                    string[] concat = new string[codDetalhe.Length - 1];
                    Array.Copy(codDetalhe, 0, concat, 0, codDetalhe.Length - 1);

                    retorno  = string.Join(", ", concat);
                    retorno += " e " + codDetalhe[codDetalhe.Length - 1];
                }
                else
                {
                    retorno = string.Empty;
                }
                break;

            case REL_GraficoAtendimentoFiltrosFixos.FaixaIdade:
                retorno = codDetalhe.Length >= 2 ? codDetalhe[0] + " até " + codDetalhe[1] + " anos" : string.Empty;
                break;

            case REL_GraficoAtendimentoFiltrosFixos.Sexo:
                retorno = codDetalhe.Length >= 1 ? MetodosExtensao.SexoFormatado(Convert.ToInt32(codDetalhe[0])) : string.Empty;
                break;

            case REL_GraficoAtendimentoFiltrosFixos.PeriodoPreenchimento:
                retorno = codDetalhe.Length >= 2 ? codDetalhe[0] + " até " + codDetalhe[1] : string.Empty;
                break;

            case REL_GraficoAtendimentoFiltrosFixos.RacaCor:
                retorno = codDetalhe.Length >= 1 ? MetodosExtensao.RacaCorFormatado(Convert.ToInt32(codDetalhe[0])) : string.Empty;
                break;

            default:
                break;
            }
            return(retorno);
        }
Beispiel #5
0
 /// <summary>
 /// Duplica o objeto atual.
 /// </summary>
 /// <returns></returns>
 public virtual object Clone()
 {
     return(MetodosExtensao.Clonar(this, _id));
 }
Beispiel #6
0
 public override object Clone()
 {
     return(MetodosExtensao.Clonar(this, produtoPedidoEspelho, NumeroPeca));
 }