CS
Agenda com onReload() com query manual
Fechado
Salve, galera. Precisei criar uma query manual em virtude da complexidade de um retorno de dados. O objetivo é criar uma agenda para reserva de recursos. Esta query é chamada através do parâmetro data de agendamento para popular uma grid.
Como preciso que apenas consigam um agendamento através da data atual somada a mais sete dias, criei dois botoes de ação para ir alterando a data de um em um dia até o máximo de sete. Mas preciso que ao clicar no botão onNextDay ou onBackDay, além de alterar o parâmetro da data, também passa este dado para a query do onReload e popule a datagrid com dados de acordo com a data passada. Só que não estou conseguindo. Segue o código:
Como preciso que apenas consigam um agendamento através da data atual somada a mais sete dias, criei dois botoes de ação para ir alterando a data de um em um dia até o máximo de sete. Mas preciso que ao clicar no botão onNextDay ou onBackDay, além de alterar o parâmetro da data, também passa este dado para a query do onReload e popule a datagrid com dados de acordo com a data passada. Só que não estou conseguindo. Segue o código:
- <?php
- class Agenda extends TPage
- {
- private $datagrid;
- private $formgrid;
- private $loaded;
- private $back_action;
- private $next_action;
-
- public function __construct()
- {
- parent::__construct();
-
- // creates the form
- $this->form = new TQuickForm('form_search_Agenda');
- $this->form->class = 'tform'; // change CSS class
- $this->form = new BootstrapFormWrapper($this->form);
- $this->form->style = 'display: table;width:100%'; // change style
- $this->form->setFormTitle('Agenda de Recursos');
-
- // create the form fields
- $data_agenda = new TDate('data_agenda');
- $data_agenda->setValue(date('d/m/Y'));
- $data_agenda->setEditable(FALSE);
-
- // add the fields
- $this->form->addQuickField('Data:', $data_agenda, 80 );
- $this->form->addQuickAction('Back Day', new TAction(array($this, 'onBackDay')), 'ico_previous.png');
- $this->form->addQuickAction('Next Day', new TAction(array($this, 'onNextDay')), 'ico_next.png');
-
- // add the search form actions
- //$this->form->addQuickAction(_t('Find'), new TAction(array($this, 'onSearch')), 'fa:search');
-
- $this->datagrid = new TDataGrid;
-
- $column_hora = new TDataGridColumn('hora', 'Horario', 'center', 50);
- $column_lab = new TDataGridColumn('lab', 'Laboratório', 'center', 150);
- $column_tab = new TDataGridColumn('tab', 'Tablets', 'center', 150);
- $column_intn = new TDataGridColumn('intn', 'Interativa', 'center', 150);
- $column_int1 = new TDataGridColumn('int1', 'Interativa 1 EM', 'center', 150);
- $column_int2 = new TDataGridColumn('int2', 'Interativa 2 EM', 'center', 150);
- $column_int3 = new TDataGridColumn('int3', 'Interativa 3 EM', 'center', 150);
-
- $this->datagrid->addColumn($column_hora);
- $this->datagrid->addColumn($column_lab);
- $this->datagrid->addColumn($column_tab);
- $this->datagrid->addColumn($column_intn);
- $this->datagrid->addColumn($column_int1);
- $this->datagrid->addColumn($column_int2);
- $this->datagrid->addColumn($column_int3);
-
- $this->datagrid->createModel();
-
- $this->datagrid->disableDefaultClick();
-
- // put datagrid inside a form
- $this->formgrid = new TForm;
- $this->formgrid->add($this->datagrid);
-
- $gridpack = new TVBox;
- $gridpack->style = 'width: 100%';
- $gridpack->add($this->formgrid);
-
- // vertical box container
- $container = new TVBox;
- $container->style = 'width: 90%';
- $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
- $container->add(TPanelGroup::pack('Agenda de Recursos', $this->form));
- $container->add($gridpack);
-
- parent::add($container);
- }
- public function onReload( $param )
- {
- try
- {
- TTransaction::open('siga');
- TTransaction::setLogger( new TLoggerSTD );
- //TTransaction::setLogger(new TLoggerTXT('tmp/log.txt')); // file
-
- $conn = TTransaction::get(); // get PDO connection
-
- $data = $this->form->getData();
- $data1 = ($data->data_agenda);
- $data1 = date('Y/m/d', strtotime($data1));//
-
- $result = $conn->query("select * from agenda_prof ('".$data1."')");
-
- $this->datagrid->clear;
-
- $item = new StdClass;
- foreach ($result as $row)
- {
- $item->hora = $row[0];
- $item->lab = $row[1];
- $item->int1 = $row[2];
- $item->tab = $row[3];
- $item->int3 = $row[4];
- $item->intn = $row[5];
- $item->int2 = $row[6];
-
- $this->datagrid->addItem($item);
- }
-
- TTransaction::close();
-
- }
- catch ( Exception $e )
- {
- new TMessage( 'error', $e->getMessage());
- TTransaction::rollback();
- }
- }
- public function show()
- {
- if ( !$this->loaded)
- {
- $this->onReload( func_get_arg( 0 ));
- }
- parent::show();
- }
-
- /**
- * Next day
- */
- public function onNextDay($param)
- {
- $data = $this->form->getData();
- $data_atual = $data->data_agenda;
- $quebrarDatas = explode("/", $data_atual); // Utilizando a função explode(), separo em um array os caracteres separados por "/".
- list($dia, $mes, $ano) = $quebrarDatas;
- $nova_data = date('d/m/Y', mktime(0,0,0, $mes, $dia + 1, $ano));
-
-
- $data_controle = date('d/m/Y');
- $quebrarDatas = explode("/", $data_controle); // Utilizando a função explode(), separo em um array os caracteres separados por "/".
- list($dia, $mes, $ano) = $quebrarDatas;
- $data_controle1 = date('d/m/Y', mktime(0,0,0, $mes, $dia + 7, $ano));
-
- if ($nova_data > $data_controle1)
- {
- $nova_data = date('d/m/Y');
- }
-
- $data->data_agenda = $nova_data;
- $data->data_controle = $data_controle1;
- $this->form->setData( $data );
- $this->onReload($param);
- }
-
- /**
- * Back day
- */
- public function onBackDay($param)
- {
- $data = $this->form->getData();
- $data_atual = $data->data_agenda;
- $quebrarDatas = explode("/", $data_atual); // Utilizando a função explode(), separo em um array os caracteres separados por "/".
- list($dia, $mes, $ano) = $quebrarDatas;
- $nova_data = date('d/m/Y', mktime(0,0,0, $mes, $dia - 1, $ano));
- $data->data_agenda = $nova_data;
- $this->form->setData( $data );
- $this->onReload($param);
- }
-
- }
- ?>
De um var_dump na sua variável $param dentro do onReload veja qual data esta chegando apos clicar no botão onNextDay acho que essa variavel $param['data_agenda'] está trazendo seu resultado, senão estiver use variáveis de sessão.
Outra dica existe uma função nativa do PHP para trabalhar com datas pode ajudar no seu projeto.
Ex:
$suadata = strtotime('+1 day', $suadata);
$suadata = strtotime('-1 day', $suadata);
$suadata = strtotime('+7 day', $suadata);
Boa sorte
Felipe Cortez
Então, amigo, o $data_agenda esta chegando em branco no onReload() quando chamo a classe pela primeira vez:
Estou fazendo um teste assim, mas sempre chega null no onReload:
Mais em qual momento vc está passando o valor para a variavel?
Tenta ai !!!
Carlos,
Você criou uma TPage com nome Agenda. Use sufixo tipo AgendaForm.
Nome simples é para model, não para TPage.
Att,