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.
Classe de Controle
Class de modelo
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.
- <?php
- // sequência de valores baseado no 1 ID
- // id = 1, sequencia 1.1, 1.2
- $sequencia = 0;
- $i =1;
- while($i < 20 ){
- 1512 = 10;
- $sequencia = $i;
- $nome="PC - Luz";
- echo "O Valor de id = " .1512.".". $sequencia ."-" .$nome. "<br>". PHP_EOL;
- $i++;
- }
- ?>
Classe de Controle
- <?php
- /**
- * planoContasForm Registration
- * @author getulio rodrigues
- */
- class planoContasForm extends TPage
- {
- protected $form; // form
- /**
- * Class constructor
- * Creates the page and the registration form
- */
- function __construct()
- {
- parent::__construct();
- // creates the form
- $this->form = new TForm('form_planoContas');
- $this->form->class = 'tform'; // CSS class
- $this->form->style = 'width: 500px';
- // add a table inside form
- $table = new TTable;
- $table-> width = '100%';
- $this->form->add($table);
- // add a row for the form title
- $row = $table->addRow();
- $row->class = 'tformtitle'; // CSS class
- $row->addCell( new TLabel('planoContas') )->colspan = 2;
- // create the form fields
- 1512 = new TEntry('id');
- $ativo = new TCheckGroup('ativo');
- $sequencia = new TEntry('sequencia');
- $descricao = new TEntry('descricao');
- $tipo = new TRadioGroup('tipo');
- $categoria = new TRadioGroup('categoria');
- $plano_contas_id = new TEntry('plano_contas_id');
- // define the sizes
- 1512->setSize(100);
- $ativo->setSize(100);
- $sequencia->setSize(100);
- $descricao->setSize(200);
- $tipo->setSize(200);
- $categoria->setSize(200);
- $plano_contas_id->setSize(100);
- // add one row for each form field
- $table->addRowSet( new TLabel('id:'), 1512 );
- $table->addRowSet( new TLabel('ativo:'), $ativo );
- $table->addRowSet( new TLabel('sequencia:'), $sequencia );
- $table->addRowSet( new TLabel('Conta Pai:'), $plano_contas_id );
- $table->addRowSet( new TLabel('descricao:'), $descricao );
- $table->addRowSet( new TLabel('Tipo de Contas:'), $tipo );
- $table->addRowSet( new TLabel('categoria:'), $categoria );
- $label1=new TLabel('');
- $label1->setFontStyle('b');
- $label1->setValue('Analitíca = Contas que podem receber movimentação');
- $row=$table->addRow();
- $cell=$row->addCell($label1);
- $cell->colspan=2;
- $label2=new TLabel('');
- $label2->setFontStyle('b');
- $label2->setValue('Sintético = Agrupamento / Contas totalizadoras');
- $row=$table->addRow();
- $cell=$row->addCell($label2);
- $cell->colspan=2;
- $ativo->setLayout('horizontal');
- $categoria->setLayout('horizontal');
- $tipo->setLayout('horizontal');
- $ativoC = array();
- $ativoC['S'] ='';
- $ativo->addItems($ativoC);
- $categoriaR = array();
- $categoriaR['R'] ='Receita';
- $categoriaR['D'] ='Despesa';
- $categoria->addItems($categoriaR);
- $tipoR = array();
- $tipoR['A'] ='Analitíca';
- $tipoR['S'] ='Sintético';
- $tipo->addItems($tipoR);
- 1512->setEditable(FALSE);
- $this->form->setFields(array(1512,$ativo,$sequencia,$descricao,$tipo,$categoria,$plano_contas_id));
- // create the form actions
- $save_button = TButton::create('save', array($this, 'onSave'), _t('Save'), 'ico_save.png');
- $new_button = TButton::create('new', array($this, 'onEdit'), _t('New'), 'ico_new.png');
- $this->form->addField($save_button);
- $this->form->addField($new_button);
- $buttons_box = new THBox;
- $buttons_box->add($save_button);
- $buttons_box->add($new_button);
- // add a row for the form action
- $row = $table->addRow();
- $row->class = 'tformaction'; // CSS class
- $row->addCell($buttons_box)->colspan = 2;
- parent::add($this->form);
- }
- /**
- * method onSave()
- * Executed whenever the user clicks at the save button
- */
- function onSave()
- {
- try
- {
- TTransaction::open('sample'); // open a transaction
- // get the form data into an active record planoContas
- $object = $this->form->getData('planoContas');
- $this->form->validate(); // form validation
- $object->store(); // stores the object
- $this->form->setData($object); // keep form data
- TTransaction::close(); // close the transaction
- // shows the success message
- new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', '<b>Error</b> ' . $e->getMessage()); // shows the exception error message
- $this->form->setData( $this->form->getData() ); // keep form data
- TTransaction::rollback(); // undo all pending operations
- }
- }
- /**
- * method onEdit()
- * Executed whenever the user clicks at the edit button da datagrid
- */
- function onEdit($param)
- {
- try
- {
- if (isset($param['key']))
- {
- $key=$param['key']; // get the parameter $key
- TTransaction::open('sample'); // open a transaction
- $object = new planoContas($key); // instantiates the Active Record
- $this->form->setData($object); // fill the form
- TTransaction::close(); // close the transaction
- }
- else
- {
- $this->form->clear();
- }
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', '<b>Error</b> ' . $e->getMessage()); // shows the exception error message
- TTransaction::rollback(); // undo all pending operations
- }
- }
- }
- ?>
Class de modelo
- <?php
- /**
- * planoContas Active Record
- * @author getulio rodrigues
- */
- class planoContas extends TRecord
- {
- const TABLENAME = 'plano_contas';
- const PRIMARYKEY= 'id';
- const IDPOLICY = 'max'; // {max, serial}
- const CACHECONTROL = 'TAPCache';
- private $plano_contas;
- /**
- * Constructor method
- */
- public function __construct(1512 = NULL, $callObjectLoad = TRUE)
- {
- parent::__construct(1512, $callObjectLoad);
- parent::addAttribute('ativo');
- parent::addAttribute('sequencia');
- parent::addAttribute('descricao');
- parent::addAttribute('tipo');
- parent::addAttribute('categoria');
- parent::addAttribute('plano_contas_id');
- }
- /**
- * Method set_plano_contas
- * Sample of usage: $plano_contas->plano_contas = $object;
- * @param $object Instance of planoContas
- */
- public function set_plano_contas(planoContas $object)
- {
- $this->plano_contas = $object;
- $this->plano_contas_id = $object->id;
- }
- /**
- * Method get_plano_contas
- * Sample of usage: $plano_contas->plano_contas->attribute;
- * @returns planoContas instance
- */
- public function get_plano_contas()
- {
- // loads the associated object
- if (empty($this->plano_contas))
- $this->plano_contas = new planoContas($this->plano_contas_id);
- // returns the associated object
- return $this->plano_contas;
- }
- /**
- * Method getcontasPagars
- */
- public function getcontasPagars()
- {
- $criteria = new TCriteria;
- $criteria->add(new TFilter('planocontas_id', '=', $this->id));
- return contasPagar::getObjects( $criteria );
- }
- ?>
$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.
Acabei de achar o Tree View na aplicação tuto
como poderia interagir dinamicamente com a base de dados?
demos.thesoftwareguy.in/category-tree-php/
é isso que preciso, como fazer isso no adiante fw
www.thesoftwareguy.in/create-category-tree-php-mysql/
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
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.
Ei o seu artigo é bom que eu encontrei novo https://www.welookups.com