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(); } }