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

Painel MO

*Recurso disponivel em homol - fase de testes

Sobre

Painel possibilita visualizar informações dos boletins abertos e seus apontamentos.

Requisitos e configurações

O Painel MO necessita de uma tabela auxiliar que vai ajudar na questão do desempenho, ao invés de buscarmos dentro da tabela mo_boletim onde teoricamente teríamos uma consulta mais lenta por se tratar de uma tabela bem populada vamos buscar os boletins abertos nessa tabela auxiliar que terá apenas o registro do último boletim aberto de cada encarregado.

Essa tabela auxiliar funciona da seguinte forma, a cada boletim aberto por um encarregado essa tabela é atualizada para termos sempre os dados atualizados dos ultimos boletins.

Abaixo temos o SQL para criação da tabela e seus campos via tabela nfs_core_ds_tabela e nfs_core_ds_tabela_campo:

INSERT INTO nfs_core_ds_tabela
(NOME, TABELA_REAL, DESCRICAO, UNQ, DISPLAY, TIPO, MOBILE_TABLE, MOBILE_MESSAGE, MOBILE_MESSAGE_FK, FILTRO_USER, MAX_ROWS_WO_FILTER, `OPTIONS`, ORDER_BY, INDICATORS)
VALUES('MO_BOLETIM_ENCARREGADO', 'APP_MO_BOLETIM_ENCARREGADO', 'Último boletim', NULL, 'SEQ_DB', 1, 0, 0, NULL, 0, 1000, NULL, NULL, NULL);
INSERT INTO nfs_core_ds_tabela_campo
(TABELA_NOME, NOME, SEQ, SYS, SEND_XMOVA, GRID, GRID_MOBILE, DESCRICAO, DESCRICAO_RESUMIDA, TIPO, OBRIGATORIO, TAMANHO, TAMANHO_DECIMAL, MASCARA, INSERT_UPDATE, DISABLED, HINT, LINK, VALIDACAO, OPCOES, VALOR_DEFAULT, VALIDACAO_VIEW, FILTRO_VIEW, TOOLTIP_MESSAGE, PROPERTIES)
VALUES('MO_BOLETIM_ENCARREGADO', 'BOLETIM', NULL, 0, 1, 1, 1, 'Seq Boletim', 'Seq Boletim', 'FK', 1, NULL, NULL, NULL, 'IU', '0', NULL, 'MO_BOLETIM', NULL, NULL, NULL, NULL, NULL, NULL, NULL);

INSERT INTO nfs_core_ds_tabela_campo
(TABELA_NOME, NOME, SEQ, SYS, SEND_XMOVA, GRID, GRID_MOBILE, DESCRICAO, DESCRICAO_RESUMIDA, TIPO, OBRIGATORIO, TAMANHO, TAMANHO_DECIMAL, MASCARA, INSERT_UPDATE, DISABLED, HINT, LINK, VALIDACAO, OPCOES, VALOR_DEFAULT, VALIDACAO_VIEW, FILTRO_VIEW, TOOLTIP_MESSAGE, PROPERTIES)
VALUES('MO_BOLETIM_ENCARREGADO', 'ENCARREGADO', NULL, 0, 1, 1, 1, 'Seq Encarregado', 'Seq Encarregado', 'FK', 1, NULL, NULL, NULL, 'IU', '0', NULL, 'EFETIVO_FUNCIONARIO', NULL, NULL, NULL, NULL, NULL, NULL, NULL);

Configs

Parametros nfs_core_par_parametros

INSERT INTO nfs_homol_civilmaster_mo_construmobil.nfs_core_par_parametros
(EMPRESA, FILIAL, `LOCAL`, NOME, CONTEUDO, TIPO)
VALUES(9999, 9999, 9999, 'PAINEL_MO', '{
	"ENABLE": true,
	"BOLETIM_TABLE": "MO_BOLETIM",
	"BOLETIM_ENTITY_KEY": "EFETIVO_FUNCIONARIO_SEQ_DB",
	"STATUS_TABLE": {
		"ALIAS": "mo_boletim_encarregado",
		"NAME": "app_mo_boletim_encarregado",
		"BOLETIM_FIELD": "BOLETIM_SEQ_DB",
		"ENTITY_FIELD": "ENCARREGADO_SEQ_DB",
		"ENTITY_KEY": "EFETIVO_FUNCIONARIO_SEQ_DB"
	}
}', 1);

Tabela de configuração dos paineis MO

Na tabela nfs_mo_panels poderão ser criados multiplos painéis, temos alguns parametros iniciais que precisam ser configurados para o funcionamento.

MAIN_TABLE e SECONDARY_TABLE

Usados para identificar as tabelas principais do painel. Como exemplo estamos usando a estrutura da civilmaster-mo onde MAIN_TABLE é app_efetivo_funcionario e SECONDARY_TABLE é app_mo_boletim.

RELATIONSHIPS

Guarda um json com as tabelas utilizadas categorizadas e seus respectivos campos que são utilizados no recurso.

  • Exemplo:
{
 	"TABLE_MAIN": {
  		"NAME": "app_efetivo_funcionario",
		"FIELDS": {
			"NOME": "NOME",
			"FUNCAO": "EFETIVO_FUNCAO_SEQ_DB",
			"FLAG": "FLAG_ENCARREGADO",
			"QDISPLAY": "QIG_DISPLAY",
			"CRACHA": "CRACHA",
			"ENCARREGADO": "ENCARREGADO_SEQ_DB"
		}
    },
 	"TABLE_SECONDARY": {
  		"NAME": "app_mo_boletim",
		"FIELDS": {
			"ENTITY": "EFETIVO_FUNCIONARIO_SEQ_DB"
		}
    },
	"TABLE_FUNCAO": {
		"NAME": "app_efetivo_funcao",
      	"FIELDS": {
       		"DESC": "DESCRICAO"
        }
	},
	"TABLE_MENSAGEM": {
		"NAME": "app_apontamento_mo_mensagem",
		"FIELDS": {
			"DESC": "DESCRICAO",
			"ENTITY_SEQ": "EFETIVO_FUNCIONARIO_SEQ_DB",
			"DEVICEMASTER": "SEQ_DB_DEVICE_MASTER_SEQ_DB",
			"INS_DH": "INS_DH"
		}
	},
	"TABLE_APT": {
		"NAME": "app_mo_apt",
		"FIELDS": {
			"ENTITY": "EFETIVO_FUNCIONARIO_SEQ_DB",
			"TIPO": "TIPO_APONTAMENTO",
			"OPERACAO": "OPER_SEQ_DB",
			"OPERADOR": "OPERADOR_SEQ_DB",
			"DEVICEMASTER": "SEQ_DB_DEVICE_MASTER_SEQ_DB",
			"LAST_UPD": "UPD_DH"
		}
	},
	"TABLE_OPERACAO": {
		"NAME": "app_oper",
		"FIELDS": {
			"DESC": "DESCRICAO",
			"SUBATIVIDADE": "SUBATIVIDADE_PRODUCAO_SEQ_DB"
		}
	},
	"TABLE_SUBATIVIDADE": {
		"NAME": "app_subatividade",
		"FIELDS": {
			"DESC": "DESCRICAO"
		}
	}
}

STATUS_TABLE

Guarda um json com a configuração da tabela auxiliar, e seus campos.

  • Exemplo:
{
	"NAME": "app_mo_boletim_encarregado",
	"BOLETIM_FIELD": "BOLETIM_SEQ_DB",
	"ENTITY_FIELD": "ENCARREGADO_SEQ_DB"
}

CONFIG

Configurações gerais.

  • Exemplo:
{
	"ENCARREGADO_ORDEM": "CRACHA"
}

INDICATORS e INDICATORS_OPTIONS

É possível adicionar o recurso de indicadores padrão do NFS também no Painel MO, o funcionamento é o mesmo já utilizado em outras partes do sistema.

REFRESH_INTERVAL

Controla o intervalo que o painel é atualizado, valor em segundos.

SQL da configuração completa do painel

INSERT INTO nfs_mo_panels
(SEQ_DB, EMPRESA, FILIAL, `LOCAL`, NAME, DISPLAY_NAME, SHORT_NAME, MAIN_TABLE, RELATIONSHIPS, SECONDARY_TABLE, REFRESH_INTERVAL, SCROLL_TIME, INDICATORS, INDICATORS_OPTIONS, INS_DH, UPD_DH, CONFIG, STATUS_TABLE)
VALUES(1, 1, 1, 1, NULL, NULL, NULL, 'app_efetivo_funcionario', '{
 	"TABLE_MAIN": {
  		"NAME": "app_efetivo_funcionario",
		"FIELDS": {
			"NOME": "NOME",
			"FUNCAO": "EFETIVO_FUNCAO_SEQ_DB",
			"FLAG": "FLAG_ENCARREGADO",
			"QDISPLAY": "QIG_DISPLAY",
			"CRACHA": "CRACHA",
			"ENCARREGADO": "ENCARREGADO_SEQ_DB"
		}
    },
 	"TABLE_SECONDARY": {
  		"NAME": "app_mo_boletim",
		"FIELDS": {
			"ENTITY": "EFETIVO_FUNCIONARIO_SEQ_DB"
		}
    },
	"TABLE_FUNCAO": {
		"NAME": "app_efetivo_funcao",
      	"FIELDS": {
       		"DESC": "DESCRICAO"
        }
	},
	"TABLE_MENSAGEM": {
		"NAME": "app_apontamento_mo_mensagem",
		"FIELDS": {
			"DESC": "DESCRICAO",
			"ENTITY_SEQ": "EFETIVO_FUNCIONARIO_SEQ_DB",
			"DEVICEMASTER": "SEQ_DB_DEVICE_MASTER_SEQ_DB",
			"INS_DH": "INS_DH"
		}
	},
	"TABLE_APT": {
		"NAME": "app_mo_apt",
		"FIELDS": {
			"ENTITY": "EFETIVO_FUNCIONARIO_SEQ_DB",
			"TIPO": "TIPO_APONTAMENTO",
			"OPERACAO": "OPER_SEQ_DB",
			"OPERADOR": "OPERADOR_SEQ_DB",
			"DEVICEMASTER": "SEQ_DB_DEVICE_MASTER_SEQ_DB",
			"LAST_UPD": "UPD_DH"
		}
	},
	"TABLE_OPERACAO": {
		"NAME": "app_oper",
		"FIELDS": {
			"DESC": "DESCRICAO",
			"SUBATIVIDADE": "SUBATIVIDADE_PRODUCAO_SEQ_DB"
		}
	},
	"TABLE_SUBATIVIDADE": {
		"NAME": "app_subatividade",
		"FIELDS": {
			"DESC": "DESCRICAO"
		}
	}
}', 'app_mo_boletim', 10, 5, '{
	"TOTALSERVICO": {
		"label": "Serviço",
		"color": "green",
		"icon": "fa fa-users",
		"display": "[result]",
		"decimalPlace": "0",
		"queryBuilder": {}
	},
	"TOTALPERDA": {
		"label": "Perda",
		"color": "red",
		"icon": "fa fa-window-close-o",
		"display": "[result]",
		"decimalPlace": "0",
		"queryBuilder": {}
	},
	"SEMAPONTAMENTO": {
		"label": "Sem Apontamento",
		"color": "blue",
		"icon": "fa fa-clock-o",
		"display": "[result]",
		"decimalPlace": "0",
		"queryBuilder": {}
	},
	"TOTALGERAL": {
		"label": "Total",
		"color": "yellow",
		"icon": "fa fa-calendar-times-o",
		"display": "[result]",
		"decimalPlace": "0",
		"queryBuilder": {}
	}
}', NULL, '2024-06-28 09:09:32', '2024-07-05 16:16:39', '{
	"ENCARREGADO_ORDEM": "CRACHA"
}', '{
	"NAME": "app_mo_boletim_encarregado",
	"BOLETIM_FIELD": "BOLETIM_SEQ_DB",
	"ENTITY_FIELD": "ENCARREGADO_SEQ_DB"
}');

Visão geral

O recurso possui filtros, lista de encarregados e um painel onde são exibidos em formato de cards os dados por encarregado.

Tela do Painel MO

Filtros

Inicialmente o recurso possui 3 filtros, por encarregados, por atividades, e se exibe atividades improdutivas ou não.

Filtros

Indicadores

O componente de indicadores é o mesmo que temos em outras partes do sistema, para configurá-lo, basta seguir os passos de configuração padrão no campo INDICATORS da tabela nfs_core_ds_tabela para a tabela EFETIVO_FUNCIONARIO.

A documentação dos indicadores pode ser acessada clicando aqui.

Exemplo inicial:

{
	"TOTALSERVICO": {
		"label": "Serviço",
		"color": "green",
		"icon": "fa fa-users",
		"display": "[result]",
		"decimalPlace": "0",
		"queryBuilder": {}
	},
	"TOTALPERDA": {
		"label": "Perda",
		"color": "red",
		"icon": "fa fa-window-close-o",
		"display": "[result]",
		"decimalPlace": "0",
		"queryBuilder": {}
	},
	"SEMAPONTAMENTO": {
		"label": "Sem Apontamento",
		"color": "blue",
		"icon": "fa fa-clock-o",
		"display": "[result]",
		"decimalPlace": "0",
		"queryBuilder": {}
	},
	"TOTALGERAL": {
		"label": "Total",
		"color": "yellow",
		"icon": "fa fa-calendar-times-o",
		"display": "[result]",
		"decimalPlace": "0",
		"queryBuilder": {}
	}
}

Lista de encarregados

A lista de encarregados irá mostrar todos os encarregados (EFETIVO_FUNCIONARIO com o campo QIG_DISPLAY == 1), encarregados com o ícone colorido estão com boletim aberto. O click no encarregado abre um pop-up de detalhes.

Lista encarregados

Painel - Cards encarregados

No painel são exibidos para cada encarregado um card contendo informações relacionadas ao boletim aberto.

Painel cards

Cards

Card

Dentro de cada card teremos algumas informações e diferentes ações, vamos ver cada uma delas abaixo:

(1) Encarregado: Abre a tela de detalhes do encarregado.

Detalhes do encarregado

(2) Contagem de atividades: Abre a tela de detalhes por status, "em serviço", "perda", e "sem apontamento" exibindo todos técnicos agrupados pela atividadde.

Detalhes de atividades por tipo

(3) Detalhes da atividade: Abre a tela de detalhes de uma atividade.

Detalhes da atividade

(4) Exibe a quantidade de tecnicos na equipe: Considera os técnicos relacionados ao encarregado e técnicos apontados pelo encarregado.

(5) Botões auxiliares:

  • Mensagens: Exibe as mensagens do boletim. Detalhes das mensagens

  • Mapa: Abre o mapa (trajeto).

  • Comunicação: Mostra os detalhes da última comunicação. Última comunicação

Implementando recurso

Ao liberar o recurso precisamos entender que a tabela de status será populada conforme os boletins são abertos. Caso seja necessário trazer para a tabela de status os boletins que já foram abertos, pode ser utilizado o script abaixo para trazer esses retroativos.

SET @id = (SELECT IFNULL(MAX(ID), 0) FROM app_mo_boletim_encarregado);

INSERT INTO app_mo_boletim_encarregado (EMPRESA, FILIAL, LOCAL, INS_USUARIO_SEQ_DB, BOLETIM_SEQ_DB, ENCARREGADO_SEQ_DB, ID)
SELECT 
    latest_boletim.EMPRESA,
    latest_boletim.FILIAL,
    latest_boletim.LOCAL,
    latest_boletim.INS_USUARIO_SEQ_DB,
    latest_boletim.SEQ_DB,
    latest_boletim.EFETIVO_FUNCIONARIO_SEQ_DB,
    (@id := @id + 1)
FROM 
    (SELECT 
        b.EMPRESA,
        b.FILIAL,
        b.LOCAL,
        b.INS_USUARIO_SEQ_DB,
        b.SEQ_DB,
        b.EFETIVO_FUNCIONARIO_SEQ_DB,
        b.INI_DH,
        ROW_NUMBER() OVER (PARTITION BY b.EFETIVO_FUNCIONARIO_SEQ_DB ORDER BY b.INI_DH DESC) as rn
    FROM 
        app_mo_boletim b
    WHERE 
        b.FIM_DH IS NULL
        AND b.EFETIVO_FUNCIONARIO_SEQ_DB IS NOT NULL) as latest_boletim
LEFT JOIN
    app_mo_boletim_encarregado e
ON 
    latest_boletim.EFETIVO_FUNCIONARIO_SEQ_DB = e.ENCARREGADO_SEQ_DB
INNER JOIN
    app_efetivo_funcionario f
ON
    latest_boletim.EFETIVO_FUNCIONARIO_SEQ_DB = f.SEQ_DB
WHERE 
    latest_boletim.rn = 1
    AND e.ENCARREGADO_SEQ_DB IS NULL;