public MalaDireta() { ConfiguraçãoGlobal<string> xml = new ConfiguraçãoGlobal<string>("Mala-Direta - Formato", null); etiqueta = new LabelLayout(); etiqueta.LoadFromXml(xml.Valor, false); }
/// <summary> /// Check compatibility /// </summary> /// <param name="other">Another LabelLayout</param> public bool IsCompatible(LabelLayout other) { bool compatible; int i = 0; compatible = this.paperSize.Width == other.paperSize.Width && this.paperSize.Height == other.paperSize.Height && this.items.Count == other.items.Count && this.gapHorizontal == other.gapHorizontal && this.gapVertical == other.gapVertical && this.marginBottom == other.marginBottom && this.marginLeft == other.marginLeft && this.marginRight == other.marginRight && this.marginBottom == other.marginBottom; while (compatible && i < items.Count) { compatible &= ((ItemLayout) this.items[i]).Size == ((ItemLayout) other.items[i]).Size; i++; } return compatible; }
/// <summary> /// Imprime etiquetas /// </summary> /// <param name="etiquetas">Etiquetas a serem impressas</param> /// <param name="layout">Layout de etiquetas</param> private void ImprimirEtiquetas(EtiquetaFormato [] etiquetas, LabelLayout layout) { ArrayList saquinhosImpressos = new ArrayList(); int deEtiqueta, atéEtiqueta; // Seleção de etiquetas a serem impressas int nEtiquetas; // Total de etiquetas a serem impressas int etiquetasPágina; // Etiquetas por página int iEtiqueta; // Iterador nEtiquetas = CalcularNúmeroEtiquetas(etiquetas); etiquetasPágina = layout.LabelsPerPage; printDlg.PrinterSettings.MaximumPage = (int) Math.Ceiling(nEtiquetas / (float) etiquetasPágina); printDlg.PrinterSettings.MinimumPage = 1; printDlg.PrinterSettings.DefaultPageSettings.PaperSize = layout.PaperSize; printDlg.PrinterSettings.FromPage = 1; printDlg.PrinterSettings.ToPage = printDlg.PrinterSettings.MaximumPage; if (printDlg.ShowDialog(this.ParentForm) != DialogResult.OK) { MessageBox.Show(this, "Impressão cancelada pelo usuário", "Impressão", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } aguardeImpressão = new Aguarde( "Preparando impressão...", 2 + printDlg.PrinterSettings.ToPage - printDlg.PrinterSettings.FromPage, "Imprimindo etiquetas", "Aguarde enquanto o sistema imprime as etiquetas solicitadas."); // Mostrar janela de espera aguardeImpressão.Abrir(); aguardeImpressão.Tag = 0; // Usado para numeração de página try { // Preparar impressão layout.Document = printDoc; deEtiqueta = (printDlg.PrinterSettings.FromPage - 1) * etiquetasPágina; atéEtiqueta = (printDlg.PrinterSettings.ToPage) * etiquetasPágina - 1; iEtiqueta = 0; // Inserir objetos de impressão layout.Objects = new ArrayList(); // Atualizando dados aguardeImpressão.Passo("Sincronizando dados com o banco de dados"); bandeja.AtualizaObjetosInstrínsecosDosSaquinhos(); // Formata a impressão aguardeImpressão.Passo("Formatando dados para impressão de etiquetas"); foreach (SaquinhoEtiqueta saquinho in bandeja) { /* Verificar se saquinho contém formato a ser * impresso. Não é a melhor implementação, * porém o número de formatos é bem pequeno, * levando a um pior desempenho caso utilizado * busca binária, já que deve ordenar os itens. */ for (int i = 0; i < etiquetas.Length; i++) if (saquinho.Etiqueta == etiquetas[i]) { #if DEBUG if (saquinho.Mercadoria == null) throw new NullReferenceException("Mercadoria de saquinho está nula!"); #endif if (iEtiqueta >= deEtiqueta && iEtiqueta <= atéEtiqueta) { layout.Objects.Add( new RepeatedObject( layout.Items[i], saquinho.Mercadoria, ( Convert.ToInt32(saquinho.Quantidade) > atéEtiqueta - iEtiqueta + 1 ? atéEtiqueta - iEtiqueta + 1 : Convert.ToInt32(saquinho.Quantidade)))); saquinho.Impresso = true; if (saquinhosImpressos.Contains(saquinho)) throw new Exception("Lista ja contem o item de etiqueta"); saquinhosImpressos.Add(saquinho); } else if (iEtiqueta <= atéEtiqueta && iEtiqueta + saquinho.Quantidade >= deEtiqueta) { layout.Objects.Add( new RepeatedObject( layout.Items[i], saquinho.Mercadoria, Convert.ToInt32(saquinho.Quantidade) - (deEtiqueta - iEtiqueta) > atéEtiqueta - iEtiqueta + 1 ? atéEtiqueta - iEtiqueta + 1 : Convert.ToInt32(saquinho.Quantidade) - (deEtiqueta - iEtiqueta))); saquinho.Impresso = true; if (saquinhosImpressos.Contains(saquinho)) throw new Exception("Lista ja contem o item de etiqueta"); saquinhosImpressos.Add(saquinho); } iEtiqueta += Convert.ToInt32(saquinho.Quantidade); } } bool loop; do { #if !DEBUG try #endif { printDoc.Print(); loop = false; } #if !DEBUG catch (Exception e) { loop = MessageBox.Show( this.ParentForm, "Não foi possível imprimir o documento. Verifique se a impressora está ligada e conectada corretamente ao computador.", "Impressão de etiquetas - " + e.Message, MessageBoxButtons.RetryCancel) == DialogResult.Retry; if (loop) { printDlg.AllowSomePages = false; printDlg.ShowDialog(this.ParentForm); } } #endif } while (loop); } finally { layout.Dispose(); aguardeImpressão.Close(); aguardeImpressão.Dispose(); aguardeImpressão = null; } bandeja.FoiImpresso(saquinhosImpressos); opçãoImprimir.Enabled = true; }
/// <summary> /// Ocorre ao mostrar a tela para imprimir /// </summary> private void painelImprimir_Exibido(object sender, System.EventArgs e) { using (Aguarde aguarde = new Aguarde( "Preparando para imprimir", seleção.Length + 1, "Preparando impressão de etiquetas", "Aguarde enquanto o sistema prepara a impressão de etiquetas.")) { int etiquetas, etiquetasPágina; aguarde.Abrir(); layout = new LabelLayout(); layout.ImportType(typeof(Entidades.Mercadoria.Mercadoria)); // Carrega formato inicial aguarde.Passo("Carregando formato " + seleção[0].Formato); layout.LoadFromXml(seleção[0].Configuração, false); // Mescla demais formatos for (int i = 1; i <seleção.Length; i++) { aguarde.Passo("Mesclando formato " + seleção[i].Formato); layout.MergeFromXml(seleção[i].Configuração, false); } // Calcula número de páginas aguarde.Passo("Calculando número de páginas"); etiquetas = cálculo(seleção); etiquetasPágina = layout.LabelsPerPage; lblTotal.Text = etiquetas.ToString(); lblPáginas.Text = Math.Ceiling(etiquetas / (float) etiquetasPágina).ToString(); lblEtiquetas.Text = etiquetasPágina.ToString(); } }
/// <summary> /// Verifica compatibilidade da seleção atual /// </summary> /// <returns>Compatibilidade dos formatos</returns> private bool VerificarCompatibilidade() { if (seleção.Length <= 1) return true; using (Aguarde aguarde = new Aguarde( "Construindo formato para base de comparação", seleção.Length, "Verificando compatibilidade", "O sistema está verificando a compatibilidade dos formatos de etiqueta a serem impressos.")) { bool compatibilidade = true; LabelLayout layout; // Construir janela de porcentagem aguarde.Abrir(); aguarde.Passo("Carregando formato " + seleção[0].Formato); layout = new LabelLayout(); layout.LoadFromXml(seleção[0].Configuração, true); for (int i = 1; i < seleção.Length && compatibilidade; i++) { LabelLayout aux; aguarde.Passo("Comparando formato " + seleção[i].Formato); aux = new LabelLayout(); aux.LoadFromXml(seleção[i].Configuração, true); compatibilidade &= layout.IsCompatible(aux); } return compatibilidade; } }