VC
Ordenar Datagrid(detail) do formulario Master/Detais
Pessoal,
Tenho um formulário mestre/detalhe onde o datagrid do detalhe tem uma coluna data e eu queria apresentar sempre ordenado por essa coluna, porém não consegui ordenar de forma alguma.
Alguém teria um exemplo desse datagrid(detail) ordenado no formado do padrão do framework?
Agradeço desde já toda a ajuda que for possível.
Tenho um formulário mestre/detalhe onde o datagrid do detalhe tem uma coluna data e eu queria apresentar sempre ordenado por essa coluna, porém não consegui ordenar de forma alguma.
Alguém teria um exemplo desse datagrid(detail) ordenado no formado do padrão do framework?
Agradeço desde já toda a ajuda que for possível.
- <?php
- /**
- * BzmViagemForm Master/Detail
- * @author <your name here>
- */
- class BzmViagemForm extends TPage
- {
- protected $form; // form
- protected $detail_list;
-
- /**
- * Page constructor
- */
- use Adianti\base\AdiantiFileSaveTrait;
-
- public function __construct()
- {
- parent::__construct();
-
-
- // creates the form
- $this->form = new BootstrapFormBuilder('form_BzmViagem');
- $this->form->setFormTitle('Cadastro de Viagens');
- // $this->form->setFieldSizes('100%');
- $this->form->generateAria(); // automatic aria-label
- $this->form->appendPage('Viagem');
-
- // master fields
- $ID_VIAGEM = new TEntry('ID_VIAGEM');
- $FK_ID_NAVIO = new TDBCombo('FK_ID_NAVIO', 'datasiop', 'navio', 'ID_NAVIO', 'NOME','NOME');
- $FK_ID_AGENTE = new TDBCombo('FK_ID_AGENTE', 'datasiop', 'BzmAgente', 'ID_AGENTE', 'NOME','NOME');
- $DATA_PREV_CHEGADA = new TDate('DATA_PREV_CHEGADA');
- $DATA_PREV_ATRACACAO = new TDate('DATA_PREV_ATRACACAO');
- $DATA_PREV_PARTIDA = new TDate('DATA_PREV_PARTIDA');
- $FK_ID_TIPO_OPERACAO = new TDBCombo('FK_ID_TIPO_OPERACAO', 'datasiop', 'BzmTipoOperacao', 'ID_TIPO_OPERACAO', 'DESCRICAO','DESCRICAO');
- $RESUMO_CARGA = new TEntry('RESUMO_CARGA');
- $BERCO = new TCombo('BERCO');
- $QTDE_MANIFESTO = new TEntry('QTDE_MANIFESTO');
- $PRANCHA = new TEntry('PRANCHA');
- $BORDO = new TCombo('BORDO');
- $IDC_GUINCHO_BORDO = new TCombo('IDC_GUINCHO_BORDO');
- $IDC_GRAB_BORDO = new TCombo('IDC_GRAB_BORDO');
- $IDC_STATUS = new TCombo('IDC_STATUS');
- $IDC_CONFIRMADO = new TCombo('IDC_CONFIRMADO');
- $IDC_CONFIRMADO->addItems(['S'=>'Sim','N'=>'Não']);
- $IDC_GRAB_BORDO->addItems(['S'=>'Sim','N'=>'Não']);
- $IDC_GUINCHO_BORDO->addItems(['S'=>'Sim','N'=>'Não']);
- $BERCO->addItems(['100'=>'100','101'=>'101','102'=>'102','103'=>'103','104'=>'104','105'=>'105','106'=>'106']);
- $BORDO->addItems(['B'=>'BOMBORDO','E'=>'ESTIBORDO','N'=>'NÃO DEFINIDO']);
- $IDC_STATUS->addItems(['E'=>'ESPERADO','A'=>'ATRACADO','F'=>'FINALIZADO','C'=>'CANCELADO']);
- $IDC_CONFIRMADO->enableSearch();
- $IDC_GRAB_BORDO->enableSearch();
- $IDC_GUINCHO_BORDO->enableSearch();
- $BERCO->enableSearch();
- $BORDO->enableSearch();
- $IDC_STATUS->enableSearch();
- $DATA_PREV_ATRACACAO->setmask('dd/mm/yyyy');
- $DATA_PREV_ATRACACAO->setdatabasemask('yyyy-mm-dd');
- $DATA_PREV_PARTIDA->setmask('dd/mm/yyyy');
- $DATA_PREV_PARTIDA->setdatabasemask('yyyy-mm-dd');
- $DATA_PREV_CHEGADA->setmask('dd/mm/yyyy');
- $DATA_PREV_CHEGADA->setdatabasemask('yyyy-mm-dd');
-
- $RESUMO_CARGA->forceUpperCase();
- $RESUMO_CARGA->setMaxLength(50);
- $PRANCHA->setMaxLength(3);
- $PRANCHA->setmask(000);
- $QTDE_MANIFESTO->setnumericmask(0,',','.',true);
-
- $FK_ID_NAVIO->addValidation('Navio:', new TRequiredValidator);
- $FK_ID_AGENTE->addValidation('Agente:', new TRequiredValidator);
- $IDC_STATUS->addValidation('Status:', new TRequiredValidator);
- $BERCO->addValidation('Berço:', new TRequiredValidator);
- $IDC_CONFIRMADO->addValidation('Confirmado:', new TRequiredValidator);
- $QTDE_MANIFESTO->addValidation('Qtde Manifesto:', new TRequiredValidator);
- $BORDO->addValidation('Bordo:', new TRequiredValidator);
- $PRANCHA->addValidation('Prancha:', new TRequiredValidator);
- $IDC_GUINCHO_BORDO->addValidation('Guincho Bordo', new TRequiredValidator);
- $IDC_GRAB_BORDO->addValidation('Grab Bordo:', new TRequiredValidator);
- $DATA_PREV_CHEGADA->addValidation('Data Prev Chegada:', new TRequiredValidator);
- $DATA_PREV_PARTIDA->addValidation('Data Prev Partida:', new TRequiredValidator);
- $FK_ID_TIPO_OPERACAO->addValidation('Tipo Operação:', new TRequiredValidator);
- $ID_VIAGEM->setSize('10%');
- $FK_ID_NAVIO->setSize('50%');
- $FK_ID_AGENTE->setSize('50%');
- $DATA_PREV_ATRACACAO->setSize('15%');
- $DATA_PREV_PARTIDA->setSize('15%');
- $DATA_PREV_CHEGADA->setSize('15%');
- $RESUMO_CARGA->setSize('20%');
- $IDC_STATUS->setSize('20%');
- $BERCO->setSize('10%');
- $IDC_CONFIRMADO->setSize('8%');
- $QTDE_MANIFESTO->setSize('15%');
- $BORDO->setSize('15%');
- $PRANCHA->setSize('5%');
- $IDC_GUINCHO_BORDO->setSize('8%');
- $IDC_GRAB_BORDO->setSize('8%');
- $FK_ID_TIPO_OPERACAO->setSize('20%');
- // detail fields
- $detail_uniqid = new THidden('detail_uniqid');
- $detail_ID_OCORRENCIA = new THidden('detail_ID_OCORRENCIA');
- $detail_id_tp_ocorrencia = new TDBCombo('detail_id_tp_ocorrencia', 'datasiop', 'tipo_ocorrencia', 'ID_TIPO_OCORRENCIA', 'DESCRICAO','DESCRICAO');
- $detail_DATA_OCORRENCIA = new TDate('detail_DATA_OCORRENCIA');
- $detail_HORA_INI = new TTime('detail_HORA_INI');
- $detail_HORA_FIM = new TTime('detail_HORA_FIM');
-
- $detail_DATA_OCORRENCIA->setmask('dd/mm/yyyy');
- $detail_DATA_OCORRENCIA->setdatabasemask('yyyy-mm-dd');
-
-
- if (!empty($ID_VIAGEM))
- {
- $ID_VIAGEM->setEditable(FALSE);
- }
-
- // master fields
- $this->form->addFields( [ new TLabel('Id:') ], [ $ID_VIAGEM ] );
- $this->form->addFields( [ new TLabel('Navio:') ], [ $FK_ID_NAVIO ] );
- $this->form->addFields( [ new TLabel('Agente:') ], [ $FK_ID_AGENTE ] );
- $this->form->addFields( [ new TLabel('Data Prev. Chegada:') ], [ $DATA_PREV_CHEGADA ] );
- $this->form->addFields( [ new TLabel('Data Prev. Atracação:') ], [ $DATA_PREV_ATRACACAO ] );
- $this->form->addFields( [ new TLabel('Data Prev. Partida:') ], [ $DATA_PREV_PARTIDA ] );
- $this->form->addFields( [ new TLabel('Tipo Operação:') ], [ $FK_ID_TIPO_OPERACAO ] );
- $this->form->addFields( [ new TLabel('Resumo Carga:') ], [ $RESUMO_CARGA ] );
- $this->form->addFields( [ new TLabel('Berço:') ], [ $BERCO ] );
- $this->form->addFields( [ new TLabel('Qtde Manifesto:') ], [ $QTDE_MANIFESTO ] );
- $this->form->addFields( [ new TLabel('Prancha:') ], [ $PRANCHA ] );
- $this->form->addFields( [ new TLabel('Bordo:') ], [ $BORDO ] );
- $this->form->addFields( [ new TLabel('Guincho de Bordo:') ], [ $IDC_GUINCHO_BORDO ] );
- $this->form->addFields( [ new TLabel('Grab de Bordo:') ], [ $IDC_GRAB_BORDO ] );
- $this->form->addFields( [ new TLabel('Status:') ], [ $IDC_STATUS ] );
- $this->form->addFields( [ new TLabel('Confirmado:') ], [ $IDC_CONFIRMADO ] );
-
- // detail fields
- $this->form->addContent( ['<h4><b>Ocorrências S.O.F:</b></h4><hr>'] );
- $this->form->addFields( [$detail_uniqid] );
- $this->form->addFields( [$detail_ID_OCORRENCIA] );
-
- // $this->form->addFields( [new TLabel('Id:')], [$detail_id_ocorrencia] );
- $this->form->addFields( [ new TLabel('Tipo Ocorrência:') ], [ $detail_id_tp_ocorrencia ] );
- $this->form->addFields( [new TLabel('Data Ocorrência:')], [$detail_DATA_OCORRENCIA] );
- $this->form->addFields( [new TLabel('Hora Ini:')], [$detail_HORA_INI] );
- $this->form->addFields( [new TLabel('Hora Fim:')], [$detail_HORA_FIM] );
-
- $detail_ID_OCORRENCIA->setSize('10%');
- $detail_id_tp_ocorrencia->setSize('50%');
- $detail_DATA_OCORRENCIA->setSize('10%');
- $detail_HORA_INI->setSize('07%');
- $detail_HORA_FIM->setSize('07%');
-
- $detail_HORA_INI->setMinLength(5);
- $detail_HORA_FIM->setMinLength(5);
-
- $add = TButton::create('add', [$this, 'onDetailAdd'], 'Gravar', 'fa:plus-circle green');
- $add->getAction()->setParameter('static','1');
- $this->form->addFields( [], [$add] );
-
- $this->detail_list = new BootstrapDatagridWrapper(new TDataGrid);
-
- $this->detail_list->setId('ocorrencia_list');
- $this->detail_list->generateHiddenFields();
- $this->detail_list->style = "min-width: 700px; width:100%;margin-bottom: 10px";
-
-
- // items
- $this->detail_list->addColumn( new TDataGridColumn('uniqid', 'Uniqid', 'center') )->setVisibility(false);
- $this->detail_list->addColumn( new TDataGridColumn('ID_OCORRENCIA', 'Id', 'center') )->setVisibility(false);
-
- $dt = $this->detail_list->addColumn( new TDataGridColumn('DATA_OCORRENCIA', 'Data', 'left') );
- $pi = $this->detail_list->addColumn( new TDataGridColumn('id_tp_ocorrencia', 'Tipo ocorrência', 'left') );
- $this->detail_list->addColumn( new TDataGridColumn('HORA_INI', 'Hora Ini', 'left') );
- $this->detail_list->addColumn( new TDataGridColumn('HORA_FIM', 'Hora Fim', 'left') );
-
-
-
- $pi->setTransformer(function($value){
- return tipo_ocorrencia::findInTransaction('datasiop', $value)->DESCRICAO;
- });
-
-
- $dt->setTransformer( function($value, $object, $row) {
- if ($value)
- {
- try
- {
- $date = new DateTime($value);
- return $date->format('d/m/Y');
- }
- catch (Exception $e)
- {
- return $value;
- }
- }
- return $value;
- });
-
-
- // detail actions
- $action1 = new TDataGridAction([$this, 'onDetailEdit'] );
- $action1->setFields( ['uniqid', '*'] );
-
- $action2 = new TDataGridAction([$this, 'onDetailDelete']);
- $action2->setField('uniqid');
-
- // add the actions to the datagrid
- $this->detail_list->addAction($action1, _t('Edit'), 'fa:edit blue');
- $this->detail_list->addAction($action2, _t('Delete'), 'far:trash-alt red');
-
- $this->detail_list->createModel();
- // $scroll = new TScroll();
- // $scroll->setSize(1000,110);
- // $scroll->add($this->detail_list);
- // $this->form->addContent( [$scroll] );
-
- $panel = new TPanelGroup;
- $panel->add($this->detail_list);
- $panel->getBody()->style = 'overflow-x:auto';
- $this->form->addContent( [$panel] );
-
- $this->form->addAction( 'Salvar', new TAction([$this, 'onSave'], ['static'=>'1']), 'fa:save green');
- $this->form->addAction( 'Limpar', new TAction([$this, 'onClear']), 'fa:eraser red');
-
- // create the page container
- $container = new TVBox;
- $container->style = 'width: 100%';
- // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
- $container->add($this->form);
- parent::add($container);
- }
-
-
- /**
- * Clear form
- * @param $param URL parameters
- */
- public function onClear($param)
- {
- $this->form->clear(TRUE);
- }
-
- /**
- * Add detail item
- * @param $param URL parameters
- */
- public function onDetailAdd( $param )
- {
- try
- {
-
- $data = $this->form->getData();
- $this->form->validate();
-
- if ((empty($data->detail_id_tp_ocorrencia)) || (empty($data->detail_DATA_OCORRENCIA)) || (empty($data->detail_HORA_INI)) || (empty($data->detail_HORA_FIM)) )
- {
- throw new Exception('Campos: Tipo Ocorrência, Data Ocorrência, Hora Inicio e Hora fim são obrigatórios');
- }
-
- if ( $data->detail_HORA_INI == '00:00')
- {
- throw new Exception('Hora inicial inválida');
-
- }
-
- if ( $data->detail_HORA_FIM == '00:00')
- {
- throw new Exception('Hora Final inválida');
-
- }
-
- /** validation sample
- if (empty($data->fieldX))
- {
- throw new Exception('The field fieldX is required');
- }
- **/
-
- $uniqid = !empty($data->detail_uniqid) ? $data->detail_uniqid : uniqid();
-
- $grid_data = [];
- $grid_data['uniqid'] = $uniqid;
- $grid_data['ID_OCORRENCIA'] = $data->detail_ID_OCORRENCIA;
- $grid_data['id_tp_ocorrencia'] = $data->detail_id_tp_ocorrencia;
- $grid_data['DATA_OCORRENCIA'] = $data->detail_DATA_OCORRENCIA;
- $grid_data['HORA_INI'] = $data->detail_HORA_INI;
- $grid_data['HORA_FIM'] = $data->detail_HORA_FIM;
-
- // insert row dynamically
- $row = $this->detail_list->addItem( (object) $grid_data );
- $row->id = $uniqid;
-
- TDataGrid::replaceRowById('ocorrencia_list', $uniqid, $row);
-
- // clear detail form fields
- $data->detail_uniqid = '';
- $data->detail_ID_OCORRENCIA = '';
- $data->detail_id_tp_ocorrencia = '';
- $data->detail_DATA_OCORRENCIA = '';
- $data->detail_HORA_INI = '';
- $data->detail_HORA_FIM = '';
-
- // send data, do not fire change/exit events
- TForm::sendData( 'form_BzmViagem', $data, false, false );
- }
- catch (Exception $e)
- {
- $this->form->setData( $this->form->getData());
- new TMessage('error', $e->getMessage());
- }
- }
-
- /**
- * Edit detail item
- * @param $param URL parameters
- */
- public static function onDetailEdit( $param )
- {
- $data = new stdClass;
- $data->detail_uniqid = $param['uniqid'];
- $data->detail_ID_OCORRENCIA = $param['ID_OCORRENCIA'];
- $data->detail_id_tp_ocorrencia = $param['id_tp_ocorrencia'];
- $data->detail_DATA_OCORRENCIA = TDate::date2br($param['DATA_OCORRENCIA']);
- $data->detail_HORA_INI = $param['HORA_INI'];
- $data->detail_HORA_FIM = $param['HORA_FIM'];
-
- // send data, do not fire change/exit events
- TForm::sendData( 'form_BzmViagem', $data, false, false );
- }
-
- /**
- * Delete detail item
- * @param $param URL parameters
- */
- public static function onDetailDelete( $param )
- {
- // clear detail form fields
- $data = new stdClass;
- $data->detail_uniqid = '';
- $data->detail_ID_OCORRENCIA = '';
- $data->detail_id_tp_ocorrencia = '';
- $data->detail_DATA_OCORRENCIA = '';
- $data->detail_HORA_INI = '';
- $data->detail_HORA_FIM = '';
-
- // send data, do not fire change/exit events
- TForm::sendData( 'form_BzmViagem', $data, false, false );
-
- // remove row
- TDataGrid::removeRowById('ocorrencia_list', $param['uniqid']);
- }
-
- /**
- * Load Master/Detail data from database to form
- */
- public function onEdit($param)
- {
- try
- {
- TTransaction::open('datasiop');
-
- if (isset($param['key']))
- {
- $key = $param['key'];
-
- $object = new BzmViagem($key);
- $items = ocorrencia::where('id_viagem', '=', $key)->load();
-
- foreach( $items as $item )
- {
- $item->uniqid = uniqid();
- $row = $this->detail_list->addItem( $item );
- $row->id = $item->uniqid;
- }
- $this->form->setData($object);
- TTransaction::close();
- }
- else
- {
- $this->form->clear(TRUE);
- }
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage());
- TTransaction::rollback();
- }
- }
-
- /**
- * Save the Master/Detail data from form to database
- */
- public function onSave($param)
- {
- try
- {
- // open a transaction with database
- TTransaction::open('datasiop');
-
- $data = $this->form->getData();
- $this->form->validate();
-
- $master = new BzmViagem;
- $master->fromArray( (array) $data);
- $master->store();
-
- ocorrencia::where('id_viagem', '=', $master->ID_VIAGEM)->delete();
-
- if( $param['ocorrencia_list_id_tp_ocorrencia'] )
- {
- foreach( $param['ocorrencia_list_id_tp_ocorrencia'] as $key => $item_id )
- {
- $detail = new ocorrencia;
- $detail->id_tp_ocorrencia = $param['ocorrencia_list_id_tp_ocorrencia'][$key];
- $detail->DATA_OCORRENCIA = $param['ocorrencia_list_DATA_OCORRENCIA'][$key];
- $detail->HORA_INI = $param['ocorrencia_list_HORA_INI'][$key];
- $detail->HORA_FIM = $param['ocorrencia_list_HORA_FIM'][$key];
- $detail->id_viagem = $master->ID_VIAGEM;
- $detail->store();
- }
- }
- TTransaction::close(); // close the transaction
-
- TForm::sendData('form_BzmViagem', (object) ['id' => $master->ID_VIAGEM]);
-
- new TMessage('info', AdiantiCoreTranslator::translate('Record saved'));
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage());
- $this->form->setData( $this->form->getData() ); // keep form data
- TTransaction::rollback();
- }
- }
- }
Para esse tipo de mestre detalhe em que os detalhes são adicionados estaticamente à grid, acredito que seja mais fácil fazer via javascript. Deve ter vários exemplos de reordenação de tabelas com jquery na net, veja se encontra algo.