Beispiel #1
0
		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();
		}
Beispiel #2
0
        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;
        }
Beispiel #3
0
        /// <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>
		/// 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 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();
            }
        }