Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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"
}