Indicadores por Entrypoint
Passa a ser possível criar indicadores usando entrypoints php, abaixo vamos ver como usar o recurso e configurá-lo.
CODE
Aqui temos um exemplo de entrypoint de indicadores, a estrutura é a mesma do JSON
que é usado atualmente com Query Builder, mas agora em PHP.
/** Obtém os dados com o DAO */
/** Consulta 'main' que são os dados que serão exibidos no card */
$osIntegracaoMain = Dao::table('os', 'os')
->select([
'COUNT(c.seq_db) AS porcentage',
'180 AS value'
])
->innerJoin('os', 'status_os', 'st', 'st.SEQ_DB = os.STATUS_OS_SEQ_DB')
->innerJoin('os', 'cliente', 'c', 'c.SEQ_DB = os.CLIENTE_SEQ_DB')
->whereRaw('(os.PROC_ST = 0 OR os.PROC_ST IS NULL)')
->where('os.STATUS_OS_SEQ_DB', '=', 3)
->get();
/** Consulta 'data' para os dados do relatório */
$osIntegracaoData = Dao::table('os', 'os')
->select([
'os.seq_db AS seq_db',
'os.codigo AS Codigo',
'c.DESCRICAO AS Cliente',
'st.DESCRICAO AS Status'
])
->innerJoin('os', 'status_os', 'st', 'st.SEQ_DB = os.STATUS_OS_SEQ_DB')
->innerJoin('os', 'cliente', 'c', 'c.SEQ_DB = os.CLIENTE_SEQ_DB')
->whereRaw('(os.PROC_ST = 0 OR os.PROC_ST IS NULL)')
->where('os.STATUS_OS_SEQ_DB', '=', 3)
->get();
/**
* Config do card
*/
$osIntegracao = [
"card" => [
"style" => [
"cursor" => "pointer",
"background-color" => "burlywood",
"border" => "2px solid #000",
"max-height" => "125px"
]
],
"number" => [
"style" => [
"font-size" => "1.5em",
"color" => "#000",
"font-family" => "\"Open Sans\", sans-serif",
"font-weight" => "bold"
]
],
"icon" => [
"style" => [
"color" => "#E87E04",
"opacity" => "0.3",
"margin-top" => "11px",
"margin-left" => "-42px",
"transform" => "scale(2.5)"
],
"class" => "fa-file"
],
"statusText" => [
"style" => [
"color" => "#000"
]
],
"progressBar" => [
"style" => [
"background-color" => "black"
]
],
"label" => [
"text" => "OS Abertas nos últimos 90 dias",
"style" => [
"font-size" => "1em",
"text-decoration" => "none",
"color" => "#000",
"font-weight" => "bold",
"font-family" => "\"Open Sans\", sans-serif"
]
],
"color" => "yellow-gold",
"type" => "progress",
"porcentage" => [
"title" => "OS em Andamento"
],
/** Passa os dados obtidos na query */
"display" => $osIntegracaoMain,
"query" => [
"data" => $osIntegracaoData
],
"report" => [
"displayColumns" => [
"Codigo",
"Cliente",
"Status"
],
"links" => [
"Codigo" => "/t/os/edit/%seq_db%"
]
]
];
/** Obtém os dados com o DAO */
/** Consulta 'main' que são os dados que serão exibidos no card */
$mais12HorasMain = Dao::table('boletim', 'b')
->select([
'COUNT(b.seq_db) AS result'
])
->whereRaw('b.INI_DH > DATE_SUB(NOW(), INTERVAL 180 DAY)')
->whereRaw('b.INI_FIM_DIFF_SEC >= (3600 * 12)')
->get();
/** Consulta 'data' para os dados do relatório */
$mais12HorasData = Dao::table('boletim', 'b')
->select([
'b.SEQ_DB AS seq_db',
'b.FUNCIONARIO_SEQ_DB AS funcionario_seq_db',
"CONCAT(f.CRACHA, ' :: ', f.NOME) AS Funcionário",
'b.INI_DH AS Início',
'b.FIM_DH AS Término',
"REPLACE(ROUND((b.INI_FIM_DIFF_SEC)/3600, 2), '.', ',') AS Total"
])
->innerJoin('b', 'funcionario', 'f', 'f.SEQ_DB = b.FUNCIONARIO_SEQ_DB')
->whereRaw('b.INI_DH > DATE_SUB(NOW(), INTERVAL 180 DAY)')
->whereRaw('b.INI_FIM_DIFF_SEC >= (3600 * 12)')
->get();
/**
* Config do card
*/
$mais12Horas = [
/** Config dos filtros */
"filters" => [
"entity" => [
"field" => "funcionario_seq_db",
"column_name" => "Funcionário",
"column_pos" => 2
],
"ini_date" => [
"column_name" => "Início",
"column_pos" => 3
],
"fim_date" => [
"column_name" => "Término",
"column_pos" => 4
]
],
"label" => [
"text" => "Boletins com mais de 12 Horas",
"style" => [
"font-size" => "1.3em",
"text-decoration" => "none",
"color" => "#E87E04",
"font-weight" => "bold",
"font-family" => "\"Open Sans\", sans-serif"
]
],
"color" => "yellow-gold",
"card" => [
"style" => [
"cursor" => "pointer",
"background-color" => "#FFF",
"border" => "3px solid #E87E04"
]
],
"number" => [
"style" => [
"font-size" => "2.5em",
"text-align" => "right",
"color" => "#E87E04",
"font-family" => "\"Open Sans\", sans-serif",
"font-weight" => "bold"
]
],
"icon" => [
"style" => [
"color" => "#E87E04",
"opacity" => "0.5",
"margin-top" => "-70px",
"margin-left" => "-40px",
"transform" => "scale(0.3)"
],
"class" => "fa-clock-o"
],
/** Passa os dados obtidos na query */
"display" => $mais12HorasMain,
"query" => [
"data" => $mais12HorasData
],
"report" => [
"displayColumns" => [
"Funcionário",
"Início",
"Término",
"Total"
],
"links" => [
"Funcionário" => "/details/1/%funcionario_seq_db%/1"
]
]
];
/** Array final com todos indicadores */
$finalArray = [
"osIntegracao" => $osIntegracao,
"mais12Horas" => $mais12Horas,
];
$this->queryData['finalArray'] = $finalArray;
Home
Para utilizar na home, um entrypoint deverá ser criado na tabela nfs_entrypoint
com a seguinte configuração inicial.
FILE_OR_DOMAIN
: 'SYSTEM' |
ACTION
: 'IndicatorHome' |
ENTRY_NUM
: 502 |
CODETYPE
: 'PHP'
Quando esse entrypoint estiver ativo, passa a ser ignorado o entrypoint da tabela nfs_rpo
.
CRUD
Para o CRUD, teremos que usar o campo INDICATORS
da tabela nfs_core_ds_tabela
para fazer uma espécie de apontamento para qual entrypoint deverá ser chamado, esse apontamento é um JSON
que indica qual EP será utilizado para carregar os indicadores.
{
"entrypoint": true,
"action": "indicadores_equipamento"
}
PANEL
Para o painel o comportamento é bem semelhante que o CRUD
, na tabela nfs_qig_panels
usaremos o campo INDICATORS_OPTIONS
para fazer o apontamento, a estrutura é a mesma, e é possivel usar o mesmo entrypoint que o CRUD por exemplo.
{
"entrypoint": true,
"action": "indicadores_equipamento"
}