LS
Checkboxes com seleção de valores de ids intermitentes
Boa noite a todos,
Estou tendo uma certa dificuldade com uma tela que estou criando. Eu tenho um datagrid com checkboxes que podem selecionar todos ou 1 por vez. Acontece que o comportamento está intermitente e nem sempre retorna os valores ids corretos dos checkboxes selecionados.
A versão do framework que utilizo é a 7.4
minha classe. Método onSelecionados e o JavaScript no final do construtor.
Estou tendo uma certa dificuldade com uma tela que estou criando. Eu tenho um datagrid com checkboxes que podem selecionar todos ou 1 por vez. Acontece que o comportamento está intermitente e nem sempre retorna os valores ids corretos dos checkboxes selecionados.
A versão do framework que utilizo é a 7.4
minha classe. Método onSelecionados e o JavaScript no final do construtor.
- <?php
- require 'vendor/autoload.php';
- use Dompdf\Dompdf;
- use Dompdf\Options;
- /**
- * OrdemPagamentoPortobayConsulta Listing
- * @author <your name here>
- */
- class OrdemPagamentoPortobayConsulta extends TStandardList
- {
- protected $form; // registration form
- protected $datagrid; // listing
- protected $pageNavigation;
- protected $formgrid;
- protected $deleteButton;
- protected $transformCallback;
- const FORM_NUMBER = 9;
- private static $formName = 'form_search_OrdemPagamentoPortobayConsulta';
- /**
- * Class constructor
- * Creates the page, the form and the listing
- */
- public function __construct()
- {
- parent::__construct();
- parent::setDatabase('permission');
- parent::setActiveRecord('OrdemPagamentoPortobay'); // defines the active record
- parent::setDefaultOrder('id', 'desc'); // defines the default order
- $userid = TSession::getValue('userid');
- TTransaction::open('permission');
- // creates the form
- $this->form = new BootstrapFormBuilder(self::$formName);
- $this->form->setFormTitle('Consulta - Ordem de Pagamento Portobay');
- // create the form fields
- $id = new TEntry('id');
- $flagCheck = new THidden('flagCheck');
- $razao_social = new TEntry('razao_social');
- $cnpj = new TEntry('cnpj');
- $cnpj->placeholder = '99.999.999/9999-99';
- $cnpj->setMask('99.999.999/9999-99');
- $cpf = new TEntry('cpf');
- $cpf->placeholder = '999.999.999-99';
- $cpf->setMask('999.999.999-99');
- $centro_de_custo = new TEntry('centro_de_custo');
- $conta_contabil = new TEntry('conta_contabil');
- $numero_nf = new TEntry('numero_nf');
- $data_vencimento_ini = new TDate('data_vencimento_ini');
- $data_vencimento_ini->setMask('dd/mm/yyyy');
- $data_vencimento_fim = new TDate('data_vencimento_fim');
- $data_vencimento_fim->setMask('dd/mm/yyyy');
- $valor_ini = new TEntry('valor_ini');
- $valor_ini->setNumericMask(2, ',', '.', true);
- $valor_fim = new TEntry('valor_fim');
- $valor_fim->setNumericMask(2, ',', '.', true);
- $etapa = new TCombo('etapa');
- $etapa->addItems(HomeSolicitacao::getStatusList(self::FORM_NUMBER, $userid));
- $etapa->enableSearch();
- $data_cadastro_ini = new TDate('data_cadastro_ini');
- $data_cadastro_ini->setMask('dd/mm/yyyy');
- $data_cadastro_fim = new TDate('data_cadastro_fim');
- $data_cadastro_fim->setMask('dd/mm/yyyy');
- $fk_id_emissor = new TDBMultiSearch('fk_id_emissor', 'permission', 'SystemUser', 'id', 'name');
- $fk_id_emissor->setMinLength(0);
- $fk_id_emissor->setMask('{name}');
- $fk_id_emissor->setOperator('ilike');
- $criteria = new TCriteria;
- $criteria->add(new TFilter('fk_id_formulario', '=', self::FORM_NUMBER));
- $fk_id_cadastro = new TDBMultiSearch('fk_id_cadastro', 'permission', 'CadastroEtapa', 'id', 'nome', 'nome', $criteria);
- $fk_id_cadastro->setMinLength(0);
- $fk_id_cadastro->setMask('{nome}');
- $fk_id_cadastro->setOperator('ilike');
- $id->setSize('100%');
- $flagCheck->setSize('100%');
- $razao_social->setSize('100%');
- $cnpj->setSize('100%');
- $cpf->setSize('100%');
- $centro_de_custo->setSize('100%');
- $conta_contabil->setSize('100%');
- $numero_nf->setSize('100%');
- $data_vencimento_ini->setSize('120');
- $data_vencimento_fim->setSize('120');
- $valor_ini->setSize('120');
- $valor_fim->setSize('120');
- $etapa->setSize('100%');
- $data_cadastro_ini->setSize('120');
- $data_cadastro_fim->setSize('120');
- $fk_id_emissor->setSize('100%', 30);
- $fk_id_cadastro->setSize('100%', 30);
- // add the fields
- $row = $this->form->addFields(
- [new TLabel("N° Ordem Pagamento", '', '14px', 'b', '100%'), $id],
- [new TLabel("Razão Social", '', '14px', 'b', '100%'), $razao_social]
- );
- $row->layout = ['col-sm-3', 'col-sm-9'];
- $row = $this->form->addFields(
- [new TLabel("CPF", "", '14px', 'b', '100%'), $cpf],
- [new TLabel("CNPJ", "", '14px', 'b', '100%'), $cnpj],
- [new TLabel("Centro de Custo", '', '14px', 'b', '100%'), $centro_de_custo]
- );
- $row->layout = ['col-sm-3', 'col-sm-3', 'col-sm-6'];
- $row = $this->form->addFields(
- [new TLabel("Conta Contábil", '', '14px', 'b', '100%'), $conta_contabil],
- [new TLabel("Número da Nota", '', '14px', 'b', '100%'), $numero_nf],
- [new TLabel("Status", '', '14px', 'b', '100%'), $etapa]
- );
- $row->layout = ['col-sm-3', 'col-sm-3', 'col-sm-6'];
- $row = $this->form->addFields(
- [new TLabel("Data Cadastro", '', '14px', 'b', '100%'), $data_cadastro_ini, 'à', $data_cadastro_fim],
- [new TLabel("Data Vencimento", '', '14px', 'b', '100%'), $data_vencimento_ini, 'à', $data_vencimento_fim],
- [new TLabel("Valor", '', '14px', 'b', '100%'), $valor_ini, 'à', $valor_fim]
- );
- $row->layout = ['col-sm-4', 'col-sm-4', 'col-sm-4'];
- $hasCreatePermission = HomeSolicitacao::checkPermissions(self::FORM_NUMBER, $userid, -2);
- if ($hasCreatePermission) {
- $row = $this->form->addFields(
- [new TLabel("Emissor", '', '14px', 'b', '100%'), $fk_id_emissor],
- [new TLabel("Módulo", '', '14px', 'b', '100%'), $fk_id_cadastro]
- );
- $row->layout = ['col-sm-6', 'col-sm-6'];
- } else {
- $row = $this->form->addFields([new TLabel("Módulo", '', '14px', 'b', '100%'), $fk_id_cadastro]);
- $row->layout = ['col-sm-12'];
- }
- $this->form->addFields([$flagCheck]);
- // keep the form filled during navigation with session data
- $this->form->setData(TSession::getValue('OrdemPagamentoPortobayConsulta_filter_data'));
- $this->form->addAction(_t('Find'), new TAction(array($this, 'onSearch')), 'fa:search')->class = 'btn btn-sm btn-primary';
- $this->form->addAction(_t('Clear'), new TAction(array($this, 'onClear')), 'fa:eraser red');
- $isFinanceiro = SystemUserGroup::where('system_user_id', '=', $userid)->where('system_group_id', 'IN', "(SELECT id FROM permission.system_group WHERE name ILIKE '%Financeiro%Portobay%')")->count() > 0;
- if ($isFinanceiro) {
- $this->form->addAction(('Marcar como nota pendente'), new TAction(array($this, 'onMarkAsPending')), 'fa:file-invoice-dollar red');
- $this->form->addAction(('Marcar como nota enviada'), new TAction(array($this, 'onMarkAsSent')), 'fa:file-invoice-dollar green');
- }
- TTransaction::close();
- $this->form->addAction(('Gerar PDF Selecionados'), new TAction(array($this, 'onGenerateMultiple')), 'fa:check-square green');
- // creates a Datagrid
- $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
- $this->datagrid->datatable = 'true';
- $this->datagrid->id = 'datagrid_list'; // Adiciona um ID à datagrid
- $this->datagrid->style = 'width: 100%';
- $this->datagrid->setHeight(320);
- $checkall = new TElement('input');
- $checkall->id = 'checkbox_all';
- $checkall->type = 'checkbox';
- $checkall->title = 'Marcar/desmarcar todos';
- $checkall->style = 'height: 20px; width: 20px; background-color: transparent; border: 6px solid #5a5a5a;';
- //$checkall->onclick = "selectAll(this);";
- // creates the datagrid columns
- $col_select = new TDataGridColumn('select', $checkall, 'center');
- $column_id = new TDataGridColumn('id', 'N° OP', 'center');
- $column_razao_social = new TDataGridColumn('razao_social', 'Razão Social', 'center');
- $column_tipo_pessoa = new TDataGridColumn('tipo_pessoa', 'Tipo Pessoa', 'center');
- $column_cpf_cnpj = new TDataGridColumn('cnpj', 'CPF/CNPJ', 'center');
- $column_numero_nf = new TDataGridColumn('numero_nf', 'Nota Fiscal', 'center');
- $column_data_vencimento = new TDataGridColumn('data_vencimento', 'Data de Vencimento', 'center');
- $column_valor = new TDataGridColumn('valor', 'Valor', 'center');
- $column_fk_id_emissor = new TDataGridColumn('fk_id_emissor', 'Emissor', 'center');
- $column_data_cadastro = new TDataGridColumn('data_cadastro', 'Cadastrado em', 'center');
- $column_etapa = new TDataGridColumn('etapa', 'Status', 'center');
- $column_tipo = new TDataGridColumn('tipo', 'Módulo', 'center');
- $column_nota_enviada = new TDataGridColumn('nota_enviada', 'Status Nota', 'center');
- // add the columns to the Datagrid
- $this->datagrid->addColumn($col_select);
- $this->datagrid->addColumn($column_id, new TAction([$this, 'onReload'], ['column' => 'id']));
- $this->datagrid->addColumn($column_razao_social, new TAction([$this, 'onReload'], ['column' => 'razao_social']));
- $this->datagrid->addColumn($column_tipo_pessoa, new TAction([$this, 'onReload'], ['column' => 'tipo_pessoa']));
- $this->datagrid->addColumn($column_cpf_cnpj, new TAction([$this, 'onReload'], ['column' => 'cnpj']));
- $this->datagrid->addColumn($column_numero_nf, new TAction([$this, 'onReload'], ['column' => 'numero_nf']));
- $this->datagrid->addColumn($column_data_vencimento, new TAction([$this, 'onReload'], ['column' => 'data_vencimento']));
- $this->datagrid->addColumn($column_valor, new TAction([$this, 'onReload'], ['column' => 'valor']));
- $this->datagrid->addColumn($column_tipo);
- $this->datagrid->addColumn($column_etapa);
- $this->datagrid->addColumn($column_nota_enviada);
- $this->datagrid->addColumn($column_fk_id_emissor, new TAction([$this, 'onReload'], ['column' => 'fk_id_emissor']));
- $this->datagrid->addColumn($column_data_cadastro, new TAction([$this, 'onReload'], ['column' => 'data_cadastro']));
- // define format function
- $format_value = function ($value) {
- if (is_numeric($value)) {
- return number_format($value, 2, ',', '.') . ' R$';
- }
- return $value;
- };
- $column_valor->setTransformer($format_value);
- $column_valor->setTotalFunction(function ($values) {
- return array_sum((array) $values);
- });
- $this->datagrid->disableDefaultClick();
- // create EDIT action
- $action_edit = new TDataGridAction(array('OrdemPagamentoPortobayForm', 'onEdit'));
- $action_edit->setButtonClass('btn btn-default');
- $action_edit->setLabel('Editar');
- $action_edit->setImage('far:edit fa-lg blue');
- $action_edit->setField('id');
- $action_edit->setDisplayCondition(array($this, 'enableEdit'));
- $action_edit_financeiro = new TDataGridAction(array('OrdemPagamentoPortobayForm', 'onEditFinanceiro'));
- $action_edit_financeiro->setButtonClass('btn btn-default');
- $action_edit_financeiro->setLabel('Editar (Financeiro)');
- $action_edit_financeiro->setImage('far:edit fa-lg blue');
- $action_edit_financeiro->setField('id');
- $action_edit_financeiro->setDisplayCondition(array($this, 'enableEditFinanceiro'));
- $action_view = new TDataGridAction(array('OrdemPagamentoPortobayView', 'onViewFromConsulta'));
- $action_view->setButtonClass('btn btn-default');
- $action_view->setLabel('Visualizar');
- $action_view->setImage('fa:eye fa-lg purple');
- $action_view->setField('id');
- $action_files = new TDataGridAction(array('OrdemPagamentoPortobayAnexosView', 'onView'));
- $action_files->setButtonClass('btn btn-default');
- $action_files->setLabel('Anexos');
- $action_files->setImage('fa:paperclip grey fa-lg');
- $action_files->setField('id');
- $action_pdf = new TDataGridAction(array($this, 'onGenerateSingle'));
- $action_pdf->setButtonClass('btn btn-default');
- $action_pdf->setLabel(('Vizualizar PDF'));
- $action_pdf->setImage('fa:file-pdf red fa-lg');
- $action_pdf->setField('id');
- $action_del = new TDataGridAction(array($this, 'onDelete'));
- $action_del->setButtonClass('btn btn-default');
- $action_del->setLabel('Remover');
- $action_del->setImage('fa:trash fa-lg red');
- $action_del->setField('id');
- $action_del->setDisplayCondition(array($this, 'enableDelete'));
- $action_group = new TDataGridActionGroup('Ações ', 'fa:th');
- $action_group->addHeader('Opções');
- $action_group->addAction($action_edit);
- $action_group->addAction($action_edit_financeiro);
- //$action_group->addAction($action_pdf);
- $action_group->addAction($action_view);
- $action_group->addAction($action_files);
- //$action_group->addAction($action_del);
- // add the actions to the datagrid
- $this->datagrid->addActionGroup($action_group);
- // create the datagrid model
- $this->datagrid->createModel();
- // create the page navigation
- $this->pageNavigation = new TPageNavigation;
- $this->pageNavigation->setAction(new TAction(array($this, 'onReload')));
- $this->pageNavigation->setWidth($this->datagrid->getWidth());
- $panel = new TPanelGroup;
- $panel->add($this->datagrid);
- $panel->addFooter($this->pageNavigation);
- // header actions
- $dropdown = new TDropDown(TSession::getValue('OrdemPagamentoPortobayConsulta_limit') ?? '20', '');
- $dropdown->style = 'height:37px';
- $dropdown->setPullSide('right');
- $dropdown->setButtonClass('btn btn-default waves-effect dropdown-toggle');
- foreach ([10, 20, 50, 100, 500] as $qty) {
- $dropdown->addAction(
- $qty,
- new TAction(
- [$this, 'onChangeLimit'],
- [
- 'register_state' => 'false',
- 'static' => '1',
- 'limit' => "{$qty}"
- ]
- )
- );
- }
- $panel->addHeaderWidget(new TLabel('Listar '));
- $panel->addHeaderWidget($dropdown);
- $panel->addHeaderWidget(new TLabel(' / página'));
- $panel->addHeaderWidget(new TLabel(' '));
- $dropdown = new TDropDown(_t('Export'), 'fa:list');
- $dropdown->setPullSide('right');
- $dropdown->setButtonClass('btn btn-default waves-effect dropdown-toggle');
- $dropdown->addAction(_t('Save as CSV'), new TAction([$this, 'onExportCSV'], ['register_state' => 'false', 'static' => '1']), 'fa:table fa-fw blue');
- $dropdown->addAction(_t('Save as PDF'), new TAction([$this, 'onGenerateMultiple2'], ['register_state' => 'false', 'static' => '1']), 'far:file-pdf fa-fw red');
- $panel->addHeaderWidget($dropdown);
- // vertical box container
- $container = new TVBox;
- $container->style = 'width: 100%';
- $container->add(new TXMLBreadCrumb('menu.xml', 'OrdemPagamentoPortobayConsulta2'));
- $container->add($this->form);
- $container->add($panel);
- parent::add($container);
- TScript::create("
- let checkboxStates = {};
- document.getElementById('checkbox_all').addEventListener('change', function () {
- const isChecked = this.checked;
- $('input[name^=\"check_select_\"]').each(function () {
- const key = $(this).val();
- $(this).prop('checked', isChecked);
- sendAjaxRequest(key, isChecked);
- console.log('atualização individual:', key);
- });
- console.log('Status do checkbox all:', isChecked);
- });
- $(document).on('change', 'input[name^=\"check_select_\"]', function () {
- const key = $(this).val();
- const isChecked = this.checked;
- sendAjaxRequest(key, isChecked);
- console.log('Status do checkbox individual:', key);
- const allChecked = $('input[name^=\"check_select_\"]').length === $('input[name^=\"check_select_\"]:checked').length;
- $('#checkbox_all').prop('checked', allChecked);
- });
- function sendAjaxRequest(key, isChecked) {
- if (checkboxStates[key] !== isChecked) {
- console.log('Enviando AJAX para a chave:', key, 'Com flagCheck:', !isChecked);
- __adianti_ajax_exec('class=OrdemPagamentoPortobayConsulta&method=onSelecionados&key=' + key + '&flagCheck=' + !isChecked);
- console.log('Chamada AJAX enviada.');
- checkboxStates[key] = isChecked;
- }
- }
- $(document).ready(function(){
- $('#datagrid_list').parent().parent().addClass('margin_bottom_120');
- });
- ");
- }
- public function enableEdit($object)
- {
- return $object->can_edit;
- }
- public function enableEditFinanceiro($object)
- {
- return $object->can_edit_financeiro;
- }
- public function enableDelete($object)
- {
- return $object->can_delete;
- }
- public static function onChangeLimit($param)
- {
- TSession::setValue('OrdemPagamentoPortobayConsulta_limit', $param['limit']);
- AdiantiCoreApplication::loadPage(__CLASS__, 'onReload');
- }
- public function onEnter()
- {
- TSession::setValue('solicitacoes_selecionadas', []);
- $this->onReload();
- }
- public static function onSelecionados($param)
- {
- // Obtém a lista de documentos selecionados da sessão ou inicializa como um array vazio
- $documentosSelecionados = TSession::getValue('solicitacoes_selecionadas') ?? [];
- // Obter a chave e o estado do checkbox (flagCheck)
- $key = $param['key'] ?? null;
- $flagCheck = isset($param['flagCheck']) ? filter_var($param['flagCheck'], FILTER_VALIDATE_BOOLEAN) : null;
- // Exibir o estado do flagCheck para depuração
- echo "Flag Check: " . ($flagCheck ? 'true' : 'false') . "\n";
- echo "<pre>"; print_r($param); echo "</pre>";
- echo "Flag Check: " . ($flagCheck ? 'true' : 'false') . "<br>";
- // Manipula a lista de documentos com base no estado do checkbox
- if ($flagCheck)
- {
- // Remove o item se o flagCheck for true (marcado)
- $documentosSelecionados = array_diff($documentosSelecionados, [$key]);
- }
- else
- {
- // Adiciona o item se o flagCheck for false (não marcado) e não estiver presente
- if (!in_array($key, $documentosSelecionados, true))
- {
- $documentosSelecionados[] = $key;
- }
- }
- // Atualiza a sessão com os itens selecionados
- TSession::setValue('solicitacoes_selecionadas', array_values($documentosSelecionados));
- // Exibir o array atualizado para depuração
- echo "<pre>"; print_r($documentosSelecionados); echo "</pre>";
- // Envia dados do formulário
- TForm::sendData(self::$formName, $param);
- }
- public static function onGenerateMultiple($param)
- {
- $ordens = TSession::getValue('solicitacoes_selecionadas');
- if (empty($ordens)) {
- new TMessage('error', 'Favor Selecionar algum item na lista!');
- } else {
- try {
- TTransaction::open('permission');
- $files = [];
- foreach ($ordens as $ordemId) {
- $files[] = "D:/htdocs/qualydocs/" . self::createPDF($ordemId);
- }
- $files = implode(" ", $files);
- $output_file = 'app/output/multiples_' . date('Y_m_d_H_i_s') . "_" . rand(0, 99999) . ".pdf";
- $fullpath = 'D:/htdocs/qualydocs/' . $output_file;
- $command = "D:/htdocs/qualydocs/gs/gswin32c.exe -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOUTPUTFILE=$fullpath $files 2>&1";
- $result = shell_exec($command);
- TScript::create("console.log('$command');");
- TScript::create("console.log('$result');");
- if (file_exists($output_file)) {
- // open window to show pdf
- $window = TWindow::create('Ordem de Pagamento', 0.8, 0.8);
- $object = new TElement('object');
- $object->data = $output_file;
- $object->type = 'application/pdf';
- $object->style = "width: 100%; height:calc(100% - 10px)";
- $window->add($object);
- $window->show();
- } else {
- new TMessage('error', 'Erro ao gerar pdf!');
- }
- TTransaction::close();
- } catch (Exception $e) {
- new TMessage('error', $e->getMessage());
- TTransaction::rollback();
- }
- }
- TSession::setValue('solicitacoes_selecionadas', []);
- }
- public static function onGenerateSingle($param)
- {
- try {
- TTransaction::open('permission');
- $output_file = self::createPDF($param['id']);
- if (file_exists($output_file)) {
- // open window to show pdf
- $window = TWindow::create('Ordem de Pagamento', 0.8, 0.8);
- $object = new TElement('object');
- $object->data = $output_file;
- $object->type = 'application/pdf';
- $object->style = "width: 100%; height:calc(100% - 10px)";
- $window->add($object);
- $window->show();
- } else {
- new TMessage('error', 'Erro ao gerar pdf!');
- }
- TTransaction::close();
- } catch (Exception $e) {
- new TMessage('error', $e->getMessage());
- TTransaction::rollback();
- }
- }
- public static function createPDF($id)
- {
- $ordem_pagamento = new OrdemPagamentoPortobay($id);
- // replace the main section variables
- $html = new THtmlRenderer('app/reports/relatorio.html');
- $unidade_monetaria = array(1 => 'R$', 2 => '$', 3 => '€', 4 => '£');
- $data_vencimento = !empty($ordem_pagamento->data_vencimento) ? date('d/m/Y', strtotime($ordem_pagamento->data_vencimento)) : '';
- $data_emissao_nf = !empty($ordem_pagamento->data_emissao_nf) ? date('d/m/Y', strtotime($ordem_pagamento->data_emissao_nf)) : '';
- $data_cadastro = !empty($ordem_pagamento->data_cadastro) ? date('d/m/Y', strtotime($ordem_pagamento->data_cadastro)) : '';
- $ordem_pagamento->inss_label = number_format($ordem_pagamento->inss_label, 2, ',', '.') . '%';
- $ordem_pagamento->irrf_label = number_format($ordem_pagamento->irrf_label, 2, ',', '.') . '%';
- $ordem_pagamento->irrf_2_label = number_format($ordem_pagamento->irrf_2_label, 2, ',', '.') . '%';
- $ordem_pagamento->iss_label = number_format($ordem_pagamento->iss_label, 2, ',', '.') . '%';
- $ordem_pagamento->pis_cofins_cssl_label = number_format($ordem_pagamento->pis_cofins_cssl_label, 2, ',', '.') . '%';
- $unidade_monetaria = !empty($ordem_pagamento->unidade_monetaria) ? $unidade_monetaria[$ordem_pagamento->unidade_monetaria] . " " : "";
- $replace = [];
- $replace['data_vencimento'] = $data_vencimento;
- $replace['data_emissao_nf'] = $data_emissao_nf;
- $replace['valor'] = "{$unidade_monetaria}" . number_format($ordem_pagamento->valor ?? '0', 2, ',', '.');
- $replace['numero_nf'] = $ordem_pagamento->numero_nf;
- $replace['razao_social'] = $ordem_pagamento->razao_social;
- if ($ordem_pagamento->tipo_pessoa == 1 && !empty($ordem_pagamento->cpf)) {
- $ordem_pagamento->cnpj = $ordem_pagamento->cpf;
- } else if ($ordem_pagamento->tipo_pessoa == 2 && !empty($ordem_pagamento->cnpj)) {
- $ordem_pagamento->cnpj = $ordem_pagamento->cnpj;
- }
- $replace['cnpj'] = $ordem_pagamento->cnpj;
- $replace['telefone'] = $ordem_pagamento->telefone;
- $replace['descricao_servico'] = $ordem_pagamento->descricao_servico;
- $replace['op1'] = "[ ] BOLETO";
- $replace['op2'] = "[ ] DEPÓSITO";
- $replace['op3'] = "[ ] CÂMBIO";
- $replace['op4'] = "[ ] OUTROS";
- switch ($ordem_pagamento->forma_pagamento) {
- case 'BOLETO':
- $replace['op1'] = "[ X ] BOLETO";
- break;
- case 'DEPOSITO':
- $replace['op2'] = "[ X ] DEPÓSITO";
- break;
- case 'CAMBIO':
- $replace['op3'] = "[ X ] CÂMBIO";
- break;
- case 'OUTROS':
- $replace['op4'] = "[ X ] OUTROS";
- break;
- }
- $replace['credor'] = $ordem_pagamento->credor;
- $replace['banco'] = $ordem_pagamento->banco;
- $replace['agencia'] = $ordem_pagamento->agencia;
- $replace['conta_corrente'] = $ordem_pagamento->numero_conta;
- $replace['valor_bruto'] = "{$unidade_monetaria}" . number_format($ordem_pagamento->valor_bruto, 2, ',', '.');
- $replace['inss'] = 'R$ ' . number_format($ordem_pagamento->inss, 2, ',', '.');
- $replace['irrf'] = 'R$ ' . number_format($ordem_pagamento->irrf, 2, ',', '.');
- $replace['irrf_2'] = 'R$ ' . number_format($ordem_pagamento->irrf_2, 2, ',', '.');
- $replace['iss'] = 'R$ ' . number_format($ordem_pagamento->iss, 2, ',', '.');
- $replace['pis_cofins_cssl'] = 'R$ ' . number_format($ordem_pagamento->pis_cofins_cssl, 2, ',', '.');
- $replace['inss_label'] = strval(number_format(doubleval($ordem_pagamento->inss_label), 2, ',', '.')) . '%';
- $replace['irrf_label'] = strval(number_format(doubleval($ordem_pagamento->irrf_label), 2, ',', '.')) . '%';
- $replace['irrf_2_label'] = strval(number_format(doubleval($ordem_pagamento->irrf_2_label), 2, ',', '.')) . '%';
- $replace['iss_label'] = strval(number_format(doubleval($ordem_pagamento->iss_label), 2, ',', '.')) . '%';
- $replace['pis_cofins_cssl_label'] = strval(number_format(doubleval($ordem_pagamento->pis_cofins_cssl_label), 2, ',', '.')) . '%';
- $replace['descontos'] = 'R$ ' . number_format($ordem_pagamento->descontos, 2, ',', '.');
- $replace['valor_liquido'] = "{$unidade_monetaria}" . number_format($ordem_pagamento->valor_liquido, 2, ',', '.');
- $replace['centro_de_custo'] = $ordem_pagamento->centro_de_custo;
- $replace['conta_contabil'] = $ordem_pagamento->conta_contabil;
- if ($ordem_pagamento->fk_id_emissor != null) {
- $user = new SystemUser($ordem_pagamento->fk_id_emissor);
- $replace['fk_id_emissor'] = $user->name;
- $replace['data_emissor'] = $data_cadastro;
- $replace['emissor'] = $ordem_pagamento->emissor;
- }
- $tipos = array("contabilidade", "controller", "diretoria");
- foreach ($tipos as $tipo) {
- $replace['fk_id_' . $tipo] = '';
- $replace['data_' . $tipo] = '';
- $replace[$tipo] = '';
- if (!empty($ordem_pagamento->{"fk_id_{$tipo}"})) {
- $user = new SystemUser($ordem_pagamento->{"fk_id_{$tipo}"});
- $replace['fk_id_' . $tipo] = $user->name;
- $replace['data_' . $tipo] = !empty($ordem_pagamento->{"data_{$tipo}"}) ? date('d/m/Y H:i:s', strtotime($ordem_pagamento->{"data_{$tipo}"})) : '';
- $replace[$tipo] = $ordem_pagamento->contabilidade;
- }
- }
- $html->enableSection('main', $replace);
- $contents = $html->getContents();
- // converts the HTML template into PDF
- $dompdf = new \Dompdf\Dompdf();
- $dompdf->loadHtml($contents);
- $dompdf->setPaper('A3', 'portrait');
- $dompdf->render();
- // write and open file
- $docName = date('Y_m_d_H_i_s') . "_" . rand(1, 9999) . ".pdf";
- file_put_contents('app/output/' . $docName, $dompdf->output());
- $files = ['D:/htdocs/qualydocs/app/output/first_' . $docName];
- $pdf = new PDFMerger;
- $pdf->addPDF('app/output/' . $docName, '1');
- $pdf->merge('file', 'app/output/first_' . $docName);
- $criterio = new TCriteria;
- $criterio->add(new TFilter('fk_id_ordem_pagamento', '=', $ordem_pagamento->id));
- $anexos = OrdemPagamentoPortobayArquivo::getObjects($criterio);
- $domPdfPath = realpath('vendor/dompdf/dompdf');
- \PhpOffice\PhpWord\Settings::setPdfRendererPath($domPdfPath);
- \PhpOffice\PhpWord\Settings::setPdfRendererName('DomPDF');
- foreach ($anexos as $anexo) {
- if (file_exists($anexo->documento) && is_file($anexo->documento)) {
- $ext = mb_strtolower(pathinfo($anexo->documento, PATHINFO_EXTENSION));
- if ($ext == 'pdf') {
- $files[] = 'D:/htdocs/qualydocs/' . $anexo->documento;
- } elseif ($ext == 'txt') {
- $temp_txt = file_get_contents($anexo->documento);
- $html = new THtmlRenderer('app/reports/texto.html');
- $replace = [];
- $replace['texto'] = $temp_txt;
- $html->enableSection('main', $replace);
- // converts the HTML template into PDF
- $dompdf = new \Dompdf\Dompdf();
- $dompdf->loadHtml($html->getContents());
- $dompdf->setPaper('A3', 'portrait');
- $dompdf->render();
- // write and open file
- $f = "app/output/doc_" . date('Y_m_d_H_i_s') . "_" . rand(0, 99999) . ".pdf";
- file_put_contents($f, $dompdf->output());
- if (file_exists($f) && is_file($f)) {
- $files[] = 'D:/htdocs/qualydocs/' . $f;
- }
- } elseif (in_array($ext, array('doc', 'docx'))) {
- $f = "app/output/doc_" . date('Y_m_d_H_i_s') . "_" . rand(0, 99999) . ".pdf";
- $phpWord = \PhpOffice\PhpWord\IOFactory::load($anexo->documento);
- $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, "PDF");
- $objWriter->save($f);
- if (file_exists($f) && is_file($f)) {
- $files[] = 'D:/htdocs/qualydocs/' . $f;
- }
- } elseif (in_array($ext, array('xls', 'xlsx'))) {
- $f = "app/output/doc_" . date('Y_m_d_H_i_s') . "_" . rand(0, 99999) . ".pdf";
- $phpExcel = \PhpOffice\PhpSpreadsheet\IOFactory::load($anexo->documento);
- $objWriter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($phpExcel, 'Dompdf');
- $objWriter->save($f);
- if (file_exists($f) && is_file($f)) {
- $files[] = 'D:/htdocs/qualydocs/' . $f;
- }
- }
- }
- }
- $files = implode(" ", $files);
- $output_file = 'D:/htdocs/qualydocs/app/output/full_' . $docName;
- $command = "D:/htdocs/qualydocs/gs/gswin32c.exe -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOUTPUTFILE=$output_file $files 2>&1";
- $result = shell_exec($command);
- TScript::create("console.log('$command');");
- TScript::create("console.log('$result');");
- return 'app/output/full_' . $docName;
- }
- private static function prepareDataHeader()
- {
- return [
- 'title' => "PATHFINDER EMPREENDIMENTOS E PARTICIPACOES LTDA",
- 'subtitle' => "Pagamentos em Aberto",
- 'subtitle2' => "Total de Solicitações",
- ];
- }
- private static function prepareData($ordem)
- {
- $unidade_monetaria = [1 => 'R$', 2 => '$', 3 => '€', 4 => '£'];
- $data_vencimento = !empty($ordem->data_vencimento)
- ? date('d/m/Y', strtotime($ordem->data_vencimento))
- : '';
- $unidade_monetaria = $unidade_monetaria[$ordem->unidade_monetaria] ?? '';
- return [
- 'razao_social' => htmlspecialchars($ordem->razao_social ?? ''),
- 'cnpj' => htmlspecialchars($ordem->cnpj ?? ''),
- 'data_vencimento' => htmlspecialchars($data_vencimento),
- 'numero_nf' => htmlspecialchars($ordem->numero_nf ?? ''),
- 'valor' => "{$unidade_monetaria} " . number_format(htmlspecialchars($ordem->valor ?? '0'), 2, ',', '.'),
- 'etapa' => htmlspecialchars($ordem->etapa ?? ''),
- 'fk_id_emissor' => $ordem->fk_id_emissor ? htmlspecialchars((new SystemUser($ordem->fk_id_emissor))->name ?? '') : '',
- ];
- }
- private static function generateTableRows($ordens)
- {
- $rows = "";
- foreach ($ordens as $ordem)
- {
- $data = self::prepareData($ordem);
- $rows .= "
- <tr>
- <td>{$data['razao_social']}</td>
- <td>{$data['cnpj']}</td>
- <td>{$data['data_vencimento']}</td>
- <td>{$data['numero_nf']}</td>
- <td>{$data['valor']}</td>
- <td>{$data['etapa']}</td>
- <td>{$data['fk_id_emissor']}</td>
- </tr>";
- }
- return $rows;
- }
- private static function generateSummary($total)
- {
- return "
- <section class='footer'>
- <ul class='summary-list'>
- <li>
- <span class='label'>Nº Total de Solicitações:</span>
- <span class='value'>{$total}</span>
- </li> </ul>
- </section>
- ";
- }
- private static function ImageToDataUrl($filename)
- {
- if(!file_exists($filename))
- throw new Exception('File not found.');
- $mime = mime_content_type($filename);
- if($mime === false)
- throw new Exception('Illegal MIME type.');
- $raw_data = file_get_contents($filename);
- if(empty($raw_data))
- throw new Exception('File not readable or empty.');
- return "data:{$mime};base64," . base64_encode($raw_data);
- }
- public static function generateHtml($ordens)
- {
- // Carrega o template HTML de um arquivo local.
- $template = file_get_contents('app/reports/relatorio2.html');
- // Prepara os dados do cabeçalho e substitui os placeholders no template.
- $headerData = self::prepareDataHeader();
- $placeholders = ['{$title}', '{$subtitle}', '{$subtitle2}'];
- $headerValues = [$headerData['title'], $headerData['subtitle'], $headerData['subtitle2']];
- $template = str_replace($placeholders, $headerValues, $template);
- // Gera as linhas da tabela com os dados das ordens e insere no template.
- $items = self::generateTableRows($ordens);
- $template = str_replace('<!-- [items] -->', $items, $template);
- // Conta o total de ordens e gera um resumo, inserindo-o no template.
- $total = count($ordens);
- $summary = self::generateSummary($total);
- $template = str_replace('<!-- [summary] -->', $summary, $template);
- $template = str_replace('LOGO', self::ImageToDataUrl("app/images/portobay.png"), $template);
- return $template;
- }
- public static function generatePdf($ordens)
- {
- $options = new Options();
- $options->set('isHtml5ParserEnabled', true);
- $options->set('isRemoteEnabled', true);
- $dompdf = new Dompdf($options);
- $total = count($ordens);
- $htmlContent = "";
- $htmlContent .= self::generateHtml($ordens);
- $dompdf->loadHtml($htmlContent);
- $dompdf->setPaper('A4', 'portrait');
- $dompdf->render();
- if (!is_dir('app/output/'))
- {
- mkdir('app/output/', 0777, true);
- }
- $fileName = 'app/output/ordens_pagamento_' . date('Y_m_d_H_i_s') . '.pdf';
- file_put_contents($fileName, $dompdf->output());
- return $fileName;
- }
- private static function showPdf2($filePath)
- {
- $window = TWindow::create('Ordem de Pagamento', 0.8, 0.8);
- $object = new TElement('object');
- $object->data = $filePath;
- $object->type = 'application/pdf';
- $object->style = "width: 100%; height:calc(100% - 10px)";
- $window->add($object);
- $window->show();
- }
- /**
- * Cria os critérios de filtro e ordenação.
- */
- private static function createCriteria($filters, $orderColumn, $orderDirection, $limit, $userid, $param)
- {
- $criteria = new TCriteria;
- $criteria->setProperties($param);
- $criteria->setProperty('order', $orderColumn);
- $criteria->setProperty('direction', $orderDirection);
- $criteria->setProperty('limit', $limit);
- // Adiciona filtros da sessão, se houver
- if ($filters)
- {
- foreach ($filters as $filter)
- {
- $criteria->add($filter);
- }
- }
- // Adiciona critérios de acesso e workflow
- $criteria->add(HomeSolicitacao::getAccessCriteria($userid, self::FORM_NUMBER - 1));
- $criteria->add(HomeSolicitacao::getWorkflowCriteria(self::FORM_NUMBER, $userid));
- return $criteria;
- }
- public static function onGenerateMultiple2($param)
- {
- $userid = TSession::getValue('userid');
- $filters = TSession::getValue('OrdemPagamentoPortobayConsulta_filters');
- $limit = TSession::getValue('OrdemPagamentoPortobayConsulta_limit') ?? 10;
- // Parâmetros de ordenação
- $orderColumn = $param['column'] ?? 'id';
- $orderDirection = $param['direction'] ?? 'desc';
- try
- {
- // Inicia a transação com o banco de dados
- TTransaction::open('permission');
- $param = $param ?? [];
- // Repositório e critério
- $repository = new TRepository('OrdemPagamentoPortobay');
- $criteria = self::createCriteria($filters, $orderColumn, $orderDirection, $limit, $userid, $param);
- // Carrega os objetos de acordo com o critério
- $ordens = $repository->load($criteria);
- if (!$ordens)
- {
- throw new Exception('Nenhum registro encontrado.');
- }
- // Verifica se há solicitações selecionadas
- $ordensSelecionadasIds = TSession::getValue('solicitacoes_selecionadas');
- // Se a sessão estiver vazia ou for um array vazio, usa os 10 registros carregados na página
- if (empty($ordensSelecionadasIds))
- {
- $ordensSelecionadas = $ordens; // Usa os registros carregados
- }
- else
- {
- // Converte IDs para objetos, pois ele recebe IDs
- $ordensSelecionadas = [];
- foreach ($ordensSelecionadasIds as $id)
- {
- //pega a instância do objeto OrdemPagamentoPortoBayo necessário
- $ordem = new OrdemPagamentoPortobay($id);
- if (!empty($ordem))
- {
- $ordensSelecionadas[] = $ordem; // pega o objeto fora do array
- }
- }
- }
- // Cria o PDF com todas as ordens selecionadas
- $fileName = self::generatePdf($ordensSelecionadas);
- // Exibe o PDF gerado
- self::showPdf2($fileName);
- // Finaliza a transação
- TTransaction::close();
- }
- catch (Exception $e)
- {
- new TMessage('error', $e->getMessage());
- TTransaction::rollback();
- }
- // Limpa as solicitações selecionadas
- TSession::setValue('solicitacoes_selecionadas', []);
- TScript::create("
- $('input[name^=\"check_select_\"]').each(function () {
- const key = $(this).val();
- $(this).prop('checked', false);
- console.log('desmarcando checkbox:', key);
- });
- ");
- }
- /**
- * Export datagrid as PDF
- */
- public function onExportPDF($param)
- {
- try {
- $output = 'app/output/' . uniqid() . '.pdf';
- $this->exportToPDF($output);
- $window = TWindow::create('Export', 0.8, 0.8);
- $object = new TElement('object');
- $object->{'data'} = $output;
- $object->{'type'} = 'application/pdf';
- $object->{'style'} = "width: 100%; height:calc(100% - 10px)";
- $window->add($object);
- $window->show();
- } catch (Exception $e) {
- new TMessage('error', $e->getMessage());
- }
- }
- /**
- * Export to PDF
- * @param $output Output file
- */
- public function exportToPDF($output)
- {
- if ((!file_exists($output) && is_writable(dirname($output))) or is_writable($output)) {
- $this->limit = 0;
- $this->datagrid->prepareForPrinting();
- $this->onReload();
- // string with HTML contents
- $html = clone $this->datagrid;
- $contents = file_get_contents('app/resources/styles-print.html') . $html->getContents();
- $options = new \Dompdf\Options();
- $options->setChroot(getcwd());
- // converts the HTML template into PDF
- $dompdf = new \Dompdf\Dompdf($options);
- $dompdf->loadHtml($contents);
- $dompdf->setPaper('A4', 'landscape');
- $dompdf->render();
- // write and open file
- file_put_contents($output, $dompdf->output());
- } else {
- throw new Exception(AdiantiCoreTranslator::translate('Permission denied') . ': ' . $output);
- }
- }
- /**
- * Export to CSV
- */
- public function onExportCSV($param)
- {
- try {
- $output = 'app/output/' . uniqid() . '.csv';
- $this->exportToCSV($output);
- TPage::openFile($output);
- } catch (Exception $e) {
- return new TMessage('error', $e->getMessage());
- }
- }
- /**
- * Export to CSV
- * @param $output Output file
- */
- public function exportToCSV($output)
- {
- if ((!file_exists($output) && is_writable(dirname($output))) or is_writable($output)) {
- TTransaction::openFake($this->database);
- // creates a criteria
- $criteria = new TCriteria;
- $userid = TSession::getValue('userid');
- $filters = TSession::getValue('OrdemPagamentoPortobayConsulta_filters');
- if ($filters != null) {
- foreach ($filters as $filtro) {
- $criteria->add($filtro);
- }
- }
- $criteria->add(HomeSolicitacao::getAccessCriteria($userid, self::FORM_NUMBER - 1));
- // creates a repository for DadosDB
- $repository = new TRepository('OrdemPagamentoPortobay');
- // load the objects according to criteria
- $objects = $repository->load($criteria, false);
- $handler = fopen($output, 'w');
- $header = [
- 'N° OP',
- 'Razão Social',
- 'Tipo Pessoa',
- 'CPF/CNPJ',
- 'Nota Fiscal',
- 'Data de Vencimento',
- 'Valor',
- 'Módulo',
- 'Status',
- 'Status Nota',
- 'Emissor',
- 'Cadastrado em',
- ];
- fputcsv($handler, $header);
- if ($objects) {
- $status = [1000 => 'Concluído', 1001 => 'Reprovado', 1002 => 'Reprovado'];
- $tipoPessoa = [1 => 'Física', 2 => 'Jurídica'];
- foreach ($objects as $object) {
- $fluxo = HomeSolicitacao::getFluxoByFormAndUser(
- self::FORM_NUMBER,
- $object->fluxo,
- $object->fk_id_emissor
- );
- $document = "";
- if ($object->tipo_pessoa == 1 && !empty($object->cpf)) {
- $document = $object->cpf;
- } elseif ($object->tipo_pessoa == 2 && !empty($object->cnpj)) {
- $document = $object->cnpj;
- }
- $emissor = new SystemUser($object->fk_id_emissor);
- $row = [
- $object->id,
- $object->razao_social,
- $tipoPessoa[$object->tipo_pessoa],
- $document,
- $object->numero_nf,
- !empty($object->data_vencimento) ? date('d/m/Y', strtotime($object->data_vencimento)) : '',
- number_format($object->valor, 2, ',', '.') . ' R$',
- $fluxo->nome,
- $status[$object->etapa_atual] ?? HomeSolicitacao::getCurrentStepLabel($fluxo, $object->etapa_atual),
- $object->nota_enviada ? 'Enviada' : 'Pendente',
- $emissor->name,
- !empty($object->data_cadastro) ? date('d/m/Y', strtotime($object->data_cadastro)) : '',
- ];
- fputcsv($handler, $row);
- }
- }
- fclose($handler);
- TTransaction::close();
- } else {
- throw new Exception(AdiantiCoreTranslator::translate('Permission denied') . ': ' . $output);
- }
- }
- /**
- * Delete a record
- */
- public function Delete($param)
- {
- try {
- $key = $param['key']; // get the parameter $key
- TTransaction::open('permission'); // open a transaction with database
- $object = new OrdemPagamentoPortobay($key); // instantiates the Active Record
- if ($object->fk_id_emissor != TSession::getValue('userid')) {
- TApplication::loadPage('OrdemPagamentoPortobayConsulta', 'showNotAllowed');
- return;
- }
- $anexos = OrdemPagamentoPortobayArquivo::where('fk_id_ordem_pagamento', '=', $object->id)
- ->orderBy('id')->load();
- if (!empty($anexos)) {
- foreach ($anexos as $documento) {
- if (file_exists($documento->documento) && is_file($documento->documento)) {
- unlink($documento->documento);
- }
- $documento->delete();
- }
- }
- $caminho = "files/ordem_pagamento_portobay/" . $object->id;
- if (file_exists($caminho) && is_dir($caminho)) {
- rmdir($caminho);
- }
- $object->delete();
- TTransaction::close(); // close the transaction
- new TMessage('info', AdiantiCoreTranslator::translate('Record deleted')); // success message
- $this->onReload($param); // reload the listing
- } catch (Exception $e) {
- new TMessage('error', $e->getMessage()); // shows the exception error message
- TTransaction::rollback(); // undo all pending operations
- }
- }
- public static function onMarkAsPending()
- {
- $solicitacoes = TSession::getValue('solicitacoes_selecionadas');
- if (!empty($solicitacoes)) {
- try {
- TTransaction::open('permission');
- $userid = TSession::getValue('userid');
- $dataAprovacao = date('d/m/y H:i:s');
- foreach ($solicitacoes as $id) {
- OrdemPagamentoPortobay::where('id', '=', $id)
- ->set('nota_enviada', 'f')
- ->set('status_nota_modificado_por', $userid)
- ->set('status_nota_modificado_em', $dataAprovacao)
- ->update();
- }
- TSession::setValue('solicitacoes_selecionadas', []);
- TTransaction::close();
- AdiantiCoreApplication::loadPage('OrdemPagamentoPortobayConsulta', 'showMessagePendingReceipt');
- } catch (Exception $e) {
- new TMessage('error', $e->getMessage());
- TTransaction::rollback();
- }
- } else {
- new TMessage('error', 'Favor selecionar algum item na lista!');
- }
- }
- public static function onMarkAsSent()
- {
- $solicitacoes = TSession::getValue('solicitacoes_selecionadas');
- if (!empty($solicitacoes)) {
- try {
- TTransaction::open('permission');
- $userid = TSession::getValue('userid');
- $dataAprovacao = date('d/m/y H:i:s');
- foreach ($solicitacoes as $id) {
- OrdemPagamentoPortobay::where('id', '=', $id)
- ->set('nota_enviada', 't')
- ->set('status_nota_modificado_por', $userid)
- ->set('status_nota_modificado_em', $dataAprovacao)
- ->update();
- }
- TSession::setValue('solicitacoes_selecionadas', []);
- TTransaction::close();
- AdiantiCoreApplication::loadPage('OrdemPagamentoPortobayConsulta', 'showMessageSentReceipt');
- } catch (Exception $e) {
- new TMessage('error', $e->getMessage());
- TTransaction::rollback();
- }
- } else {
- new TMessage('error', 'Favor selecionar algum item na lista!');
- }
- }
- function onClear()
- {
- // get the search form data
- $data = $this->form->getData();
- TSession::setValue('OrdemPagamentoPortobayConsulta_filters', null);
- TSession::setValue('solicitacoes_selecionadas', []);
- $data->id = '';
- $data->razao_social = '';
- $data->cnpj = '';
- $data->cpf = '';
- $data->centro_de_custo = '';
- $data->conta_contabil = '';
- $data->numero_nf = '';
- $data->data_vencimento_ini = '';
- $data->data_vencimento_fim = '';
- $data->valor_ini = '';
- $data->valor_fim = '';
- $data->data_cadastro_ini = '';
- $data->data_cadastro_fim = '';
- $data->fk_id_emissor = '';
- $data->etapa = '';
- $data->fk_id_cadastro = '';
- // fill the form with data again
- $this->form->setData($data);
- TSession::setValue('OrdemPagamentoPortobayConsulta_filter_data', $data);
- $param = [];
- $param['offset'] = 0;
- $param['first_page'] = 1;
- $this->onReload($param);
- }
- /**
- * Função auxiliar para criar o filtro de etapa
- */
- private function createEtapaFilter($etapa)
- {
- if (strpos($etapa, '-') !== false)
- {
- $parts = explode('-', $etapa);
- $criteria = new TCriteria;
- $criteria->add(new TFilter('fluxo', '=', $parts[0]));
- $criteria->add(new TFilter('etapa_atual', '=', $parts[1]));
- return $criteria;
- }
- else
- {
- return new TFilter('etapa_atual', '=', "{$etapa}");
- }
- }
- /**
- * Register the filter in the session
- */
- public function onSearch($param = NULL)
- {
- // Obtém os dados do formulário de busca
- $data = $this->form->getData();
- // Limpa os filtros de sessão
- TSession::setValue('OrdemPagamentoPortobayConsulta_filters', NULL);
- $filters = [];
- // Mapeamento de campos e seus operadores
- $fields = [
- 'id' => ['field' => 'id', 'operator' => '=', 'value' => $data->id],
- 'razao_social' => ['field' => 'razao_social', 'operator' => 'ilike', 'value' => $data->razao_social],
- 'cnpj' => ['field' => 'cnpj', 'operator' => 'ilike', 'value' => $data->cnpj],
- 'cpf' => ['field' => 'cpf', 'operator' => 'ilike', 'value' => $data->cpf],
- 'centro_de_custo' => ['field' => 'centro_de_custo', 'operator' => 'ilike', 'value' => $data->centro_de_custo],
- 'conta_contabil' => ['field' => 'conta_contabil', 'operator' => '=', 'value' => $data->conta_contabil],
- 'numero_nf' => ['field' => 'numero_nf', 'operator' => '=', 'value' => $data->numero_nf],
- 'data_vencimento_ini' => ['field' => 'data_vencimento', 'operator' => '>=', 'value' => $data->data_vencimento_ini],
- 'data_vencimento_fim' => ['field' => 'data_vencimento', 'operator' => '<=', 'value' => $data->data_vencimento_fim],
- 'valor_ini' => ['field' => 'valor', 'operator' => '>=', 'value' => $data->valor_ini],
- 'valor_fim' => ['field' => 'valor', 'operator' => '<=', 'value' => $data->valor_fim],
- 'data_cadastro_ini' => ['field' => 'data_cadastro', 'operator' => '>=', 'value' => $data->data_cadastro_ini],
- 'data_cadastro_fim' => ['field' => 'data_cadastro', 'operator' => '<=', 'value' => $data->data_cadastro_fim],
- ];
- // Adiciona filtros a partir do array de campos
- foreach ($fields as $field => $config)
- {
- if (isset($config['value']) && $config['value'] !== '')
- {
- $value = $config['operator'] == 'ilike' ? "%{$config['value']}%" : "{$config['value']}";
- $filters[] = new TFilter($config['field'], $config['operator'], $value);
- }
- }
- // Filtro de etapa
- if (isset($data->etapa) && strlen(trim($data->etapa)) > 0)
- {
- $filters[] = $this->createEtapaFilter($data->etapa);
- }
- // Filtros com valores múltiplos
- if (!empty($data->fk_id_emissor))
- {
- $filters[] = new TFilter('fk_id_emissor', 'IN', $data->fk_id_emissor);
- }
- if (!empty($data->fk_id_cadastro))
- {
- $modulos = implode(',', $data->fk_id_cadastro);
- $filters[] = new TFilter('fluxo', 'IN', "(SELECT fluxo FROM solicitacao.cadastro_etapas WHERE id IN ({$modulos}))");
- }
- // Define os filtros na sessão
- TSession::setValue('OrdemPagamentoPortobayConsulta_filters', $filters);
- // Preenche novamente o formulário com os dados
- $this->form->setData($data);
- // Armazena os dados de busca na sessão
- TSession::setValue('OrdemPagamentoPortobayConsulta_filter_data', $data);
- // Recarrega a lista com os novos parâmetros
- $param = [];
- $param['offset'] = 0;
- $param['first_page'] = 1;
- $this->onReload($param);
- }
- /**
- * Load the datagrid with data
- */
- public function onReload($param = NULL)
- {
- $userid = TSession::getValue('userid');
- $filters = TSession::getValue('OrdemPagamentoPortobayConsulta_filters');
- $limit = TSession::getValue('OrdemPagamentoPortobayConsulta_limit') ?? 10;
- // Parâmetros de ordenação
- $orderColumn = $param['column'] ?? 'id';
- $orderDirection = $param['direction'] ?? 'desc';
- try
- {
- // Inicia uma transação com o banco de dados 'permission'
- TTransaction::open('permission');
- $documentosSelecionados = TSession::getValue('solicitacoes_selecionadas');
- $param = $param ?? [];
- // Cria um repositório para OrdemPagamentoPortobay
- $repository = new TRepository('OrdemPagamentoPortobay');
- // Cria os critérios de pesquisa
- $criteria = self::createCriteria($filters, $orderColumn, $orderDirection, $limit, $userid, $param);
- // Carrega os objetos de acordo com os critérios
- $objects = $repository->load($criteria, false);
- if (is_callable($this->transformCallback))
- {
- call_user_func($this->transformCallback, $objects, $param);
- }
- $this->datagrid->clear();
- if ($objects)
- {
- // Verifica se o usuário tem permissão no grupo Financeiro
- $isFinanceiro = SystemUserGroup::where('system_user_id', '=', $userid)
- ->where('system_group_id', 'IN', "(SELECT id FROM permission.system_group WHERE name ILIKE '%Financeiro%Master%Portobay%')")
- ->count() > 0;
- $status = [1000 => 'Concluído', 1001 => 'Reprovado', 1002 => 'Reprovado'];
- $label = [1000 => 'success', 1001 => 'danger', 1002 => 'danger'];
- $data = new stdClass;
- // Itera sobre a coleção de registros
- foreach ($objects as $object)
- {
- $fluxo = HomeSolicitacao::getFluxoByFormAndUser(
- self::FORM_NUMBER,
- $object->fluxo,
- $object->fk_id_emissor
- );
- $idSelected = $object->id;
- $chave_select = "validado_{$idSelected}";
- $id_checkGroup = "check_select_{$idSelected}";
- // Cria o grupo de checkboxes
- $object->select = new TCheckGroup($id_checkGroup);
- // A linha abaixo foi removida para evitar a atribuição manual de IDs duplicados
- //$object->select->id = $chave_select;
- $object->select->addItems(array($idSelected => ''));
- $object->select->setChangeAction(new TAction([$this, 'onSelecionados']));
- $this->form->addField($object->select);
- if (!empty($documentosSelecionados) && in_array($object->id, $documentosSelecionados))
- {
- $data->{$id_checkGroup} = [$idSelected];
- }
- // Ajusta o CNPJ/CPF dependendo do tipo de pessoa
- $object->cnpj = ($object->tipo_pessoa == 1 && !empty($object->cpf)) ? $object->cpf : $object->cnpj;
- $emissor = new SystemUser($object->fk_id_emissor);
- $object->can_edit = $object->etapa_atual == 1001 && $userid == $object->fk_id_emissor;
- $object->can_edit_financeiro = $isFinanceiro;
- $object->can_generate = $object->etapa_atual == 1000;
- $object->can_delete = $userid == $object->fk_id_emissor;
- // Cria os links para exibição
- $tipoPessoa = [1 => 'Física', 2 => 'Jurídica'];
- $object->razao_social = self::createLink($object->razao_social, $object->id);
- $object->cnpj = self::createLink(empty($object->cnpj) ? '-' : $object->cnpj, $object->id);
- $object->numero_nf = self::createLink($object->numero_nf, $object->id);
- $object->data_vencimento = self::createLink(!empty($object->data_vencimento) ? date('d/m/Y', strtotime($object->data_vencimento)) : '', $object->id);
- $object->fk_id_emissor = self::createLink($emissor->name, $object->id);
- $object->data_cadastro = self::createLink(!empty($object->data_cadastro) ? date('d/m/Y', strtotime($object->data_cadastro)) : '', $object->id);
- $object->tipo = self::createLink($fluxo->nome, $object->id);
- $object->tipo_pessoa = self::createLink(!empty($object->tipo_pessoa) ? $tipoPessoa[$object->tipo_pessoa] : 'Indefinido', $object->id);
- // Adiciona os labels de status e nota enviada
- $div = new TElement('span');
- $div->class = "label label-" . ($label[$object->etapa_atual] ?? "info");
- $div->style = "text-shadow:none; font-size:12px";
- $div->add($status[$object->etapa_atual] ?? HomeSolicitacao::getCurrentStepLabel($fluxo, $object->etapa_atual));
- $object->etapa = $div;
- $div = new TElement('span');
- $div->class = "label label-" . ($object->nota_enviada ? 'success' : 'danger');
- $div->style = "text-shadow:none; font-size:12px; font-weight:lighter";
- $div->add($object->nota_enviada ? 'Enviada' : 'Pendente');
- $object->nota_enviada = $div;
- // Adiciona o objeto ao datagrid
- $this->datagrid->addItem($object);
- }
- $this->form->setData($data);
- }
- // Conta os registros
- $criteria->resetProperties();
- $count = $repository->count($criteria);
- $this->pageNavigation->setCount($count);
- $this->pageNavigation->setProperties($param);
- $this->pageNavigation->setLimit($limit);
- // Fecha a transação
- TTransaction::close();
- $this->loaded = true;
- }
- catch (Exception $e)
- {
- // Mostra a mensagem de erro
- new TMessage('error', $e->getMessage());
- // Desfaz as operações pendentes
- TTransaction::rollback();
- }
- }
- public static function createLink($text, $id)
- {
- return TElement::tag(
- 'a',
- $text,
- [
- 'href ' => (new TAction(['OrdemPagamentoPortobayView', 'onViewFromConsulta'], ['id' => $id, 'key' => $id]))->serialize(),
- 'generator' => 'adianti',
- 'style' => 'color: #212529;'
- ]
- );
- }
- /**
- * method show()
- * Shows the page
- */
- public function show()
- {
- // check if the datagrid is already loaded
- if (!$this->loaded and (!isset($_GET['method']) or !(in_array($_GET['method'], array('onEnter', 'onReload', 'onSearch', 'onClear', 'Delete', 'showMessageReenviado', 'showNotAllowed', 'showNotFound', 'showNotAllowedCreate', 'showMessagePendingReceipt', 'showMessageSentReceipt'))))) {
- if (func_num_args() > 0) {
- $this->onReload(func_get_arg(0));
- } else {
- $this->onReload();
- }
- }
- $this->loaded = true;
- parent::show();
- }
- function showMessageEnviado()
- {
- new TMessage('info', 'Ordem de pagamento Portobay foi enviada!');
- TSession::setValue('propostas_selecionadas', []);
- $this->onReload();
- }
- function showMessageReenviado()
- {
- new TMessage('info', 'Ordem de pagamento Portobay foi reenviada!');
- TSession::setValue('propostas_selecionadas', []);
- $this->onReload();
- }
- function showMessagePendingReceipt()
- {
- new TMessage('info', 'Ordens de Pagamento Portobay atualizadas como pendente nota com sucesso!');
- $this->onReload();
- }
- function showMessageSentReceipt()
- {
- new TMessage('info', 'Ordens de Pagamento Portobay atualizadas como nota enviada com sucesso!');
- $this->onReload();
- }
- function showNotAllowed()
- {
- new TMessage('error', 'Você não tem permissão para editar/remover esta proposta!');
- $this->onReload();
- }
- function showNotAllowedCreate()
- {
- new TMessage('error', 'Você não tem permissão para abrir propostas!');
- $this->onReload();
- }
- function showNotFound()
- {
- new TMessage('error', 'Proposta não encontrada!');
- $this->onReload();
- }
- }
- ?>
Antes eu estava fazendo a chamada do JS dessa maneira
O problema era quando clicava no botão para selecionar todos e ele nunca retornava os valores corretos.
Se algum de vocês puderem me ajudar
Lucas,
Evita postar tanto código. Dificilmente alguém irá conseguir ajudar por que não irá conseguir simular (rodar o mesmo código) localmente. Foque as dúvidas relativas ao Framework, não à código javascript em si, visto que este espaço é exclusivo para dúvidas do framework.