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

Introdução

Quadro de Trabalho Power Service foi desenvolvido objetivando substituir o Quadro de Trabalho adotado pela Prime Action Consulting, usado como padrão na visualização dos dados, permitindo visualizar, de maneira fácil e rápida, a alocação de técnicos e suas demandas de trabalho recente.

Nesse Quadro são exibidas as OS seguindo as regras:

  1. Apenas funcionários/técnicos com flag QIG_DISPLAY = 1;
  2. OS Abertas para data selecionada e dia anterior;
  3. OS em Andamento (independente do dia selecionado);
  4. OS Fechadas para data selecionada e dia anterior;
  5. OS Pausadas (independente do dia selecionado).

Pré-requesitos

São pré-requisitos para esse módulo:

  1. Módulo "Rotas Personalizada" habilitado e rota personalizada para "/custom/workBoard" criada (veja como);

  2. Configuração de Valores de Referência para devido posicionado dentro do Quadro, seguindo a seguinte estrutura:

    1. Campo LOV1 para tabela TIPO_OS para determinar se a atividade está sendo executada no 1:Campo ou na 2:Oficina;

    IMPORTANTE
    Há limitações na exibição da tabela, é bom ressaltar que as colunas não são dinâmicas, para o Tipo OS são aceitos apenas duas opções obrigatórias.

    Opções para o uso do workboard:

    1:Campo;2:Oficina;
    
    1. Campo LOV1 para tabela MOTIVO_PAUSA para determinar o motivo da pausa de uma atividade, sendo 1:Aguardando Aprovação Cliente, 2:Aguardando Aprovação Interna, 3:Aguardando Peça e 4:Servios de Terceiros;
    2. Parâmetro de relação DE/PARA do SEQ_DB do Status da OS, se necessário, para devida classificação, onde:
      1. OS abertas => 1;
      2. OS em Serviço/Execução => 2;
      3. OS Fechadas => 3;
      4. OS Pausadas => 4.
-- referência para execução de atividades internas / externas
INSERT INTO nfs_core_ds_tabela_campo (
  `TABELA_NOME`, `NOME`, `SEQ`, `SYS`, `SEND_XMOVA`, `GRID`, `GRID_MOBILE`, `DESCRICAO`, `DESCRICAO_RESUMIDA`,
  `TIPO`, `OBRIGATORIO`, `TAMANHO`, `INSERT_UPDATE`, `DISABLED`, `OPCOES`
) VALUES(
  'TIPO_OS', 'ATENDIMENTO', 3, 0, 1, 1, 1, 'Atendimento', 'Atendimento',
  'LOV1', 1, 1, 'IU', '0', '1:Campo;2:Oficina'
);
-- referência para motivos de pausa
INSERT INTO nfs_core_ds_tabela_campo (
  `TABELA_NOME`, `NOME`, `SEQ`, `SYS`, `SEND_XMOVA`, `GRID`, `GRID_MOBILE`, `DESCRICAO`, `DESCRICAO_RESUMIDA`,
  `TIPO`, `OBRIGATORIO`, `TAMANHO`, `INSERT_UPDATE`, `DISABLED`, `OPCOES`
) VALUES(
  'MOTIVO_PAUSA', 'KANBAN', 4, 0, 1, 1, 1, 'Kanban', 'Posição Kanban',
  'LOV1', 1, 1, 'IU', '0', '1:Aguardando Aprovação Cliente;2:Aguardando Aprovação Interna;3:Aguardando Peça;4:Servios de Terceiros'
);
-- referência de status da OS
INSERT INTO nfs_core_par_parametros (
  `EMPRESA`, `FILIAL`, `LOCAL`, `NOME`, `CONTEUDO`, `TIPO`
) VALUES(
  4, 9999, 9999, 'WORKBOARD_GRID', '1:1;2:2;3:3;4:4', 1
);

IMPORTANTE As DDL acima devem ser usadas como referência. Ao implementar em novos ambientes, favor atentar para os dados da Empresa (EMPRESA, FILIAL e LOCAL) e ID's sequênciais (SEQ_DB's) {.is-danger}

Erros

Em caso que não exiba nenhum card mesmo existindo detalhes da OS cadastrado e associado a técnico, a seguinte consulta é a que busca o detalhes por funcionário:

SELECT 
  OS_TECNICO.SEQ_DB AS OS_TECNICO_SEQ_DB, 
  OS_TECNICO.FUNCIONARIO_SEQ_DB AS SEQ_DB, 
  OS_TECNICO.OS_SEQ_DB AS OS_SEQ_DB, 
  OS_TECNICO.STATUS_OS_SEQ_DB AS OS_TECNICO_STATUS, 
  count(OST_DETALHES.SEQ_DB) TOTAL_DETALHES_OS, 
  OST_DETALHES.DATA_INICIAL AS DATA_INICIAL, 
  OST_DETALHES.DATA_FINAL AS DATA_FINAL, 
  OST_DETALHES.DIA_INTEIRO AS DIA_INTEIRO, 
  concat(
    '/g/OS/dados/', OS_TECNICO.OS_SEQ_DB, 
    '?popup=1'
  ) AS LINK, 
  OS.CODIGO AS OS_CODIGO, 
  OS.OBSERVACAO AS OS_OBSERVACAO, 
  OS.STATUS_OS_SEQ_DB AS OS_STATUS, 
  OS.LOCAL_ATENDIMENTO AS LOCAL_ATENDIMENTO, 
  TIPO_OS.ATENDIMENTO AS TIPO_OS_ATENDIMENTO, 
  concat(
    CLIENTE.CODIGO, ' ', CLIENTE.DESCRICAO
  ) AS CLIENTE, 
  0 EXIBIR_DETALHES 
FROM 
  APP_OS_TECNICO OS_TECNICO 
  inner JOIN APP_OS OS ON OS.SEQ_DB = OS_TECNICO.OS_SEQ_DB 
  left JOIN APP_OS_TECNICO_DETALHE OST_DETALHES ON OST_DETALHES.OS_TECNICO_SEQ_DB = OS_TECNICO.SEQ_DB 
  AND OST_DETALHES.ATIVO = 1 
  AND OST_DETALHES.DELETED = 0 
  inner JOIN APP_CLIENTE CLIENTE ON CLIENTE.SEQ_DB = OS.CLIENTE_SEQ_DB 
  left JOIN APP_TIPO_OS TIPO_OS ON TIPO_OS.SEQ_DB = OS.TIPO_OS_SEQ_DB 
WHERE 
  (1 = 1) 
  AND (
    OS_TECNICO.EMPRESA IN (4, 9999)
  ) 
  AND (
    OS_TECNICO.FILIAL IN (1, 9999)
  ) 
  AND (
    OS_TECNICO.LOCAL IN (1, 9999)
  ) 
  AND (OS_TECNICO.ATIVO = 1) 
  AND (OS_TECNICO.DELETED = 0) 
  AND (
    OS_TECNICO.FUNCIONARIO_SEQ_DB = 15
  ) 
  AND (
    OS_TECNICO.STATUS_OS_SEQ_DB in (2, 4) 
    or (
      OS_TECNICO.STATUS_OS_SEQ_DB in (1) 
      and (
        OST_DETALHES.DATA_INICIAL between '2023-09-01 00:00:00' 
        AND '2023-10-07 23:59:59' 
        and OST_DETALHES.DATA_FINAL between '2023-09-01 00:00:00' 
        AND '2023-10-07 23:59:59'
      )
    ) 
    or (
      OS_TECNICO.STATUS_OS_SEQ_DB in (3) 
      and OS_TECNICO.UPD_DH between '2023-10-02 00:00:00' 
      AND '2023-10-07 23:59:59'
    )
  ) 
GROUP BY 
  OS.CODIGO, 
  OS_TECNICO.SEQ_DB;
 

Implementação de Filtros no Quadro de Trabalho

Este guia explica detalhadamente como implementar filtros no Quadro de Trabalho por meio de entry points. Os filtros permitem restringir os dados exibidos com base em condições específicas. A seguir, são descritas as etapas para criar filtros, as opções disponíveis e as regras para configuração.


Inserção de Entry Point no Banco de Dados

Para implementar um filtro, insira um registro na tabela nfs_entry_point com a seguinte estrutura:

INSERT INTO nfs_homol_cortezengenharia_construmobil_smartos.nfs_entry_point 
(FILE_OR_DOMAIN, `ACTION`, XMOVA_INSTALLCODE, XMOVA_INSTALLCODE_VERSION, EMPRESA, FILIAL, `LOCAL`, TABELA, ENTRY_NUM, CODE, VERSION, BUILD, ATIVO, CODETYPE, FIELD, DESCRIPTION, INS_DH, UPD_DH, NFS_USER, DB_USER) 
VALUES 
('WORK_BOARD', 'filter', NULL, NULL, 9999, 9999, 9999, '', NULL, '<JSON_FILTRO>', 1, 12, 1, 'JSON', NULL, NULL, '2024-11-11 12:50:14', NULL, 'nfs.joao.beleno@177.192.16.97');

Campos Importantes

  • FILE_OR_DOMAIN: Deve ser "WORK_BOARD".
  • ACTION: Deve ser "filter".
  • EMPRESA, FILIAL, LOCAL: Utilize 9999 para filtros globais ou os códigos específicos para restringir por empresa, filial ou local.
  • ATIVO: Deve ser sempre 1 (ativo).
  • CODETYPE: Deve ser "JSON".
  • CODE: Contém o JSON detalhado dos filtros que serão aplicados (veja abaixo).

Estrutura do JSON de Filtros

O campo CODE no registro contém o JSON que define os filtros. A chave do JSON deve corresponder ao nome do parâmetro utilizado na condição SQL (ex.: :NUMERO_OS).

Exemplo de JSON básico:

{
  "NUMERO_OS": {
    "type": "Text",
    "options": {
      "label": "Número OS",
      "multiple": true,
      "required": false,
      "language": "pt-BR",
      "sql-condition": "OS.NUMERO_OS LIKE :NUMERO_OS",
      "sql-table": "os"
    }
  }
}

Tipos de Filtro Disponíveis

  1. Text: Campo de texto simples.

    • Exemplo:
      {
        "NUMERO_OS": {
          "type": "Text",
          "options": {
            "label": "Número OS",
            "sql-condition": "OS.NUMERO_OS LIKE :NUMERO_OS",
            "sql-table": "os"
          }
        }
      }
      
  2. Table: Campo com autocomplete, permitindo selecionar valores de outra tabela a chave do json deve ser o nome da tabela exemplo OBRA

    • Exemplo:
      {
        "obra": {
          "type": "Table",
          "options": {
            "label": "Obra",
            "sql-condition": "EXISTS (SELECT 1 FROM APP_OBRA_RENTAL WHERE OBRA_SEQ_DB = :obra AND SEQ_DB = OS.OBRA_RENTAL_SEQ_DB)",
            "sql-table": "os"
          }
        }
      }
      
  3. Choice: Campo de seleção com opções predefinidas.

    • Exemplo:
      {
        "OS_ATIVO": {
          "type": "Choice",
          "options": {
            "label": "Status OS",
            "choices": {
              "1": "ATIVO",
              "0": "INATIVO"
            },
            "sql-condition": "OS.ATIVO = :OS_ATIVO",
            "sql-table": "os"
          }
        }
      }
      
  4. Date: Campo para seleção de datas.

    • Exemplo:
      {
        "DATA_INICIAL": {
          "type": "Date",
          "options": {
            "label": "Data Inicial",
            "sql-condition": "OS_TECNICO.DATA_INICIAL >= :DATA_INICIAL",
            "sql-table": "os"
          }
        }
      }
      

Regras para Configuração do JSON

  • Chave do JSON: Deve corresponder ao nome do parâmetro na condição SQL (ex.: :obra, :NUMERO_OS).
  • type: Define o tipo do filtro (Text, Table, Choice, Date).
  • sql-table: Define a tabela na qual o filtro será aplicado.
    • Valores disponíveis:
      • os: Filtros aplicados diretamente às OS.
      • funcionario: Filtros aplicados aos funcionários.
  • sql-condition: Define a condição SQL para filtrar os dados. Pode ser uma condição básica ou avançada utilizando EXISTS.

Tabelas Disponíveis para Filtros

Filtros Aplicados a OS

  • Tabelas disponíveis:
    • OS_TECNICO
    • OST_DETALHES
    • OS
    • TIPO_OS
  • Exemplo de sql-condition básico:
    "sql-condition": "OS_TECNICO.DATA_INICIAL >= :DATA_INICIAL"
    
  • Exemplo de sql-condition avançado caso nao existam as tabelas nescessarias para a consulta pode ser usado o exists incluindo jois a consulta, deve ser usado no nome real da tabela:
    "sql-condition": "EXISTS (SELECT 1 FROM APP_OBRA_RENTAL WHERE OBRA_SEQ_DB = :obra AND SEQ_DB = OS.OBRA_RENTAL_SEQ_DB)"
    

Filtros Aplicados a Funcionários

  • Tabela disponível:
    • fun (abreviação para funcionário)
  • Exemplo de sql-condition básico:
    "sql-condition": "fun.NOME = :NOME"
    

Exemplo Completo de JSON com Múltiplos Filtros

{
  "obra": {
    "type": "Table",
    "options": {
      "label": "Obra",
      "multiple": true,
      "required": false,
      "language": "pt-BR",
      "sql-condition": "EXISTS (SELECT 1 FROM APP_OBRA_RENTAL WHERE OBRA_SEQ_DB = :obra AND SEQ_DB = OS.OBRA_RENTAL_SEQ_DB)",
      "sql-table": "os"
    }
  },
  "NUMERO_OS": {
    "type": "Text",
    "options": {
      "label": "Número OS",
      "multiple": true,
      "required": false,
      "language": "pt-BR",
      "sql-condition": "OS.NUMERO_OS LIKE :NUMERO_OS",
      "sql-table": "os"
    }
  },
  "OS_ATIVO": {
    "type": "Choice",
    "options": {
      "label": "Status OS",
      "multiple": true,
      "required": false,
      "language": "pt-BR",
      "sql-condition": "OS.ATIVO = :OS_ATIVO",
      "choices": {
        "1": "ATIVO",
        "0": "INATIVO"
      },
      "sql-table": "os"
    }
  }
}

Com essas informações detalhadas, você pode configurar filtros específicos, personalizáveis e funcionais no Quadro de Trabalho.