/// <summary>
		/// Trata evento de visitante que entrou na empresa
		/// </summary>
        public void AdicionarVisita(Visita visita)
        {
            if (InvokeRequired)
            {
                AtualizarVisitaCallback método = new AtualizarVisitaCallback(AdicionarVisita);
                BeginInvoke(método, visita);
            }
            else
                try
                {
                    ListViewItem item = new ListViewItem(ExtrairNomes(visita));

                    item.SubItems.Add(visita.Setor != null ? visita.Setor.Nome : "");

                    if (visita.Espera.HasValue)
                    {
                        item.SubItems.Add(visita.Atendente.Nome);
                        item.Group = lstVisitantes.Groups["lstGrpAtendimento"];
                    }
                    else
                    {
                        item.SubItems.Add("");
                        item.Group = lstVisitantes.Groups["lstGrpAguardando"];
                    }

                    item.SubItems.Add(visita.Entrada.ToLongTimeString());

                    if (visita.Saída.HasValue)
                    {
                        item.SubItems.Add(visita.Saída.Value.ToLongTimeString());
                        item.Group = lstVisitantes.Groups["lstGrpPassado"];
                    }
                    else
                        item.SubItems.Add("");

                    lstVisitantes.Items.Add(item);

                    // Adicionar na hashtable de linhas
                    hashLinhaVisita[item] = visita;

                    hashVisitaLinha[Chave(visita.Entrada)] = item;

                    // Garantir visibilidade
                    item.EnsureVisible();
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.ToString());
                    Acesso.Comum.Usuários.UsuárioAtual.RegistrarErro(e);
                }
        }
        /// <summary>
		/// Atualiza o estado do visitante na lista de visitantes
		/// </summary>
        public void AtualizarVisita(Visita visita)
        {
            if (InvokeRequired)
            {
                AtualizarVisitaCallback método = new AtualizarVisitaCallback(AtualizarVisita);
                BeginInvoke(método, visita);
            }
            else
                try
                {
                    ListViewItem linha;

                    if (hashVisitaLinha.TryGetValue(Chave(visita.Entrada), out linha))
                    {
                        hashLinhaVisita[linha] = visita;
                        linha.Text = ExtrairNomes(visita);
                        linha.SubItems[colAtendente.Index].Text = visita.Atendente != null ? visita.Atendente.Nome : "";
                        if (!visita.Espera.HasValue && !visita.Saída.HasValue)
                            linha.Group = lstVisitantes.Groups["lstGrpAguardando"];

                        else if (!visita.Saída.HasValue)
                        {
                            if (visita.Atendente != null)
                            {
                                linha.Group = lstVisitantes.Groups["lstGrpAtendimento"];

                                ListViewItem itemFunc = hashVendedorLinha[visita.Atendente.Código];

                                itemFunc.SubItems[colCliente.Index].Text = ExtrairNomes(visita);
                                itemFunc.SubItems[colSituação.Index].Text = visita.Atendente.Situação.ToString();

                                ColorirFuncionário(itemFunc, visita.Atendente);
                            }
                        }
                        else
                        {
                            linha.Group = lstVisitantes.Groups["lstGrpPassado"];
                            linha.UseItemStyleForSubItems = true;
                            linha.ForeColor = SystemColors.GrayText;
                            linha.SubItems[colSaída.Index].Text = visita.Saída.Value.ToLongTimeString();

                            if (visita.Atendente != null)
                                AtualizarFuncionário(visita.Atendente);
                        }
                    }
                }
                catch (Exception e)
                {
                    Acesso.Comum.Usuários.UsuárioAtual.RegistrarErro(e);
                    MessageBox.Show(this, e.ToString());
                }
        }