Company-dependent

Este documento descreve os padrões de negócio relacionados com dados que variam de acordo com a empresa.

Conceitos

Cliente

Trata-se de uma “entidade” que adquire/subscreve um produto.

Tenant

Instalação de um cliente.

Organization

Define uma organização de um cliente. Um tenant pode ter N organizações (organizations) e uma organização pode ter N empresas (companies).

As empresas dentro de uma mesma organização partilham os dados de todas as entidades que não possuam dependências da empresa. Por exemplo, os registos de uma tabela de artigos podem ser acedidos no contexto de uma transação associada a uma empresa específica.

Company

Corresponde a uma empresa legal e há determinadas transações (exemplo: uma fatura) que devem ser associadas a uma determinada empresa.

Desenho

Entidade Company-dependent

Uma entidade é company-dependent se estiver associada a uma determinada empresa e só for válida para essa empresa.

Nos casos de entidades company-dependent, a seleção da empresa para a criação de registos é efetuada na top bar da aplicação. O componente de seleção de empresas estará sempre disponível, mas só será utilizada para entidades desse tipo, e apresentará sempre uma empresa por defeito, com a possibilidade de alteração quando existir mais do que uma empresa criada.

Company Selector

Configurações por empresa

As configurações de um módulo (ex: Taxes) devem ser mantidas por entidade própria (ex: TaxesSetup) e essa entidade deve ser company-dependent.

A partir daí essa entidade será como qualquer outra entidade company-dependent, exceto:

  • Quando uma nova empresa for criada, será automaticamente criado o registo nessas entidades para que possa ser alterada a configuração do módulo respetivo.
  • Da mesma forma, se uma empresa for eliminada, os respetivos registos de configuração serão eliminados.

Implementação

De seguida descreve-se a implementação e os passos necessários na modelação de um módulo para suportar cada um dos cenários.

Entidade Company-dependent

Company e CompanyId

Todas as entidades company-dependent deverão ter uma associação para a entidade Company do módulo Core Patterns que identificará a empresa para a qual a entidade é válida.

Interface ICompanyDependent

Este interface é usado na framework de modelação para indicar as entidades company-depedent e possui a propriedade CompanyId (Guid?) que representa o id da empresa. Esta propriedade do interface garante também que o modelo de entidades obrigará o utilizador a ter a entidade com uma associação para a entidade Company (Core Patterns)).

Modelação

Para definir uma entidade como company-dependent será necessário no ED (Entities Designer) associá-la com o interface ICompanyDependent, o que, por sua vez, obrigará a criar uma associação para a entidade Company.

Tipicamente isso resultará num modelo de entidades semelhante ao seguinte:

Modelo de Entidades

Validações

As seguintes validações aplicam-se a entidades company-dependent:

  • Deve existir uma associação para a entidade CorePatterns.Company.
  • O campo “Company” não poderá estar presente no modelo de apresentação (porque a gestão deste campo e a pattern de utilização do mesmo serão asseguradas de forma automática).