none
Modelo Pessoa Cliente, Fornecedor e Colaborador RRS feed

  • Pergunta

  • Olá bom dia Pessoal.

    Utilizo AspNetCore 2 - EF e Migrations

    Criei as seguintes entidades:

    public class Cliente
    {
    	public int ClienteId { get; set; }
    	public decimal LimiteCredito { get; set; }
    	
    	...
    	
    	public virtual Pessoa Pessoa { get; set; }
    }
    public class Fornecedor
    {
    	public int FornecedorId { get; set; }
    	public string WebSite { get; set; }
    	public string ContaBancaria { get; set; }
    	
    	...
    	
    	public virtual Pessoa Pessoa { get; set; }
    }
    public class Colaborador
    {
    	public int ColaboradorId { get; set; }
    	public date Admissao { get; set; }
    	public decimal Salario {get; set; }
    	
    	...
    	
    	public virtual Pessoa Pessoa { get; set; }
    }
    public class Pessoa
    {
    	public int PessoaId { get; set; }
    	public string CpfCnpj { get; set; }	
    	public string Nome { get; set; }	
    	public List<Endereco> Enderecos {get; set; }
    	public List<Telefone> Telefones{ get; set; }
    	
    	...
    	
    }

    É possível criar uma Controller e uma View para representar Pessoas e que tenha como usuario escolher...

    ...se será um Cliente E/ou Fornecedor E/ou Colaborador? Se sim, qual seria a logica para mostrar os dados da Controller na view? não consegui fazer!

    ou seria recomendado fazer uma Controller e uma View para cada uma das entidades?


    O que eu queria evitar é a duplicação de código semelhante... pois ainda pode ter outros tipos de Pessoas como Transportadores e Contatos...

    obrigado quem puder ajudar!


    • Editado DevMaicon segunda-feira, 9 de abril de 2018 12:52 Utilizo AspNetCore2
    segunda-feira, 9 de abril de 2018 12:37

Respostas

  • Bom minha solução foi inserir a propriedade:

    public int PessoaId { get; set; }

    Nas classes Cliente, Fornecedor e Colaborador.

    E na Classe Pessoa:

            public Cliente Cliente { get; set; }
            public Fornecedor Fornecedor { get; set; }
            public Colaborador Colaborador { get; set; }

    Dessa forma funcionou perfeitamente.

    Na minha classe PessoaController busco todas as pessoas do tipo que eu tiver selecionado:

    pessoa = _context.Pessoas.Include(x => x.Cliente).Where(x => x.TipoPessoa == tipo);
    
    

    Envio para View uma ViewBag.Tipo e mostro a View conforme o tipo:

    // CAMPOS GERAL DE PESSOAS
    // NOME
    // TELEFONES
    // ENDERECOS
    
    @if (ViewBag.Tipo == TipoPessoa.Clientes)
    {
            //CAMPOS APENAS DO CLIENTE
    }
    
    @if (ViewBag.Tipo == TipoPessoa.Fornecedor)
    {
            //CAMPOS APENAS DO FORNECEDOR
    }

    Dessa forma, basicamente vou ter apenas uma Controller, uma Model e uma View para representar pessoas do tipo que quiser (Clientes, Fornecedores, Colaboradores, Usuarios, Transportadores, Contatos...etc) 

    Deu trabalho, mas valeu apenas.


    • Marcado como Resposta DevMaicon terça-feira, 10 de abril de 2018 19:51
    terça-feira, 10 de abril de 2018 19:51

Todas as Respostas

  • acredito que preciso fazer algo no modelo, mas não sei o que.
    segunda-feira, 9 de abril de 2018 14:05
  • Michaeell,

       Acredito que se você usa HERANÇA vi te ajudar muito.

    ====================================================

    Modelando classe PESSOA e CLIENTES com herança

    https://social.msdn.microsoft.com/Forums/pt-BR/55ebb5ca-3e36-44a2-abcd-86f41fbc070d/modelando-classe-pessoa-e-clientes-com-herana?forum=adoptpt
    ====================================================

    []'s,
    Fabio I.
    segunda-feira, 9 de abril de 2018 14:16
  • Bom minha solução foi inserir a propriedade:

    public int PessoaId { get; set; }

    Nas classes Cliente, Fornecedor e Colaborador.

    E na Classe Pessoa:

            public Cliente Cliente { get; set; }
            public Fornecedor Fornecedor { get; set; }
            public Colaborador Colaborador { get; set; }

    Dessa forma funcionou perfeitamente.

    Na minha classe PessoaController busco todas as pessoas do tipo que eu tiver selecionado:

    pessoa = _context.Pessoas.Include(x => x.Cliente).Where(x => x.TipoPessoa == tipo);
    
    

    Envio para View uma ViewBag.Tipo e mostro a View conforme o tipo:

    // CAMPOS GERAL DE PESSOAS
    // NOME
    // TELEFONES
    // ENDERECOS
    
    @if (ViewBag.Tipo == TipoPessoa.Clientes)
    {
            //CAMPOS APENAS DO CLIENTE
    }
    
    @if (ViewBag.Tipo == TipoPessoa.Fornecedor)
    {
            //CAMPOS APENAS DO FORNECEDOR
    }

    Dessa forma, basicamente vou ter apenas uma Controller, uma Model e uma View para representar pessoas do tipo que quiser (Clientes, Fornecedores, Colaboradores, Usuarios, Transportadores, Contatos...etc) 

    Deu trabalho, mas valeu apenas.


    • Marcado como Resposta DevMaicon terça-feira, 10 de abril de 2018 19:51
    terça-feira, 10 de abril de 2018 19:51