package_reports 1.0.0
package_reports: ^1.0.0 copied to clipboard
Package de criação de relatórios, gráficos e exportação para excel, tudo automaticamente a partir de uma entrada de JSON.
Package Reports #
- Package de criação de relatórios automaticamente a partir de uma entrada de JSON
- Principais funções:
- Relatório com totalizadores e ordenação
- Relatórios dinamicoes
- Gráficos (Barras, pizza, ...)
- Exportação para excel
Getting Started #
- Entre no arquivo pubspec.yaml
- Adicione isto ao arquivo pubspec.yaml do seu pacote:
dependencies:
package_reports: ^0.0.3
- Get dependencies
flutter pub get
Exemplo de 'cabeçalho' que arquivo .PHP que contém a query deve ter #
-
Em um arquivo .PHP Crie uma variavel que receberá um mapa com os dados necessarios para a formação de relatorios.
- Esse mapa tem as seguintes chaves como OBRIGATORIOS:
- menu;
- submenu;
- url-api;
- iconFlutterID (nome do icone que deseja exibir, não pode passar Icon., apenas o nome do icone);
- name;
- Esse mapa tem as seguintes chaves como OBRIGATORIOS:
-
Com apenas esses valores em sua variavel já possivel consumir a pagina de relatorios.
-
Dentro desse mesmo mapa existe a chave 'filtros' que é usada para construir a pagina de filtros e seleção de filtros, essa chave recebe como valor um mapa, podendo receber as seguintes chaves, (*) marcado os OBRIGATORIOS:
- tipo (checkbox, datapicker) *
- titulo *
- Caso o filtro seja do tipo 'checkbox' as seguintes chaves também serão obrigatorias -
- banco *
- arquivoquery *
- funcao *
- As chaves acima são necessaria para saber qual função será executada para criar as opções de filtros
- subtitulo
-
Exemplo filtros :
'filtros' => [ "cardPeriodo" => [ "tipo" => "datapicker", "titulo" => "Selecionar pediodo" ], "cardFilial" => [ "banco" => "atacado_analytics", "arquivoquery" =>"query_filtros.php", "funcao" => "getfilial", "tipo" => "checkbox", "titulo" => "Selecionar filial", "subtitulo" => "São exibidos somente filiais com permissão na rotina 131 do Winthor" ], ]
Pagina de Filtro: #


-
Para a criação de relatorios dinamicos, no mapa da variavel que foi criada, tornasse necesasrio adiconar as seguintes chaves
- indexPage (valor inteiro que indica qual query será a executada)
- page (necessario para que a nevegação para proxima pagina do relatorio seja feita)
-
pagetambem é do tipo map, e receberá os mesmo valores da variavel inicial ou seja tudo que foi explicado acima pode ser passado dentro depage,pageé a proxima pagina do relatorio e tambem pode recerber a si mesma -
Exemplo variavel princial:
$config = [
'menu'=> $menu,
'submenu'=> $submenu,
'urlapi'=> $urlapi.$nomeDoArquivo,
'name'=> $name,
'iconFlutterID'=> 'trending_up', // --> https://fonts.google.com/icons?selected=Material+Icons&icon.platform=flutter
'graficosDisponiveis' => [
'barras',
'linhas',
'circular',
],
'indexPage'=> 0,
'filtros'=> [
"cardPeriodo" => [
"tipo" => "datapicker",
"titulo" => "Selecionar pediodo"
],
"cardsupervisor" => [
"banco" => "atacado_analytics",
"arquivoquery" =>"query_filtros.php",
"funcao" => "getSupervisor",
"tipo" => "checkbox",
"titulo" => "Selecionar supervisor",
"subtitulo" => "São exibidos somente supervisores com permissão na rotina 131 do Winthor"
],
],
'page' => [
'urlapi'=> 'repositorio/reports/query/compras/sql1.php',
'name'=> 'Resumo de vendas (Por rca)',
'indexPage'=> 1,
'selectedRow' => [],
'filtros'=> [
"cardPeriodo" => [
"tipo" => "datapicker",
"titulo" => "Selecionar pediodo"
],
"cardFilial" => [
"banco" => "atacado_analytics",
"arquivoquery" =>"query_filtros.php",
"funcao" => "getfilial",
"tipo" => "checkbox",
"titulo" => "Selecionar filial",
"subtitulo" => "São exibidos somente filiais com permissão na rotina 131 do Winthor"
],
],
'page' => [
'urlapi'=> 'repositorio/reports/query/compras/sql1.php',
'name'=> 'Teste segunda navegação',
'indexPage'=> 2,
'selectedRow' => [],
]
]
];
-
O arquivo .PHP tendo a variavel preenchido dessa forma basta fazer uma requisição do tipo
GETpara obter os valores:if ($_SERVER['REQUEST_METHOD'] === 'GET'){ echo json_encode($config); exit; } -
Agora para receber o valor da query basta enviar um body/json em uma requisição do tipo
POST, para retornar relatorio simples basta fazer o segiunte retorno:$sql = "SELECT 1 + 1 SOMA FROM DUAL" $result = $classe->select( $sql ); echo json_encode($result); exit; -
Para obter o retorno do relatorio dinamico, no arquivo principal é necessario uma pequena tratativa para executar as query informadas em cadas arquivo, lembrando que as que nesse tipo de relatorio os arquivos precisarão apenas da tratativa do
selectedRowe oindexPage, os arquivos mostrado no exemplo abaixo pode ser usado mais de uma vez, um mesmo arquivo que contem querys diferentes:
else{
include_once "data_input_and_jwt_validation.php";
$obj = get_data_input_and_jwt_validation();
include_once "bd_instancia.php";
switch($obj->indexPage){
case 0:
include_once "query_teste_api.php";
$db = instancia_DB($obj->database);
$result = $db->select($sql);
break;
case 1:
include_once "sql1.php";
$db = instancia_DB($obj->database);
$result = $db->select($sql);
break;
}
http_response_code(200);
echo json_encode($result);
exit;
}
Saída JSON da query: #
[
{"COD__INT__NO_METRICS":"4321","NOME":"ADIL MENESES DOS SANTOS","QTDE_PEDIDOS__INT":"1","TOTAL":"487.37"},
{"COD__INT__NO_METRICS":"2940","NOME":"ADMILTON MOREIRA SOUZA","QTDE_PEDIDOS__INT":"3","TOTAL":"1486.18"},
{"COD__INT__NO_METRICS":"4318","NOME":"LUIZ FERRAZ DOS SANTOS","QTDE_PEDIDOS__INT":"1","TOTAL":"940.4"},
{"COD__INT__NO_METRICS":"4307","NOME":"AGATINE OFLIA DE OLIVEIRA","QTDE_PEDIDOS__INT":"1","TOTAL":"1826.08"},
{"COD__INT__NO_METRICS":"2","NOME":"FERREIRA DE OLIVEIRA","QTDE_PEDIDOS__INT":"3","TOTAL":"2802.86"}
]
- Tags permitidas para adição no alises da query
/*
Forma de realizar formatação de dados e alinhamento em tela.
Deve-se enviar a seguinte informação no final de cada nome de coluna na query:
__INT_STRING => para forçar numero ser tratado e alinhado como string
__STRING => forçar o uso de String
__DOUBLE => forçar uso de double
__INT => forçar uso de int
__NO_METRICS => excluir da exibição de metricas dos graficos
__NOCHARTAREA => excluir do grafico de area e line
__INVISIBLE => não exibir campo no relatório
__DONTSUM => não somar na barra de totalizador
__PERC => colocar % (percentagem) junto ao texto da coluna
__FREEZE => congelar coluna ao deslizar barra de scroll horizontal
__SIZEW => passar largura fixa de coluna. Exemplo: __SIZEW300
__LOCK => Validar se o usuario tem acesso ao campo
__ISRODAPE => Usar para fazer um rodapé personalizado
IMPORTANTE: coso o tipo de dado não seja informado, o tipo de formatação será identificado a partir dos dados recebidos
*/
Relatório de saída: #

Relatório de saída - Gráficos: #

Relatório de saída - Exporte para Excel: #

Estrutura do package_reports #
lib-|
|-- package_reports.dart
| - Contém todos os exports permitidos para uso nos projetos que irão consumir o package
|
|-- report_module
| |
| |-- charts
| | |-- chart_data.dart
| | | - ChartData (class de dados padrão que todos os graficos vão consumir)
| | | - ColorData (class com todas as cores para consumo randômico nos gráficos)
| | '-- charts.dart
| | - Widget de gráficos
| |
| |-- controller
| | |-- layout_controller.dart
| | | - Controlador de largura, altura e tipo de tela (mobile, desktop)
| | |-- report_chart_controller.dart
| | | - Controlador para construção de gráficos do relatório, keys com valores do tipo String será identificado com métricas e tipo int, double, será definido como valores dos gráficos
| | |-- report_from_json_controller.dart
| | | - CONTROLADOR PRINCIPAL que irá receber o JSON de entrada para construção do relatório, todas as keys do JSON será interpretado como nome de coluna e todos os values das respectivas keys como rows de dados
| | '-- report_to_xlsx_controller.dart
| | | - Controlador para exportar dados para Excel
| | '-- filtros_controller.dart
| | - Controlador de filtros
| |
| |-- core
| | |-- api_consumer.dart
| | | - Arquivo responsável pelo consumo de API que irá fornecer os dados em formato JSON para construção do relatório
| | |-- features.dart
| | | - rercusos de uso privado no package (funções de formatação, etc)
| | '-- settings.dart
| | - variveis static global como link de api, etc
| |
| |-- model
| | '-- my_icon_data.dart (442 KB)
| |
| |-- page
| | |-- filtros_report_page.dart
| | | - Tela de filtros
| | |-- report_chart_page.dart
| | | - Tela de gráficos
| | |-- report_page.dart
| | | - Página de relatórios
| | '-- filtros_page.dart
| | - class de conversão do filtro antigo do sistema analytics para atual
| |
| '-- widget
| |-- texto.dart
| |-- widgets.dart
| '-- xlsx_widget.dart
|
'-- version.dart
- Versão do package
flutter pub upgrade --major-versions