Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Data pt-br com TQuickForm e TDate Estou tendo problemas com data no formato dd/mm/yyyy, juntamente com TQuickForm e TDate, coloquei um SetMask, mas na hora de salvar, não salva corretamente....
FK
Data pt-br com TQuickForm e TDate  
Fechado
Estou tendo problemas com data no formato dd/mm/yyyy, juntamente com TQuickForm e TDate, coloquei um SetMask, mas na hora de salvar, não salva corretamente.

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


NC

Antes do store você faz assim:
$object->campo = TDate::date2us($object->campo);
FK

Mas isso mesmo utilizando o TQuickForm?
NC

o seu problema não é no TQuickForm (ele somente mostra a informação na tela) o seu problema é no method onSave
FK

Então é ai que eu não estou compreendendo, o metodo onSave já é TQuickForm, eu não o criei. Então eu tenho que substituir ele? Criar meu próprio onSave?
NC

No seu fonte não tem um metodo onSave?
FK

Não, está como no exemplo da URL www.adianti.com.br/framework_files/tutor/index.php?class=CompleteDat
NC

Mas essse é um exemplo de formulário de DataGrid não exemplo de Formulário de edição de dados.

Você está digitando a data no Datagrid?

QuickForm faz formulário não salva dados.

O seu botão está chamando qual Ação?
FK

É verdade colei o errado, abaixo vai o meu código:
  1. <?php
  2. class EventoForm extends TStandardFormList
  3. {
  4.     protected $form;
  5.     protected $datagrid;
  6.     protected $loaded;
  7.     protected $pageNavigation;
  8.     
  9.     public function __construct()
  10.     {
  11.         parent::__construct();
  12.         
  13.         parent::setDatabase('banco');
  14.         
  15.         parent::setActiveRecord('Evento');
  16.         
  17.         parent::setDefaultOrder('evento_descricao''asc');
  18.         
  19.         $this->setLimit(-1);
  20.         
  21.         $this->form = new TQuickForm('form_evento');
  22.         $this->form->class 'tform'// CSS class
  23.         $this->form->setFormTitle('Evento');
  24.         
  25.         $pk_evento     = new TEntry('pk_evento');
  26.         $evento_descricao   = new TEntry('evento_descricao');
  27.         $evento_processo   = new TEntry('evento_processo');
  28.         $evento_registro   = new TEntry('evento_registro');
  29.         $evento_folha   = new TEntry('evento_folha');
  30.         $evento_data_registro   = new TDate('evento_data_registro');
  31.         $evento_livro   = new TEntry('evento_livro');
  32.         $evento_campus_fk   = new TDBCombo('evento_campus_fk','banco','Campus','pk_campus','campus_descricao');
  33.         
  34.         $evento_descricao->addValidation(_t('Descrição'), new TRequiredValidator);
  35.         $evento_processo->addValidation(_t('Processo'), new TRequiredValidator);
  36.         $evento_registro->addValidation(_t('Registro'), new TRequiredValidator);
  37.         $evento_folha->addValidation(_t('Folha'), new TRequiredValidator);
  38.         $evento_data_registro->addValidation(_t('Data de Registro'), new TRequiredValidator);
  39.         $evento_data_registro->setMask('dd/mm/yyyy');
  40.         $evento_livro->addValidation(_t('Livro'), new TRequiredValidator);
  41.         $evento_campus_fk->addValidation(_t('Campus'), new TRequiredValidator);
  42.         
  43.         $this->form->addQuickField('ID:',    $pk_evento,    40);
  44.         $this->form->addQuickField('Descrição:',  $evento_descricao200);
  45.         $this->form->addQuickField('Processo:',  $evento_processo200);
  46.         $this->form->addQuickField('Registro:',  $evento_registro200);
  47.         $this->form->addQuickField('Folha:',  $evento_folha200);
  48.         $this->form->addQuickField('Livro:',  $evento_livro200);
  49.         $this->form->addQuickField('Data de Registro:',  $evento_data_registro200);
  50.         $this->form->addQuickField('Campus:',  $evento_campus_fk200);
  51.         
  52.         $this->form->addQuickAction('Salvar', new TAction(array($this'onSave')), 'ico_save.png');
  53.         $this->form->addQuickAction('Novo',  new TAction(array($this'onClear')), 'ico_new.png');
  54.         
  55.         $pk_evento->setEditable(FALSE);
  56.         
  57.         $this->datagrid = new TQuickGrid;
  58.         $this->datagrid->style 'width: 100%';
  59.         $this->datagrid->setHeight(320);
  60.         
  61.         $this->datagrid->addQuickColumn('ID',   'pk_evento',  'center'50, new TAction(array($this'onReload')), array('order''pk_evento'));
  62.         $this->datagrid->addQuickColumn('Descrição''evento_descricao','left',  400, new TAction(array($this'onReload')), array('order''evento_descricao'));
  63.         
  64.         $this->datagrid->addQuickAction('Edit',  new TDataGridAction(array($this'onEdit')),   'pk_evento''ico_edit.png');
  65.         $this->datagrid->addQuickAction('Delete', new TDataGridAction(array($this'onDelete')), 'pk_evento''ico_delete.png');
  66.         
  67.         $this->datagrid->createModel();
  68.         
  69.         $vbox = new TVBox;
  70.         $vbox->add($this->form);
  71.         $vbox->add($this->datagrid);
  72.         parent::add($vbox);
  73.     }
  74. }
  75. </code>
NC

Então, na verdade você esta usando um TStandardFormList, como tal ele um um evento onSave padrão da classe, e como padrão da classe ele trabalha com data americana, como você está usando data no formato brasileiro, você terá que criar um metodo onSave quer irá substituir o padrão do TStandardFormList, trocando a data conforme eu havia te falado.
FK

Hum, o negócio é classe que eu estava extendendo, não é um método do TQuickForm, blz, obrigado. Vou tentar desse jeito.
FA

Se possível pode colocar o resultado da solução?

Apenas uma sugestão. Seria interessante os tópicos resolvidos terem no final [RESOLVIDO] pra melhor organização. Isso facilita a outros usuários que buscam a solução do mesmo problema.
SF

Essa é minha duvida : Não seria mais interessante mudar no código original da classe? Ficar refazendo OnSave em cada tela não seria um retrocesso ?
Não seria possível ajustar isso no MODEL da tabela, e ficar tudo automático ?
PD

Sergio,

Nem sempre é interessante deixar uma conversão genérica.
A conversão automática na model pode ser perigosa.
Em um formulário de cadastro, você quer o vai e vem automático.
Mas em outros pontos da regra de negócio, em outras rotinas
você vai querer a data em formato original para efetuar cálculos.

Att,
SF

Pablo, entendi. Mas como seria para modificar direto no MODEL? Seria possível vc Pode postar aqui?

PD

Hook Methods:
www.adianti.com.br/framework_files/tutor/index.php?class=HookMethodV

Mas se implementados da maneira errada, poderão trazer dor de cabeça generalizada.
PD

www.adianti.com.br/forum/pt/view_2287?conversao-de-datas-e-valores-m