Lançado Adianti Framework 7.6!
Clique aqui para saber mais
[BUG][DUVIDA] - Usando dois TDate no mesmo form Olá pessoal, estou com um problema estranho ao utilizar dois TDate no mesmo form, quando utilizo dois TDate um deles, mais precisamente o segundo que foi adicionado, fica sem o "data-picker" enquanto que o outro apresenta dois. Estou enviando o anexo com um print do form, notem os campos "Entrega Doc:" e "Data de Fundacao:" Vou deixar o código também. Deste já agradeço qualquer ajuda. Obr...
JD
[BUG][DUVIDA] - Usando dois TDate no mesmo form  
Fechado
Olá pessoal, estou com um problema estranho ao utilizar dois TDate no mesmo form, quando utilizo dois TDate um deles, mais precisamente o segundo que foi adicionado, fica sem o "data-picker" enquanto que o outro apresenta dois.
Estou enviando o anexo com um print do form, notem os campos "Entrega Doc:" e "Data de Fundacao:"
Vou deixar o código também.
Deste já agradeço qualquer ajuda.
Obrigado.

  1. <?php
  2. /**
  3.  * ClientefinanceiroForm Registration
  4.  * @author  Jheferson Fonseca Gonçalves
  5.  */
  6. class ClientefinanceiroForm extends TPage
  7. {
  8.     protected $form// form
  9.     
  10.     /**
  11.      * Class constructor
  12.      * Creates the page and the registration form
  13.      */
  14.     function __construct()
  15.     {
  16.         parent::__construct();
  17.         // creates the notebook
  18.                 
  19.         // creates the form
  20.         $this->form = new TForm('form_Clientefinanceiro');
  21.         $this->form->class 'tform'// CSS class
  22.         $this->form->style 'width: 100%';
  23.         
  24.         $page1 = new TTable;
  25.         $page2 = new TTable;
  26.         $page3 = new TTable;
  27.         $page4 = new TTable;
  28.         
  29.           
  30.         
  31.         // add a table inside form
  32.         
  33.         $page1-> width '100%';
  34.         $page1->style 'width: 100%';
  35.         // add a row for the form title
  36.         $row $page1->addRow();
  37.         $row->class 'tformtitle'// CSS class
  38.         $row->addCell( new TLabel('Cliente') )->colspan 2;
  39.         
  40.         // create the form fields
  41.         $cod                            = new TEntry('cod');
  42.         $nome                           = new TEntry('nome');
  43.         $cnpj                           = new TEntry('cnpj');
  44.         $estado                         = new TEntry('estado');
  45.         $data_doc                       = new TDate('data_doc');
  46.         $capital                        = new TEntry('capital');
  47.         $data_fundacao                  = new TDate('data_fundacao');
  48.         $limite_credito                 = new TEntry('limite_credito');
  49.         $responsavel                    = new TEntry('responsavel');
  50.         $representante                  = new TEntry('representante');
  51.         $municipio                      = new TEntry('municipio');
  52.         $observacoes                    = new TText('observacoes');
  53.         // define the sizes
  54.         $cod->setSize(200);
  55.         $nome->setSize(200);
  56.         $cnpj->setSize(100);
  57.         $estado->setSize(200);
  58.         $data_doc->setSize(150);
  59.         $capital->setSize(200);
  60.         $data_fundacao->setSize(150);
  61.         $limite_credito->setSize(200);
  62.         $responsavel->setSize(200);
  63.         $representante->setSize(200);
  64.         $municipio->setSize(200);
  65.         $observacoes->setSize(20040);
  66.         // validations
  67.         //$cod->addValidation('cod', new TRequiredValidator);
  68.         $nome->addValidation('nome', new TRequiredValidator);
  69.         $cnpj->addValidation('cnpj', new TRequiredValidator);
  70.         $estado->addValidation('estado', new TRequiredValidator);
  71.         // add one row for each form field
  72.         $page1->addRowSet$label_cod = new TLabel('Cod:'), $cod );
  73.         //$label_cod->setFontColor('#FF0000');
  74.         $page1->addRowSet$label_nome = new TLabel('Nome:'), $nome );
  75.         $label_nome->setFontColor('#FF0000');
  76.         $page1->addRowSet$label_cnpj = new TLabel('CNPJ:'), $cnpj );
  77.         $label_cnpj->setFontColor('#FF0000');
  78.         $page1->addRowSet( new TLabel('Municipio:'), $municipio );
  79.         $page1->addRowSet$label_estado = new TLabel('Estado:'), $estado );
  80.         $label_estado->setFontColor('#FF0000');
  81.         $page1->addRowSet( new TLabel('Entrega Doc:'), $data_doc );
  82.         $page1->addRowSet( new TLabel('Capital:'), $capital );
  83.         $page1->addRowSet( new TLabel('Data de Fundacao:'), $data_fundacao );
  84.         $page1->addRowSet( new TLabel('Limite De Crédito:'), $limite_credito );
  85.         $page1->addRowSet( new TLabel('Responsável:'), $responsavel );
  86.         $page1->addRowSet( new TLabel('Representante:'), $representante );
  87.         
  88.         $page1->addRowSet( new TLabel('Observação:'), $observacoes );
  89.         $this->form->setFields(array($cod,$nome,$cnpj,$estado,$data_doc,$capital,$data_fundacao,$limite_credito,$responsavel,$representante,$municipio,$observacoes));
  90.         // create the form actions
  91.         $save_button TButton::create('save', array($this'onSave'), _t('Save'), 'ico_save.png');
  92.         $new_button  TButton::create('new',  array($this'onEdit'), _t('New'),  'ico_new.png');
  93.         
  94.         $this->form->addField($save_button);
  95.         $this->form->addField($new_button);
  96.         
  97.         $buttons_box = new THBox;
  98.         $buttons_box->add($save_button);
  99.         $buttons_box->add($new_button);
  100.         
  101.         // add a row for the form action
  102.         
  103.         
  104.         
  105.         $row $page1->addRow();
  106.         $row->class 'tformaction'// CSS class
  107.         $row->addCell($buttons_box)->colspan 2;
  108.         
  109.         
  110.         
  111.         $notebook = new TNotebook('100%',630);
  112.         $notebook->appendPage('Dados Básicos'$page1);
  113.         $notebook->appendPage('Sócios'$page2);
  114.         $notebook->appendPage('Fornecedores/Ref'$page3);
  115.         $notebook->appendPage('Histórico/Limites'$page4);
  116.         $this->form->add($notebook);
  117.         
  118.         
  119.         
  120.         $vbox = new TVBox;
  121.         $vbox->add(new TXMLBreadCrumb('menu.xml''ClientefinanceiroForm'));
  122.         $vbox->add($this->form);
  123.         $vbox->style "width: 100%";
  124.         
  125.         parent::add($vbox);
  126.         
  127.     }
  128.     /**
  129.      * method onSave()
  130.      * Executed whenever the user clicks at the save button
  131.      */
  132.     function onSave()
  133.     {
  134.         try
  135.         {
  136.             TTransaction::open('dados'); // open a transaction
  137.             
  138.             // get the form data into an active record Clientefinanceiro
  139.             $object $this->form->getData('Clientefinanceiro');
  140.             $this->form->validate(); // form validation
  141.             $object->store(); // stores the object
  142.             $this->form->setData($object); // keep form data
  143.             TTransaction::close(); // close the transaction
  144.             
  145.             // shows the success message
  146.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved'));
  147.         }
  148.         catch (Exception $e// in case of exception
  149.         {
  150.             new TMessage('error''<b>Error</b> ' $e->getMessage()); // shows the exception error message
  151.             $this->form->setData$this->form->getData() ); // keep form data
  152.             TTransaction::rollback(); // undo all pending operations
  153.         }
  154.     }
  155.     
  156.     /**
  157.      * method onEdit()
  158.      * Executed whenever the user clicks at the edit button da datagrid
  159.      */
  160.     function onEdit($param)
  161.     {
  162.         try
  163.         {
  164.             if (isset($param['key']))
  165.             {
  166.                 $key=$param['key'];  // get the parameter $key
  167.                 TTransaction::open('dados'); // open a transaction
  168.                 $object = new Clientefinanceiro($key); // instantiates the Active Record
  169.                 $this->form->setData($object); // fill the form
  170.                 TTransaction::close(); // close the transaction
  171.             }
  172.             else
  173.             {
  174.                 $this->form->clear();
  175.             }
  176.         }
  177.         catch (Exception $e// in case of exception
  178.         {
  179.             new TMessage('error''<b>Error</b> ' $e->getMessage()); // shows the exception error message
  180.             TTransaction::rollback(); // undo all pending operations
  181.         }
  182.     }
  183. }
  184. ?>

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (16)


FC

Isso ocorre principalmente com o vertrigo troque pelo wamp ou atualize a versão de seu PHP.
JD

Estou utilizando o Xampp com PHP 5.6.11
FC

Compilação do xampp não roda legal com o adianti mude para o wamp que resolve.
JD

Entendi...
Não há nenhuma configuração que resolva o problema no Xampp ?
Pensei que o Adianti não dependesse de configurações no servidor, isso vai ser um problema.
Na empresa onde trabalho é utilizado o xampp, que já está com o Apache devidamente configurado para rodar algumas aplicações COM e .NET
Se souber de alguma maneira de resolver o problema sem trocar o pacote do servidor fico muito agradecido.
Obrigado.
FC

Não é aconselhável usar o xamp em ambiente de produção, porém como te falei é um problema que pode ser resolvido atualizando a versão do PHP, senão me engano tem alguns tutoriais na net mostrando como atualizar o xamp tente atualizar numa máquina a parte para testar.
JD

Atualizei para o PHP 5.6.15 e o erro continua.
Vou experimentar na maquina local utilizando o wamp pra ver se resolve.
Obrigado.
FC

não esqueça de limpar o cache dos navegadores.
GE

tb tinha esse problema quando usava wamps da vida...

caso utilize windows como SO, eu recomendo baixar o VBox,
configurar uma maquina virtual com ubuntu, instalar php, apache, base de dados, samba, e mapear no windows e começar a desenvolver.

Ou ainda você instalar os dois sistemas operacionais e gerenciar o uso pelo GRUB (é o que faço atualmente).
JD

Acessei o site do Wamp Server e verifiquei que a versão do php dele é a 5.5 o que não me agrada por não ser muito recente.
Confesso que não tenho experiencia com Wamp Server e isso me assusta um pouco, nunca tive problemas com o Xampp, está é a primeira vez.
Criar uma maquina virtual apenas para rodar um web server não acho legal, devido ao consumo de recursos que uma maquina virtual exige.
Um amigo meu utiliza o adianti com o Xampp vou ver com ele se ele teve este problema, estou suspeitando que a causa não é o Xampp e sim a versão ou configuração do PHP, afinal é o nucleo do PHP que é responsável por executar o código.
E tanto o Wamp quanto o Xampp ou um hambiente individual (Apache/PHP) deve ter o mesmo retorno do código, se a versão e o nucleo do php for o mesmo.
De qualquer forma as especificações do Adianti dizem o seguinte:

Independente de plataforma;

Compatível com PHP5.X;

Não necessita configuração especial para setup (Apenas descompacte e use);

Ou seja, ter que mudar o pacote de web server, criar uma maquina virtual com outro SO ou mudar versão do PHP do 5.6.11 pra outra versão inferior até 5.0 é fugir destes conceitos.
Agradeço a ajuda e compreensão de todos.
JD

Como já havia imaginado a causa do problema não é o Xampp...
Verifiquei que no construtor da classe TDate é setado um id da seguinte maneira:
  1. <?php
  2. public function __construct($name)
  3.     {
  4.         parent::__construct($name);
  5.         $this->id   'tdate_'.uniqid();
  6. ?>

Note que é utilizado a função uniqid() do PHP que gera um id "UNICO" de acordo com o tempo atual em milionésimos de segundo, porém identifiquei no html da tela que os dois campos estavam com o mesmo ID e esta é a verdadeira causa do problema.
Resolvi o problema trocando a função uniqid() para:
  1. <?php
  2. public function __construct($name)
  3.     {
  4.         parent::__construct($name);
  5.         $this->id   'tdate_'.date("His").rand(0,100);
  6. ?>


E assim garanti que fosse gerado um ID unico e o bug foi resolvido.

FC

Show de bola !!! Eu tinha parado de usar o vertrigo somente por causa disso.
JD

Uma solução mais limpa foi:

  1. <?php
  2. $this->id   'tdate_'.uniqid(rand(0,100));
  3. ?>
PD

Esse bug já está resolvido, a próxima versão usará a mt_rand() que é melhor que a rand().
Vários componentes foram revisados.
Lembrando: a uniqid() é bugada em algumas versões do PHP para Windows.

Att,
JD

Maravilha !!!
Pablo já tem alguma previsão de quando vai ser lançada a próxima versão?
PD

Creio que no início do mês que vem.
Reta final :-)
JD

Não vejo a hora! kkk
Parabéns pelo framework, simplesmente incrível!