protected override ListViewItem ConstruirListView(ISaquinho saquinhoASerAdicionado) { SaquinhoEtiqueta saquinho = (SaquinhoEtiqueta) saquinhoASerAdicionado; ListViewItem item; item = base.ConstruirListView(saquinho); //Adiciona o essencial: Ref e Qtd item.SubItems[colFormato.Index].Text = saquinho.Etiqueta.ToString(); if (saquinho.Impresso) { item.ForeColor = Color.Red; item.Font = new Font(item.Font, FontStyle.Strikeout); item.UseItemStyleForSubItems = true; btnRemoverImpressos.Enabled = true; } return item; }
/// <summary> /// Ocorre ao selecionar um ou mais itens na ListView /// Sempre que é selecionado e ocorre a desseleção de outro, /// o evento é disparado com parâmetro null. /// </summary> private void lista_SelectedIndexChanged(object sender, System.EventArgs e) { int nISaquinhos; UseWaitCursor = true; nISaquinhos = lista.SelectedItems.Count; if (nISaquinhos == 0) { // Como não tem ISaquinho selecionado, o parametro null é passado. if (SeleçãoMudou != null) SeleçãoMudou(this, null); if (SaquinhosSelecionados != null) SaquinhosSelecionados(this, new ISaquinho[0]); } if (nISaquinhos == 1 && SeleçãoMudou != null) { SeleçãoMudou(this, hashListViewItemSaquinho[lista.SelectedItems[0]]); } else if (nISaquinhos > 1 && SaquinhosSelecionados != null) { ISaquinho [] ISaquinhos = new ISaquinho[nISaquinhos]; for (int i = 0; i < nISaquinhos; i++) ISaquinhos[i] = hashListViewItemSaquinho[lista.SelectedItems[i]]; SaquinhosSelecionados(this, ISaquinhos); } AtualizarEnabledBotõesBarraFerramentas(); MarcarStatusDesatualizado(); UseWaitCursor = false; }
private void RemoverInterno(ISaquinho s) { double quantidadeRemanescente = 0; ListViewItem itemListView; if (!saquinhos.Contains(s)) { ISaquinho saquinhoAlternativo = null; // Tentativa de obter algum ISaquinho parecido para remoção hashAgrupamento.TryGetValue(s.IdentificaçãoAgrupável(), out saquinhoAlternativo); if ((saquinhoAlternativo == null) || (quantidadeRemanescente < 0)) throw new Exception("Tentativa de remover um saquinho que não existia na bandeja"); else { quantidadeRemanescente = saquinhoAlternativo.Quantidade - s.Quantidade; s = saquinhoAlternativo; } } itemListView = hashSaquinhoListViewItem[s]; // Atualiza hash items hashAgrupamento.Remove(s.IdentificaçãoAgrupável()); hashListViewItemSaquinho.Remove(itemListView); hashSaquinhoListViewItem.Remove(s); #if DEBUG if (SuspendeLeiaute) throw new Exception("Tentativa de remover um item de listView com o leiatue suspenso. Devido à bug do VS isto causa um dead lock. Bug verificado tambem no VS2005"); #endif itemListView.Remove(); /* Podem existir vários sáquinhos agrupáveis * Vários outros agrupaveis a este talvés não foram adicionados na hash * uma vez que este já estava referenciado nela. * Portanto, deve-se procurar por outro agrupável para ser referenciado. */ saquinhos.Remove(s); string identificação = s.IdentificaçãoAgrupável(); foreach (ISaquinho saquinho in saquinhos) { if (saquinho.IdentificaçãoAgrupável() == identificação) { hashAgrupamento.Add(identificação, (Saquinho) saquinho); break; } } // Atualiza dados da barra de status. totalMercadorias -= s.Quantidade; totalPeso -= s.Quantidade * s.Peso; totalÍndice -= s.Quantidade * s.Mercadoria.ÍndiceArredondado; if (s.Mercadoria.DePeso) totalÍndicePeso -= s.Quantidade * s.Mercadoria.ÍndiceArredondado; else totalÍndicePeça -= s.Quantidade * s.Mercadoria.ÍndiceArredondado; if (cotação != null) totalPreço -= CalcularValor(s); if (quantidadeRemanescente > 0) { ISaquinho novoSaquinho = s.Clone(quantidadeRemanescente); Adicionar(novoSaquinho); } AtualizarEnabledBotõesBarraFerramentas(); }
/// <summary> /// Remove um saquinho da bandeja. /// O Saquinho pode ou não estar na bandeja. Caso não esteja, um agrupável é parcialmente removido. /// </summary> public void Remover(ISaquinho s) { RemoverInterno(s); if (SaquinhoExcluído != null) SaquinhoExcluído(this, s); }
private void AtualizaContagemStatus(ISaquinho sOuNovo) { totalMercadorias += sOuNovo.Quantidade; totalPeso += sOuNovo.Quantidade * sOuNovo.Peso; totalÍndice += sOuNovo.Quantidade * sOuNovo.Mercadoria.ÍndiceArredondado; if (sOuNovo.Mercadoria.DePeso) totalÍndicePeso += sOuNovo.Quantidade * sOuNovo.Mercadoria.ÍndiceArredondado; else totalÍndicePeça += sOuNovo.Quantidade * sOuNovo.Mercadoria.ÍndiceArredondado; if (cotação != null) totalPreço += CalcularValor(sOuNovo); }
private void quadroMercadoria_EventoAlterou(ISaquinho saquinhoOriginal, double novaQtd, double novoPeso) { if (baseInferior.ConferirTravamento()) { MessageBox.Show(ParentForm, "ATENÇÃO\n\nEste documento foi travado e não pode ser alterado.", "Documento travado", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } try { bandejaAgrupada.Remover(saquinhoOriginal); } catch (OperationCanceledException) { return; } ISaquinho novoSaquinho = saquinhoOriginal.Clone(novaQtd); novoSaquinho.Mercadoria.EsquecerCoeficientePersonalizado(); if (novoSaquinho.Mercadoria.DePeso) novoSaquinho.Mercadoria.Peso = novoPeso; bandejaAgrupada.Adicionar(novoSaquinho); DateTime agora = Entidades.Configuração.DadosGlobais.Instância.HoraDataAtual; try { bandejaHistórico.Adicionar(new SaquinhoHistóricoRelacionado(coleção.Relacionar(novoSaquinho.Mercadoria, novaQtd, novoSaquinho.Mercadoria.ÍndiceArredondado))); } catch (OperaçãoCancelada) { MessageBox.Show( ParentForm, "A operação foi cancelada pelo sistema. Nenhuma alteração foi realizada no banco de dados.", "Relacionamento de mercadoria", MessageBoxButtons.OK, MessageBoxIcon.Stop); return; } catch (InvalidAsynchronousStateException) { RecarregarDocumentoInconsistente(); } }
private void bandejaAcerto_SeleçãoMudou(Apresentação.Mercadoria.Bandeja.Bandeja bandeja, ISaquinho saquinho) { quadroRastro.Visible = saquinho != null; }
private void bandeja_SeleçãoMudou(Apresentação.Mercadoria.Bandeja.Bandeja bandeja, ISaquinho saquinho) { if (saquinho != null) { SaquinhoEtiqueta saquinhoCofre; /* Garantir que nenhum OnLeave ser executado * depois de alterar os dados. */ Application.DoEvents(); saquinhoCofre = (SaquinhoEtiqueta)saquinho; txtReferência.Referência = saquinho.Mercadoria.Referência; txtPeso.Double = saquinho.Peso; txtQuantidade.Int = Convert.ToInt32(saquinho.Quantidade); cmbFormato.SelectedItem = saquinhoCofre.Etiqueta; cmdNovo.Text = "&Alterar"; cmdNovo.Enabled = true; cmdNovo.Tag = saquinhoCofre; PrepararMercadoria(saquinho.Mercadoria); } else if (cmdNovo.Tag != null) { cmdNovo.Text = "&Adicionar"; cmdNovo.Tag = null; } }
/// <summary> /// Deve ser chamado quando o usuário seleciona uma mercadoria na bandeja para alteração de seus dados. /// Os dados no quadro são descatardos, e substituídos pelo saquinho passado em parâmetro. /// O botão deve mudar para "Alterar", e ficar não enabled até que usuário faça alguma mudança. /// </summary> /// <param name="saquinho">A ser alterado</param> public void AlternarParaAlteração(ISaquinho saquinho) { saquinhoAntesAlteração = saquinho.Clone(saquinho.Quantidade); botão.Text = "&Alterar"; /* A mudança do txtReferência irá gerar um evento * de que a referencia foi alterada. * Então é necessário marcar que o controle acabou de ir para o modo alternaddo, * evitando que o quadro volte para o adicionar. */ inícioAlteração = true; /* Alterar os dados requer que o modo de digitação * rápida seja desligado durante a alteração. * -- Júlio, 17/03/2006 */ ModoRápido = false; chkModoRápido.Enabled = false; txtReferência.Txt.Text = saquinho.Mercadoria.Referência; txtPeso.Text = saquinho.Peso.ToString(); txtQuantidade.Text = saquinho.Quantidade.ToString(); lblPeso.Enabled = txtPeso.Enabled = saquinho.Mercadoria.DePeso; ValidarDados(); ação = AçãoEnum.Alterar; inícioAlteração = false; }
private void bandejaAgrupada_AlteraçãoÍndiceSolicitada(Bandeja bandeja, ISaquinho saquinho) { if (!baseInferior.ConferirTravamento()) { ISaquinho saquinhoParaReAdicionar = saquinho.Clone(saquinho.Quantidade); try { EscolherÍndice(saquinhoParaReAdicionar.Mercadoria, ModoJanelaÍndice.MostrarSempre); bandejaAgrupada.Remover(saquinho); } catch { return; } Adicionar(saquinhoParaReAdicionar.Mercadoria, saquinhoParaReAdicionar.Quantidade, ModoJanelaÍndice.NuncaMostrarNãoAlterandoÍndice); } }
private void bandeja_SaquinhoExcluído(Apresentação.Mercadoria.Bandeja.Bandeja bandeja, ISaquinho saquinho) { opçãoImprimir.Enabled = bandeja.Count > 0; }
private void bandejaHistórico_SeleçãoMudou(Bandeja bandeja, ISaquinho saquinho) { // Assim que usuário clica no item do histórico, a bandeja agrupada já encontra o item para facilitar modificação if (saquinho != null) { if (saquinho.Mercadoria.Peso != saquinho.Peso) throw new Exception("Esperava-se que o peso da mercadoria fosse o peso do saquinho."); if (bandejaAgrupada.Contém(saquinho.Mercadoria)) bandejaAgrupada.Selecionar(saquinho.Mercadoria); } }
private void bandejaAgrupada_SeleçãoMudou(Bandeja bandeja, ISaquinho saquinho) { if (saquinho != null) { quadroFoto.MostrarFoto(saquinho.Mercadoria); if (tipoExibiçãoAtual == TipoExibição.TipoAgrupado) quadroMercadoria.AlternarParaAlteração(saquinho); } else { // Des-selecionou quadroMercadoria.AlternarParaAdicionar(); } }
private void bandejaAgrupada_SaquinhoExcluído(Bandeja bandeja, ISaquinho saquinho) { if (!baseInferior.ConferirTravamento()) { try { HistóricoRelacionamentoItem item = coleção.Relacionar(saquinho.Mercadoria, saquinho.Quantidade * -1, saquinho.Mercadoria.ÍndiceArredondado); bandejaHistórico.Adicionar(new SaquinhoHistóricoRelacionado(item)); } catch (OperaçãoCancelada) { MessageBox.Show( ParentForm, "A operação foi cancelada pelo sistema. Nenhuma alteração foi realizada no banco de dados.", "Relacionamento de mercadoria", MessageBoxButtons.OK, MessageBoxIcon.Stop); return; } catch (InvalidAsynchronousStateException) { RecarregarDocumentoInconsistente(); throw new OperationCanceledException(); } } }
private double CalcularValor(ISaquinho s) { return Math.Round(s.Mercadoria.CalcularPreço(cotação) * s.Quantidade, 2); }
/// <summary> /// Remove vários saquinhos semelhantes ao do parametro e adiciona um que substitui todos. /// </summary> /// <remarks> O saquinhoAtual já deve estar na bandeja </remarks> /// <param name="saquinhoAtual"></param> /// <returns>Saquinhos agrupáveis ao atual, incluíndo o do parametro</returns> private List<Saquinho> AgruparItem(ISaquinho saquinhoAtual) { List<Saquinho> agrupáveisAoSaquinhoAtual; agrupáveisAoSaquinhoAtual = ObterAgrupáveis(saquinhoAtual); // Se for um, tem apenas ele mesmo. if (agrupáveisAoSaquinhoAtual.Count > 1) { double totalQtd = 0; // Retira os saquinhos que serão eliminados da cópia foreach (Entidades.ISaquinho s in agrupáveisAoSaquinhoAtual) { totalQtd += s.Quantidade; RemoverInterno(s); } // Adiciona novo saquinho que é equivalente ao grupo ISaquinho novoSaquinho = saquinhoAtual.Clone(totalQtd); Adicionar(novoSaquinho, false); } return agrupáveisAoSaquinhoAtual; }
/// <summary> /// Atualiza elementos na ListView /// </summary> /// <param name="ISaquinho">Entidades.ISaquinho.ISaquinho a ser atualizado</param> /// <param name="item">Item da ListView</param> protected virtual void AtualizaElementoListView(ISaquinho saquinho, ListViewItem item) { if (colReferência.Index == -1) return; item.SubItems[colReferência.Index].Text = saquinho.Mercadoria.Referência; item.SubItems[colReferência.Index].Name = colReferência.Text; item.SubItems[colQuantidade.Index].Text = saquinho.Quantidade.ToString(); item.SubItems[colQuantidade.Index].Name = colQuantidade.Text; item.SubItems[colPeso.Index].Text = saquinho.Peso.ToString("0.00"); item.SubItems[colPeso.Index].Name = colPeso.Text; item.SubItems[colÍndice.Index].Text = Entidades.Mercadoria.Mercadoria.FormatarÍndice(saquinho.Mercadoria.ÍndiceArredondado); item.SubItems[colÍndice.Index].Name = colÍndice.Text; item.SubItems[colGrupo.Index].Text = saquinho.Mercadoria.Grupo.ToString(); item.SubItems[colGrupo.Index].Name = colGrupo.Text; item.SubItems[colFaixa.Index].Text = (saquinho.Mercadoria.Faixa != null ? saquinho.Mercadoria.Faixa.ToString() : ""); item.SubItems[colFaixa.Index].Name = colFaixa.Text; System.Globalization.CultureInfo cultura = DadosGlobais.Instância.Cultura; if (MostrarPreço) { double valorTotal = CalcularValor(saquinho); item.SubItems[colPreçoTot.Index].Text = valorTotal.ToString("C", cultura); item.SubItems[colPreçoUn.Index].Text = saquinho.Mercadoria.CalcularPreço(cotação); } }
/// <summary> /// Sinaliza adição ou remoção na bandeja, mostrando /// controle SinalizaçãoCarga com a mudança. /// Caso o ícone não esteja pronto, ele é carregado /// em segundo plano. /// </summary> private void SinalizarSaquinho(ISaquinho saquinho) { if (saquinho.Mercadoria.Ícone != null) SinalizaçãoCarga.Sinalizar(lista, saquinho.Mercadoria.Referência, (saquinho.Mercadoria.DePeso ? String.Format("{0} {1} unidade(s) com peso {2}.", (saquinho.Quantidade > 0 ? "Adicionada(s)" : "Removida(s)"), Math.Abs(saquinho.Quantidade), saquinho.Peso) : String.Format("{0} {1} unidade(s).", (saquinho.Quantidade > 0 ? "Adicionada(s)" : "Removida(s)"), Math.Abs(saquinho.Quantidade))), saquinho.Mercadoria.Ícone ?? new Bitmap(1, 1)).IniciarTemporizador(tempoSinalização); else { AsyncSinalizarSaquinhoTardiamente método = new AsyncSinalizarSaquinhoTardiamente(SinalizarSaquinhoTardiamente); SinalizaçãoCarga sinalização = SinalizaçãoCarga.Sinalizar(lista, saquinho.Mercadoria.Referência, (saquinho.Mercadoria.DePeso ? String.Format("{0} {1} unidade(s) com peso {2}.", (saquinho.Quantidade > 0 ? "Adicionada(s)" : "Removida(s)"), Math.Abs(saquinho.Quantidade), saquinho.Peso) : String.Format("{0} {1} unidade(s).", (saquinho.Quantidade > 0 ? "Adicionada(s)" : "Removida(s)"), Math.Abs(saquinho.Quantidade)))); sinalização.IniciarTemporizador(tempoSinalização); método.BeginInvoke(sinalização, saquinho.Mercadoria, new AsyncCallback(CallbackSinalizarSaquinhoTardiamente), método); } }
private void bandejaAcerto_DuploClique(Apresentação.Mercadoria.Bandeja.Bandeja bandeja, ISaquinho saquinho) { AbrirRastro(); }
private ISaquinho SubstituirSaquinho(ISaquinho s, ISaquinho sOuNovo, string chave, ISaquinho agrupável) { hashAgrupamento.Remove(chave); sOuNovo = s.Clone(s.Quantidade + agrupável.Quantidade); hashAgrupamento[chave] = sOuNovo; RemoverInterno(agrupável); return sOuNovo; }
protected override ListViewItem ConstruirListView(ISaquinho saquinho) { ListViewItem item; SaquinhoHistóricoRelacionado saquinhoRelacionado; saquinhoRelacionado = (saquinho as SaquinhoHistóricoRelacionado); if (saquinhoRelacionado == null) { Exception erro; if (saquinho == null) erro = new NullReferenceException("O saquinho não pode ser nulo"); else erro = new InvalidCastException("O saquinho não é do tipo saquinhoRelacionado"); throw erro; } item = base.ConstruirListView(saquinho); item.SubItems[colData.Index].Text = saquinhoRelacionado.Data.ToString(); if (saquinhoRelacionado.Funcionário != null) item.SubItems[colFuncionário.Index].Text = saquinhoRelacionado.Funcionário.Nome; item.SubItems[colAção.Index].Text = saquinhoRelacionado.Tipo == SaquinhoHistóricoRelacionado.TipoEnum.Removeu ? "Excluíu" : "Relacionou"; if (saquinhoRelacionado.Tipo == SaquinhoHistóricoRelacionado.TipoEnum.Removeu) { item.ForeColor = Color.White; item.BackColor = Color.Red; item.UseItemStyleForSubItems = true; } return item; }
private void quadroMercadoriaExemplo_EventoAlterou(ISaquinho saquinhoOriginal, double novaQtd, double novoPeso) { bandejaExemplo.Remover(saquinhoOriginal); saquinhoOriginal.Mercadoria.Peso = novoPeso; bandejaExemplo.Adicionar(new Saquinho(saquinhoOriginal.Mercadoria, novaQtd)); }