Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Pegar o proximo codigo de um produto em sistema multiempresa Olá galera. Estou avançando aqui com um sistema multi empresa, então temos uma sequencia de codigos de produtos diferente do ID da tabela produto. Se eu usar o ID da tabela de produto como CODIGO do proprio produto, terei "CODIGOS" dos produtos fora de sequencia para as várias empresas cadastradas no sistema, pois as varias empresas compartilham a mesma tabela de produto, a qual eu separo pe...
CC
Pegar o proximo codigo de um produto em sistema multiempresa  
Olá galera.
Estou avançando aqui com um sistema multi empresa, então temos uma sequencia de codigos de produtos diferente do ID da tabela produto.
Se eu usar o ID da tabela de produto como CODIGO do proprio produto, terei "CODIGOS" dos produtos fora de sequencia para as várias empresas cadastradas no sistema, pois as varias empresas compartilham a mesma tabela de produto, a qual eu separo pelo campo "id_licenciada".

Preciso de algo, talvez pro proprio MODEL Produto que me traga algo assim:
select max(codigo)+1 from produto where id_licenciada=X (X é o codigo da UNIDADE no sistema - ja tenho acesso à essa variavel)

a tabela de produto seria mais ou menos assim:

id_produto
id_licenciada
codigo
descricao
valor_custo
valor_venda
etc...



Desde já agradeço quem possa ajudar...





Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (5)


NR

  1. <?php
  2. $produto Produto::where('id_licenciada','=',TSession::getValue('id_licenciada'))->orderBy('codigo','desc')->take(1)->first();
  3. echo $produto->codigo 1;
  4. ?>

Só lembre de testar a variável $produto, pois se a busca no banco não retornar nenhum registro, essa variável será null.
Também seria interessante pensar na concorrência, pois se dois usuários tentarem cadastrar um produto ao mesmo tempo, pode ser que ocorra duplicidade do código.
NR

Pode tirar o "take(1)", a função first já faz isso.
CC

Nataniel, muito obrigado pela ajuda. Fiz umas adaptaçoes no codigo que voce me enviou.
Esse código abaixo eu coloquei no evento onSave:

  1. <?php
  2.             $novo_id ProdutoSetor::where('id_licenciada','=',TSession::getValue('userunitid'))->orderBy('codigo','desc')->first();  
  3.             if ($novo_id == NULL) {
  4.                 $object->codigo 1;
  5.             } else {
  6.                 if ($object->codigo == NULL) {
  7.                     $object->codigo $novo_id->codigo 1;
  8.                 }; 
  9.             };
  10.             $object->id_licenciada TSession::getValue('userunitid');
  11.             $object->store(); // save the object
  12. ?>

Se ainda não houver nenhum registro na tabela "ProdutoSetor" (nesse meu exemplo), o $novo_id vem nulo. Então no meu primeiro "IF" eu testo se vem nulo, aí nesse caso, como ainda não temos nenhum resgistro dessa licenciada nessa tabela, eu coloco "codigo = 1"

O Segundo "IF" eu uso pra testar se o registro já tem um codigo, para que quando eu salvar, ele não fique incrementando o campo código.

Exemplo: Eu edito o registro codigo 1, quando eu salvo, ele estava salvando como codigo 2., se eu salvasse novamente, ele salvava com codigo 3

Enfim.

Muito obrigado pela atenção.
MS

Claudio,
neste seu sistema multi-empresa você está utilizando uma única base de dados?
Em um post a alguns anos, houve uma pergunta neste sentido e ficou claro que um projeto com esta topologia é muito perigoso, o risco de que informações de um cliente sejam visualizadas por outro. Falou-se do exemplo de empresas que já responderam judicialmente por estes problemas.
O Adianti tem a possibilidade de que através dos arquivos INI's você acesse bases de dados diferentes!
CC

Olá Marcelo,

Eu li esse post, que falava sobre os perigos de voce ter uma única base de dados para todas as empresas. Realmente entendo os problemas que possam vir a ocorrer. A questão é a praticidade principalmente para manutenção na base de dados. Enfim, tenho que definir agora, porque já estou bem adiantado aqui com o projeto. Se mais alguém tivesse opinião sobre isso, gostaria de saber.

Obrigado à todos...