PersonComponent: mudanças entre as edições

De BIS Wiki
Ir para navegação Ir para pesquisar
Sem resumo de edição
Linha 6: Linha 6:


A principal ideia do serviço Person do BISCore é garantir um "cadastro único" das pessoas (Físicas e Jurídicas) em todo o sistema. Permitindo que as pessoas cadastradas em um módulo estejam disponíveis em outros módulo. Já a ideia do PersonComponent é simplificar a implementação dessa ideia nas telas dos módulos que utilizam o Person para manipular o cadastro dessas pessoas. Assim, temos as seguintes regras:
A principal ideia do serviço Person do BISCore é garantir um "cadastro único" das pessoas (Físicas e Jurídicas) em todo o sistema. Permitindo que as pessoas cadastradas em um módulo estejam disponíveis em outros módulo. Já a ideia do PersonComponent é simplificar a implementação dessa ideia nas telas dos módulos que utilizam o Person para manipular o cadastro dessas pessoas. Assim, temos as seguintes regras:
# O componente deve identificar automaticamente o tipo de pessoa (física ou jurídica) de acordo com o valor digitado em "CPF/CNPJ:".
# Para os casos em que o usuário não informe (ou não saiba) o CPF/CNPJ, o componente deve ter um campo (combobox) com as opções: "Pessoa Física Sem CPF" e "Pessoa Jurídica sem CNPJ" que permitam o componente identificar o tipo de pessoa sendo cadastrada sem a necessidade do documento.
# O componente deve estender algum tipo de layout (Grid, VerticalLayout, etc.) sem incluir nenhum "Panel" (como o BISPanel). Deixando a prerrogativa de ser inserido em um Panel ou não para a tela que o for utilizar. Algumas telas, por exemplo, podem preferir inseri-lo diretamente em alguma "Aba" do PanelTab, BISPopupPanel, etc..
# O componente deve estender algum tipo de layout (Grid, VerticalLayout, etc.) sem incluir nenhum "Panel" (como o BISPanel). Deixando a prerrogativa de ser inserido em um Panel ou não para a tela que o for utilizar. Algumas telas, por exemplo, podem preferir inseri-lo diretamente em alguma "Aba" do PanelTab, BISPopupPanel, etc..
# Devido a resolução definida no [[Padrão Visual]] o componente deve caber em uma dimensão mínima de 1000px (Largura) x 500px (Altura). E deve ser preparado para "esticar" para resoluções maiores.
# Devido a resolução definida no [[Padrão Visual]] o componente deve caber em uma dimensão mínima de 1000px (Largura) x 500px (Altura). E deve ser preparado para "esticar" para resoluções maiores.
=== Regras de Habilitação dos Campos ===
# O campo "CPF/CNPJ:" é o único campo que ficará sempre habilitado.
# O campo "Tipo de Cadastro:" só fica habilitando enquanto o campo "CPF/CNPJ:" estiver em branco.
# Quando o "CPF/CNPJ:" for preenchido, o campo "Tipo de Cadastro:" deverá ter a opção "Cadastro Completo" selecionada e ser desabilitado.
# Os demais serão desabilitados sempre que o campo "CPF/CNPJ:" estiver vazio E o campo "Tipo de Cadastro:" não estiver definido com uma das opções de "Cadastro Incompleto".
Quando uma das duas condições for falsa, os campos devem estar habilitados para edição, ou seguir suas próprias regras de habilitado/desabilitado.}}


=== Construtor ===
=== Construtor ===
Linha 13: Linha 25:
# O construtor do PersonComponent deve receber um PersonVO como atributo, sendo que se o objeto recebido for:
# O construtor do PersonComponent deve receber um PersonVO como atributo, sendo que se o objeto recebido for:
## '''nulo:''' o componente deve criar um novo PersonVO e associar todos os campos a este novo PersonVO.
## '''nulo:''' o componente deve criar um novo PersonVO e associar todos os campos a este novo PersonVO.
### Assim que criado o componente deve ter todos os seus campos desabilitados. Permitir apenas o campo "CPF/CNPJ:" e o checkbox "Sem CPF/CNPJ" habilitados para preenchimento.
### Assim que criado o componente deve ter todos os seus campos desabilitados. Permitir apenas o campo "CPF/CNPJ:" e o "Tipo de Cadastro:" habilitados para preenchimento.
## '''Não for Nulo''', utiliza o objeto recebido para associar aos campos.
## '''Não for Nulo''', utiliza o objeto recebido para associar aos campos.
{{stop|Campos Habilitados|O campo "CPF/CNPJ:" e "Sem CPF/CNPJ" são os únicos campos que estarão sempre habilitados no componente. Todos os demais serão desabilitados sempre que o campo "CPF/CNPJ:" estiver vazio E o checkbox "Sem CPF/CNPJ" não estiver marcado.
Quando uma das duas condições for falsa, os campos devem estar habilitados para edição, ou seguir suas próprias regras de habilitado/desabilitado.}}





Edição das 17h19min de 26 de maio de 2015

O PersonComponent é um componente usado na UI do BIS que permite que telas dos módulos e plugins manipulem o objeto PersonVO sem a necessidade de incluir campo à campo em sua tela. Este componente recebe (ou não) um PersonVO, cria os campos e já o associa completamente. Desta forma, invés do desenvolvedor da tela ter que criar e obter o valor de cada campo, basta incluir este componente e obter o valor através do método:

getPersonVO();

Requisitos & Regras de Funcionamento

A principal ideia do serviço Person do BISCore é garantir um "cadastro único" das pessoas (Físicas e Jurídicas) em todo o sistema. Permitindo que as pessoas cadastradas em um módulo estejam disponíveis em outros módulo. Já a ideia do PersonComponent é simplificar a implementação dessa ideia nas telas dos módulos que utilizam o Person para manipular o cadastro dessas pessoas. Assim, temos as seguintes regras:

  1. O componente deve identificar automaticamente o tipo de pessoa (física ou jurídica) de acordo com o valor digitado em "CPF/CNPJ:".
  2. Para os casos em que o usuário não informe (ou não saiba) o CPF/CNPJ, o componente deve ter um campo (combobox) com as opções: "Pessoa Física Sem CPF" e "Pessoa Jurídica sem CNPJ" que permitam o componente identificar o tipo de pessoa sendo cadastrada sem a necessidade do documento.
  3. O componente deve estender algum tipo de layout (Grid, VerticalLayout, etc.) sem incluir nenhum "Panel" (como o BISPanel). Deixando a prerrogativa de ser inserido em um Panel ou não para a tela que o for utilizar. Algumas telas, por exemplo, podem preferir inseri-lo diretamente em alguma "Aba" do PanelTab, BISPopupPanel, etc..
  4. Devido a resolução definida no Padrão Visual o componente deve caber em uma dimensão mínima de 1000px (Largura) x 500px (Altura). E deve ser preparado para "esticar" para resoluções maiores.


Regras de Habilitação dos Campos

  1. O campo "CPF/CNPJ:" é o único campo que ficará sempre habilitado.
  2. O campo "Tipo de Cadastro:" só fica habilitando enquanto o campo "CPF/CNPJ:" estiver em branco.
  3. Quando o "CPF/CNPJ:" for preenchido, o campo "Tipo de Cadastro:" deverá ter a opção "Cadastro Completo" selecionada e ser desabilitado.
  4. Os demais serão desabilitados sempre que o campo "CPF/CNPJ:" estiver vazio E o campo "Tipo de Cadastro:" não estiver definido com uma das opções de "Cadastro Incompleto".

Quando uma das duas condições for falsa, os campos devem estar habilitados para edição, ou seguir suas próprias regras de habilitado/desabilitado.}}

Construtor

Lógica de construção:

  1. O construtor do PersonComponent deve receber um PersonVO como atributo, sendo que se o objeto recebido for:
    1. nulo: o componente deve criar um novo PersonVO e associar todos os campos a este novo PersonVO.
      1. Assim que criado o componente deve ter todos os seus campos desabilitados. Permitir apenas o campo "CPF/CNPJ:" e o "Tipo de Cadastro:" habilitados para preenchimento.
    2. Não for Nulo, utiliza o objeto recebido para associar aos campos.


Habilitando/Desabilitando em Massa
O melhor para habilitar e desabilitar todos os componentes é utilizar algum container e desabilita-lo ao invés de ir campo a campo. Assim, evita inclusive a interferência de acabar habilitando algum campo que tem sua própria lógica de habilitação. Habilitando algum componente que deveria continuar desabilitado, como o caso do campo "Nome da Rua" que deve continuar desabilitado de acordo com o preenchimento do campo "CEP:".


CPF/CNPJ Value Change

Uma vez que o componente foi criado de acordo com a regra do construtor, o usuário poderá alterar o valor do campo "CPF/CNPJ:". Neste caso devemos seguir as seguintes regras:

  • Caso o novo valor seja um CPF/CNPJ válido...
    • ...e o novo valor não esteja no banco: Simplesmente deixamos que o CPF/CNPJ seja alterado no PersonVO que já estamos editando. Fazendo com que o objeto seja inserido com o novo valor.
    • ...e o novo valor esteja no banco: Exibimos um dialog (BISConfirmCancelDialog) com a seguinte indagação:
      No caso de CPF: "O CPF já está em uso por outra pessoa. Gostaria de utilizar os dados existentes?"
      No caso de CNPJ: "O CNPJ já está em uso por outra empresa. Gostaria de utilizar os dados existentes?"
      Em caso de confirmação o objeto atual deve ser substituído pelo novo. E ao associar o novo objeto aos campos de tela os valores serão atualizados para os dados que vieram do banco de dados. Em caso de cancelamento o valor do campo "CPF/CNPJ:" deve ser limpo. Impedindo que o usuário tente inserir ou alterar o objeto atual para o CPF/CNPJ que já está em branco.
  • Caso o novo valor esteja em branco: permite que o PersonVO receba o novo valor em branco. O BISCore fará suas validações ao receber um CPF/CNPJ em branco e saberá o que fazer.


Valores Inválidos
Caso o valor seja definido como um valor inválido, não é considerado como se o valor tivesse sido alterado. O vaadin nem sequer passar o valor para o VO. Por isso não nos preocupamos se o usuário fizer a troca para um valor inválido.


Sem CPF/CNPJ

O componente deve ainda permitir que o usuário cadastre uma nova pessoa sem o CPF ou CNPJ. Para isso deve incluir do lado do campo "CPF/CNPJ:" um checkbox com o título "Sem CPF/CNPJ". Também deve garantir que o CPF/CNPJ seja desabilitado.

Esboço da UI

Abaixo estão alguns esboços sobre a composição do componente e algumas observações:

Para organizar todos os campos do objeto, os campos serão agrupados em abas de um TabPanel. Permitindo inclusive que os campos que o PersonVO venha a ganhar no futuro possam ser incluídos no componente sem desfigurar sua aparência atual.

O Ca