示例#1
0
        private static CadastroPessoa ConstróiJanelaCadastro(TipoPessoaFísica tipoPessoaFísica)
        {
            CadastroPessoa dlg;
            switch (tipoPessoaFísica)
            {
                case TipoPessoaFísica.Outro:
                    dlg = new CadastroCliente(new PessoaFísica());
                    break;

                case TipoPessoaFísica.Funcionário:
                    dlg = new CadastroFuncionário(new Funcionário());
                    break;

                case TipoPessoaFísica.Representante:
                    dlg = new CadastroRepresentante(new Representante());
                    break;

                default:
                    throw new NotSupportedException("Tipo de pessoa-física não suportado.");
            }

            return dlg;
        }
		/// <summary>
		/// Ocorre ao clicar em "Abrir ficha".
		/// </summary>
		private void opçãoAbrir_Click(object sender, System.EventArgs e)
		{
			DialogResult            resultado;
			Entidades.Pessoa.Pessoa entidade;

			/* Abaixo será verificado qual o tipo da pessoa. Em caso
			 * de alteração, deve-se tomar o CUIDADO com a ORDEM
			 * de verificação, pois uma classe pai responderá
			 * pelas classes filhas que estiverem após a sua verificação.
			 */

			// Funcionário
			if (Entidades.Pessoa.Funcionário.ÉFuncionário(pessoa))
			{
                AguardeDB.Mostrar();

                try
                {
                    if (!(pessoa is Funcionário))
                        pessoa = Entidades.Pessoa.Funcionário.ObterPessoa(pessoa.Código);
                }
                finally
                {
                    AguardeDB.Fechar();
                }

				using (CadastroFuncionário frm = new CadastroFuncionário((Entidades.Pessoa.Funcionário) pessoa))
				{
					resultado = frm.ShowDialog(this.ParentForm);
					entidade  = frm.Funcionário;
				}
			}
			/* Representante ou Pessoa Física
			 * 
			 * Um representante só possui um único campo inalterável (código)
			 * e, portanto, pode ser encarado como pessoa física.
			 */
			else if (pessoa is Entidades.Pessoa.PessoaFísica)
			{
                using (CadastroCliente frm = new CadastroCliente((PessoaFísica)pessoa))
				{
					resultado = frm.ShowDialog(this.ParentForm);
					entidade = frm.Pessoa;
				}
			}
			// Pessoa jurídica
            else if (pessoa is Entidades.Pessoa.PessoaJurídica)
                using (CadastroCliente frm = new CadastroCliente((PessoaJurídica)pessoa))
                {
                    resultado = frm.ShowDialog(this.ParentForm);
                    entidade = frm.Pessoa;
                }
            else if (pessoa is Entidades.Pessoa.Pessoa)
            {
                Entidades.Pessoa.PessoaJurídica juridica =
                    Entidades.Pessoa.PessoaJurídica.ObterPessoa(pessoa.Código);
                if (juridica != null)
                {
                    using (CadastroCliente frm = new CadastroCliente(juridica))
                    {
                        resultado = frm.ShowDialog(this.ParentForm);
                        entidade = frm.Pessoa;
                    }
                }
                else
                {
                    PessoaFísica fisica = PessoaFísica.ObterPessoa(pessoa.Código);

                    if (fisica != null)
                    {
                        using (CadastroCliente frm = new CadastroCliente(fisica))
                        {
                            resultado = frm.ShowDialog(this.ParentForm);
                            entidade = frm.Pessoa;
                        }
                    }
                    else
                    {
                        throw new Exception("A pessoa é do Tipo Entidades.Pessoa, porém não é física nem jurídica!");
                    }
                }
            }
            else
            {
                throw new NotSupportedException("O tipo de pessoa \"" + pessoa.GetType().Name + "\" não é suportado. Código:" + pessoa.Código.ToString());
            }

			// Atualizar dados.
            if (resultado == DialogResult.OK)
            {
                AtualizarEntidade(entidade);
            }
            else if (resultado == DialogResult.Abort)
            {
                base.SubstituirBaseParaAnterior();
            }
		}