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); } }
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); } }
/// <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]); }
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()); }