{parts/gtag_head.html} {parts/gtag_body.html}
Conheça  A Ferramenta LowCode mais moderna e veloz para desenvolvimento PHP: Adianti Creator
Categoria Pai e SubCategoria. Estou elaborando um plano de contas onde cada plano pode ou não ser herdeira de outro plano de contas. como fazer para peguar o id do plano de contas pai e concatene com o plano de contas filho e exiba no campo sequência. esse recurso seria para organizar o conteudo. ex: #id: 1 #nome: Despesas #ContaPai: 0 #Sequencia: 1 #Descrição: 1.Despesa #id: 2 #nome: Luz #ContaPai: 1 (...
GR
Categoria Pai e SubCategoria.  
Fechado
Estou elaborando um plano de contas onde cada plano pode ou não ser herdeira de outro plano de contas.

como fazer para peguar o id do plano de contas pai e concatene com o plano de contas filho e exiba no campo sequência.

esse recurso seria para organizar o conteudo.

ex:
#id: 1
#nome: Despesas
#ContaPai: 0
#Sequencia: 1
#Descrição: 1.Despesa

#id: 2
#nome: Luz
#ContaPai: 1 (Faz referencia a conta Pai que é Despesa)
#sequecia: 1.1
#descrição: 1.1.Luz

Como fazer isso no FW adianti.

 
  1. <?php
  2. // sequência de valores baseado no 1 ID
  3. // id = 1, sequencia 1.1, 1.2
  4. $sequencia = 0;
  5. $i =1;
  6. while($i < 20 ){
  7. 1512 = 10;
  8. $sequencia = $i;
  9. $nome="PC - Luz";
  10. echo "O Valor de id = " .1512.".". $sequencia ."-" .$nome. "<br>". PHP_EOL;
  11. $i++;
  12. }
  13. ?>


Classe de Controle

 
  1. <?php
  2. /**
  3. * planoContasForm Registration
  4. * @author getulio rodrigues
  5. */
  6. class planoContasForm extends TPage
  7. {
  8. protected $form; // form
  9. /**
  10. * Class constructor
  11. * Creates the page and the registration form
  12. */
  13. function __construct()
  14. {
  15. parent::__construct();
  16. // creates the form
  17. $this->form = new TForm('form_planoContas');
  18. $this->form->class = 'tform'; // CSS class
  19. $this->form->style = 'width: 500px';
  20. // add a table inside form
  21. $table = new TTable;
  22. $table-> width = '100%';
  23. $this->form->add($table);
  24. // add a row for the form title
  25. $row = $table->addRow();
  26. $row->class = 'tformtitle'; // CSS class
  27. $row->addCell( new TLabel('planoContas') )->colspan = 2;
  28. // create the form fields
  29. 1512 = new TEntry('id');
  30. $ativo = new TCheckGroup('ativo');
  31. $sequencia = new TEntry('sequencia');
  32. $descricao = new TEntry('descricao');
  33. $tipo = new TRadioGroup('tipo');
  34. $categoria = new TRadioGroup('categoria');
  35. $plano_contas_id = new TEntry('plano_contas_id');
  36. // define the sizes
  37. 1512->setSize(100);
  38. $ativo->setSize(100);
  39. $sequencia->setSize(100);
  40. $descricao->setSize(200);
  41. $tipo->setSize(200);
  42. $categoria->setSize(200);
  43. $plano_contas_id->setSize(100);
  44. // add one row for each form field
  45. $table->addRowSet( new TLabel('id:'), 1512 );
  46. $table->addRowSet( new TLabel('ativo:'), $ativo );
  47. $table->addRowSet( new TLabel('sequencia:'), $sequencia );
  48. $table->addRowSet( new TLabel('Conta Pai:'), $plano_contas_id );
  49. $table->addRowSet( new TLabel('descricao:'), $descricao );
  50. $table->addRowSet( new TLabel('Tipo de Contas:'), $tipo );
  51. $table->addRowSet( new TLabel('categoria:'), $categoria );
  52. $label1=new TLabel('');
  53. $label1->setFontStyle('b');
  54. $label1->setValue('Analitíca = Contas que podem receber movimentação');
  55. $row=$table->addRow();
  56. $cell=$row->addCell($label1);
  57. $cell->colspan=2;
  58. $label2=new TLabel('');
  59. $label2->setFontStyle('b');
  60. $label2->setValue('Sintético = Agrupamento / Contas totalizadoras');
  61. $row=$table->addRow();
  62. $cell=$row->addCell($label2);
  63. $cell->colspan=2;
  64. $ativo->setLayout('horizontal');
  65. $categoria->setLayout('horizontal');
  66. $tipo->setLayout('horizontal');
  67. $ativoC = array();
  68. $ativoC['S'] ='';
  69. $ativo->addItems($ativoC);
  70. $categoriaR = array();
  71. $categoriaR['R'] ='Receita';
  72. $categoriaR['D'] ='Despesa';
  73. $categoria->addItems($categoriaR);
  74. $tipoR = array();
  75. $tipoR['A'] ='Analitíca';
  76. $tipoR['S'] ='Sintético';
  77. $tipo->addItems($tipoR);
  78. 1512->setEditable(FALSE);
  79. $this->form->setFields(array(1512,$ativo,$sequencia,$descricao,$tipo,$categoria,$plano_contas_id));
  80. // create the form actions
  81. $save_button = TButton::create('save', array($this, 'onSave'), _t('Save'), 'ico_save.png');
  82. $new_button = TButton::create('new', array($this, 'onEdit'), _t('New'), 'ico_new.png');
  83. $this->form->addField($save_button);
  84. $this->form->addField($new_button);
  85. $buttons_box = new THBox;
  86. $buttons_box->add($save_button);
  87. $buttons_box->add($new_button);
  88. // add a row for the form action
  89. $row = $table->addRow();
  90. $row->class = 'tformaction'; // CSS class
  91. $row->addCell($buttons_box)->colspan = 2;
  92. parent::add($this->form);
  93. }
  94. /**
  95. * method onSave()
  96. * Executed whenever the user clicks at the save button
  97. */
  98. function onSave()
  99. {
  100. try
  101. {
  102. TTransaction::open('sample'); // open a transaction
  103. // get the form data into an active record planoContas
  104. $object = $this->form->getData('planoContas');
  105. $this->form->validate(); // form validation
  106. $object->store(); // stores the object
  107. $this->form->setData($object); // keep form data
  108. TTransaction::close(); // close the transaction
  109. // shows the success message
  110. new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
  111. }
  112. catch (Exception $e) // in case of exception
  113. {
  114. new TMessage('error', '<b>Error</b> ' . $e->getMessage()); // shows the exception error message
  115. $this->form->setData( $this->form->getData() ); // keep form data
  116. TTransaction::rollback(); // undo all pending operations
  117. }
  118. }
  119. /**
  120. * method onEdit()
  121. * Executed whenever the user clicks at the edit button da datagrid
  122. */
  123. function onEdit($param)
  124. {
  125. try
  126. {
  127. if (isset($param['key']))
  128. {
  129. $key=$param['key']; // get the parameter $key
  130. TTransaction::open('sample'); // open a transaction
  131. $object = new planoContas($key); // instantiates the Active Record
  132. $this->form->setData($object); // fill the form
  133. TTransaction::close(); // close the transaction
  134. }
  135. else
  136. {
  137. $this->form->clear();
  138. }
  139. }
  140. catch (Exception $e) // in case of exception
  141. {
  142. new TMessage('error', '<b>Error</b> ' . $e->getMessage()); // shows the exception error message
  143. TTransaction::rollback(); // undo all pending operations
  144. }
  145. }
  146. }
  147. ?>



Class de modelo

 
  1. <?php
  2. /**
  3. * planoContas Active Record
  4. * @author getulio rodrigues
  5. */
  6. class planoContas extends TRecord
  7. {
  8. const TABLENAME = 'plano_contas';
  9. const PRIMARYKEY= 'id';
  10. const IDPOLICY = 'max'; // {max, serial}
  11. const CACHECONTROL = 'TAPCache';
  12. private $plano_contas;
  13. /**
  14. * Constructor method
  15. */
  16. public function __construct(1512 = NULL, $callObjectLoad = TRUE)
  17. {
  18. parent::__construct(1512, $callObjectLoad);
  19. parent::addAttribute('ativo');
  20. parent::addAttribute('sequencia');
  21. parent::addAttribute('descricao');
  22. parent::addAttribute('tipo');
  23. parent::addAttribute('categoria');
  24. parent::addAttribute('plano_contas_id');
  25. }
  26. /**
  27. * Method set_plano_contas
  28. * Sample of usage: $plano_contas->plano_contas = $object;
  29. * @param $object Instance of planoContas
  30. */
  31. public function set_plano_contas(planoContas $object)
  32. {
  33. $this->plano_contas = $object;
  34. $this->plano_contas_id = $object->id;
  35. }
  36. /**
  37. * Method get_plano_contas
  38. * Sample of usage: $plano_contas->plano_contas->attribute;
  39. * @returns planoContas instance
  40. */
  41. public function get_plano_contas()
  42. {
  43. // loads the associated object
  44. if (empty($this->plano_contas))
  45. $this->plano_contas = new planoContas($this->plano_contas_id);
  46. // returns the associated object
  47. return $this->plano_contas;
  48. }
  49. /**
  50. * Method getcontasPagars
  51. */
  52. public function getcontasPagars()
  53. {
  54. $criteria = new TCriteria;
  55. $criteria->add(new TFilter('planocontas_id', '=', $this->id));
  56. return contasPagar::getObjects( $criteria );
  57. }
  58. ?>

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (7)


GR

$object->sequencia = $object->plano_contas_id; com essa linha consegui pegar o id da contas a pagar "pai", porem queria pegar o ultimo valor gravado no banco e a partir do id contas a pagar "pai" adicionar o ultimo valor ex:

id contas a pagar pai: 2
id contas a pagar: 1
sequencia: 2.1

o subsequente

id contas a pagar pai: 2
id contas a pagar: 2
sequencia: 2.2
isso é possível.
GR

Acabei de achar o Tree View na aplicação tuto

como poderia interagir dinamicamente com a base de dados?
GR

demos.thesoftwareguy.in/category-tree-php/

é isso que preciso, como fazer isso no adiante fw
GR

www.thesoftwareguy.in/create-category-tree-php-mysql/
PD

Getúlio,

Você precisará transformar a estrutura do banco em uma matriz antes de jogar no Tree View.
Não é no framework que está a trabalheira, e sim em fazer essa lógica, que é recursiva.
Particularmente, eu recomendo usar código hierárquico estruturado no lugar de auto-relacionamento,
pois é mais fácil de manter, realizar alterações, e também de implementar:

1 ATIVO

1.1 ATIVO CIRCULANTE
1.1.1 Caixa
1.1.1.01 Caixa Geral
1.1.2 Bancos C/Movimento
1.1.2.01 Banco Alfa
1.1.3 Contas a Receber

Att,
Pablo
GR

Pablo, Valeu pela atenção, cara estou com muita dificuldade de trazer isso para o Framework, consegui depois de estudar/pesquisar a forma com a saída que precisava.

o codigo abaixo ele esta exatamente como gostaria, gerando a sequencia que preciso para organizar o plano de Contas na visualização.

 
  1. <?php
  2. //Array para simular o resultado de sua consulta no banco de dados
  3. $planoDeContas = array(
  4. array('ID'=>1 , 'NOME' =>' DESPESAS' , 'PARENT'=>null),
  5. array('ID'=>2 , 'NOME' =>' Despesas administrativas' , 'PARENT'=>1),
  6. array('ID'=>3 , 'NOME' =>' 13 Salario ' , 'PARENT'=> 2),
  7. array('ID'=>4 , 'NOME' =>' Adicional noturno ' , 'PARENT'=> 2),
  8. array('ID'=>5 , 'NOME' =>' Agua / Esgoto ' , 'PARENT'=> 2),
  9. array('ID'=>9 , 'NOME' =>' Multa ' , 'PARENT'=> 5),
  10. array('ID'=>6 , 'NOME' =>' Despesas Comerciais ' , 'PARENT'=> 1),
  11. array('ID'=>7 , 'NOME' =>' RECEITAS' , 'PARENT'=> null),
  12. array('ID'=>8 , 'NOME' =>' Locacao' , 'PARENT'=> 7)
  13. );
  14. /**
  15. * Função - Estruturar o plano de conta pai e filho
  16. */
  17. function estruturarPlanoDeContas($planoDeContas, $idPai = null) {
  18. $planoEstruturado = array();
  19. foreach($planoDeContas as $conta) {
  20. if($conta['PARENT'] == $idPai) {
  21. $planoEstruturado[$conta['ID']] = $conta;
  22. $child = estruturarPlanoDeContas($planoDeContas, $conta['ID']);
  23. if($child)
  24. $planoEstruturado[$conta['ID']]['CHILD']=$child;
  25. }
  26. }
  27. return $planoEstruturado;
  28. }
  29. // Submete o array a função de estruturação
  30. $pcEstruturado = estruturarPlanoDeContas($planoDeContas);
  31. echo '<pre>';
  32. // Imprime o array para verificar o resultado
  33. print_r($pcEstruturado);
  34. /**
  35. * Função - Imprimir um array estruturado
  36. */
  37. function imprimirPlanoDeContasEstruturado($planoDeContasEstruturado, $parentLevel = "") {
  38. echo "<ul>";
  39. $itemLevel = 1;
  40. foreach($planoDeContasEstruturado as $conta) {
  41. $level = ($parentLevel=="")? $itemLevel : $parentLevel . "." . $itemLevel;
  42. echo sprintf("<li>%s - %s</li>", $level, $conta['NOME']);
  43. if(isset($conta['CHILD'])) {
  44. imprimirPlanoDeContasEstruturado($conta['CHILD'], $level);
  45. }
  46. $itemLevel++;
  47. }
  48. echo '</ul>';
  49. }
  50. // Imprime um array estruturado
  51. imprimirPlanoDeContasEstruturado($pcEstruturado);
  52. ?>
</pre>
FW

Ei o seu artigo é bom que eu encontrei novo https://www.welookups.com