Inscrições abertas para nosso Webinar anual Adianti Framework 2024!
Clique aqui para saber mais
Loletar dados de usuário usando multi database Bom dia a Todos! Me deparei com uma situação que não consegui resolver mesmo aqui no forum! No sistema que estou desenvolvendo em multidatabase, uma das tabelas deve coletar os dados de usuario, uma agregação. A questão é que como transaction do unit_database aberta, os dados po permission não podem ser coletados, então no get_usuario abri uma outra transação, mas infelizmente, quan...
RT
Loletar dados de usuário usando multi database  
Bom dia a Todos!
Me deparei com uma situação que não consegui resolver mesmo aqui no forum!
No sistema que estou desenvolvendo em multidatabase, uma das tabelas deve coletar os dados de usuario, uma agregação.
A questão é que como transaction do unit_database aberta, os dados po permission não podem ser coletados, então no get_usuario abri uma outra transação, mas infelizmente, quando faço isso, não consigo mais continuar na unit_database, mesmo fechando a transação com a base de permission.
Neste caso, como seria o procedimento correto?

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 (2)


NR

O que você quer dizer com "não consigo mais continuar na unit_database"?

Aparece alguma mensagem?
RT

Obrigado pelo interesse Nataniel!

No modelo de fluxo (Fluxo.php), há um get_usuario, que busca as informações do usuário que gerou o registro.
Já no controller de listagem do fluxo, este get entra em ação e coleta os dados trocando da base de dados da "unit_database" (estou usando multi database), para "permissions".
Ocorre que quando eu abro a nova transaction, a anterior, para de funcionar e a listagem é interrompida logo na primeira linha de coleta (claro, mudei a transação).
Me mesmo tentando reativar, não carrega mais e tenho que recarregar o FormList.

Sei que estou errando no metoodo de coleta destes dados no outro banco de dados, mas não consegui encontrar a informação para fazer da forma correta.
Para facilitar, irei postar os dois codigos:

Fluxo - Classe de modelo, get_usuario, no final do codigo:
  1. <?php
  2. /**
  3.  * Fluxo Active Record
  4.  * @author  <your-name-here>
  5.  */
  6. class Fluxo extends TRecord
  7. {
  8.     const TABLENAME 'fluxo';
  9.     const PRIMARYKEY'id';
  10.     const IDPOLICY =  'serial'// {max, serial}
  11.     
  12.     
  13.     private $system_user;
  14.     private $grupo_pagamento;
  15.     private $contas_empresa;
  16.     private $usuario;
  17.     private $origem;
  18.     /**
  19.      * Constructor method
  20.      */
  21.     public function __construct($id NULL$callObjectLoad TRUE)
  22.     {
  23.         parent::__construct($id$callObjectLoad);
  24.         parent::addAttribute('data_lancamento');
  25.         parent::addAttribute('valor');
  26.         parent::addAttribute('debito_credito');
  27.         parent::addAttribute('descritivo');
  28.         parent::addAttribute('documento_pagador');
  29.         parent::addAttribute('id_usuario');
  30.         parent::addAttribute('forma_pagamento');
  31.         parent::addAttribute('conta_empresa');
  32.         parent::addAttribute('saldo_anterior');
  33.         parent::addAttribute('id_conta_origem');
  34.     }
  35.    
  36.     
  37.     public function set_grupo(GrupoPagamento $object)
  38.     {
  39.         $this->grupo $object;
  40.         $this->grupo_pagamento $object->id;
  41.     }
  42.     public function get_grupo()
  43.     {
  44.         // loads the associated object
  45.         if (empty($this->id_grupo))
  46.             $this->grupo = new GrupoPagamento($this->forma_pagamento);
  47.   
  48.         if (is_null($this->grupo->nome)){
  49.          $this->grupo->nome 'Op. interna';                           
  50.                                 } 
  51.         // returns the associated object
  52.         return $this->grupo;
  53.     }
  54.     
  55.     public function set_conta(ContasEmpresa $object)
  56.     {
  57.         $this->conta $object;
  58.         $this->conta_empresa $object->id;
  59.     }
  60.     public function get_conta()
  61.     {
  62.         // loads the associated object
  63.         if (empty($this->id_conta))
  64.             $this->conta = new ContasEmpresa($this->conta_empresa);
  65.     
  66.         // returns the associated object
  67.         return $this->conta;
  68.     }
  69.     
  70.     public function get_saldo()
  71.     {
  72.                  $saldo_final $this->saldo_anterior $this->valor;
  73.                      return $saldo_final;
  74.     }  
  75.     
  76.     public function set_origem(Pagar $object)
  77.     {
  78.         $this->origem $object;
  79.         $this->id_conta_origem $object->id;
  80.     }
  81.     
  82.     public function get_origem()
  83.     {
  84.         if (!empty($this->id_conta_origem))
  85.         $this->origem = new Pagar($this->id_conta_origem);
  86.         return $this->origem;
  87.     }  
  88.     public function set_usuario(SystemUser $object)
  89.     {
  90. //TTransaction::open('permission');
  91.                     $this->usuario $object;
  92.                     $this->id_usuario $object->id;
  93. //TTransaction::close;
  94. //TTransaction::open('unit_database');
  95.                 }
  96.     public function get_usuario()
  97.     {
  98.         TTransaction::open('permission');
  99.         if (!empty($this->id_usuario))
  100.         $this->usuario = new SystemUser($this->id_usuario);
  101.         return $this->usuario;
  102.         TTransaction::close;
  103.         TTransaction::open('unit_database');
  104.     }
  105. }
  106. </code>

Listagem do Fluxo (somente exibindo os registros

  1. <?php
  2. /**
  3.  * FluxoList Listing
  4.  * @author  <your name here>
  5.  */
  6. class FluxoList extends TPage
  7. {
  8.     protected $form;     // registration form
  9.     protected $datagrid// listing
  10.     protected $pageNavigation;
  11.     protected $formgrid;
  12.     protected $deleteButton;
  13.     protected $util;
  14.     protected $object;
  15.     
  16.     use Adianti\base\AdiantiStandardListTrait;
  17.     
  18.     /**
  19.      * Page constructor
  20.      */
  21.      use SystemChangeLogTrait;
  22.     public function __construct()
  23.     {
  24.         parent::__construct();
  25.         $this->util = new Util;
  26.         $this->setDatabase('unit_database');            // defines the database
  27.         $this->setActiveRecord('Fluxo');   // defines the active record
  28.         $this->setDefaultOrder('id''asc');         // defines the default order
  29.         $this->setLimit(10);
  30.         // $this->setCriteria($criteria) // define a standard filter
  31.         $this->addFilterField('id''=''id'); // filterField, operator, formField
  32.         $this->addFilterField('data_lancamento''>=''data_ini'); // filterField, operator, formField
  33.         $this->addFilterField('data_lancamento''<=''data_fim'); // filterField, operator, formField
  34.         $this->addFilterField('valor''=''valor'); // filterField, operator, formField
  35.         $this->addFilterField('debito_credito''=''debito_credito'); // filterField, operator, formField
  36.         $this->addFilterField('documento_pagador''=''documento_pagador'); // filterField, operator, formField
  37.         $this->addFilterField('forma_pagamento''=''forma_pagamento'); // filterField, operator, formField
  38.         $this->addFilterField('conta_empresa''=''conta_empresa'); // filterField, operator, formField
  39.         
  40.         // creates the form
  41.         $this->form = new BootstrapFormBuilder('form_search_Fluxo');
  42.         $this->form->setFormTitle('Fluxo de caixa - movimento de conta(s)    ');
  43.         
  44.         // create the form fields
  45.         $id = new TEntry('id');
  46.         $data_ini = new TDate('data_ini');
  47.         $data_fim = new TDate('data_fim');
  48.         $valor = new TEntry('valor');
  49.         $debito_credito = new TCombo('debito_credito');
  50.         $documento_pagador = new TEntry('documento_pagador');
  51.         $forma_pagamento = new TDBCombo('forma_pagamento''unit_database''GrupoPagamento''id''nome');
  52.         $conta_empresa = new TDBCombo('conta_empresa''unit_database''ContasEmpresa''id''{agencia} - {n_conta} - {banco}');
  53.         $conta_empresa->setDefaultOption(false);
  54.         // add the fields
  55.         //$this->form->addFields( [ new TLabel('Id') ], [ $id ] );
  56.         $row $this->form->addFields(
  57.          [ new TLabel('Conta para consulta:') ,  $conta_empresa 
  58.         );
  59.         $row->layout = ['col-md-12'];
  60.          
  61.         $row $this->form->addFields
  62.         [ new TLabel('Lançamentos entre:') ,  $data_ini ], 
  63.         [ new TLabel('Lançamentos até:') ,  $data_fim ],
  64.         [ new TLabel('Tipo de lançamentos:') ,  $debito_credito ],
  65.         [ new TLabel('Pesquisar por valor:') ,  $valor 
  66.         );
  67.         $row->layout = ['col-sm-6 col-md-3','col-sm-6 col-md-3','col-sm-6 col-md-3','col-sm-6 col-md-3' ];
  68.         
  69.         $row $this->form->addFields
  70.         [ new TLabel('Documento Pagador:') ,  $documento_pagador ],
  71.         [ new TLabel('Forma de Pagamento:') ,  $forma_pagamento ]
  72.         );
  73.         $row->layout = ['col-sm-6 col-md-6','col-sm-6 col-md-6'];
  74.         // set sizes
  75.         $this->form->setFieldSizes('100%');
  76.         
  77.         $debito_credito->addItems(
  78.                 ['D'=>'Débito',
  79.                 'C'=>'Cédito']
  80.                 );
  81.         
  82.         $data_ini->setMask('dd/mm/yyyy');
  83.         $data_ini->setDatabaseMask('yyyy-mm-dd');
  84.         $data_fim->setMask('dd/mm/yyyy');
  85.         $data_fim->setDatabaseMask('yyyy-mm-dd');
  86.         
  87.         // keep the form filled during navigation with session data
  88.         $this->form->setDataTSession::getValue(__CLASS__.'_filter_data') );
  89.         
  90.         // add the search form actions
  91.         $btn $this->form->addAction(_t('Find'), new TAction([$this'onSearch']), 'fa:search');
  92.         $btn->class 'btn btn-sm btn-primary';
  93.         //$this->form->addActionLink(_t('New'), new TAction(['FluxoForm', 'onEdit']), 'fa:plus green');
  94.          $this->form->addAction('Limpar', new TAction( [$this'clear'] ), 'fa:eraser red');
  95.         
  96.         // creates a Datagrid
  97.         $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
  98.         $this->datagrid->style 'width: 100%';
  99.         //$this->datagrid->style = 'min-width: 1250px';
  100.         $this->datagrid->datatable 'true';
  101.         //$dataLancamento = $this->util->getDateTimeMaskBR($object->data_pagamento);
  102.         
  103.         // creates the datagrid columns
  104.         $column_id = new TDataGridColumn('id''Id''right','8%');
  105.         $column_saldo_anterior = new TDataGridColumn('saldo_anterior''S/anterior''right','10%');
  106.         $column_data_lancamento = new TDataGridColumn('data_lancamento''Lançamento''center','15%');
  107.         $column_valor = new TDataGridColumn('valor''Valor''right','10%');
  108.         $column_debito_credito = new TDataGridColumn('debito_credito''D/C''center','5%');
  109.         $column_descritivo = new TDataGridColumn('descritivo''Descritivo''left','20%');
  110.         $column_documento_pagador = new TDataGridColumn('documento_pagador''Documento','center','10%');
  111.         $column_forma_pagamento = new TDataGridColumn('{grupo->nome}''Pagamento''left');
  112.         $column_conta_empresa = new TDataGridColumn('{conta->n_conta}''Conta''left','10%');
  113.         $column_saldo = new TDataGridColumn('saldo''Saldo''right','10%');
  114.         //$column_origem = new TDataGridColumn('{origem->pessoa->fantasia}', 'Origem', 'left');
  115.         
  116.         //Aqui ocorre o erro, então comentei a linha
  117.         $column_usuario = new TDataGridColumn('{usuario->name}''Usuário''left');
  118.         // add the columns to the DataGrid
  119.         $this->datagrid->addColumn($column_id,);
  120.         $this->datagrid->addColumn($column_conta_empresa);
  121.         $this->datagrid->addColumn($column_data_lancamento);
  122.         $this->datagrid->addColumn($column_saldo_anterior);
  123.         $this->datagrid->addColumn($column_debito_credito);
  124.         $this->datagrid->addColumn($column_valor);
  125.         $this->datagrid->addColumn($column_saldo);
  126.         $this->datagrid->addColumn($column_descritivo);
  127.         $this->datagrid->addColumn($column_documento_pagador);
  128.         $this->datagrid->addColumn($column_forma_pagamento);
  129.         //$this->datagrid->addColumn($column_origem);
  130.         
  131.         // a exibição da coluna
  132.         
  133.         $this->datagrid->addColumn($column_usuario);
  134.         
  135.         
  136.         // define the transformer method over image
  137.          $column_debito_credito->setTransformer( function($value$object$row )
  138.         { 
  139.             $div = new TElement('span');
  140.             $div->add($value);
  141.             if ($value == 'D')
  142.             {
  143.               $div->style 'color: red'
  144.             }
  145.             else{
  146.                      $div->style 'color:blue';
  147.                  }
  148.                  
  149.                  return $div;
  150.         });
  151.         
  152.         $column_valor->setTransformer( function($value$object$row )
  153.         {
  154.         if (is_numeric($value))
  155.             {
  156.               $div = new TElement('span');
  157.                $div->add($this->util->getMoneyMask($value));
  158.               return $div;
  159.             }
  160.         }
  161.          );
  162.         
  163.         $column_saldo_anterior->setTransformer( function($value$object$row) {
  164. if (is_numeric($value))
  165.             {
  166.               if ($value >0)
  167.               {
  168.               $div = new TElement('span');
  169.               $div->style 'color: blue;';
  170.               }
  171.                if ($value 0)
  172.               {
  173.               $div = new TElement('span');
  174.               $div->style 'color: red;';
  175.               }
  176.               
  177.                if ($value == 0)
  178.               {
  179.               $div = new TElement('span');
  180.               }
  181.               $div->add($this->util->getMoneyMask($value));
  182.                 return $div;
  183.             }
  184.         });
  185.         
  186.          $column_saldo->setTransformer( function($value$object$row) {
  187.            if (is_numeric($value))
  188.             {
  189.               if ($value >0)
  190.               {
  191.               $div = new TElement('span');
  192.               $div->style 'color: blue;';
  193.               }
  194.                if ($value 0)
  195.               {
  196.               $div = new TElement('span');
  197.               $div->style 'color: red;';
  198.               }
  199.               
  200.                if ($value == 0)
  201.               {
  202.               $div = new TElement('span');
  203.               }
  204.               $div->add($this->util->getMoneyMask($value));
  205.                 return $div;
  206.             }
  207.         });
  208.         // define the transformer method over image
  209.         $column_data_lancamento->setTransformer( function($value$object$row) {
  210.             if ($value)
  211.             {
  212.                 try
  213.                 {
  214.                     $date = new DateTime($value);
  215.                     return $date->format('d/m/Y - H:i');
  216.                 }
  217.                 catch (Exception $e)
  218.                 {
  219.                     return $value;
  220.                 }
  221.             }
  222.             return $value;
  223.         });
  224.         // creates the datagrid column actions
  225.         $column_data_lancamento->setAction(new TAction([$this'onReload']), ['order' => 'data_lancamento']);
  226.         $column_valor->setAction(new TAction([$this'onReload']), ['order' => 'valor']);
  227.         $column_debito_credito->setAction(new TAction([$this'onReload']), ['order' => 'debito_credito']);
  228.         $column_forma_pagamento->setAction(new TAction([$this'onReload']), ['order' => 'forma_pagamento']);
  229.         //$action1 = new TDataGridAction(['FluxoForm', 'onEdit'], ['id'=>'{id}']);
  230.         //$action2 = new TDataGridAction([$this, 'onDelete'], ['id'=>'{id}']);
  231.         //$this->datagrid->addAction($action1, _t('Edit'),   'far:edit blue');
  232.        // $this->datagrid->addAction($action2 ,_t('Delete'), 'far:trash-alt red');
  233.         
  234.         // create the datagrid model
  235.         $this->datagrid->createModel();
  236.         
  237.         // creates the page navigation
  238.         $this->pageNavigation = new TPageNavigation;
  239.         $this->pageNavigation->setAction(new TAction([$this'onReload']));
  240.         
  241.         $panel = new TPanelGroup('Dados da conta consultada:''white');
  242.         $dados_conta = new TTextDisplay($this->getContaInfo(), 'default');
  243.         $ddos_conta->style 'width:100%';
  244.         $panel->add($dados_conta);
  245.         $panel->add($this->datagrid);
  246.         //$panel->getBody()->style = 'overflow-x:auto';
  247.         $panel->addFooter($this->pageNavigation);
  248.         
  249.         // header actions
  250.         $dropdown = new TDropDown(_t('Export'), 'fa:list');
  251.         $dropdown->setPullSide('right');
  252.         $dropdown->setButtonClass('btn btn-default waves-effect dropdown-toggle');
  253.         $dropdown->addAction_t('Save as CSV'), new TAction([$this'onExportCSV'], ['register_state' => 'false''static'=>'1']), 'fa:table blue' );
  254.         $dropdown->addAction_t('Save as PDF'), new TAction([$this'onExportPDF'], ['register_state' => 'false''static'=>'1']), 'far:file-pdf red' );
  255.         $panel->addHeaderWidget$dropdown );
  256.         
  257.         //var_dump(TSession::getValue(__CLASS__ . '_filter_data'));
  258.         // vertical box container
  259.         $container = new TVBox;
  260.         $container->style 'width: 100%';
  261.         $container->add(new TXMLBreadCrumb('menu.xml'__CLASS__));
  262.         $container->add($this->form);
  263.         $container->add($panel);
  264.         parent::add($container);
  265.     }
  266.      public function clear()
  267.     {
  268.         $this->clearFilters();
  269.         $this->onReload();
  270.     }
  271.     
  272.     public function getContaInfo()
  273.     {
  274.         
  275.      if (TSession::getValue(__CLASS__ '_filter_data')) 
  276.      {  
  277.     
  278.      $dataConta TSession::getValue(__CLASS__ '_filter_data');
  279.      
  280.       TTransaction::open('unit_database');     
  281.      $Conta = new ContasEmpresa($dataConta->conta_empresa);
  282.      $telefoneBanco $this->util->getFoneMask($Conta->telefone); 
  283.      $saldo_final $this->util->getMoneyMask($Conta->saldo_final);
  284.      $card = new TCardView;
  285.      $infoCard = (object) [ 'title' =>'<p><b style="margin-right: 10px;">Conta: </b>'$Conta->n_conta.'<b style="margin-right: 10px; margin-left: 10px;"> Agência:</b>'.$Conta->agencia.'</p>',
  286.                             'banco' => '<p class="label label-success"style="width:100%; line-height: 22px; display:block;">'.$Conta->banco.'</p>'
  287.                             'gerente'=>'<p style="line-height: 8px;"><b>Gerente: </b>'.$Conta->gerente.'</p>',
  288.                             'telefone'=> '<p style="line-height: 8px;"><b>Telefone: </b>'.$telefoneBanco.' <b>Ramal:</b> '$Conta->ramal.'</p>',
  289.                             'saldo'=> '<p style="line-height: 8px;"><b>Saldo atual na conta:</b></p>',
  290.                             'valor_saldo'=> '<p style="line-height: 8px;"> <label class="label label-success text-right" style="width:100%;">'.$saldo_final.'</label></p>'
  291.                             'color' => '#57D557'
  292.                             ];
  293.      $card->addItem($infoCard);
  294.      $card->setTitleAttribute('title');
  295.      $card->setColorAttribute('color');
  296.      $card->setItemTemplate(
  297.      '{banco}
  298.       {gerente}
  299.       {telefone}
  300.       {saldo}
  301.       {valor_saldo}'
  302.      );
  303.          TTransaction::close(); 
  304.         return $card;
  305.         
  306.       } // se tem registro da sessão  
  307.         
  308.     }
  309.     public function getExtendInfoForPopover()
  310.     {
  311.         
  312.     }
  313. }
  314. </code>
</your>