Example #1
0
        public MalaDireta()
        {
            ConfiguraçãoGlobal<string> xml = new ConfiguraçãoGlobal<string>("Mala-Direta - Formato", null);

            etiqueta = new LabelLayout();
            etiqueta.LoadFromXml(xml.Valor, false);
        }
Example #2
0
		/// <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;
		}
Example #3
0
		/// <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;
			}
		}