private void listViewVisitantes_AoDuploClique(Visita visita)
        {
            List<Entidades.Pessoa.Pessoa> lstPessoas = visita.Pessoas.ExtrairElementos();
            if (lstPessoas.Count == 0)
                return;

            SubstituirBase(new BaseAtendimento(lstPessoas[0]));
        }
        public ResolverVisitante(Visita visita)
        {
            InitializeComponent();

            this.visita = visita;

            foreach (Entidades.Pessoa.Pessoa pessoa in visita.Pessoas.ExtrairElementos())
                listaPessoas.Itens.Add(pessoa);

            foreach (string nome in visita.Nomes.ExtrairElementos())
                listaPessoas.Itens.Add(nome, "", "Não cadastrado");
        }
 private void AtribuirEspera(Visita visita, ListViewItem item)
 {
     if (visita.Espera.HasValue)
     {
         item.SubItems.Add(visita.Atendente.Nome);
         item.Group = lstVisitantes.Groups["lstGrpAtendimento"];
     }
     else
     {
         item.SubItems.Add("");
         item.Group = lstVisitantes.Groups["lstGrpAguardando"];
     }
 }
        private ListViewItem CriarItem(Visita visita)
        {
            ListViewItem item = new ListViewItem(visita.ExtrairNomes());

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

            AtribuirEspera(visita, item);
            AtribuirDataEntrada(visita, item);
            AtribuirSaída(visita, item);
            AdicionarHashes(visita, item);

            return item;
        }
        public ListaPessoasVisitante(Visita visita)
        {
            InitializeComponent();

            lblPrimária.Text = visita.ExtrairNomes();
            lblSecundária.Text = visita.Setor != null ? visita.Setor.Nome : "N/D";

            this.visita = visita;

            if (visita.Saída.HasValue)
            {
                if (visita.Atendente != null)
                {
                    lblDescrição.Text = string.Format(
                        "Atendido em {0:dd/MM/yyyy, HH:mm} por {1}",
                        visita.Espera.HasValue ? visita.Entrada.AddSeconds(visita.Espera.Value) : visita.Entrada,
                        visita.Atendente.Nome);
                }
                else
                    lblDescrição.Text = string.Format(
                        "Chegou em {0:dd/MM/yyyy, HH:mm} e saiu sem ser atendido às {1:HH:mm}",
                        visita.Entrada, visita.Saída.Value);
            }
            else if (visita.Atendente == null)
            {
                lblDescrição.Text = string.Format(
                    "Aguardando atendimento desde {0:dd/MM/yyyy, HH:mm}",
                    visita.Entrada);

                picFoto.Image = Resource.lendo1;
            }
            else
            {
                lblDescrição.Text = string.Format(
                    "Em atendimento desde {0:dd/MM/yyyy, HH:mm} por {1}",
                    visita.Espera.HasValue ? visita.Entrada.AddSeconds(visita.Espera.Value) : visita.Entrada,
                    visita.Atendente.PrimeiroNome);
            }
        }
示例#6
0
 /// <summary>
 /// Constrói a estrutura de atendimento.
 /// </summary>
 /// <param name="visita">Visita vinculada ao cliente.</param>
 /// <param name="atendente">Atendente do cliente.</param>
 public Atendimento(Visita visita, Funcionário atendente)
 {
     this.visita = visita;
     this.atendente = atendente;
 }
示例#7
0
 /// <summary>
 /// Sinaliza o encerramento de um atendimento.
 /// </summary>
 /// <param name="visita"></param>
 public virtual void EncerrarAtendimento(Visita visita)
 {
 }
示例#8
0
        public static void RegistrarAtendimento(Visita visita, Funcionário funcionário)
        {
            IniciarAtendimento(visita, funcionário);

            foreach (Rodízio rodízio in hashRodízio.Values)
                if (rodízio.Atendentes.Contains(funcionário))
                    rodízio.RealizarRodízio(funcionário);
        }
        private void RegistrarAcompanhantes(Visita visita)
        {
            foreach (object obj in Acompanhantes)
                if (obj is string)
                    visita.Nomes.Adicionar((string)obj);
                else if (obj is PessoaCPFCNPJRG)
                {
                    PessoaFísica pessoaFísica;

                    pessoaFísica = Entidades.Pessoa.PessoaFísica.ObterPessoa(((PessoaCPFCNPJRG)obj).Código);

                    if (pessoaFísica != null)
                    {
                        // Registrar baseado no cadastro
                        visita.Pessoas.Adicionar(pessoaFísica);
                    }
                    else
                        // Registrar acompanhante anônimo
                        visita.Nomes.Adicionar(((PessoaCPFCNPJRG)obj).Nome);
                }

            visita.Atualizar();

            AoCadastrar(visita);

            Preparar();

            SubstituirBaseParaInicial();
        }
示例#10
0
        /// <summary>
        /// Ocorre ao cadastrar um visitante.
        /// </summary>
        private void biRegistrarVisitante_AoCadastrar(Visita visita)
        {
            listaVisitantes.AdicionarVisita(visita);

            if (visita.Setor != null)
            {
                Rodízio rodízio = Rodízio.ObterRodízio(visita.Setor);
                Atendimento atendimento;

                atendimento = rodízio.ObterPróximoAtendimento();

                if (atendimento != null)
                    listaVisitantes.AtualizarVisita(atendimento.Visita);
            }
        }
示例#11
0
		/// <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);
                }
        }
        public void AtualizarVisita(Visita visita)
        {
            ListViewItem linha;

            linha = hashVisitaLinha[visita.Entrada];
            hashLinhaVisita[linha] = visita;

            if (linha != null)
            {
                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)
                    linha.Group = lstVisitantes.Groups["lstGrpAtendimento"];
                else
                {
                    linha.Group = lstVisitantes.Groups["lstGrpPassado"];
                    linha.UseItemStyleForSubItems = true;
                    linha.ForeColor = SystemColors.GrayText;
                    linha.SubItems[colSaída.Index].Text = visita.Saída.Value.ToLongTimeString();
                }
            }
        }
        public void RemoverVisita(Visita visita)
        {
            ListViewItem linha;

            linha = hashVisitaLinha[visita.Entrada];

            if (linha != null)
            {
                hashVisitaLinha.Remove(visita.Entrada);
                hashLinhaVisita.Remove(linha);
                linha.Remove();
            }
        }
        public void AdicionarVisita(Visita visita)
        {
            ListViewItem item = CriarItem(visita);

            lstVisitantes.Items.Add(item);
            item.EnsureVisible();
        }
        private static void AtribuirDataEntrada(Visita visita, ListViewItem item)
        {
            if (!visita.Saída.HasValue && visita.Entrada.Date != DateTime.Now.Date)
            {
                /* Pessoas em atendimento, porém com data diferente
                 * são exibidas com data completa.
                 */
                TimeSpan dif = visita.Entrada.Date - DateTime.Now.Date;

                if (dif.Days == 1)
                    item.SubItems.Add("Ontem, " + visita.Entrada.ToString("HH:mm"));
                else
                    item.SubItems.Add(visita.Entrada.ToString("dd/MM/yyyy HH:mm"));
            }
            else
                item.SubItems.Add(visita.Entrada.ToLongTimeString());
        }
示例#16
0
        private static string ExtrairNomes(Visita visita)
        {
            string strAtendimentos = "";

            foreach (Pessoa pessoa in visita.Pessoas)
            {
                if (strAtendimentos.Length > 0)
                    strAtendimentos += ", ";

                strAtendimentos += pessoa.Nome;
            }

            foreach (string nome in visita.Nomes)
            {
                if (strAtendimentos.Length > 0)
                    strAtendimentos += ", ";

                strAtendimentos += nome;
            }

            return strAtendimentos;
        }
示例#17
0
        /// <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());
                }
        }
 private void AdicionarHashes(Visita visita, ListViewItem item)
 {
     hashLinhaVisita[item] = visita;
     hashVisitaLinha[visita.Entrada] = item;
 }
示例#19
0
		/// <summary>
		/// Remove visitante
		/// </summary>
		private void RemoverVisita(Visita visita)
		{
			ListViewItem linha;

            // Encontrar linha da listview
            linha = hashVisitaLinha[Chave(visita.Entrada)];

            if (linha != null)
            {
                hashVisitaLinha.Remove(Chave(visita.Entrada));
                hashLinhaVisita.Remove(linha);

                // Verificar se existe outras linhas para esta visita
                linha.Remove();
            }

            AtualizarFuncionários();
		}
        private void AtribuirSaída(Visita visita, ListViewItem item)
        {
            if (visita.Saída.HasValue)
            {
                item.SubItems.Add(visita.Saída.Value.ToLongTimeString());

                if (visita.Entrada.Date == DateTime.Now.Date)
                    item.Group = lstVisitantes.Groups["lstGrpPassado"];
                else
                {
                    string grpChave = "lstGrpPassado" + visita.Entrada.Date.ToShortDateString();

                    if (lstVisitantes.Groups[grpChave] == null)
                        lstVisitantes.Groups.Add(
                            grpChave,
                            visita.Entrada.Date.ToLongDateString());

                    item.Group = lstVisitantes.Groups[grpChave];
                }
            }
            else
                item.SubItems.Add("");
        }
		/// <summary>
		/// Ocorre quando o usuário clica em OK
		/// </summary>
        private void cmdOK_Click(object sender, System.EventArgs e)
        {
            Visita visita;

            Cursor = Cursors.WaitCursor;
            AguardeDB.Mostrar();

            // Procurar cadastro do visitante
            if (cadastro != null)
            {
                // Garantir que o cadastro recuperará o tipo de pessoa correto.
                cadastro = Entidades.Pessoa.Pessoa.ObterPessoa(cadastro.Código);

                if (!(cadastro is Entidades.Pessoa.PessoaFísica))
                    cadastro = null;
            }
            else
            {
                PessoaFísica[] pessoas = Entidades.Pessoa.PessoaFísica.ObterPessoas(Nome);

                if (pessoas.Length > 0)
                {
                    using (Apresentação.Pessoa.Consultas.SelecionarPessoa escolher = new Apresentação.Pessoa.Consultas.SelecionarPessoa(pessoas, Nome))
                    {
                        AguardeDB.Suspensão(true);

                        if (escolher.ShowDialog(this.ParentForm) != DialogResult.OK)
                            return;

                        AguardeDB.Suspensão(false);

                        if (escolher.PessoaEscolhida != null)
                            cadastro = (PessoaFísica)escolher.PessoaEscolhida;
                    }
                }
            }

            if (cadastro == null)
            {
                // Registrar cadastro anônimo
                visita = new Visita();
                visita.Nomes.Adicionar(Nome);
                visita.Setor = Setor;
            }
            else
            {

                // Registrar baseado no cadastro
                visita = new Visita((PessoaFísica)cadastro);
                visita.Setor = Setor;

                if (visita.Setor != null && cadastro.Setor != null &&
                    visita.Setor.Código != cadastro.Setor.Código)
                {
                    AguardeDB.Fechar();
                    if (MessageBox.Show(
                        ParentForm,
                        "ATENÇÃO\n\nO(a) cliente " + cadastro.PrimeiroNome +
                        " está cadastrado como cliente do setor " + cadastro.Setor.Nome +
                        ". No entanto, você marcou o cliente para o setor " + visita.Setor.Nome +
                        ".\n\nDeseja continuar assim mesmo?",
                        "Registro de visitante",
                        MessageBoxButtons.YesNo, MessageBoxIcon.Warning,
                        MessageBoxDefaultButton.Button2) == DialogResult.No)
                    {
                        return;
                    }
                }
            }

            visita.Cadastrar();
            RegistrarAcompanhantes(visita);
         
            AguardeDB.Fechar();
            Cursor = Cursors.Default;
        }
示例#22
0
        /// <summary>
        /// Registra o início de atendimento do atendente ao cliente.
        /// </summary>
        protected static void IniciarAtendimento(Visita visita, Funcionário atendente)
        {
            atendente.Situação = EstadoFuncionário.Atendendo;

            if (!visita.Espera.HasValue)
                try
                {
                    visita.Espera = Convert.ToUInt32(((TimeSpan)(DadosGlobais.Instância.HoraDataAtual - visita.Entrada)).TotalSeconds);
                }
                catch (OverflowException)
                {
                    visita.Espera = UInt32.MaxValue;
                }

            visita.Atendente = atendente;
            visita.Atualizar();
        }
        /// <summary>
        /// Verifica se um visitante é de interesse do usuário.
        /// </summary>
        /// <returns>Se o visitante é de interesse do usuário.</returns>
        private bool ValidarVisitante(Visita visita)
        {
            bool válido = false;

            foreach (Entidades.Setor setor in setores)
                válido |= visita.Setor.Código == setor.Código;

            return válido;
        }
示例#24
0
 /// <summary>
 /// Chamado ao encerrar um atendimento.
 /// </summary>
 public override void EncerrarAtendimento(Visita visita)
 {
     if (visita.Atendente != null && !visita.AtendimentoForaDoRodízio)
         RealizarRodízio(visita.Atendente);
 }