/// <summary> /// Inicia uma nova instância da classe <see cref="ListaDto"/>. /// </summary> /// <param name="arquivoOtimizacao">O arquivo de otimização que será retornado.</param> public ListaDto(ArquivoOtimizacao arquivoOtimizacao) { this.Id = (int)arquivoOtimizacao.IdArquivoOtimizacao; this.Direcao = new DirecaoDto { Id = arquivoOtimizacao.Direcao, Descricao = arquivoOtimizacao.DescrDirecao, }; this.Arquivo = new ArquivoDto { Caminho = arquivoOtimizacao.CaminhoArquivo, Extensao = arquivoOtimizacao.ExtensaoArquivo, }; this.Funcionario = arquivoOtimizacao.NomeFunc; this.DataCadastro = arquivoOtimizacao.DataCad; this.Permissoes = new PermissoesDto { ExibirLinkDownload = Glass.Configuracoes.EtiquetaConfig.TipoExportacaoEtiqueta != Data.Helper.DataSources.TipoExportacaoEtiquetaEnum.eCutter || arquivoOtimizacao.Direcao == 2, ExibirLinkECutter = Glass.Configuracoes.EtiquetaConfig.TipoExportacaoEtiqueta == Data.Helper.DataSources.TipoExportacaoEtiquetaEnum.eCutter && arquivoOtimizacao.Direcao == 1, }; }
protected void btnImportarArquivo_Click(object sender, EventArgs e) { try { if (!fluArquivoOtimizado.HasFile) { throw new Exception("Nenhum arquivo selecionado."); } var lstProdPed = new List <ProdutosPedidoEspelho>(); var planoCorte = string.Empty; var etiquetasJaImpressas = string.Empty; var qtdPecasImpressas = 0; var lstEtiquetas = new List <string>(); var pedidosAlteradosAposExportacao = new List <int>(); if (EtiquetaConfig.TipoExportacaoEtiqueta == DataSources.TipoExportacaoEtiquetaEnum.OptyWay || EtiquetaConfig.TipoExportacaoEtiqueta == DataSources.TipoExportacaoEtiquetaEnum.eCutter) { // Lê o arquivo de otimização enviado XmlDocument xmlDoc = new XmlDocument(); /* Chamado 50941. */ xmlDoc.LoadXml(new StreamReader(fluArquivoOtimizado.FileContent).ReadToEnd()); ImpressaoEtiquetaDAO.Instance.ImportarArquivoOtimizacaoOptyWay(xmlDoc, ref lstEtiquetas, ref etiquetasJaImpressas, ref pedidosAlteradosAposExportacao, ref lstProdPed, ref qtdPecasImpressas); } else { #region Retorno Corte Certo XmlDocument xmlDoc = new XmlDocument(); using (var conteudoArquivo = new StreamReader(fluArquivoOtimizado.FileContent)) { xmlDoc.LoadXml(conteudoArquivo.ReadToEnd()); } foreach (XmlNode node in xmlDoc["PF_EXPORT"]["CUT_PLAN"]) { // A tag <PLAN> contém o plano de corte, as tags subsequentes à ela contém as peças if (node.Name == "PLAN") { planoCorte = node.InnerXml.PadLeft(2, '0') + "-" + ContadorPlanoCorteDAO.Instance.GetNext().ToString().PadLeft(8, '0'); continue; } string etiqueta = node["desc"].InnerXml; string[] vetEtiq = etiqueta.Split('_'); if (vetEtiq == null || vetEtiq.Length < 4 || vetEtiq[0] == "") { throw new Exception("Algumas peças foram Alteradas ou Incluídas no arquivo. Por favor Otimize novamente!"); } etiqueta = vetEtiq[0] + "-" + vetEtiq[1] + "." + vetEtiq[2] + "/" + vetEtiq[3]; // Busca o produtoPedidoEspelho pela etiqueta bool isPecaReposta = ProdutoPedidoProducaoDAO.Instance.IsPecaReposta(etiqueta, true); // Verifica se a etiqueta já foi impressa if (!isPecaReposta && ProdutoImpressaoDAO.Instance.EstaImpressa(etiqueta, ProdutoImpressaoDAO.TipoEtiqueta.Pedido)) { etiquetasJaImpressas += etiqueta + ", "; continue; } if (lstEtiquetas.Contains(etiqueta.Trim())) { continue; } lstEtiquetas.Add(etiqueta); ProdutosPedidoEspelho prodPed; try { uint?idProdPedProducao = ProdutoPedidoProducaoDAO.Instance.ObtemIdProdPedProducao(etiqueta); uint?idProdPed = null; if (idProdPedProducao != null) { idProdPed = ProdutoPedidoProducaoDAO.Instance.ObtemIdProdPed(idProdPedProducao.Value); } prodPed = ProdutosPedidoEspelhoDAO.Instance.GetProdPedByEtiqueta(etiqueta, idProdPed, true); } catch (Exception ex) { MensagemAlerta.ErrorMsg("A etiqueta '" + etiqueta + "' não possui uma peça associada. " + "O pedido pode ter sido alterado após a geração do arquivo para o Corte Certo. " + "Refaça a otimização das etiquetas com um novo arquivo de otimização gerado pelo sistema.", ex, Page); return; } float qtde = prodPed.Qtde; /* Chamado 52296. */ if (prodPed.IsProdutoLaminadoComposicao) { qtde = (int)prodPed.QtdeImpressaoProdLamComposicao; } else if (prodPed.IsProdFilhoLamComposicao) { qtde = ProdutosPedidoEspelhoDAO.Instance.ObtemQtde(prodPed.IdProdPedParent.Value) * prodPed.Qtde; var idProdPedParentPai = ProdutosPedidoEspelhoDAO.Instance.ObterIdProdPedParent(null, prodPed.IdProdPedParent.Value); if (idProdPedParentPai.GetValueOrDefault(0) > 0) { qtde *= ProdutosPedidoEspelhoDAO.Instance.ObtemQtde(idProdPedParentPai.Value); } } if (Glass.Conversoes.StrParaInt(vetEtiq[3]) > qtde) { throw new Exception($"Etiqueta { etiqueta } é inválida. O produto referido tem quantidade { qtde } e a etiqueta indica { vetEtiq[3] }."); } if (prodPed.IdPedido > 0) { var dataFinalizacaoPCP = PedidoEspelhoDAO.Instance.ObtemDataConf(null, prodPed.IdPedido); if (dataFinalizacaoPCP != null && dataFinalizacaoPCP > ArquivoOtimizacaoDAO.Instance.ObtemDataUltimaExportacaoEtiqueta(null, etiqueta)) { pedidosAlteradosAposExportacao.Add((int)prodPed.IdPedido); continue; } } prodPed.PlanoCorte = planoCorte; prodPed.Etiquetas += etiqueta + "_"; prodPed.PecaReposta = isPecaReposta; try { // Insere/Atualiza etiqueta na tabela de produto_impressao ProdutoImpressaoDAO.Instance.InsertOrUpdatePecaComTransacao(etiqueta, planoCorte, 0, 0, ProdutoImpressaoDAO.TipoEtiqueta.Pedido, null); } catch (Exception ex) { Glass.MensagemAlerta.ErrorMsg("Falha ao importar etiquetas", ex, Page); return; } // Marca a qtd como 1, pois cada produto no arquivo é qtd 1, caso o produto se repita, soma a qtd prodPed.QtdAImprimir = !isPecaReposta ? 1 : 0; bool jaInserido = false; for (int i = 0; i < lstProdPed.Count; i++) { if (prodPed.IdProdPed == lstProdPed[i].IdProdPed && prodPed.PlanoCorte == lstProdPed[i].PlanoCorte && prodPed.PecaReposta == lstProdPed[i].PecaReposta) { if (!isPecaReposta) { lstProdPed[i].QtdAImprimir += 1; } lstProdPed[i].Etiquetas += etiqueta + "_"; jaInserido = true; break; } } if (!jaInserido) { lstProdPed.Add(prodPed); } qtdPecasImpressas++; } #endregion } if (lstEtiquetas == null || lstEtiquetas.Count == 0) { throw new Exception("Não há etiquetas para importar."); } string extensao = fluArquivoOtimizado.FileName.Substring(fluArquivoOtimizado.FileName.LastIndexOf(".")); ArquivoOtimizacao a = ArquivoOtimizacaoDAO.Instance.InserirArquivoOtimizacao(ArquivoOtimizacao.DirecaoEnum.Importar, extensao, lstEtiquetas, null, null); // Salva arquivo otimizado fluArquivoOtimizado.SaveAs(Data.Helper.Utils.GetArquivoOtimizacaoPath + a.NomeArquivo); #region Ordena as peças por cor/espessura // Ordena as peças por cor/espessura lstProdPed.Sort(new Comparison <ProdutosPedidoEspelho>(delegate(ProdutosPedidoEspelho x, ProdutosPedidoEspelho y) { int cor = Comparer <string> .Default.Compare(x.Cor, y.Cor); if (cor == 0) { return(Comparer <float> .Default.Compare(x.Espessura, y.Espessura)); } else { return(cor); } })); #endregion #region Gera um script para inserir estas peças na tela string script = String.Empty; if (!string.IsNullOrEmpty(etiquetasJaImpressas)) { script += "alert('As etiquetas " + etiquetasJaImpressas + "já foram impressas');"; } foreach (ProdutosPedidoEspelho ppe in lstProdPed) { if ((ppe?.IdProdPed).GetValueOrDefault() == 0) { continue; } var quantidadePecaImpressa = ProdutoImpressaoDAO.Instance.QuantidadeImpressa(null, (int)ppe.IdProdPed); if (ppe.IsProdutoLaminadoComposicao || ppe.IsProdFilhoLamComposicao) { var quantidadeAImprimir = 0; if (ppe.IsProdutoLaminadoComposicao) { quantidadeAImprimir = (int)ppe.QtdeImpressaoProdLamComposicao - quantidadePecaImpressa; } else if (ppe.IsProdFilhoLamComposicao) { quantidadeAImprimir = (int)(ProdutosPedidoEspelhoDAO.Instance.ObtemQtde(null, ppe.IdProdPedParent.Value) * ppe.Qtde); var idProdPedParentPai = ProdutosPedidoEspelhoDAO.Instance.ObterIdProdPedParent(null, ppe.IdProdPedParent.Value); if (idProdPedParentPai > 0) { quantidadeAImprimir *= (int)ProdutosPedidoEspelhoDAO.Instance.ObtemQtde(null, idProdPedParentPai.Value); } quantidadeAImprimir -= quantidadePecaImpressa; } if (quantidadeAImprimir == 0) { qtdPecasImpressas -= quantidadePecaImpressa; continue; } } // Verificar se o produto já foi totalmente impresso else if (ppe.Qtde == ppe.QtdImpresso && !ppe.PecaReposta) { qtdPecasImpressas -= ProdutoImpressaoDAO.Instance.QuantidadeImpressa(null, (int)ppe.IdProdPed); continue; } float totM2 = ppe.PecaReposta ? (ppe.TotM / ppe.Qtde) : (ppe.TotM / ppe.Qtde) * ppe.QtdAImprimir; float totM2Calc = ppe.PecaReposta ? (ppe.TotM2Calc / ppe.Qtde) : (ppe.TotM2Calc / ppe.Qtde) * ppe.QtdAImprimir; string descrProduto = TratarStringScript(ppe?.DescrProduto); string obs = TratarStringScript(ppe?.Obs); string codProcesso = TratarStringScript(ppe?.CodProcesso); string codAplicacao = TratarStringScript(ppe?.CodAplicacao); string planoCorteEtiq = TratarStringScript(ppe?.PlanoCorte); string etiquetas = TratarStringScript(ppe?.Etiquetas); // Foi incluido uma chamada de função para remover o botão de Excluir das peças otimizadas script += "window.opener.setProdEtiqueta(" + ppe.IdProdPed + ", null, " + ppe.IdPedido + ", null, null, '" + descrProduto.Replace("'", "") + (ppe.PecaReposta ? " (Reposta)" : "") + "', '" + codProcesso + "', '" + codAplicacao + "', " + (!ppe.PecaReposta ? ppe.Qtde : 1) + ", " + (!ppe.PecaReposta ? ppe.QtdImpresso : 1) + ", " + ppe.QtdAImprimir + ", " + ppe.AlturaProducao + ", " + ppe.LarguraProducao + ", '" + obs + "', '" + totM2 + "', '" + planoCorteEtiq.Replace("'", "") + "', null, true, '" + etiquetas.TrimEnd('_') + "', null, '" + totM2Calc + "', null, null, null); "; } script += "window.opener.escondeRemoverTodasAsLinhas();"; #endregion var mensagemPedidoAlteradoAposExportacao = string.Empty; if (pedidosAlteradosAposExportacao.Count > 0) { mensagemPedidoAlteradoAposExportacao = $@"Os pedidos a seguir foram reabertos após a exportação das peças, a otimização deve ser feita novamente com um novo arquivo gerado pelo sistema: { string.Join(", ", pedidosAlteradosAposExportacao.Distinct()) }."; } if (qtdPecasImpressas == 0 && pedidosAlteradosAposExportacao.Count() == 0) { MensagemAlerta.ShowMsg($"{ mensagemPedidoAlteradoAposExportacao } ou todas as peças deste arquivo já foram impressas.", Page); } else if (pedidosAlteradosAposExportacao.Count() > 0) { MensagemAlerta.ShowMsg(mensagemPedidoAlteradoAposExportacao, Page); } else { Page.ClientScript.RegisterClientScriptBlock(typeof(string), "setPecas", $"window.opener.limpar();{ script }alert('{ qtdPecasImpressas } peças importadas. { mensagemPedidoAlteradoAposExportacao }');closeWindow();", true); } } catch (Exception ex) { ErroDAO.Instance.InserirFromException("ImportarArquivo", ex); MensagemAlerta.ShowMsg(ex.Message, Page); return; } }