Ejemplo n.º 1
0
        protected void tblImagens_Load(object sender, EventArgs e)
        {
            try
            {
                Table       tblImagens = (Table)sender;
                GridViewRow row        = tblImagens.Parent.Parent as GridViewRow;
                HiddenField h          = (HiddenField)row.FindControl("hdfIdProdPed");
                var         idPedido   = Request["idPedido"].StrParaUint();

                if (Request["tipo"] == "pedido" && !PedidoEspelhoDAO.Instance.ExisteEspelho(idPedido) && (ProdutosPedidoDAO.Instance.TemProdutoLamComposicao(idPedido) || Request["pecaAvulsa"] == "True"))
                {
                    var pp = !IsPostBack ? row.DataItem as ProdutosPedido : ProdutosPedidoDAO.Instance.GetElement(null, h.Value.StrParaUint(), false, true, false);
                    CriaLinhaTabela(tblImagens, true, "", null, null, pp, string.Empty);
                    return;
                }

                ProdutosPedidoEspelho ppe = !IsPostBack ? row.DataItem as ProdutosPedidoEspelho :
                                            ProdutosPedidoEspelhoDAO.Instance.GetElement(Glass.Conversoes.StrParaUint(h.Value), true);

                PecaItemProjeto peca = null;

                if (ppe.IdMaterItemProj > 0)
                {
                    uint?idPecaItemProj = MaterialItemProjetoDAO.Instance.ObtemIdPecaItemProj(null, ppe.IdMaterItemProj.Value);
                    if (idPecaItemProj.GetValueOrDefault() == 0)
                    {
                        return;
                    }

                    peca = PecaItemProjetoDAO.Instance.GetElementExt(null, idPecaItemProj.Value, true);
                }

                string msgErro = "Item possui arquivo de otimização (mesa de<br/ >corte) gerado. Não é possível alterá-lo.";

                // Mostra imagem apenas se for instalação
                if (peca != null && peca.Tipo == 1)
                {
                    // Controla o número da etiqueta de acordo com a quantidade (1/3)
                    int itemEtiqueta = 1;

                    // Para cada item desta peça. Ex.: 1 e 2 ou 3 e 4
                    foreach (string item in UtilsProjeto.GetItensFromPeca(peca.Item))
                    {
                        ppe.Item = Glass.Conversoes.StrParaInt(item);
                        bool permitirAlterarImagem = UtilsProjeto.PodeAlterarImagemPeca(peca, ppe.Item, itemEtiqueta++, false, ref msgErro);

                        if (permitirAlterarImagem && Request["tipo"] != "pcp")
                        {
                            permitirAlterarImagem = false;
                            msgErro = "Alteração de imagem apenas no PCP";
                        }

                        CriaLinhaTabela(tblImagens, permitirAlterarImagem, item, peca, ppe, null, msgErro);
                    }
                }
                else if (peca == null)
                {
                    string result = ppe.EtiquetasLegenda;
                    msgErro = String.IsNullOrEmpty(ppe.EtiquetasLegenda) ? String.Empty : msgErro;

                    // Verifica se é permitido alterar imagem da peça
                    var situacaoPedidoEspelho = PedidoEspelhoDAO.Instance.ObtemSituacao(ppe.IdPedido);
                    var permitirAlterarImagem = situacaoPedidoEspelho == PedidoEspelho.SituacaoPedido.Finalizado ||
                                                Config.PossuiPermissao(Config.FuncaoMenuPCP.AlterarImagemPecaAposImpressao);

                    if (permitirAlterarImagem)
                    {
                        string[] itens = result != null?result.ToUpper().Replace(" E ", ",").Split(',') : null;

                        itens = itens.Select(f => f.Trim()).ToArray();

                        permitirAlterarImagem = itens != null && itens.Length > 0 && !string.IsNullOrEmpty(itens[0]);

                        // Recupera o setor de marcação
                        Setor setor = SetorDAO.Instance.ObterSetorPorNome(null, "Marcação");

                        // Se for permitido alterar imagem da peça, verifica se o item não tem arquivo sag e se não passou pelo setor de marcação
                        if (setor != null && setor.IdSetor > 0 && permitirAlterarImagem && itens != null && itens.Length > 0)
                        {
                            foreach (string etiq in itens)
                            {
                                permitirAlterarImagem = permitirAlterarImagem && !EtiquetaArquivoOtimizacaoDAO.Instance.TemArquivoSAG(etiq) &&
                                                        !LeituraProducaoDAO.Instance.PassouSetor(null, etiq, (uint)setor.IdSetor);
                            }
                        }
                    }
                    else if (PedidoDAO.Instance.IsMaoDeObra(null, ppe.IdPedido))
                    {
                        permitirAlterarImagem = true;
                    }
                    else
                    {
                        msgErro = String.IsNullOrEmpty(result) ? "Apenas vidros que serão produzidos<br/ >podem ter imagens anexadas." :
                                  "Etiqueta já impressa. Não é<br />possível alterar a imagem";
                    }

                    CriaLinhaTabela(tblImagens, permitirAlterarImagem, "", null, ppe, null, msgErro);
                }
            }
            catch (Exception ex)
            {
                MensagemAlerta.ErrorMsg("Falha ao exibir imagens.", ex, Page);
                var urlErro = Request.Url.ToString() == null || Request.Url.ToString() == "" ? "Sel Imagem Peça" : Request.Url.ToString();
                ErroDAO.Instance.InserirFromException(urlErro, ex);
            }
        }
Ejemplo n.º 2
0
        public void Inserir(GDASession sessao, uint idProdNf, string idsItemProjeto)
        {
            foreach (string id in idsItemProjeto.Split(','))
            {
                ProdutoNfItemProjeto item = new ProdutoNfItemProjeto
                {
                    IdProdNf      = idProdNf,
                    IdItemProjeto = Glass.Conversoes.StrParaUint(id)
                };

                #region Gera o novo item de projeto se for "apenas vidros"

                if (ItemProjetoDAO.Instance.ApenasVidros(item.IdItemProjeto) && FiscalConfig.NotaFiscalConfig.UsarProdutoCestaSeApenasVidros)
                {
                    ItemProjeto   ip = ItemProjetoDAO.Instance.GetElementByPrimaryKey(sessao, item.IdItemProjeto);
                    ProjetoModelo pm = ProjetoModeloDAO.Instance.GetElementByPrimaryKey(sessao, ip.IdProjetoModelo);

                    uint?idCliente   = ip.IdCliente;
                    int? tipoEntrega = ip.TipoEntrega;

                    uint?idObra = ip.IdPedido > 0 ? PedidoDAO.Instance.GetIdObra(null, ip.IdPedido.Value) :
                                  ip.IdPedidoEspelho > 0 ? PedidoDAO.Instance.GetIdObra(null, ip.IdPedidoEspelho.Value) :
                                  null;

                    ip.IdOrcamento     = null;
                    ip.IdPedido        = null;
                    ip.IdPedidoEspelho = null;
                    ip.IdProjeto       = null;

                    ip.ApenasVidros  = false;
                    ip.IdCorAluminio = (uint)CorAluminioDAO.Instance.GetAll().FirstOrDefault().IdCorAluminio;
                    ip.IdCorFerragem = (uint)CorFerragemDAO.Instance.GetAll().FirstOrDefault().IdCorFerragem;

                    List <PecaItemProjeto> pecasItemProjeto = PecaItemProjetoDAO.Instance.GetByItemProjeto(item.IdItemProjeto, ip.IdProjetoModelo);

                    // Corrige projetos de medida exata, calculando área do vão
                    // Segundo Sidinei, usar altura da peça item "1" e largura somada de todas
                    // as outras peças
                    bool medidaExata = ip.MedidaExata;
                    var  medidas     = ((List <MedidaItemProjeto>)MedidaItemProjetoDAO.Instance.GetListByItemProjeto(item.IdItemProjeto)).ToArray();

                    if (medidaExata)
                    {
                        ip.MedidaExata = false;
                        int altura = 0, largura = 0;

                        if (pecasItemProjeto.Count > 0)
                        {
                            PecaItemProjeto p = pecasItemProjeto.Find(x =>
                            {
                                string[] itens = UtilsProjeto.GetItensFromPeca(x.Item);
                                return(Array.Exists(itens, y => y == "1"));
                            });

                            altura = p != null ? p.Altura : pecasItemProjeto[0].Altura;
                            pecasItemProjeto.ForEach(x => largura += x.Largura);
                        }

                        ip.M2Vao = Glass.Global.CalculosFluxo.ArredondaM2(largura, altura, ip.Qtde, 0, false);

                        #region Corrige as medidas do projeto

                        var idLarguraVao = 2;
                        var idAlturaVao  = 3;

                        if (Array.FindIndex(medidas, x => x.IdMedidaProjeto == idLarguraVao) == -1)
                        {
                            idLarguraVao = (int)MedidaProjetoDAO.Instance.FindByDescricao(0, "larg vão").GetValueOrDefault();
                        }

                        if (Array.FindIndex(medidas, x => x.IdMedidaProjeto == idAlturaVao) == -1)
                        {
                            idAlturaVao = (int)MedidaProjetoDAO.Instance.FindByDescricao(0, "alt vão").GetValueOrDefault();
                        }

                        // Qtde
                        int index = Array.FindIndex(medidas, x => x.IdMedidaProjeto == 1);
                        if (index > -1)
                        {
                            medidas[index].Valor = ip.Qtde;
                        }

                        // Largura
                        index = Array.FindIndex(medidas, x => x.IdMedidaProjeto == idLarguraVao);
                        if (index > -1)
                        {
                            medidas[index].Valor = largura;
                        }

                        // Altura
                        index = Array.FindIndex(medidas, x => x.IdMedidaProjeto == idAlturaVao);
                        if (index > -1)
                        {
                            medidas[index].Valor = altura;
                        }

                        #endregion
                    }

                    ip.IdItemProjeto = ItemProjetoDAO.Instance.Insert(sessao, ip);

                    foreach (MedidaItemProjeto m in medidas)
                    {
                        MedidaItemProjetoDAO.Instance.InsereMedida(sessao, ip.IdItemProjeto, m.IdMedidaProjeto, m.Valor);
                    }

                    List <PecaProjetoModelo> pecasModelo = PecaProjetoModeloDAO.Instance.GetByModelo(pm.IdProjetoModelo);

                    //Preenche a altura e largura da peça para que o sistema crie corretamente o
                    //material item projeto para dar baixa nas peças de cesta
                    foreach (var pecas in pecasModelo)
                    {
                        if (pecas.Altura == 0 || pecas.Largura == 0)
                        {
                            pecas.Altura  = 1;
                            pecas.Largura = 1;
                        }
                    }

                    foreach (PecaItemProjeto p in pecasItemProjeto)
                    {
                        pecasModelo.Find(x => x.IdPecaProjMod == p.IdPecaProjMod).IdProd = p.IdProd.GetValueOrDefault();
                        pecasModelo.Find(x => x.IdPecaProjMod == p.IdPecaProjMod).Qtde   = p.Qtde;

                        p.Beneficiamentos = p.Beneficiamentos;
                        p.IdPecaItemProj  = 0;
                        p.IdItemProjeto   = ip.IdItemProjeto;

                        // Utiliza apenas peças com qtd maior que zero
                        if (p.Qtde > 0)
                        {
                            PecaItemProjetoDAO.Instance.Insert(sessao, p);
                        }
                    }

                    // Calcula os materiais do projeto, muda para medida exata para que a altura e largura dos materiais tenham
                    // valor, caso contrário apenas as folgas serão salvas nos campos altura e largura
                    ip.MedidaExata = true;
                    MaterialItemProjetoDAO.Instance.InserePecasVidro(sessao, idObra, idCliente, tipoEntrega, ip, pm, pecasModelo.Where(f => f.Qtde > 0).ToList(), true);
                    ip.MedidaExata = false;

                    foreach (MaterialItemProjeto m in ItemProjetoDAO.Instance.CalculaMateriais(sessao, ip, idCliente, tipoEntrega, true))
                    {
                        MaterialItemProjetoDAO.Instance.InsertFromNovoItemProjeto(sessao, m);
                    }

                    item.IdItemProjeto = ip.IdItemProjeto;
                }

                #endregion

                Insert(sessao, item);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Retorna os itens de uma peça pelo seu produto pedido espelho.
        /// </summary>
        /// <param name="idProdPed"></param>
        /// <returns></returns>
        public string[] GetItensByProdPedEsp(uint idProdPedEsp)
        {
            PecaItemProjeto peca = GetByProdPedEsp(idProdPedEsp);

            return(peca != null?UtilsProjeto.GetItensFromPeca(peca.Item) : new string[0]);
        }
Ejemplo n.º 4
0
        public Imagem[] GetPecasAlteradas(GDASession sessao, uint idItemProjeto, float percentualImagem)
        {
            ItemProjeto itemProj = ItemProjetoDAO.Instance.GetElementByPrimaryKey(sessao, idItemProjeto);

            PecaItemProjeto[] pecas = PecaItemProjetoDAO.Instance.GetByItemProjetoRpt(sessao, idItemProjeto, itemProj.IdProjetoModelo).ToArray();

            List <Imagem> retorno = new List <Imagem>();

            foreach (PecaItemProjeto p in pecas)
            {
                if (p.Tipo != 1)
                {
                    continue;
                }

                ProdutosPedidoEspelho ppe = p.IdProdPed.GetValueOrDefault() == 0 ? null :
                                            ProdutosPedidoEspelhoDAO.Instance.GetForImagemPeca(sessao, p.IdProdPed.Value);

                foreach (int item in Array.ConvertAll(UtilsProjeto.GetItensFromPeca(p.Item), x => Glass.Conversoes.StrParaInt(x)))
                {
                    //Se o item da peça for 99(geração dinâmica e não houver etiqueta, não gera a imagem.
                    if ((item == 90 || item == 91 || item == 92 || item == 93 || item == 94 ||
                         item == 95 || item == 96 || item == 97 || item == 98 || item == 99) && string.IsNullOrEmpty(p.Etiquetas))
                    {
                        continue;
                    }

                    if (item == 90 || item == 91 || item == 92 || item == 93 || item == 94 ||
                        item == 95 || item == 96 || item == 97 || item == 98 || item == 99)
                    {
                        string[] etiquetas = p.Etiquetas.Split(',');

                        foreach (string etq in etiquetas)
                        {
                            string imgUrl = UtilsProjeto.GetFiguraAssociadaUrl(sessao, idItemProjeto, itemProj.IdProjetoModelo, p.IdPecaItemProj, item);
                            imgUrl += "&numEtiqueta=" + etq;

                            byte[] imagem = Utils.GetImageFromRequest(HttpContext.Current, imgUrl);

                            if (imagem.Length == 0)
                            {
                                continue;
                            }

                            imagem = ManipulacaoImagem.Redimensionar(imagem, 0, 0, percentualImagem);

                            if (retorno.Count > 0 && retorno[retorno.Count - 1].Imagem2 == null)
                            {
                                retorno[retorno.Count - 1].Imagem2 = imagem;
                            }
                            else
                            {
                                Imagem nova = new Imagem();
                                nova.Chave   = idItemProjeto;
                                nova.Imagem1 = imagem;
                                retorno.Add(nova);
                            }
                        }
                    }
                    else
                    {
                        string urlImagem = null;

                        if (ppe != null)
                        {
                            ppe.Item  = item;
                            urlImagem = ppe.ImagemUrl;
                        }
                        else if (itemProj.IdPedido > 0)
                        {
                            MaterialItemProjeto mip = MaterialItemProjetoDAO.Instance.GetMaterialByPeca(sessao, p.IdPecaItemProj);

                            if (mip != null)
                            {
                                // Se estiver imprimindo projeto de pedido que está no comercial,
                                // busca a imagem que pode ter sido editada do comercial
                                urlImagem = Utils.GetPecaComercialVirtualPath +
                                            ProdutosPedidoDAO.Instance.GetIdProdPedByMaterItemProj(sessao, itemProj.IdPedido.Value,
                                                                                                   mip.IdMaterItemProj).ToString().PadLeft(10, '0') +
                                            "_" + item + ".jpg";

                                if (!File.Exists(HttpContext.Current.Server.MapPath(urlImagem)))
                                {
                                    urlImagem = null;
                                }
                            }
                        }

                        if (urlImagem == null)
                        {
                            urlImagem = UtilsProjeto.GetFiguraAssociadaUrl(sessao, idItemProjeto, itemProj.IdProjetoModelo,
                                                                           p.IdPecaItemProj, item);
                        }

                        byte[] imagem = Utils.GetImageFromRequest(HttpContext.Current, urlImagem);

                        if (imagem.Length == 0)
                        {
                            continue;
                        }

                        imagem = ManipulacaoImagem.Redimensionar(imagem, 0, 0, percentualImagem);

                        if (retorno.Count > 0 && retorno[retorno.Count - 1].Imagem2 == null)
                        {
                            retorno[retorno.Count - 1].Imagem2 = imagem;
                        }
                        else
                        {
                            Imagem nova = new Imagem();
                            nova.Chave   = idItemProjeto;
                            nova.Imagem1 = imagem;
                            retorno.Add(nova);
                        }
                    }
                }
            }

            return(retorno.ToArray());
        }