示例#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);
            }
        }
示例#2
0
        private void CriaLinhaTabela(Table tblImagens, bool permitirAlterarImagem, string item, PecaItemProjeto peca, ProdutosPedidoEspelho ppe, ProdutosPedido pp, string msgErro)
        {
            TableRow  linha     = new TableRow();
            TableCell cabecalho = new TableCell();
            TableCell logPopup  = new TableCell();
            TableCell botoes    = new TableCell();
            TableCell upload    = new TableCell();

            tblImagens.Rows.Add(linha);
            linha.Cells.AddRange(new TableCell[] { cabecalho, logPopup, botoes });


            if (pp != null)
            {
                var ctrl = (Controls.ctrlImagemPopup)LoadControl("~/Controls/ctrlImagemPopup.ascx");
                ctrl.ImageUrl = pp.ImagemUrl;

                botoes.Controls.Add(ctrl);

                ImageButton exc = new ImageButton();
                exc.OnClientClick = "if (!confirm('Deseja excluir a imagem atribuída à peça?')) return false;";
                exc.ImageUrl      = "~/Images/ExcluirGrid.gif";
                exc.Click        += new ImageClickEventHandler(imgExcluir_Click);
                exc.PreRender    += new EventHandler(imgExcluir_PreRender);

                // Exibe o Log de alteração da Imagem do Produto Pedido
                Controls.ctrlLogPopup logPP = (Controls.ctrlLogPopup)LoadControl("~/Controls/ctrlLogPopup.ascx");
                logPP.Tabela     = LogAlteracao.TabelaAlteracao.ImagemProdPed;
                logPP.IdRegistro = pp.IdProdPed;
                logPopup.Controls.Add(logPP);

                botoes.Controls.Add(exc);

                FileUpload upl = new FileUpload();
                upl.ID = "flu" + (tblImagens.Rows.Count - 1);
                upload.Controls.Add(upl);
                linha.Cells.Add(upload);

                return;
            }


            TipoArquivoMesaCorte?tipoArquivo = null;

            if (peca != null)
            {
                tipoArquivo = PecaProjetoModeloDAO.Instance.ObtemTipoArquivoMesaCorte(peca.IdPecaProjMod);
            }

            // Caso seja permitido alterar a imagem da peça, é necessário verificar ainda se a peça possui fml associado.
            if (permitirAlterarImagem &&
                (tipoArquivo == null ||
                 (tipoArquivo.Value != TipoArquivoMesaCorte.FML &&
                  tipoArquivo != TipoArquivoMesaCorte.DXF)))
            {
                if (peca != null)
                {
                    var flags = FlagArqMesaDAO.Instance.ObtemPorPecaProjMod((int)peca.IdPecaProjMod, true);

                    /* Chamado 24392. */
                    if (flags.Count(f => f.Descricao == TipoArquivoMesaCorte.FML.ToString()) == 0 &&
                        flags.Count(f => f.Descricao == TipoArquivoMesaCorte.DXF.ToString()) == 0)
                    {
                        linha.Cells.Add(upload);
                    }
                }
                else
                {
                    linha.Cells.Add(upload);
                }
            }
            else if (permitirAlterarImagem)
            {
                permitirAlterarImagem = false;

                var geraDXF = PCPConfig.EmpresaGeraArquivoDxf ? "DXF" : string.Empty;
                var geraFML = PCPConfig.EmpresaGeraArquivoDxf ? "FML" : string.Empty;
                var tiposArquivoBloquear = !string.IsNullOrEmpty(geraDXF) && !string.IsNullOrEmpty(geraFML) ? $"{geraDXF} ou {geraFML}" : geraDXF + geraFML;
                msgErro = $@"Não é possível alterar imagens de peças que tenham arquivos de mesa associados {tiposArquivoBloquear}.";
            }

            if (!String.IsNullOrEmpty(item))
            {
                cabecalho.Text = "Item " + item;
            }

            cabecalho.Attributes.Add("item", item);
            cabecalho.Attributes.Add("idPecaItemProj", peca != null ? peca.IdPecaItemProj.ToString() : String.Empty);

            if (peca != null)
            {
                Controls.ctrlLogPopup log = (Controls.ctrlLogPopup)LoadControl("~/Controls/ctrlLogPopup.ascx");
                log.Tabela     = LogAlteracao.TabelaAlteracao.ImagemProducao;
                peca.Item      = item;
                log.IdRegistro = peca.IdLog;
                logPopup.Controls.Add(log);
            }

            // Exibe o Log de alteração da Imagem do Produto Pedido Espelho
            Controls.ctrlLogPopup logPPE = (Controls.ctrlLogPopup)LoadControl("~/Controls/ctrlLogPopup.ascx");
            logPPE.Tabela     = LogAlteracao.TabelaAlteracao.ImagemProdPedEsp;
            logPPE.IdRegistro = ppe.IdProdPed;
            logPopup.Controls.Add(logPPE);

            if (ppe.TemSvgAssociado)
            {
                Controls.ctrlImageCadProject ctrl = (Controls.ctrlImageCadProject)LoadControl("~/Controls/ctrlImageCadProject.ascx");
                ctrl.IdProdPedEsp         = (int)ppe.IdProdPed;
                ctrl.DiminuirMedidasPopUp = true;

                ctrl.Legenda = peca != null ? "Ite" + (peca.Item.IndexOf(" ") > -1 ? "ns" : "m") + ": " + peca.Item : string.Empty;
                if (!string.IsNullOrEmpty(ppe.LegendaImagemPeca))
                {
                    ctrl.Legenda = (peca != null ? "<br />" : string.Empty) + ppe.LegendaImagemPeca;
                }

                botoes.Controls.Add(ctrl);
            }
            else
            {
                Controls.ctrlImagemPopup ctrl = (Controls.ctrlImagemPopup)LoadControl("~/Controls/ctrlImagemPopup.ascx");
                ctrl.ImageUrl = ppe.ImagemUrl;

                ctrl.Legenda = peca != null ? "Ite" + (peca.Item.IndexOf(" ") > -1 ? "ns" : "m") + ": " + peca.Item : String.Empty;
                if (!String.IsNullOrEmpty(ppe.LegendaImagemPeca))
                {
                    ctrl.Legenda = (peca != null ? "<br />" : String.Empty) + ppe.LegendaImagemPeca;
                }

                botoes.Controls.Add(ctrl);
            }

            if (permitirAlterarImagem)
            {
                var pedidoExportado = PedidoExportacaoDAO.Instance.GetSituacaoExportacao(null, pp != null ? pp.IdPedido : ppe != null ? ppe.IdPedido : 0) == PedidoExportacao.SituacaoExportacaoEnum.Exportado;

                if (!pedidoExportado)
                {
                    ImageButton exc = new ImageButton();
                    exc.OnClientClick = "if (!confirm('Deseja excluir a imagem atribuída à peça?')) return false;";
                    exc.ImageUrl      = "~/Images/ExcluirGrid.gif";
                    exc.Click        += new ImageClickEventHandler(this.imgExcluir_Click);
                    exc.PreRender    += new EventHandler(this.imgExcluir_PreRender);

                    botoes.Controls.Add(exc);

                    // Se o processo da peça for fixo, não permite anexar imagem
                    if (ppe.IdProcesso == null || ppe.IdProcesso != ProjetoConfig.Caixilho.ProcessoCaixilho)
                    {
                        FileUpload upl = new FileUpload();
                        upl.ID = "flu" + (tblImagens.Rows.Count - 1);
                        upload.Controls.Add(upl);
                    }
                }
                else
                {
                    Label msg = new Label();
                    msg.Text        = "Não é possível alterar imagens de peças de pedidos exportado.";
                    msg.ForeColor   = System.Drawing.Color.Red;
                    msg.Style.Value = "display: inline-block; text-align: right; position: relative; left: 6px";
                    botoes.Controls.Add(msg);
                }
            }
            else
            {
                if (ppe.IdProcesso == ProjetoConfig.Caixilho.ProcessoCaixilho)
                {
                    msgErro = "Caixilhos não tem imagens associadas";
                }

                Label msg = new Label();
                msg.Text        = msgErro;
                msg.ForeColor   = System.Drawing.Color.Red;
                msg.Style.Value = "display: inline-block; text-align: right; position: relative; left: 6px";

                botoes.Controls.Add(msg);
            }
        }
示例#3
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);
            }
        }