Compare commits
10 Commits
e92fc49114
...
461ea2fe5c
| Author | SHA1 | Date | |
|---|---|---|---|
| 461ea2fe5c | |||
| 57e0047cc0 | |||
| 1bff849684 | |||
| 3b92c7b13e | |||
| d5ca0d4991 | |||
| 5ff5146889 | |||
| 1bf175d110 | |||
| b8d4fdfcde | |||
| 9daa2ea317 | |||
| 34d4c0df7f |
17
app.py
17
app.py
@ -27,6 +27,10 @@ from routes.time_schedules import time_schedule_bp
|
||||
from routes.holiday import holiday_bp
|
||||
from routes.company import company_bp
|
||||
from routes.record import record_bp
|
||||
from routes.settings_gerais import settings_gerais_bp
|
||||
from routes.settings_calculo_horas import settings_calculo_horas_bp
|
||||
from routes.settings_integracoes import settings_integracoes_bp
|
||||
from routes.settings_notificacoes import settings_notificacoes_bp
|
||||
import logging
|
||||
from dotenv import load_dotenv
|
||||
from werkzeug.exceptions import BadRequest
|
||||
@ -132,6 +136,11 @@ def create_app():
|
||||
app.register_blueprint(record_bp)
|
||||
app.register_blueprint(holiday_bp)
|
||||
app.register_blueprint(company_bp)
|
||||
app.register_blueprint(settings_gerais_bp)
|
||||
app.register_blueprint(settings_calculo_horas_bp)
|
||||
app.register_blueprint(settings_integracoes_bp)
|
||||
app.register_blueprint(settings_notificacoes_bp)
|
||||
|
||||
|
||||
# Testa a conexão com o banco de dados
|
||||
with app.app_context():
|
||||
@ -153,7 +162,7 @@ def get_database_type(uri):
|
||||
|
||||
if __name__ == "__main__":
|
||||
app = create_app()
|
||||
# with app.app_context():
|
||||
# db.create_all() # Cria as tabelas
|
||||
# run_all_seeds()
|
||||
app.run(debug=True, host="0.0.0.0")
|
||||
with app.app_context():
|
||||
db.create_all() # Cria as tabelas
|
||||
run_all_seeds() # Executa os seeds
|
||||
app.run(debug=True, host="0.0.0.0")
|
||||
|
||||
87
docs/settings_calculo_horas/create.yml
Normal file
87
docs/settings_calculo_horas/create.yml
Normal file
@ -0,0 +1,87 @@
|
||||
tags:
|
||||
- Settings Cálculo Horas
|
||||
summary: Cria uma nova configuração de cálculo de horas
|
||||
description: >
|
||||
Essa rota permite criar uma configuração de cálculo de horas associada a uma instância de serviço.
|
||||
parameters:
|
||||
- in: body
|
||||
name: body
|
||||
description: Dados para a criação de uma nova configuração.
|
||||
required: true
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
jornada_diaria:
|
||||
type: integer
|
||||
description: Jornada de trabalho diária em minutos
|
||||
example: 480
|
||||
jornada_semanal:
|
||||
type: integer
|
||||
description: Jornada de trabalho semanal em minutos
|
||||
example: 2400
|
||||
inicio_periodo_noturno:
|
||||
type: string
|
||||
format: time
|
||||
description: Hora de início do período noturno
|
||||
example: "22:00:00"
|
||||
fim_periodo_noturno:
|
||||
type: string
|
||||
format: time
|
||||
description: Hora de fim do período noturno
|
||||
example: "05:00:00"
|
||||
desconto_atraso_automatico:
|
||||
type: string
|
||||
description: Habilita ou não o desconto automático por atraso
|
||||
example: "True"
|
||||
tolerancia_para_descontos:
|
||||
type: integer
|
||||
description: Tolerância em minutos para aplicação de descontos
|
||||
example: 10
|
||||
arredondamento_minutos:
|
||||
type: integer
|
||||
description: Minutos utilizados para arredondamento
|
||||
example: 5
|
||||
service_instance_id:
|
||||
type: integer
|
||||
description: ID da instância de serviço associada
|
||||
example: 4
|
||||
responses:
|
||||
201:
|
||||
description: Configuração criada com sucesso
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
settings_id:
|
||||
type: integer
|
||||
examples:
|
||||
application/json:
|
||||
message: "Configuração criada com sucesso"
|
||||
settings_id: 1
|
||||
400:
|
||||
description: Requisição inválida (dados incorretos ou ausentes)
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Campos obrigatórios ausentes ou inválidos."
|
||||
401:
|
||||
description: Token inválido ou ausente
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Token inválido ou ausente"
|
||||
49
docs/settings_calculo_horas/delete.yml
Normal file
49
docs/settings_calculo_horas/delete.yml
Normal file
@ -0,0 +1,49 @@
|
||||
tags:
|
||||
- Settings Cálculo Horas
|
||||
summary: Deleta uma configuração de cálculo de horas existente
|
||||
description: >
|
||||
Essa rota permite deletar uma configuração de cálculo de horas especificada pelo ID.
|
||||
parameters:
|
||||
- in: path
|
||||
name: id
|
||||
required: true
|
||||
schema:
|
||||
type: integer
|
||||
description: ID da configuração que será deletada.
|
||||
responses:
|
||||
200:
|
||||
description: Configuração deletada com sucesso
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
message: "Configuração deletada com sucesso."
|
||||
401:
|
||||
description: Token inválido ou ausente
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Token inválido ou ausente"
|
||||
404:
|
||||
description: Configuração não encontrada
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Configuração não encontrada"
|
||||
75
docs/settings_calculo_horas/get.yml
Normal file
75
docs/settings_calculo_horas/get.yml
Normal file
@ -0,0 +1,75 @@
|
||||
tags:
|
||||
- Settings Cálculo Horas
|
||||
summary: Busca uma configuração de cálculo de horas por ID
|
||||
description: >
|
||||
Essa rota retorna os detalhes de uma configuração de cálculo de horas com base no ID informado.
|
||||
parameters:
|
||||
- in: path
|
||||
name: id
|
||||
required: true
|
||||
schema:
|
||||
type: integer
|
||||
description: ID da configuração de cálculo de horas.
|
||||
responses:
|
||||
200:
|
||||
description: Detalhes da configuração retornados com sucesso
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: integer
|
||||
jornada_diaria:
|
||||
type: integer
|
||||
jornada_semanal:
|
||||
type: integer
|
||||
inicio_periodo_noturno:
|
||||
type: string
|
||||
format: time
|
||||
fim_periodo_noturno:
|
||||
type: string
|
||||
format: time
|
||||
desconto_atraso_automatico:
|
||||
type: string
|
||||
tolerancia_para_descontos:
|
||||
type: integer
|
||||
arredondamento_minutos:
|
||||
type: integer
|
||||
service_instance_id:
|
||||
type: integer
|
||||
examples:
|
||||
application/json:
|
||||
id: 1
|
||||
jornada_diaria: 480
|
||||
jornada_semanal: 2400
|
||||
inicio_periodo_noturno: "22:00:00"
|
||||
fim_periodo_noturno: "05:00:00"
|
||||
desconto_atraso_automatico: "True"
|
||||
tolerancia_para_descontos: 10
|
||||
arredondamento_minutos: 5
|
||||
service_instance_id: 4
|
||||
401:
|
||||
description: Token inválido ou ausente
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Token inválido ou ausente"
|
||||
404:
|
||||
description: Configuração não encontrada
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Configuração não encontrada"
|
||||
57
docs/settings_calculo_horas/list.yml
Normal file
57
docs/settings_calculo_horas/list.yml
Normal file
@ -0,0 +1,57 @@
|
||||
tags:
|
||||
- Settings Cálculo Horas
|
||||
summary: Lista todas as configurações de cálculo de horas
|
||||
description: >
|
||||
Essa rota retorna uma lista de todas as configurações de cálculo de horas cadastradas, podendo ser filtrada por ID da instância de serviço.
|
||||
parameters:
|
||||
- in: query
|
||||
name: service_instance_id
|
||||
required: false
|
||||
schema:
|
||||
type: integer
|
||||
description: ID da instância de serviço para filtrar as configurações
|
||||
responses:
|
||||
200:
|
||||
description: Lista de configurações retornada com sucesso
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
settings_calculo_horas_list:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: integer
|
||||
jornada_diaria:
|
||||
type: integer
|
||||
jornada_semanal:
|
||||
type: integer
|
||||
inicio_periodo_noturno:
|
||||
type: string
|
||||
format: time
|
||||
fim_periodo_noturno:
|
||||
type: string
|
||||
format: time
|
||||
desconto_atraso_automatico:
|
||||
type: string
|
||||
tolerancia_para_descontos:
|
||||
type: integer
|
||||
arredondamento_minutos:
|
||||
type: integer
|
||||
service_instance_id:
|
||||
type: integer
|
||||
examples:
|
||||
application/json:
|
||||
settings_calculo_horas_list:
|
||||
- id: 1
|
||||
jornada_diaria: 480
|
||||
jornada_semanal: 2400
|
||||
inicio_periodo_noturno: "22:00:00"
|
||||
fim_periodo_noturno: "05:00:00"
|
||||
desconto_atraso_automatico: "True"
|
||||
tolerancia_para_descontos: 10
|
||||
arredondamento_minutos: 5
|
||||
service_instance_id: 4
|
||||
102
docs/settings_calculo_horas/update.yml
Normal file
102
docs/settings_calculo_horas/update.yml
Normal file
@ -0,0 +1,102 @@
|
||||
tags:
|
||||
- Settings Cálculo Horas
|
||||
summary: Atualiza uma configuração de cálculo de horas existente
|
||||
description: >
|
||||
Essa rota permite atualizar uma configuração de cálculo de horas especificada pelo ID.
|
||||
parameters:
|
||||
- in: path
|
||||
name: settings_id
|
||||
required: true
|
||||
schema:
|
||||
type: integer
|
||||
description: ID da configuração que será atualizada.
|
||||
- in: body
|
||||
name: body
|
||||
description: Dados para atualização da configuração.
|
||||
required: true
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
jornada_diaria:
|
||||
type: integer
|
||||
description: Jornada de trabalho diária em minutos
|
||||
example: 480
|
||||
jornada_semanal:
|
||||
type: integer
|
||||
description: Jornada de trabalho semanal em minutos
|
||||
example: 2400
|
||||
inicio_periodo_noturno:
|
||||
type: string
|
||||
format: time
|
||||
description: Hora de início do período noturno
|
||||
example: "22:00:00"
|
||||
fim_periodo_noturno:
|
||||
type: string
|
||||
format: time
|
||||
description: Hora de fim do período noturno
|
||||
example: "05:00:00"
|
||||
desconto_atraso_automatico:
|
||||
type: string
|
||||
description: Habilita ou não o desconto automático por atraso
|
||||
example: "True"
|
||||
tolerancia_para_descontos:
|
||||
type: integer
|
||||
description: Tolerância em minutos para aplicação de descontos
|
||||
example: 10
|
||||
arredondamento_minutos:
|
||||
type: integer
|
||||
description: Minutos utilizados para arredondamento
|
||||
example: 5
|
||||
service_instance_id:
|
||||
type: integer
|
||||
description: ID da instância de serviço associada
|
||||
example: 4
|
||||
responses:
|
||||
200:
|
||||
description: Configuração atualizada com sucesso
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
message: "Configuração atualizada com sucesso"
|
||||
400:
|
||||
description: Requisição inválida (dados incorretos ou ausentes)
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Campos obrigatórios ausentes ou inválidos."
|
||||
401:
|
||||
description: Token inválido ou ausente
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Token inválido ou ausente"
|
||||
404:
|
||||
description: Configuração não encontrada
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Configuração não encontrada"
|
||||
97
docs/settings_gerais/create.yml
Normal file
97
docs/settings_gerais/create.yml
Normal file
@ -0,0 +1,97 @@
|
||||
tags:
|
||||
- Settings Gerais
|
||||
summary: Cria uma nova configuração geral
|
||||
description: >
|
||||
Essa rota permite criar uma configuração geral associada a uma instância de serviço.
|
||||
parameters:
|
||||
- in: body
|
||||
name: body
|
||||
description: Dados para a criação de uma nova configuração.
|
||||
required: true
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
tolerancia_entrada:
|
||||
type: integer
|
||||
description: Tolerância de entrada em minutos
|
||||
example: 10
|
||||
tolerancia_saida:
|
||||
type: integer
|
||||
description: Tolerância de saída em minutos
|
||||
example: 5
|
||||
limite_diario_he:
|
||||
type: integer
|
||||
description: Limite diário de horas extras em minutos
|
||||
example: 120
|
||||
limite_mensal_he:
|
||||
type: integer
|
||||
description: Limite mensal de horas extras em minutos
|
||||
example: 2400
|
||||
limite_banco_horas_positivo:
|
||||
type: integer
|
||||
description: Limite positivo do banco de horas
|
||||
example: 800
|
||||
limite_banco_horas_negativo:
|
||||
type: integer
|
||||
description: Limite negativo do banco de horas
|
||||
example: -400
|
||||
validacao_reconhecimento_facial:
|
||||
type: string
|
||||
description: Habilita ou não a validação facial
|
||||
example: "True"
|
||||
registro_remoto:
|
||||
type: string
|
||||
description: Permite ou não o registro remoto
|
||||
example: "True"
|
||||
ajuste_colaborador:
|
||||
type: string
|
||||
description: Permite ou não o ajuste pelo colaborador
|
||||
example: "False"
|
||||
dias_aprovacao_automatica:
|
||||
type: integer
|
||||
description: Número de dias para aprovação automática
|
||||
example: 3
|
||||
service_instance_id:
|
||||
type: integer
|
||||
description: ID da instância de serviço associada
|
||||
example: 4
|
||||
responses:
|
||||
201:
|
||||
description: Configuração criada com sucesso
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
settings_id:
|
||||
type: integer
|
||||
examples:
|
||||
application/json:
|
||||
message: "Configuração criada com sucesso"
|
||||
settings_id: 1
|
||||
400:
|
||||
description: Requisição inválida (dados incorretos ou ausentes)
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Campos obrigatórios ausentes ou inválidos."
|
||||
401:
|
||||
description: Token inválido ou ausente
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Token inválido ou ausente"
|
||||
48
docs/settings_gerais/delete.yml
Normal file
48
docs/settings_gerais/delete.yml
Normal file
@ -0,0 +1,48 @@
|
||||
tags:
|
||||
- Settings Gerais
|
||||
summary: Remove uma configuração geral
|
||||
description: >
|
||||
Essa rota permite deletar uma configuração geral específica pelo seu ID.
|
||||
parameters:
|
||||
- in: path
|
||||
name: settings_id
|
||||
required: true
|
||||
description: ID da configuração geral que será removida
|
||||
type: integer
|
||||
responses:
|
||||
200:
|
||||
description: Configuração removida com sucesso
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
message: "Configuração deletada com sucesso"
|
||||
401:
|
||||
description: Token inválido ou ausente
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Token inválido ou ausente"
|
||||
404:
|
||||
description: Configuração não encontrada
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Configuração não encontrada"
|
||||
81
docs/settings_gerais/get.yml
Normal file
81
docs/settings_gerais/get.yml
Normal file
@ -0,0 +1,81 @@
|
||||
tags:
|
||||
- Settings Gerais
|
||||
summary: Busca os detalhes de uma configuração geral
|
||||
description: >
|
||||
Essa rota permite obter os dados de uma configuração geral específica a partir do seu ID.
|
||||
parameters:
|
||||
- in: path
|
||||
name: settings_id
|
||||
required: true
|
||||
description: ID da configuração geral
|
||||
type: integer
|
||||
responses:
|
||||
200:
|
||||
description: Detalhes da configuração retornados com sucesso
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: integer
|
||||
tolerancia_entrada:
|
||||
type: integer
|
||||
tolerancia_saida:
|
||||
type: integer
|
||||
limite_diario_he:
|
||||
type: integer
|
||||
limite_mensal_he:
|
||||
type: integer
|
||||
limite_banco_horas_positivo:
|
||||
type: integer
|
||||
limite_banco_horas_negativo:
|
||||
type: integer
|
||||
validacao_reconhecimento_facial:
|
||||
type: string
|
||||
registro_remoto:
|
||||
type: string
|
||||
ajuste_colaborador:
|
||||
type: string
|
||||
dias_aprovacao_automatica:
|
||||
type: integer
|
||||
service_instance_id:
|
||||
type: integer
|
||||
examples:
|
||||
application/json:
|
||||
id: 1
|
||||
tolerancia_entrada: 10
|
||||
tolerancia_saida: 5
|
||||
limite_diario_he: 120
|
||||
limite_mensal_he: 2400
|
||||
limite_banco_horas_positivo: 800
|
||||
limite_banco_horas_negativo: -400
|
||||
validacao_reconhecimento_facial: "True"
|
||||
registro_remoto: "True"
|
||||
ajuste_colaborador: "False"
|
||||
dias_aprovacao_automatica: 3
|
||||
service_instance_id: 4
|
||||
401:
|
||||
description: Token inválido ou ausente
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Token inválido ou ausente"
|
||||
404:
|
||||
description: Configuração não encontrada
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Configuração não encontrada"
|
||||
76
docs/settings_gerais/list.yml
Normal file
76
docs/settings_gerais/list.yml
Normal file
@ -0,0 +1,76 @@
|
||||
tags:
|
||||
- Settings Gerais
|
||||
summary: Lista todas as configurações gerais
|
||||
description: >
|
||||
Essa rota permite listar todas as configurações gerais cadastradas.
|
||||
Pode-se filtrar por uma instância de serviço específica.
|
||||
parameters:
|
||||
- in: query
|
||||
name: service_instance_id
|
||||
required: false
|
||||
description: ID da instância de serviço para filtrar as configurações
|
||||
type: integer
|
||||
responses:
|
||||
200:
|
||||
description: Lista de configurações retornada com sucesso
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
settings_gerais_list:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: integer
|
||||
tolerancia_entrada:
|
||||
type: integer
|
||||
tolerancia_saida:
|
||||
type: integer
|
||||
limite_diario_he:
|
||||
type: integer
|
||||
limite_mensal_he:
|
||||
type: integer
|
||||
limite_banco_horas_positivo:
|
||||
type: integer
|
||||
limite_banco_horas_negativo:
|
||||
type: integer
|
||||
validacao_reconhecimento_facial:
|
||||
type: string
|
||||
registro_remoto:
|
||||
type: string
|
||||
ajuste_colaborador:
|
||||
type: string
|
||||
dias_aprovacao_automatica:
|
||||
type: integer
|
||||
service_instance_id:
|
||||
type: integer
|
||||
examples:
|
||||
application/json:
|
||||
settings_gerais_list:
|
||||
- id: 1
|
||||
tolerancia_entrada: 10
|
||||
tolerancia_saida: 5
|
||||
limite_diario_he: 120
|
||||
limite_mensal_he: 2400
|
||||
limite_banco_horas_positivo: 800
|
||||
limite_banco_horas_negativo: -400
|
||||
validacao_reconhecimento_facial: "True"
|
||||
registro_remoto: "True"
|
||||
ajuste_colaborador: "False"
|
||||
dias_aprovacao_automatica: 3
|
||||
service_instance_id: 4
|
||||
401:
|
||||
description: Token inválido ou ausente
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Token inválido ou ausente"
|
||||
111
docs/settings_gerais/update.yml
Normal file
111
docs/settings_gerais/update.yml
Normal file
@ -0,0 +1,111 @@
|
||||
tags:
|
||||
- Settings Gerais
|
||||
summary: Atualiza uma configuração geral existente
|
||||
description: >
|
||||
Essa rota permite atualizar os dados de uma configuração geral específica, associada a uma instância de serviço.
|
||||
parameters:
|
||||
- in: path
|
||||
name: settings_id
|
||||
required: true
|
||||
description: ID da configuração geral que será atualizada
|
||||
type: integer
|
||||
- in: body
|
||||
name: body
|
||||
description: Dados para atualização da configuração.
|
||||
required: true
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
tolerancia_entrada:
|
||||
type: integer
|
||||
description: Tolerância de entrada em minutos
|
||||
example: 10
|
||||
tolerancia_saida:
|
||||
type: integer
|
||||
description: Tolerância de saída em minutos
|
||||
example: 5
|
||||
limite_diario_he:
|
||||
type: integer
|
||||
description: Limite diário de horas extras em minutos
|
||||
example: 120
|
||||
limite_mensal_he:
|
||||
type: integer
|
||||
description: Limite mensal de horas extras em minutos
|
||||
example: 2400
|
||||
limite_banco_horas_positivo:
|
||||
type: integer
|
||||
description: Limite positivo do banco de horas
|
||||
example: 800
|
||||
limite_banco_horas_negativo:
|
||||
type: integer
|
||||
description: Limite negativo do banco de horas
|
||||
example: -400
|
||||
validacao_reconhecimento_facial:
|
||||
type: string
|
||||
description: Habilita ou não a validação facial
|
||||
example: "True"
|
||||
registro_remoto:
|
||||
type: string
|
||||
description: Permite ou não o registro remoto
|
||||
example: "True"
|
||||
ajuste_colaborador:
|
||||
type: string
|
||||
description: Permite ou não o ajuste pelo colaborador
|
||||
example: "False"
|
||||
dias_aprovacao_automatica:
|
||||
type: integer
|
||||
description: Número de dias para aprovação automática
|
||||
example: 3
|
||||
service_instance_id:
|
||||
type: integer
|
||||
description: ID da instância de serviço associada
|
||||
example: 4
|
||||
responses:
|
||||
200:
|
||||
description: Configuração atualizada com sucesso
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
message: "Configuração atualizada com sucesso"
|
||||
400:
|
||||
description: Requisição inválida (dados incorretos ou ausentes)
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Campos obrigatórios ausentes ou inválidos."
|
||||
401:
|
||||
description: Token inválido ou ausente
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Token inválido ou ausente"
|
||||
404:
|
||||
description: Configuração não encontrada
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Configuração não encontrada"
|
||||
77
docs/settings_integracoes/create.yml
Normal file
77
docs/settings_integracoes/create.yml
Normal file
@ -0,0 +1,77 @@
|
||||
tags:
|
||||
- Settings Integrações
|
||||
summary: Cria uma nova configuração de integrações
|
||||
description: >
|
||||
Essa rota permite criar uma configuração de integrações associada a uma instância de serviço.
|
||||
parameters:
|
||||
- in: body
|
||||
name: body
|
||||
description: Dados para a criação de uma nova configuração.
|
||||
required: true
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
integrar_folha_pagamento:
|
||||
type: string
|
||||
description: Habilita integração com folha de pagamento
|
||||
example: "True"
|
||||
exportar_dados:
|
||||
type: string
|
||||
description: Habilita exportação de dados
|
||||
example: "True"
|
||||
exportacao_csv:
|
||||
type: string
|
||||
description: Habilita exportação em formato CSV
|
||||
example: "True"
|
||||
exportacao_pdf:
|
||||
type: string
|
||||
description: Habilita exportação em formato PDF
|
||||
example: "False"
|
||||
integrar_calendario:
|
||||
type: string
|
||||
description: Habilita integração com calendários
|
||||
example: "True"
|
||||
service_instance_id:
|
||||
type: integer
|
||||
description: ID da instância de serviço associada
|
||||
example: 1
|
||||
responses:
|
||||
201:
|
||||
description: Configuração criada com sucesso
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
settings_id:
|
||||
type: integer
|
||||
examples:
|
||||
application/json:
|
||||
message: "Configuração de integrações criada com sucesso"
|
||||
settings_id: 1
|
||||
400:
|
||||
description: Requisição inválida (dados incorretos ou ausentes)
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Campos obrigatórios ausentes ou inválidos."
|
||||
401:
|
||||
description: Token inválido ou ausente
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Token inválido ou ausente"
|
||||
49
docs/settings_integracoes/delete.yml
Normal file
49
docs/settings_integracoes/delete.yml
Normal file
@ -0,0 +1,49 @@
|
||||
tags:
|
||||
- Settings Integrações
|
||||
summary: Deleta uma configuração de integrações existente
|
||||
description: >
|
||||
Essa rota permite deletar uma configuração de integrações especificada pelo ID.
|
||||
parameters:
|
||||
- in: path
|
||||
name: id
|
||||
required: true
|
||||
schema:
|
||||
type: integer
|
||||
description: ID da configuração que será deletada.
|
||||
responses:
|
||||
200:
|
||||
description: Configuração deletada com sucesso
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
message: "Configuração deletada com sucesso."
|
||||
401:
|
||||
description: Token inválido ou ausente
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Token inválido ou ausente"
|
||||
404:
|
||||
description: Configuração não encontrada
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Configuração não encontrada"
|
||||
67
docs/settings_integracoes/get.yml
Normal file
67
docs/settings_integracoes/get.yml
Normal file
@ -0,0 +1,67 @@
|
||||
tags:
|
||||
- Settings Integrações
|
||||
summary: Busca uma configuração de integrações por ID
|
||||
description: >
|
||||
Essa rota retorna os detalhes de uma configuração de integrações com base no ID informado.
|
||||
parameters:
|
||||
- in: path
|
||||
name: id
|
||||
required: true
|
||||
schema:
|
||||
type: integer
|
||||
description: ID da configuração de integrações.
|
||||
responses:
|
||||
200:
|
||||
description: Detalhes da configuração retornados com sucesso
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: integer
|
||||
integrar_folha_pagamento:
|
||||
type: string
|
||||
exportar_dados:
|
||||
type: string
|
||||
exportacao_csv:
|
||||
type: string
|
||||
exportacao_pdf:
|
||||
type: string
|
||||
integrar_calendario:
|
||||
type: string
|
||||
service_instance_id:
|
||||
type: integer
|
||||
examples:
|
||||
application/json:
|
||||
id: 1
|
||||
integrar_folha_pagamento: "True"
|
||||
exportar_dados: "True"
|
||||
exportacao_csv: "True"
|
||||
exportacao_pdf: "False"
|
||||
integrar_calendario: "True"
|
||||
service_instance_id: 1
|
||||
401:
|
||||
description: Token inválido ou ausente
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Token inválido ou ausente"
|
||||
404:
|
||||
description: Configuração não encontrada
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Configuração não encontrada"
|
||||
49
docs/settings_integracoes/list.yml
Normal file
49
docs/settings_integracoes/list.yml
Normal file
@ -0,0 +1,49 @@
|
||||
tags:
|
||||
- Settings Integrações
|
||||
summary: Lista todas as configurações de integrações
|
||||
description: >
|
||||
Essa rota retorna uma lista de todas as configurações de integrações cadastradas, podendo ser filtrada por instância de serviço.
|
||||
parameters:
|
||||
- in: query
|
||||
name: service_instance_id
|
||||
required: false
|
||||
schema:
|
||||
type: integer
|
||||
description: ID da instância de serviço para filtrar as configurações
|
||||
responses:
|
||||
200:
|
||||
description: Lista de configurações retornada com sucesso
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
settings_integracoes_list:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: integer
|
||||
integrar_folha_pagamento:
|
||||
type: string
|
||||
exportar_dados:
|
||||
type: string
|
||||
exportacao_csv:
|
||||
type: string
|
||||
exportacao_pdf:
|
||||
type: string
|
||||
integrar_calendario:
|
||||
type: string
|
||||
service_instance_id:
|
||||
type: integer
|
||||
examples:
|
||||
application/json:
|
||||
settings_integracoes_list:
|
||||
- id: 1
|
||||
integrar_folha_pagamento: "True"
|
||||
exportar_dados: "True"
|
||||
exportacao_csv: "True"
|
||||
exportacao_pdf: "False"
|
||||
integrar_calendario: "True"
|
||||
service_instance_id: 1
|
||||
86
docs/settings_integracoes/update.yml
Normal file
86
docs/settings_integracoes/update.yml
Normal file
@ -0,0 +1,86 @@
|
||||
tags:
|
||||
- Settings Integrações
|
||||
summary: Atualiza uma configuração de integrações existente
|
||||
description: >
|
||||
Essa rota permite atualizar uma configuração de integrações com base no ID informado.
|
||||
parameters:
|
||||
- in: path
|
||||
name: settings_id
|
||||
required: true
|
||||
schema:
|
||||
type: integer
|
||||
description: ID da configuração de integrações.
|
||||
- in: body
|
||||
name: body
|
||||
description: Dados para atualização da configuração.
|
||||
required: true
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
integrar_folha_pagamento:
|
||||
type: string
|
||||
example: "True"
|
||||
exportar_dados:
|
||||
type: string
|
||||
example: "True"
|
||||
exportacao_csv:
|
||||
type: string
|
||||
example: "True"
|
||||
exportacao_pdf:
|
||||
type: string
|
||||
example: "False"
|
||||
integrar_calendario:
|
||||
type: string
|
||||
example: "True"
|
||||
service_instance_id:
|
||||
type: integer
|
||||
example: 1
|
||||
responses:
|
||||
200:
|
||||
description: Configuração de integrações atualizada com sucesso
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
message: "Configuração de integrações atualizada com sucesso"
|
||||
400:
|
||||
description: Requisição inválida
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Campos obrigatórios ausentes ou inválidos."
|
||||
401:
|
||||
description: Token inválido ou ausente
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Token inválido ou ausente"
|
||||
404:
|
||||
description: Configuração não encontrada
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Configuração não encontrada"
|
||||
80
docs/settings_notificacoes/create.yml
Normal file
80
docs/settings_notificacoes/create.yml
Normal file
@ -0,0 +1,80 @@
|
||||
tags:
|
||||
- Settings Notificações
|
||||
summary: Cria uma nova configuração de notificações
|
||||
description: >
|
||||
Essa rota permite criar uma configuração de notificações associada a uma instância de serviço.
|
||||
parameters:
|
||||
- in: body
|
||||
name: body
|
||||
description: Dados para a criação de uma nova configuração de notificações.
|
||||
required: true
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
notificar_esquecimento_ponto:
|
||||
type: string
|
||||
example: "True"
|
||||
notificar_horas_extras:
|
||||
type: string
|
||||
example: "True"
|
||||
notificar_solicitacao_pendentes:
|
||||
type: string
|
||||
example: "True"
|
||||
notificar_banco_horas:
|
||||
type: string
|
||||
example: "True"
|
||||
notificar_gestor:
|
||||
type: string
|
||||
example: "False"
|
||||
relatorios_email:
|
||||
type: string
|
||||
example: "True"
|
||||
relatorios_diario_gestor:
|
||||
type: string
|
||||
example: "False"
|
||||
relatorios_semanal_colaboradores:
|
||||
type: string
|
||||
example: "True"
|
||||
service_instance_id:
|
||||
type: integer
|
||||
example: 1
|
||||
responses:
|
||||
201:
|
||||
description: Configuração criada com sucesso
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
settings_id:
|
||||
type: integer
|
||||
examples:
|
||||
application/json:
|
||||
message: "Configuração de notificações criada com sucesso"
|
||||
settings_id: 1
|
||||
400:
|
||||
description: Requisição inválida (dados incorretos ou ausentes)
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Campos obrigatórios ausentes ou inválidos."
|
||||
401:
|
||||
description: Token inválido ou ausente
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Token inválido ou ausente"
|
||||
49
docs/settings_notificacoes/delete.yml
Normal file
49
docs/settings_notificacoes/delete.yml
Normal file
@ -0,0 +1,49 @@
|
||||
tags:
|
||||
- Settings Notificações
|
||||
summary: Deleta uma configuração de notificações existente
|
||||
description: >
|
||||
Essa rota permite deletar uma configuração de notificações especificada pelo ID.
|
||||
parameters:
|
||||
- in: path
|
||||
name: id
|
||||
required: true
|
||||
schema:
|
||||
type: integer
|
||||
description: ID da configuração de notificações que será deletada.
|
||||
responses:
|
||||
200:
|
||||
description: Configuração deletada com sucesso
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
message: "Configuração deletada com sucesso."
|
||||
401:
|
||||
description: Token inválido ou ausente
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Token inválido ou ausente"
|
||||
404:
|
||||
description: Configuração não encontrada
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Configuração não encontrada"
|
||||
76
docs/settings_notificacoes/get.yml
Normal file
76
docs/settings_notificacoes/get.yml
Normal file
@ -0,0 +1,76 @@
|
||||
tags:
|
||||
- Settings Notificações
|
||||
summary: Busca uma configuração de notificações por ID
|
||||
description: >
|
||||
Essa rota retorna os detalhes de uma configuração de notificações com base no ID informado.
|
||||
parameters:
|
||||
- in: path
|
||||
name: id
|
||||
required: true
|
||||
schema:
|
||||
type: integer
|
||||
description: ID da configuração de notificações.
|
||||
responses:
|
||||
200:
|
||||
description: Detalhes da configuração retornados com sucesso
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: integer
|
||||
notificar_esquecimento_ponto:
|
||||
type: string
|
||||
notificar_horas_extras:
|
||||
type: string
|
||||
notificar_solicitacao_pendentes:
|
||||
type: string
|
||||
notificar_banco_horas:
|
||||
type: string
|
||||
notificar_gestor:
|
||||
type: string
|
||||
relatorios_email:
|
||||
type: string
|
||||
relatorios_diario_gestor:
|
||||
type: string
|
||||
relatorios_semanal_colaboradores:
|
||||
type: string
|
||||
service_instance_id:
|
||||
type: integer
|
||||
examples:
|
||||
application/json:
|
||||
id: 1
|
||||
notificar_esquecimento_ponto: "True"
|
||||
notificar_horas_extras: "True"
|
||||
notificar_solicitacao_pendentes: "True"
|
||||
notificar_banco_horas: "True"
|
||||
notificar_gestor: "False"
|
||||
relatorios_email: "True"
|
||||
relatorios_diario_gestor: "False"
|
||||
relatorios_semanal_colaboradores: "True"
|
||||
service_instance_id: 1
|
||||
401:
|
||||
description: Token inválido ou ausente
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Token inválido ou ausente"
|
||||
404:
|
||||
description: Configuração não encontrada
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Configuração não encontrada"
|
||||
82
docs/settings_notificacoes/list.yml
Normal file
82
docs/settings_notificacoes/list.yml
Normal file
@ -0,0 +1,82 @@
|
||||
tags:
|
||||
- Settings Notificações
|
||||
summary: Lista todas as configurações de notificações
|
||||
description: >
|
||||
Essa rota retorna uma lista de todas as configurações de notificações cadastradas, podendo ser filtrada por instância de serviço.
|
||||
parameters:
|
||||
- in: query
|
||||
name: service_instance_id
|
||||
required: false
|
||||
schema:
|
||||
type: integer
|
||||
description: ID da instância de serviço para filtrar as configurações
|
||||
responses:
|
||||
200:
|
||||
description: Lista de configurações retornada com sucesso
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
settings_notificacoes_list:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: integer
|
||||
notificar_esquecimento_ponto:
|
||||
type: string
|
||||
notificar_horas_extras:
|
||||
type: string
|
||||
notificar_solicitacao_pendentes:
|
||||
type: string
|
||||
notificar_banco_horas:
|
||||
type: string
|
||||
notificar_gestor:
|
||||
type: string
|
||||
relatorios_email:
|
||||
type: string
|
||||
relatorios_diario_gestor:
|
||||
type: string
|
||||
relatorios_semanal_colaboradores:
|
||||
type: string
|
||||
service_instance_id:
|
||||
type: integer
|
||||
examples:
|
||||
application/json:
|
||||
settings_notificacoes_list:
|
||||
- id: 1
|
||||
notificar_esquecimento_ponto: "True"
|
||||
notificar_horas_extras: "True"
|
||||
notificar_solicitacao_pendentes: "True"
|
||||
notificar_banco_horas: "True"
|
||||
notificar_gestor: "False"
|
||||
relatorios_email: "True"
|
||||
relatorios_diario_gestor: "False"
|
||||
relatorios_semanal_colaboradores: "True"
|
||||
service_instance_id: 1
|
||||
401:
|
||||
description: Token inválido ou ausente
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Token inválido ou ausente"
|
||||
400:
|
||||
description: Requisição inválida
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Parâmetro inválido ou ausente"
|
||||
95
docs/settings_notificacoes/update.yml
Normal file
95
docs/settings_notificacoes/update.yml
Normal file
@ -0,0 +1,95 @@
|
||||
tags:
|
||||
- Settings Notificações
|
||||
summary: Atualiza uma configuração de notificações existente
|
||||
description: >
|
||||
Essa rota permite atualizar uma configuração de notificações especificada pelo ID.
|
||||
parameters:
|
||||
- in: path
|
||||
name: settings_id
|
||||
required: true
|
||||
schema:
|
||||
type: integer
|
||||
description: ID da configuração que será atualizada.
|
||||
- in: body
|
||||
name: body
|
||||
description: Dados para a atualização da configuração de notificações.
|
||||
required: true
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
notificar_esquecimento_ponto:
|
||||
type: string
|
||||
example: "True"
|
||||
notificar_horas_extras:
|
||||
type: string
|
||||
example: "True"
|
||||
notificar_solicitacao_pendentes:
|
||||
type: string
|
||||
example: "True"
|
||||
notificar_banco_horas:
|
||||
type: string
|
||||
example: "True"
|
||||
notificar_gestor:
|
||||
type: string
|
||||
example: "False"
|
||||
relatorios_email:
|
||||
type: string
|
||||
example: "True"
|
||||
relatorios_diario_gestor:
|
||||
type: string
|
||||
example: "False"
|
||||
relatorios_semanal_colaboradores:
|
||||
type: string
|
||||
example: "True"
|
||||
service_instance_id:
|
||||
type: integer
|
||||
example: 1
|
||||
responses:
|
||||
200:
|
||||
description: Configuração de notificações atualizada com sucesso
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
message: "Configuração de notificações atualizada com sucesso"
|
||||
400:
|
||||
description: Requisição inválida
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Campos obrigatórios ausentes ou inválidos."
|
||||
401:
|
||||
description: Token inválido ou ausente
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Token inválido ou ausente"
|
||||
404:
|
||||
description: Configuração não encontrada
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
examples:
|
||||
application/json:
|
||||
error: "Configuração não encontrada"
|
||||
@ -7,8 +7,6 @@ class Holiday(db.Model):
|
||||
name = db.Column(db.String(80), unique=True, nullable=True)
|
||||
type = db.Column(db.String(80), nullable=True)
|
||||
date = db.Column(db.Date, nullable=True)
|
||||
estado = db.Column(db.String(80), nullable=True)
|
||||
municipio = db.Column(db.String(80), nullable=True)
|
||||
recorrente = db.Column(db.Boolean, default=True, nullable=False) # Se o feriado é recorrente (todo ano)
|
||||
adicional_he = db.Column(db.Integer, nullable=False) # Percentual adicional de horas extras (%)
|
||||
|
||||
|
||||
18
models/settings_calculo_horas.py
Normal file
18
models/settings_calculo_horas.py
Normal file
@ -0,0 +1,18 @@
|
||||
from extensions import db
|
||||
|
||||
class SettingsCalculoHoras(db.Model):
|
||||
__tablename__ = "settings_calculo_horas"
|
||||
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
|
||||
jornada_diaria = db.Column(db.Integer, nullable=True)
|
||||
jornada_semanal = db.Column(db.Integer, nullable=True)
|
||||
inicio_periodo_noturno = db.Column(db.Time, nullable=False)
|
||||
fim_periodo_noturno = db.Column(db.Time, nullable=False)
|
||||
desconto_atraso_automatico = db.Column(db.String(255), default=False)
|
||||
tolerancia_para_descontos = db.Column(db.Integer, nullable=True)
|
||||
arredondamento_minutos = db.Column(db.Integer, nullable=True)
|
||||
|
||||
service_instance_id = db.Column(db.Integer, db.ForeignKey('service_instance.id'), nullable=False)
|
||||
|
||||
|
||||
def __repr__(self):
|
||||
return f"<SettingsCalculoHoras id={self.id} service_instance_id={self.service_instance_id}>"
|
||||
25
models/settings_gerais.py
Normal file
25
models/settings_gerais.py
Normal file
@ -0,0 +1,25 @@
|
||||
from extensions import db
|
||||
|
||||
class SettingsGerais(db.Model):
|
||||
__tablename__ = "settings_gerais"
|
||||
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
|
||||
tolerancia_entrada = db.Column(db.Integer, nullable=True) # Tolerância de entrada em minutos
|
||||
tolerancia_saida = db.Column(db.Integer, nullable=True) # Tolerância de saída em minutos
|
||||
limite_diario_he = db.Column(db.Integer, nullable=True) # Limite diário de horas extras
|
||||
limite_mensal_he = db.Column(db.Integer, nullable=True) # Limite mensal de horas extras
|
||||
limite_banco_horas_positivo = db.Column(db.Integer, nullable=True) # Limite de banco de horas positivo
|
||||
limite_banco_horas_negativo = db.Column(db.Integer, nullable=True) # Limite de banco de horas negativo
|
||||
validacao_reconhecimento_facial = db.Column(db.String(255), default=False) # Validação de reconhecimento facial
|
||||
registro_remoto = db.Column(db.String(255), default=False) # Registro remoto
|
||||
ajuste_colaborador = db.Column(db.String(255), default=False) # Ajuste colaborador
|
||||
dias_aprovacao_automatica = db.Column(db.Integer, nullable=True) # Dias para aprovação automática
|
||||
|
||||
|
||||
service_instance_id = db.Column(db.Integer, db.ForeignKey('service_instance.id'), nullable=False)
|
||||
|
||||
|
||||
def __repr__(self):
|
||||
return f"<SettingsGerais id={self.id} service_instance_id={self.service_instance_id}>"
|
||||
|
||||
|
||||
|
||||
16
models/settings_integracoes.py
Normal file
16
models/settings_integracoes.py
Normal file
@ -0,0 +1,16 @@
|
||||
from extensions import db
|
||||
|
||||
class SettingsIntegracoes(db.Model):
|
||||
__tablename__ = "settings_integracoes"
|
||||
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
|
||||
integrar_folha_pagamento = db.Column(db.String(255), default=False)
|
||||
exportar_dados = db.Column(db.String(255), default=False)
|
||||
exportacao_csv = db.Column(db.String(255), default=False)
|
||||
exportacao_pdf = db.Column(db.String(255), default=False)
|
||||
integrar_calendario = db.Column(db.String(255), default=False)
|
||||
#----------------------------------------------------
|
||||
service_instance_id = db.Column(db.Integer, db.ForeignKey('service_instance.id'), nullable=False)
|
||||
|
||||
|
||||
def __repr__(self):
|
||||
return f"<SettingsIntegracoes id={self.id} service_instance_id={self.service_instance_id}>"
|
||||
20
models/settings_notificacoes.py
Normal file
20
models/settings_notificacoes.py
Normal file
@ -0,0 +1,20 @@
|
||||
from extensions import db
|
||||
|
||||
class SettingsNotificacoes(db.Model):
|
||||
__tablename__ = "settings_notificacoes"
|
||||
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
|
||||
notificar_esquecimento_ponto = db.Column(db.String(255), default=False)
|
||||
notificar_horas_extras = db.Column(db.String(255), default=False)
|
||||
notificar_solicitacao_pendentes = db.Column(db.String(255), default=False)
|
||||
notificar_banco_horas = db.Column(db.String(255), default=False)
|
||||
notificar_gestor = db.Column(db.String(255), default=False)
|
||||
#---------------------------------------------------
|
||||
relatorios_email = db.Column(db.String(255), default=False)
|
||||
relatorios_diario_gestor = db.Column(db.String(255), default=False)
|
||||
relatorios_semanal_colaboradores = db.Column(db.String(255), default=False)
|
||||
#----------------------------------------------------
|
||||
service_instance_id = db.Column(db.Integer, db.ForeignKey('service_instance.id'), nullable=False)
|
||||
|
||||
|
||||
def __repr__(self):
|
||||
return f"<SettingsNotificacoes id={self.id} service_instance_id={self.service_instance_id}>"
|
||||
@ -2,28 +2,39 @@ from datetime import datetime
|
||||
from sqlalchemy import Column, Integer, String, ForeignKey, Time
|
||||
from sqlalchemy.orm import relationship
|
||||
from extensions import db
|
||||
from models.time_schedule import TimeSchedule # Certo!
|
||||
|
||||
# 🔗 Tabela de associação many-to-many
|
||||
shift_time_schedule = db.Table(
|
||||
'shift_time_schedule',
|
||||
db.Column('shift_id', db.Integer, db.ForeignKey('shift.id'), primary_key=True),
|
||||
db.Column('time_schedule_id', db.Integer, db.ForeignKey('time_schedules.id'), primary_key=True)
|
||||
)
|
||||
|
||||
class Shift(db.Model):
|
||||
__tablename__ = 'shift'
|
||||
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
service_instance_id = db.Column(db.Integer, db.ForeignKey('service_instance.id'), nullable=False) # Relaciona com ServiceInstance
|
||||
name = db.Column(db.String(50), nullable=False) # Nome do turno (Manhã, Tarde, etc.)
|
||||
|
||||
day = db.Column(db.String(20), nullable=False) # Ex: Segunda, Terça
|
||||
service_instance_id = db.Column(db.Integer, db.ForeignKey('service_instance.id'), nullable=False)
|
||||
name = db.Column(db.String(50), nullable=False)
|
||||
|
||||
start_time = db.Column(db.Time, nullable=False)
|
||||
end_time = db.Column(db.Time, nullable=False)
|
||||
|
||||
interval_start = db.Column(db.Time, nullable=True)
|
||||
interval_end = db.Column(db.Time, nullable=True)
|
||||
|
||||
type_interval = db.Column(db.String(50), nullable=False)
|
||||
description = db.Column(db.String(255), nullable=True) # Descrição do turno
|
||||
tolerance = db.Column(db.Integer, nullable=True) # Tolerância em minutos
|
||||
|
||||
# Relacionamento com o modelo TimeSchedule
|
||||
time_schedules = db.relationship('TimeSchedule', backref='shifts', lazy=True)
|
||||
# 🗓️ Relacionamento com os dias (TimeSchedule usados como dias da semana)
|
||||
time_schedules = db.relationship(
|
||||
'TimeSchedule',
|
||||
secondary=shift_time_schedule,
|
||||
backref='shifts',
|
||||
lazy='subquery'
|
||||
)
|
||||
|
||||
# Relacionamento com o modelo Record, utilizando a chave estrangeira corretamente
|
||||
# Relacionamento com records
|
||||
records = db.relationship("Record", back_populates="shifts", lazy=True)
|
||||
|
||||
def __repr__(self):
|
||||
|
||||
@ -4,13 +4,11 @@ from datetime import datetime
|
||||
# Modelo para TimeSchedule (Horários dentro de um turno)
|
||||
class TimeSchedule(db.Model):
|
||||
__tablename__ = 'time_schedules'
|
||||
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
shift_id = db.Column(db.Integer, db.ForeignKey('shift.id'), nullable=False) # Relaciona com Shift
|
||||
start_time = db.Column(db.Time, nullable=False) # Hora de início do time slot
|
||||
end_time = db.Column(db.Time, nullable=False) # Hora de término do time slot
|
||||
description = db.Column(db.String(255)) # Descrição do time schedule (ex: 'Almoço')
|
||||
name = db.Column(db.String(20), nullable=False, unique=True) # Ex: Segunda, Terça, etc.
|
||||
records = db.relationship("Record", back_populates="schedule")
|
||||
|
||||
|
||||
def __repr__(self):
|
||||
return f'<TimeSchedule {self.description} ({self.start_time} - {self.end_time})>'
|
||||
return f'<TimeSchedule {self.name}>'
|
||||
|
||||
@ -16,8 +16,6 @@ def create_holiday():
|
||||
name = data.get('name')
|
||||
type = data.get('type')
|
||||
date = data.get('date')
|
||||
estado = data.get('estado')
|
||||
municipio = data.get('municipio')
|
||||
parent_id = data.get('parent_id')
|
||||
adicional_he = data.get('adicional_he')
|
||||
recorrente = data.get('recorrente', True) # Default True se não enviado
|
||||
@ -27,8 +25,6 @@ def create_holiday():
|
||||
name=name,
|
||||
type=type,
|
||||
date=date,
|
||||
estado=estado,
|
||||
municipio=municipio,
|
||||
parent_id=parent_id,
|
||||
service_instance_id=service_instance_id,
|
||||
recorrente=recorrente,
|
||||
@ -54,14 +50,14 @@ def update_holiday(holiday_id):
|
||||
holiday.date = data['date']
|
||||
if 'type' in data:
|
||||
holiday.type = data['type']
|
||||
if 'estado' in data:
|
||||
holiday.estado = data['estado']
|
||||
if 'municipio' in data:
|
||||
holiday.municipio = data['municipio']
|
||||
if 'service_instance_id' in data:
|
||||
# Validação para garantir que a instância de serviço existe
|
||||
ServiceInstance.query.get_or_404(data['service_instance_id'])
|
||||
holiday.service_instance_id = data['service_instance_id']
|
||||
if 'adicional_he' in data:
|
||||
holiday.adicional_he = data['adicional_he']
|
||||
if 'recorrente' in data:
|
||||
holiday.recorrente = data['recorrente']
|
||||
|
||||
db.session.commit()
|
||||
return jsonify({'message': 'Feriado atualizado com sucesso'}), 200
|
||||
@ -81,8 +77,6 @@ def list_holiday():
|
||||
'holiday_list': [{
|
||||
'id': holiday.id,
|
||||
'name': holiday.name,
|
||||
'estado': holiday.estado,
|
||||
'municipio': holiday.municipio,
|
||||
'type': holiday.type,
|
||||
'date': holiday.date.strftime("%Y-%m-%d") if holiday.date else None,
|
||||
'parent_id': holiday.parent_id,
|
||||
@ -102,12 +96,11 @@ def get_holiday_id(holiday_id):
|
||||
return jsonify({
|
||||
'id': holiday.id,
|
||||
'name': holiday.name,
|
||||
'estado': holiday.estado,
|
||||
'municipio': holiday.municipio,
|
||||
'type': holiday.type,
|
||||
'date': holiday.date.strftime("%Y-%m-%d") if holiday.date else None,
|
||||
'parent_id': holiday.parent_id,
|
||||
'service_instance_id': holiday.service_instance_id
|
||||
'service_instance_id': holiday.service_instance_id,
|
||||
'adicional_he': holiday.adicional_he,
|
||||
}), 200
|
||||
|
||||
# Deletar feriado
|
||||
|
||||
116
routes/settings_calculo_horas.py
Normal file
116
routes/settings_calculo_horas.py
Normal file
@ -0,0 +1,116 @@
|
||||
from flask import Blueprint, request, jsonify
|
||||
from flask_jwt_extended import jwt_required
|
||||
from flasgger.utils import swag_from
|
||||
from models.user import db
|
||||
from models.settings_calculo_horas import SettingsCalculoHoras
|
||||
|
||||
settings_calculo_horas_bp = Blueprint('settings_calculo_horas', __name__, url_prefix='/settings_calculo_horas')
|
||||
|
||||
# Criar configurações de cálculo de horas
|
||||
@settings_calculo_horas_bp.route('/', methods=['POST'])
|
||||
@jwt_required()
|
||||
@swag_from('../docs/settings_calculo_horas/create.yml')
|
||||
def create_settings_calculo_horas():
|
||||
data = request.get_json()
|
||||
|
||||
settings = SettingsCalculoHoras(
|
||||
jornada_diaria=data.get('jornada_diaria'),
|
||||
jornada_semanal=data.get('jornada_semanal'),
|
||||
inicio_periodo_noturno=data['inicio_periodo_noturno'],
|
||||
fim_periodo_noturno=data['fim_periodo_noturno'],
|
||||
desconto_atraso_automatico=data.get('desconto_atraso_automatico', False),
|
||||
tolerancia_para_descontos=data.get('tolerancia_para_descontos'),
|
||||
arredondamento_minutos=data.get('arredondamento_minutos'),
|
||||
service_instance_id=data['service_instance_id']
|
||||
)
|
||||
|
||||
db.session.add(settings)
|
||||
db.session.commit()
|
||||
|
||||
return jsonify({'message': 'Configuração criada com sucesso', 'settings_id': settings.id}), 201
|
||||
|
||||
# Atualizar configurações de cálculo de horas
|
||||
@settings_calculo_horas_bp.route('/<int:settings_id>', methods=['PUT'])
|
||||
@jwt_required()
|
||||
@swag_from('../docs/settings_calculo_horas/update.yml')
|
||||
def update_settings_calculo_horas(settings_id):
|
||||
data = request.get_json()
|
||||
settings = SettingsCalculoHoras.query.get_or_404(settings_id)
|
||||
|
||||
if 'jornada_diaria' in data:
|
||||
settings.jornada_diaria = data['jornada_diaria']
|
||||
if 'jornada_semanal' in data:
|
||||
settings.jornada_semanal = data['jornada_semanal']
|
||||
if 'inicio_periodo_noturno' in data:
|
||||
settings.inicio_periodo_noturno = data['inicio_periodo_noturno']
|
||||
if 'fim_periodo_noturno' in data:
|
||||
settings.fim_periodo_noturno = data['fim_periodo_noturno']
|
||||
if 'desconto_atraso_automatico' in data:
|
||||
settings.desconto_atraso_automatico = data['desconto_atraso_automatico']
|
||||
if 'tolerancia_para_descontos' in data:
|
||||
settings.tolerancia_para_descontos = data['tolerancia_para_descontos']
|
||||
if 'arredondamento_minutos' in data:
|
||||
settings.arredondamento_minutos = data['arredondamento_minutos']
|
||||
if 'service_instance_id' in data:
|
||||
from models import ServiceInstance # Evita import circular se necessário
|
||||
ServiceInstance.query.get_or_404(data['service_instance_id'])
|
||||
settings.service_instance_id = data['service_instance_id']
|
||||
|
||||
db.session.commit()
|
||||
return jsonify({'message': 'Configuração atualizada com sucesso'}), 200
|
||||
|
||||
# Listar configurações de cálculo de horas
|
||||
@settings_calculo_horas_bp.route('/', methods=['GET'])
|
||||
@jwt_required()
|
||||
@swag_from('../docs/settings_calculo_horas/list.yml')
|
||||
def list_settings_calculo_horas():
|
||||
service_instance_id = request.args.get('service_instance_id')
|
||||
|
||||
if service_instance_id:
|
||||
settings_list = SettingsCalculoHoras.query.filter_by(service_instance_id=service_instance_id).all()
|
||||
else:
|
||||
settings_list = SettingsCalculoHoras.query.all()
|
||||
|
||||
return jsonify({
|
||||
'settings_calculo_horas_list': [
|
||||
{
|
||||
'id': s.id,
|
||||
'jornada_diaria': s.jornada_diaria,
|
||||
'jornada_semanal': s.jornada_semanal,
|
||||
'inicio_periodo_noturno': s.inicio_periodo_noturno.isoformat(),
|
||||
'fim_periodo_noturno': s.fim_periodo_noturno.isoformat(),
|
||||
'desconto_atraso_automatico': s.desconto_atraso_automatico,
|
||||
'tolerancia_para_descontos': s.tolerancia_para_descontos,
|
||||
'arredondamento_minutos': s.arredondamento_minutos,
|
||||
'service_instance_id': s.service_instance_id
|
||||
} for s in settings_list
|
||||
]
|
||||
}), 200
|
||||
|
||||
# Obter configuração por ID
|
||||
@settings_calculo_horas_bp.route('/<int:id>', methods=['GET'])
|
||||
@jwt_required()
|
||||
@swag_from('../docs/settings_calculo_horas/get.yml')
|
||||
def get_settings_calculo_horas_by_id(id):
|
||||
s = SettingsCalculoHoras.query.get_or_404(id)
|
||||
return jsonify({
|
||||
'id': s.id,
|
||||
'jornada_diaria': s.jornada_diaria,
|
||||
'jornada_semanal': s.jornada_semanal,
|
||||
'inicio_periodo_noturno': s.inicio_periodo_noturno.isoformat(),
|
||||
'fim_periodo_noturno': s.fim_periodo_noturno.isoformat(),
|
||||
'desconto_atraso_automatico': s.desconto_atraso_automatico,
|
||||
'tolerancia_para_descontos': s.tolerancia_para_descontos,
|
||||
'arredondamento_minutos': s.arredondamento_minutos,
|
||||
'service_instance_id': s.service_instance_id
|
||||
}), 200
|
||||
|
||||
# Deletar configuração
|
||||
@settings_calculo_horas_bp.route('/<int:id>', methods=['DELETE'])
|
||||
@jwt_required()
|
||||
@swag_from('../docs/settings_calculo_horas/delete.yml')
|
||||
def delete_settings_calculo_horas(id):
|
||||
s = SettingsCalculoHoras.query.get_or_404(id)
|
||||
db.session.delete(s)
|
||||
db.session.commit()
|
||||
return jsonify({'message': 'Configuração deletada com sucesso.'}), 200
|
||||
140
routes/settings_gerais.py
Normal file
140
routes/settings_gerais.py
Normal file
@ -0,0 +1,140 @@
|
||||
from flask import Blueprint, request, jsonify
|
||||
from flask_jwt_extended import jwt_required
|
||||
from flasgger.utils import swag_from
|
||||
from models.user import db
|
||||
from models.settings_gerais import SettingsGerais
|
||||
|
||||
settings_gerais_bp = Blueprint('settings_gerais', __name__, url_prefix='/settings_gerais')
|
||||
|
||||
# Criar configurações gerais
|
||||
@settings_gerais_bp.route('/', methods=['POST'])
|
||||
@jwt_required()
|
||||
@swag_from('../docs/settings_gerais/create.yml')
|
||||
def create_settings_gerais():
|
||||
data = request.get_json()
|
||||
tolerancia_entrada = data.get('tolerancia_entrada')
|
||||
tolerancia_saida = data.get('tolerancia_saida')
|
||||
limite_diario_he = data.get('limite_diario_he')
|
||||
limite_mensal_he = data.get('limite_mensal_he')
|
||||
limite_banco_horas_positivo = data.get('limite_banco_horas_positivo')
|
||||
limite_banco_horas_negativo = data.get('limite_banco_horas_negativo')
|
||||
validacao_reconhecimento_facial = data.get('validacao_reconhecimento_facial', False)
|
||||
registro_remoto = data.get('registro_remoto', False)
|
||||
ajuste_colaborador = data.get('ajuste_colaborador', False)
|
||||
dias_aprovacao_automatica = data.get('dias_aprovacao_automatica')
|
||||
service_instance_id = data.get('service_instance_id')
|
||||
|
||||
settings = SettingsGerais(
|
||||
tolerancia_entrada=tolerancia_entrada,
|
||||
tolerancia_saida=tolerancia_saida,
|
||||
limite_diario_he=limite_diario_he,
|
||||
limite_mensal_he=limite_mensal_he,
|
||||
limite_banco_horas_positivo=limite_banco_horas_positivo,
|
||||
limite_banco_horas_negativo=limite_banco_horas_negativo,
|
||||
validacao_reconhecimento_facial=validacao_reconhecimento_facial,
|
||||
registro_remoto=registro_remoto,
|
||||
ajuste_colaborador=ajuste_colaborador,
|
||||
dias_aprovacao_automatica=dias_aprovacao_automatica,
|
||||
service_instance_id=service_instance_id
|
||||
)
|
||||
|
||||
db.session.add(settings)
|
||||
db.session.commit()
|
||||
|
||||
return jsonify({'message': 'Configuração criada com sucesso', 'settings_id': settings.id}), 201
|
||||
|
||||
# Atualizar configurações gerais
|
||||
@settings_gerais_bp.route('/<int:settings_id>', methods=['PUT'])
|
||||
@jwt_required()
|
||||
@swag_from('../docs/settings_gerais/update.yml')
|
||||
def update_settings_gerais(settings_id):
|
||||
data = request.get_json()
|
||||
settings = SettingsGerais.query.get_or_404(settings_id)
|
||||
|
||||
if 'tolerancia_entrada' in data:
|
||||
settings.tolerancia_entrada = data['tolerancia_entrada']
|
||||
if 'tolerancia_saida' in data:
|
||||
settings.tolerancia_saida = data['tolerancia_saida']
|
||||
if 'limite_diario_he' in data:
|
||||
settings.limite_diario_he = data['limite_diario_he']
|
||||
if 'limite_mensal_he' in data:
|
||||
settings.limite_mensal_he = data['limite_mensal_he']
|
||||
if 'limite_banco_horas_positivo' in data:
|
||||
settings.limite_banco_horas_positivo = data['limite_banco_horas_positivo']
|
||||
if 'limite_banco_horas_negativo' in data:
|
||||
settings.limite_banco_horas_negativo = data['limite_banco_horas_negativo']
|
||||
if 'validacao_reconhecimento_facial' in data:
|
||||
settings.validacao_reconhecimento_facial = data['validacao_reconhecimento_facial']
|
||||
if 'registro_remoto' in data:
|
||||
settings.registro_remoto = data['registro_remoto']
|
||||
if 'ajuste_colaborador' in data:
|
||||
settings.ajuste_colaborador = data['ajuste_colaborador']
|
||||
if 'dias_aprovacao_automatica' in data:
|
||||
settings.dias_aprovacao_automatica = data['dias_aprovacao_automatica']
|
||||
if 'service_instance_id' in data:
|
||||
# Verifica se a nova instância de serviço existe
|
||||
from models import ServiceInstance # Evita import circular se necessário
|
||||
ServiceInstance.query.get_or_404(data['service_instance_id'])
|
||||
settings.service_instance_id = data['service_instance_id']
|
||||
|
||||
db.session.commit()
|
||||
return jsonify({'message': 'Configuração atualizada com sucesso'}), 200
|
||||
|
||||
# Listar configurações gerais
|
||||
@settings_gerais_bp.route('/', methods=['GET'])
|
||||
@jwt_required()
|
||||
@swag_from('../docs/settings_gerais/list.yml')
|
||||
def list_settings_gerais():
|
||||
service_instance_id = request.args.get('service_instance_id')
|
||||
|
||||
if service_instance_id:
|
||||
settings_list = SettingsGerais.query.filter_by(service_instance_id=service_instance_id).all()
|
||||
else:
|
||||
settings_list = SettingsGerais.query.all()
|
||||
|
||||
return jsonify({
|
||||
'settings_gerais_list': [{
|
||||
'id': settings.id,
|
||||
'tolerancia_entrada': settings.tolerancia_entrada,
|
||||
'tolerancia_saida': settings.tolerancia_saida,
|
||||
'limite_diario_he': settings.limite_diario_he,
|
||||
'limite_mensal_he': settings.limite_mensal_he,
|
||||
'limite_banco_horas_positivo': settings.limite_banco_horas_positivo,
|
||||
'limite_banco_horas_negativo': settings.limite_banco_horas_negativo,
|
||||
'validacao_reconhecimento_facial': settings.validacao_reconhecimento_facial,
|
||||
'registro_remoto': settings.registro_remoto,
|
||||
'ajuste_colaborador': settings.ajuste_colaborador,
|
||||
'dias_aprovacao_automatica': settings.dias_aprovacao_automatica,
|
||||
'service_instance_id': settings.service_instance_id
|
||||
} for settings in settings_list]
|
||||
}), 200
|
||||
|
||||
|
||||
@settings_gerais_bp.route('/<int:id>', methods=['GET'])
|
||||
@jwt_required()
|
||||
@swag_from('../docs/settings_gerais/get.yml')
|
||||
def get_settings_by_id(id):
|
||||
s = SettingsGerais.query.get_or_404(id)
|
||||
return jsonify({
|
||||
'id': s.id,
|
||||
'tolerancia_entrada': s.tolerancia_entrada,
|
||||
'tolerancia_saida': s.tolerancia_saida,
|
||||
'limite_diario_he': s.limite_diario_he,
|
||||
'limite_mensal_he': s.limite_mensal_he,
|
||||
'limite_banco_horas_positivo': s.limite_banco_horas_positivo,
|
||||
'limite_banco_horas_negativo': s.limite_banco_horas_negativo,
|
||||
'validacao_reconhecimento_facial': s.validacao_reconhecimento_facial,
|
||||
'registro_remoto': s.registro_remoto,
|
||||
'ajuste_colaborador': s.ajuste_colaborador,
|
||||
'dias_aprovacao_automatica': s.dias_aprovacao_automatica,
|
||||
'service_instance_id': s.service_instance_id
|
||||
}), 200
|
||||
|
||||
@settings_gerais_bp.route('/<int:id>', methods=['DELETE'])
|
||||
@jwt_required()
|
||||
@swag_from('../docs/settings_gerais/delete.yml')
|
||||
def delete_settings(id):
|
||||
s = SettingsGerais.query.get_or_404(id)
|
||||
db.session.delete(s)
|
||||
db.session.commit()
|
||||
return jsonify({'message': 'Configuração deletada com sucesso.'}), 200
|
||||
113
routes/settings_integracoes.py
Normal file
113
routes/settings_integracoes.py
Normal file
@ -0,0 +1,113 @@
|
||||
from flask import Blueprint, request, jsonify
|
||||
from flask_jwt_extended import jwt_required
|
||||
from flasgger.utils import swag_from
|
||||
from models.user import db
|
||||
from models.settings_integracoes import SettingsIntegracoes
|
||||
|
||||
settings_integracoes_bp = Blueprint('settings_integracoes', __name__, url_prefix='/settings_integracoes')
|
||||
|
||||
# Criar configuração de integrações
|
||||
@settings_integracoes_bp.route('/', methods=['POST'])
|
||||
@jwt_required()
|
||||
@swag_from('../docs/settings_integracoes/create.yml')
|
||||
def create_settings_integracoes():
|
||||
data = request.get_json()
|
||||
|
||||
integrar_folha_pagamento = data.get('integrar_folha_pagamento', False)
|
||||
exportar_dados = data.get('exportar_dados', False)
|
||||
exportacao_csv = data.get('exportacao_csv', False)
|
||||
exportacao_pdf = data.get('exportacao_pdf', False)
|
||||
integrar_calendario = data.get('integrar_calendario', False)
|
||||
service_instance_id = data.get('service_instance_id')
|
||||
|
||||
settings = SettingsIntegracoes(
|
||||
integrar_folha_pagamento=integrar_folha_pagamento,
|
||||
exportar_dados=exportar_dados,
|
||||
exportacao_csv=exportacao_csv,
|
||||
exportacao_pdf=exportacao_pdf,
|
||||
integrar_calendario=integrar_calendario,
|
||||
service_instance_id=service_instance_id
|
||||
)
|
||||
|
||||
db.session.add(settings)
|
||||
db.session.commit()
|
||||
|
||||
return jsonify({'message': 'Configuração de integrações criada com sucesso', 'settings_id': settings.id}), 201
|
||||
|
||||
# Atualizar configuração
|
||||
@settings_integracoes_bp.route('/<int:settings_id>', methods=['PUT'])
|
||||
@jwt_required()
|
||||
@swag_from('../docs/settings_integracoes/update.yml')
|
||||
def update_settings_integracoes(settings_id):
|
||||
data = request.get_json()
|
||||
settings = SettingsIntegracoes.query.get_or_404(settings_id)
|
||||
|
||||
if 'integrar_folha_pagamento' in data:
|
||||
settings.integrar_folha_pagamento = data['integrar_folha_pagamento']
|
||||
if 'exportar_dados' in data:
|
||||
settings.exportar_dados = data['exportar_dados']
|
||||
if 'exportacao_csv' in data:
|
||||
settings.exportacao_csv = data['exportacao_csv']
|
||||
if 'exportacao_pdf' in data:
|
||||
settings.exportacao_pdf = data['exportacao_pdf']
|
||||
if 'integrar_calendario' in data:
|
||||
settings.integrar_calendario = data['integrar_calendario']
|
||||
if 'service_instance_id' in data:
|
||||
from models import ServiceInstance
|
||||
ServiceInstance.query.get_or_404(data['service_instance_id'])
|
||||
settings.service_instance_id = data['service_instance_id']
|
||||
|
||||
db.session.commit()
|
||||
return jsonify({'message': 'Configuração de integrações atualizada com sucesso'}), 200
|
||||
|
||||
# Listar configurações
|
||||
@settings_integracoes_bp.route('/', methods=['GET'])
|
||||
@jwt_required()
|
||||
@swag_from('../docs/settings_integracoes/list.yml')
|
||||
def list_settings_integracoes():
|
||||
service_instance_id = request.args.get('service_instance_id')
|
||||
|
||||
if service_instance_id:
|
||||
settings_list = SettingsIntegracoes.query.filter_by(service_instance_id=service_instance_id).all()
|
||||
else:
|
||||
settings_list = SettingsIntegracoes.query.all()
|
||||
|
||||
return jsonify({
|
||||
'settings_integracoes_list': [
|
||||
{
|
||||
'id': s.id,
|
||||
'integrar_folha_pagamento': s.integrar_folha_pagamento,
|
||||
'exportar_dados': s.exportar_dados,
|
||||
'exportacao_csv': s.exportacao_csv,
|
||||
'exportacao_pdf': s.exportacao_pdf,
|
||||
'integrar_calendario': s.integrar_calendario,
|
||||
'service_instance_id': s.service_instance_id
|
||||
} for s in settings_list
|
||||
]
|
||||
}), 200
|
||||
|
||||
# Obter por ID
|
||||
@settings_integracoes_bp.route('/<int:id>', methods=['GET'])
|
||||
@jwt_required()
|
||||
@swag_from('../docs/settings_integracoes/get.yml')
|
||||
def get_settings_integracoes_by_id(id):
|
||||
s = SettingsIntegracoes.query.get_or_404(id)
|
||||
return jsonify({
|
||||
'id': s.id,
|
||||
'integrar_folha_pagamento': s.integrar_folha_pagamento,
|
||||
'exportar_dados': s.exportar_dados,
|
||||
'exportacao_csv': s.exportacao_csv,
|
||||
'exportacao_pdf': s.exportacao_pdf,
|
||||
'integrar_calendario': s.integrar_calendario,
|
||||
'service_instance_id': s.service_instance_id
|
||||
}), 200
|
||||
|
||||
# Deletar configuração
|
||||
@settings_integracoes_bp.route('/<int:id>', methods=['DELETE'])
|
||||
@jwt_required()
|
||||
@swag_from('../docs/settings_integracoes/delete.yml')
|
||||
def delete_settings_integracoes(id):
|
||||
s = SettingsIntegracoes.query.get_or_404(id)
|
||||
db.session.delete(s)
|
||||
db.session.commit()
|
||||
return jsonify({'message': 'Configuração deletada com sucesso.'}), 200
|
||||
131
routes/settings_notificacoes.py
Normal file
131
routes/settings_notificacoes.py
Normal file
@ -0,0 +1,131 @@
|
||||
from flask import Blueprint, request, jsonify
|
||||
from flask_jwt_extended import jwt_required
|
||||
from flasgger.utils import swag_from
|
||||
from models.user import db
|
||||
from models.settings_notificacoes import SettingsNotificacoes
|
||||
|
||||
settings_notificacoes_bp = Blueprint('settings_notificacoes', __name__, url_prefix='/settings_notificacoes')
|
||||
|
||||
# Criar configuração de notificações
|
||||
@settings_notificacoes_bp.route('/', methods=['POST'])
|
||||
@jwt_required()
|
||||
@swag_from('../docs/settings_notificacoes/create.yml')
|
||||
def create_settings_notificacoes():
|
||||
data = request.get_json()
|
||||
|
||||
notificar_esquecimento_ponto = data.get('notificar_esquecimento_ponto', False)
|
||||
notificar_horas_extras = data.get('notificar_horas_extras', False)
|
||||
notificar_solicitacao_pendentes = data.get('notificar_solicitacao_pendentes', False)
|
||||
notificar_banco_horas = data.get('notificar_banco_horas', False)
|
||||
notificar_gestor = data.get('notificar_gestor', False)
|
||||
relatorios_email = data.get('relatorios_email', False)
|
||||
relatorios_diario_gestor = data.get('relatorios_diario_gestor', False)
|
||||
relatorios_semanal_colaboradores = data.get('relatorios_semanal_colaboradores', False)
|
||||
service_instance_id = data.get('service_instance_id')
|
||||
|
||||
settings = SettingsNotificacoes(
|
||||
notificar_esquecimento_ponto=notificar_esquecimento_ponto,
|
||||
notificar_horas_extras=notificar_horas_extras,
|
||||
notificar_solicitacao_pendentes=notificar_solicitacao_pendentes,
|
||||
notificar_banco_horas=notificar_banco_horas,
|
||||
notificar_gestor=notificar_gestor,
|
||||
relatorios_email=relatorios_email,
|
||||
relatorios_diario_gestor=relatorios_diario_gestor,
|
||||
relatorios_semanal_colaboradores=relatorios_semanal_colaboradores,
|
||||
service_instance_id=service_instance_id
|
||||
)
|
||||
|
||||
db.session.add(settings)
|
||||
db.session.commit()
|
||||
|
||||
return jsonify({'message': 'Configuração de notificações criada com sucesso', 'settings_id': settings.id}), 201
|
||||
|
||||
# Atualizar configuração
|
||||
@settings_notificacoes_bp.route('/<int:settings_id>', methods=['PUT'])
|
||||
@jwt_required()
|
||||
@swag_from('../docs/settings_notificacoes/update.yml')
|
||||
def update_settings_notificacoes(settings_id):
|
||||
data = request.get_json()
|
||||
settings = SettingsNotificacoes.query.get_or_404(settings_id)
|
||||
|
||||
if 'notificar_esquecimento_ponto' in data:
|
||||
settings.notificar_esquecimento_ponto = data['notificar_esquecimento_ponto']
|
||||
if 'notificar_horas_extras' in data:
|
||||
settings.notificar_horas_extras = data['notificar_horas_extras']
|
||||
if 'notificar_solicitacao_pendentes' in data:
|
||||
settings.notificar_solicitacao_pendentes = data['notificar_solicitacao_pendentes']
|
||||
if 'notificar_banco_horas' in data:
|
||||
settings.notificar_banco_horas = data['notificar_banco_horas']
|
||||
if 'notificar_gestor' in data:
|
||||
settings.notificar_gestor = data['notificar_gestor']
|
||||
if 'relatorios_email' in data:
|
||||
settings.relatorios_email = data['relatorios_email']
|
||||
if 'relatorios_diario_gestor' in data:
|
||||
settings.relatorios_diario_gestor = data['relatorios_diario_gestor']
|
||||
if 'relatorios_semanal_colaboradores' in data:
|
||||
settings.relatorios_semanal_colaboradores = data['relatorios_semanal_colaboradores']
|
||||
if 'service_instance_id' in data:
|
||||
from models import ServiceInstance
|
||||
ServiceInstance.query.get_or_404(data['service_instance_id'])
|
||||
settings.service_instance_id = data['service_instance_id']
|
||||
|
||||
db.session.commit()
|
||||
return jsonify({'message': 'Configuração de notificações atualizada com sucesso'}), 200
|
||||
|
||||
# Listar configurações
|
||||
@settings_notificacoes_bp.route('/', methods=['GET'])
|
||||
@jwt_required()
|
||||
@swag_from('../docs/settings_notificacoes/list.yml')
|
||||
def list_settings_notificacoes():
|
||||
service_instance_id = request.args.get('service_instance_id')
|
||||
|
||||
if service_instance_id:
|
||||
settings_list = SettingsNotificacoes.query.filter_by(service_instance_id=service_instance_id).all()
|
||||
else:
|
||||
settings_list = SettingsNotificacoes.query.all()
|
||||
|
||||
return jsonify({
|
||||
'settings_notificacoes_list': [
|
||||
{
|
||||
'id': s.id,
|
||||
'notificar_esquecimento_ponto': s.notificar_esquecimento_ponto,
|
||||
'notificar_horas_extras': s.notificar_horas_extras,
|
||||
'notificar_solicitacao_pendentes': s.notificar_solicitacao_pendentes,
|
||||
'notificar_banco_horas': s.notificar_banco_horas,
|
||||
'notificar_gestor': s.notificar_gestor,
|
||||
'relatorios_email': s.relatorios_email,
|
||||
'relatorios_diario_gestor': s.relatorios_diario_gestor,
|
||||
'relatorios_semanal_colaboradores': s.relatorios_semanal_colaboradores,
|
||||
'service_instance_id': s.service_instance_id
|
||||
} for s in settings_list
|
||||
]
|
||||
}), 200
|
||||
|
||||
# Obter por ID
|
||||
@settings_notificacoes_bp.route('/<int:id>', methods=['GET'])
|
||||
@jwt_required()
|
||||
@swag_from('../docs/settings_notificacoes/get.yml')
|
||||
def get_settings_notificacoes_by_id(id):
|
||||
s = SettingsNotificacoes.query.get_or_404(id)
|
||||
return jsonify({
|
||||
'id': s.id,
|
||||
'notificar_esquecimento_ponto': s.notificar_esquecimento_ponto,
|
||||
'notificar_horas_extras': s.notificar_horas_extras,
|
||||
'notificar_solicitacao_pendentes': s.notificar_solicitacao_pendentes,
|
||||
'notificar_banco_horas': s.notificar_banco_horas,
|
||||
'notificar_gestor': s.notificar_gestor,
|
||||
'relatorios_email': s.relatorios_email,
|
||||
'relatorios_diario_gestor': s.relatorios_diario_gestor,
|
||||
'relatorios_semanal_colaboradores': s.relatorios_semanal_colaboradores,
|
||||
'service_instance_id': s.service_instance_id
|
||||
}), 200
|
||||
|
||||
# Deletar configuração
|
||||
@settings_notificacoes_bp.route('/<int:id>', methods=['DELETE'])
|
||||
@jwt_required()
|
||||
@swag_from('../docs/settings_notificacoes/delete.yml')
|
||||
def delete_settings_notificacoes(id):
|
||||
s = SettingsNotificacoes.query.get_or_404(id)
|
||||
db.session.delete(s)
|
||||
db.session.commit()
|
||||
return jsonify({'message': 'Configuração deletada com sucesso.'}), 200
|
||||
@ -2,31 +2,36 @@ from flask import Blueprint, request, jsonify
|
||||
from flasgger.utils import swag_from
|
||||
from models.shifts import Shift, db
|
||||
from models.service_instance import ServiceInstance
|
||||
from models.time_schedule import TimeSchedule
|
||||
|
||||
shift_bp = Blueprint('shift', __name__, url_prefix='/shift/')
|
||||
|
||||
# Criar um turno
|
||||
@shift_bp.route('/', methods=['POST'])
|
||||
@swag_from('../docs/shifts/create.yml')
|
||||
def create_shift():
|
||||
"""Cria um novo turno."""
|
||||
data = request.get_json()
|
||||
|
||||
# Verifica se a service_instance existe
|
||||
service_instance_id = data.get('service_instance_id')
|
||||
ServiceInstance.query.get_or_404(service_instance_id)
|
||||
|
||||
# Cria o turno
|
||||
shift = Shift(
|
||||
name=data['name'],
|
||||
day=data['day'],
|
||||
start_time=data['start_time'],
|
||||
end_time=data['end_time'],
|
||||
interval_start=data['interval_start'],
|
||||
interval_end=data['interval_end'],
|
||||
interval_start=data.get('interval_start'),
|
||||
interval_end=data.get('interval_end'),
|
||||
type_interval=data['type_interval'],
|
||||
service_instance_id=data['service_instance_id']
|
||||
service_instance_id=service_instance_id,
|
||||
description=data.get('description'), # Adicionando a descrição
|
||||
tolerance=data.get('tolerance'), # Adicionando a tolerância
|
||||
)
|
||||
|
||||
# Associa os dias (TimeSchedules)
|
||||
time_schedule_ids = data.get('time_schedule_ids', [])
|
||||
if time_schedule_ids:
|
||||
shift.time_schedules = TimeSchedule.query.filter(TimeSchedule.id.in_(time_schedule_ids)).all()
|
||||
|
||||
db.session.add(shift)
|
||||
db.session.commit()
|
||||
|
||||
@ -39,34 +44,45 @@ def create_shift():
|
||||
def update_shift(shift_id):
|
||||
"""Atualiza um turno existente."""
|
||||
data = request.get_json()
|
||||
print(data)
|
||||
|
||||
# Localiza o turno ou retorna 404
|
||||
shift = Shift.query.get_or_404(shift_id)
|
||||
|
||||
# Atualiza os campos fornecidos no body
|
||||
if 'name' in data:
|
||||
shift.name = data['name']
|
||||
if 'day' in data:
|
||||
shift.days = data['day']
|
||||
if 'start_time' in data:
|
||||
if 'start_time' in data:
|
||||
shift.start_time = data['start_time']
|
||||
if 'end_time' in data:
|
||||
shift.end_time=data['end_time']
|
||||
shift.end_time = data['end_time']
|
||||
if 'interval_start' in data:
|
||||
shift.interval_start=data['interval_start']
|
||||
shift.interval_start = data['interval_start']
|
||||
if 'interval_end' in data:
|
||||
shift.interval_end=data['interval_end']
|
||||
shift.interval_end = data['interval_end']
|
||||
if 'type_interval' in data:
|
||||
shift.type_interval=data['type_interval']
|
||||
shift.type_interval = data['type_interval']
|
||||
if 'description' in data:
|
||||
shift.description = data['description']
|
||||
if 'tolerance' in data:
|
||||
shift.tolerance = data['tolerance']
|
||||
|
||||
if 'service_instance_id' in data:
|
||||
ServiceInstance.query.get_or_404(data['service_instance_id']) # Valida a existência
|
||||
shift.service_instance_id = data['service_instance_id']
|
||||
|
||||
# Atualiza os dias (TimeSchedules)
|
||||
if 'time_schedule_ids' in data:
|
||||
# Recebe a lista de IDs dos dias a serem associados ao turno
|
||||
time_schedule_ids = data['time_schedule_ids']
|
||||
# Verifica se os IDs existem no banco e atualiza a associação
|
||||
shift.time_schedules = TimeSchedule.query.filter(TimeSchedule.id.in_(time_schedule_ids)).all()
|
||||
|
||||
db.session.commit()
|
||||
|
||||
return jsonify({'message': 'Shift updated successfully'}), 200
|
||||
|
||||
|
||||
|
||||
# Listar turnos
|
||||
@shift_bp.route('/', methods=['GET'])
|
||||
@swag_from('../docs/shifts/list.yml')
|
||||
@ -84,17 +100,26 @@ def list_shifts():
|
||||
shift_list = [{
|
||||
'id': shift.id,
|
||||
'name': shift.name,
|
||||
'day': shift.day,
|
||||
"start_time": shift.start_time.strftime("%H:%M"),
|
||||
"end_time": shift.end_time.strftime("%H:%M"),
|
||||
"interval_start": shift.interval_start.strftime("%H:%M") if shift.interval_start else None,
|
||||
"interval_end": shift.interval_end.strftime("%H:%M") if shift.interval_end else None,
|
||||
'type_interval' : shift.type_interval,
|
||||
'service_instance_id': shift.service_instance_id
|
||||
'type_interval': shift.type_interval,
|
||||
'service_instance_id': shift.service_instance_id,
|
||||
'description': shift.description,
|
||||
'tolerance': shift.tolerance,
|
||||
# Adicionando a tolerância
|
||||
|
||||
|
||||
# Adicionando os dias associados (TimeSchedules)
|
||||
'time_schedules': [
|
||||
{'id': ts.id, 'name': ts.name} for ts in shift.time_schedules
|
||||
]
|
||||
} for shift in shifts]
|
||||
|
||||
return jsonify(shift_list), 200
|
||||
|
||||
|
||||
@shift_bp.route('/<int:shift_id>', methods=['GET'])
|
||||
@swag_from('../docs/shifts/get.yml')
|
||||
def get_shift_id(shift_id):
|
||||
@ -105,12 +130,17 @@ def get_shift_id(shift_id):
|
||||
return jsonify({
|
||||
'id': shift.id,
|
||||
'name': shift.name,
|
||||
'day': shift.day,
|
||||
#'day': shift.day,
|
||||
"start_time": shift.start_time.strftime("%H:%M"),
|
||||
"end_time": shift.end_time.strftime("%H:%M"),
|
||||
"interval_start": shift.interval_start.strftime("%H:%M") if shift.interval_start else None,
|
||||
"interval_end": shift.interval_end.strftime("%H:%M") if shift.interval_end else None,
|
||||
'type_interval' : shift.type_interval,
|
||||
'description': shift.description,
|
||||
'tolerance': shift.tolerance,
|
||||
'time_schedules': [
|
||||
{'id': ts.id, 'name': ts.name} for ts in shift.time_schedules
|
||||
],
|
||||
'service_instance_id': shift.service_instance_id}),200
|
||||
|
||||
|
||||
|
||||
@ -342,6 +342,6 @@ def delete_user(user_id):
|
||||
return jsonify({'message': 'Usuário já está inativo'}), 400
|
||||
|
||||
# Atualiza o status para inativo
|
||||
user.status = "inativo"
|
||||
user.status = "Inativo"
|
||||
db.session.commit()
|
||||
return jsonify({'message': 'Usuário excluído com sucesso'}), 200
|
||||
@ -17,38 +17,29 @@ def seed_holiday():
|
||||
"estado":"Rio de Janeiro",
|
||||
"municipio":"Rio de Janeiro",
|
||||
|
||||
},
|
||||
}
|
||||
|
||||
# Feriado 2
|
||||
{
|
||||
"parent_id": 1,
|
||||
"service_instance_id":4,
|
||||
"name": "Dia das crianças",
|
||||
"date": data_iso2,
|
||||
"estado":"Rio de Janeiro",
|
||||
"municipio":"Rio de Janeiro",
|
||||
},
|
||||
]
|
||||
for holiday_data in holidays:
|
||||
# Verifica se já existe um papel para o service_id e name fornecidos
|
||||
existing_holiday = db.session.query(Holiday).filter_by(
|
||||
date=holiday_data["date"],
|
||||
name=holiday_data["name"]
|
||||
).first()
|
||||
|
||||
# Se não existe, cria o novo papel
|
||||
if not existing_holiday:
|
||||
holiday = Holiday(
|
||||
# Verifica se já existe um papel para o service_id e name fornecidos
|
||||
existing_holiday = db.session.query(Holiday).filter_by(
|
||||
date=holiday_data["date"],
|
||||
service_instance_id=holiday_data["service_instance_id"],
|
||||
name=holiday_data["name"],
|
||||
parent_id=holiday_data["parent_id"],
|
||||
estado=holiday_data["estado"],
|
||||
municipio=holiday_data["municipio"]
|
||||
)
|
||||
print("antes do banco")
|
||||
db.session.add(holiday)
|
||||
print("adiconei no banco")
|
||||
|
||||
# Commit a transação para salvar os dados no banco
|
||||
db.session.commit()
|
||||
name=holiday_data["name"]
|
||||
).first()
|
||||
|
||||
# Se não existe, cria o novo papel
|
||||
if not existing_holiday:
|
||||
holiday = Holiday(
|
||||
date=holiday_data["date"],
|
||||
service_instance_id=holiday_data["service_instance_id"],
|
||||
name=holiday_data["name"],
|
||||
parent_id=holiday_data["parent_id"],
|
||||
estado=holiday_data["estado"],
|
||||
municipio=holiday_data["municipio"]
|
||||
)
|
||||
print("antes do banco")
|
||||
db.session.add(holiday)
|
||||
print("adiconei no banco")
|
||||
|
||||
# Commit a transação para salvar os dados no banco
|
||||
db.session.commit()
|
||||
@ -14,32 +14,40 @@ from .camera_seed import seed_cameras
|
||||
from .ambiente_seed import seed_ambiente
|
||||
from .reports_seed import reports_seed
|
||||
from .shifts_times_seed import seed_shifts_and_schedules
|
||||
from .holiday_seed import seed_holiday
|
||||
from .company_seed import seed_company
|
||||
from .time_schedule import seed_time_schedules
|
||||
from .settings_gerais_seed import seed_settings_gerais
|
||||
from .settings_calculo_horas_seed import seed_settings_calculo_horas
|
||||
from .settings_integracoes_seed import seed_settings_integracoes
|
||||
from .settings_notificacoes_seed import seed_settings_notificacoes
|
||||
from extensions import db
|
||||
|
||||
####### checar seeds holiday, esta quebrando o codigo
|
||||
|
||||
def run_all_seeds():
|
||||
try:
|
||||
print("Iniciando o processo de seed...")
|
||||
seed_services()
|
||||
seed_holiday()
|
||||
# seed_holiday()
|
||||
seed_service_instances()
|
||||
seed_company()
|
||||
# seed_company()
|
||||
seed_permissions()
|
||||
seed_service_roles()
|
||||
seed_service_role_permissions()
|
||||
seed_users()
|
||||
seed_address_types()
|
||||
seed_address()
|
||||
# seed_address_types()
|
||||
# seed_address()
|
||||
#seed_contacts()
|
||||
seed_user_service_roles()
|
||||
seed_licenses()
|
||||
seed_ambiente()
|
||||
reports_seed()
|
||||
seed_cameras()
|
||||
seed_shifts_and_schedules()
|
||||
seed_holiday()
|
||||
# seed_user_service_roles()
|
||||
# seed_licenses()
|
||||
# seed_ambiente()
|
||||
# reports_seed()
|
||||
# seed_cameras()
|
||||
#seed_shifts_and_schedules()
|
||||
#seed_time_schedules()
|
||||
seed_settings_gerais()
|
||||
seed_settings_calculo_horas()
|
||||
seed_settings_integracoes()
|
||||
seed_settings_notificacoes()
|
||||
|
||||
print("Seeds executados com sucesso!")
|
||||
except Exception as e:
|
||||
|
||||
38
seeds/settings_calculo_horas_seed.py
Normal file
38
seeds/settings_calculo_horas_seed.py
Normal file
@ -0,0 +1,38 @@
|
||||
from extensions import db
|
||||
from models.settings_calculo_horas import SettingsCalculoHoras
|
||||
|
||||
def seed_settings_calculo_horas():
|
||||
settings_data = [
|
||||
{
|
||||
"service_instance_id": 1,
|
||||
"jornada_diaria": 480, # minutos
|
||||
"jornada_semanal": 2400, # minutos
|
||||
"inicio_periodo_noturno": "22:00:00",
|
||||
"fim_periodo_noturno": "05:00:00",
|
||||
"desconto_atraso_automatico": "True",
|
||||
"tolerancia_para_descontos": 10,
|
||||
"arredondamento_minutos": 5
|
||||
}
|
||||
]
|
||||
|
||||
for setting in settings_data:
|
||||
existing = db.session.query(SettingsCalculoHoras).filter_by(
|
||||
service_instance_id=setting["service_instance_id"]
|
||||
).first()
|
||||
|
||||
if not existing:
|
||||
new_setting = SettingsCalculoHoras(
|
||||
service_instance_id=setting["service_instance_id"],
|
||||
jornada_diaria=setting["jornada_diaria"],
|
||||
jornada_semanal=setting["jornada_semanal"],
|
||||
inicio_periodo_noturno=setting["inicio_periodo_noturno"],
|
||||
fim_periodo_noturno=setting["fim_periodo_noturno"],
|
||||
desconto_atraso_automatico=setting["desconto_atraso_automatico"],
|
||||
tolerancia_para_descontos=setting["tolerancia_para_descontos"],
|
||||
arredondamento_minutos=setting["arredondamento_minutos"]
|
||||
)
|
||||
print("antes do banco")
|
||||
db.session.add(new_setting)
|
||||
print("adicionei no banco")
|
||||
|
||||
db.session.commit()
|
||||
44
seeds/settings_gerais_seed.py
Normal file
44
seeds/settings_gerais_seed.py
Normal file
@ -0,0 +1,44 @@
|
||||
from extensions import db
|
||||
from models.settings_gerais import SettingsGerais
|
||||
|
||||
def seed_settings_gerais():
|
||||
settings_data = [
|
||||
{
|
||||
"service_instance_id": 1,
|
||||
"tolerancia_entrada": 10,
|
||||
"tolerancia_saida": 5,
|
||||
"limite_diario_he": 120, # minutos
|
||||
"limite_mensal_he": 2400, # minutos
|
||||
"limite_banco_horas_positivo": 800, # minutos
|
||||
"limite_banco_horas_negativo": -400, # minutos
|
||||
"validacao_reconhecimento_facial": "True",
|
||||
"registro_remoto": "True",
|
||||
"ajuste_colaborador": "False",
|
||||
"dias_aprovacao_automatica": 3
|
||||
}
|
||||
]
|
||||
|
||||
for setting in settings_data:
|
||||
existing = db.session.query(SettingsGerais).filter_by(
|
||||
service_instance_id=setting["service_instance_id"]
|
||||
).first()
|
||||
|
||||
if not existing:
|
||||
new_setting = SettingsGerais(
|
||||
service_instance_id=setting["service_instance_id"],
|
||||
tolerancia_entrada=setting["tolerancia_entrada"],
|
||||
tolerancia_saida=setting["tolerancia_saida"],
|
||||
limite_diario_he=setting["limite_diario_he"],
|
||||
limite_mensal_he=setting["limite_mensal_he"],
|
||||
limite_banco_horas_positivo=setting["limite_banco_horas_positivo"],
|
||||
limite_banco_horas_negativo=setting["limite_banco_horas_negativo"],
|
||||
validacao_reconhecimento_facial=setting["validacao_reconhecimento_facial"],
|
||||
registro_remoto=setting["registro_remoto"],
|
||||
ajuste_colaborador=setting["ajuste_colaborador"],
|
||||
dias_aprovacao_automatica=setting["dias_aprovacao_automatica"]
|
||||
)
|
||||
print("antes do banco")
|
||||
db.session.add(new_setting)
|
||||
print("adicionei no banco")
|
||||
|
||||
db.session.commit()
|
||||
34
seeds/settings_integracoes_seed.py
Normal file
34
seeds/settings_integracoes_seed.py
Normal file
@ -0,0 +1,34 @@
|
||||
from extensions import db
|
||||
from models.settings_integracoes import SettingsIntegracoes
|
||||
|
||||
def seed_settings_integracoes():
|
||||
settings_data = [
|
||||
{
|
||||
"service_instance_id": 1,
|
||||
"integrar_folha_pagamento": "True",
|
||||
"exportar_dados": "True",
|
||||
"exportacao_csv": "True",
|
||||
"exportacao_pdf": "False",
|
||||
"integrar_calendario": "True"
|
||||
}
|
||||
]
|
||||
|
||||
for setting in settings_data:
|
||||
existing = db.session.query(SettingsIntegracoes).filter_by(
|
||||
service_instance_id=setting["service_instance_id"]
|
||||
).first()
|
||||
|
||||
if not existing:
|
||||
new_setting = SettingsIntegracoes(
|
||||
service_instance_id=setting["service_instance_id"],
|
||||
integrar_folha_pagamento=setting["integrar_folha_pagamento"],
|
||||
exportar_dados=setting["exportar_dados"],
|
||||
exportacao_csv=setting["exportacao_csv"],
|
||||
exportacao_pdf=setting["exportacao_pdf"],
|
||||
integrar_calendario=setting["integrar_calendario"]
|
||||
)
|
||||
print("antes do banco")
|
||||
db.session.add(new_setting)
|
||||
print("adicionei no banco")
|
||||
|
||||
db.session.commit()
|
||||
40
seeds/settings_notificacoes_seed.py
Normal file
40
seeds/settings_notificacoes_seed.py
Normal file
@ -0,0 +1,40 @@
|
||||
from extensions import db
|
||||
from models.settings_notificacoes import SettingsNotificacoes
|
||||
|
||||
def seed_settings_notificacoes():
|
||||
settings_data = [
|
||||
{
|
||||
"service_instance_id": 1,
|
||||
"notificar_esquecimento_ponto": "True",
|
||||
"notificar_horas_extras": "True",
|
||||
"notificar_solicitacao_pendentes": "True",
|
||||
"notificar_banco_horas": "True",
|
||||
"notificar_gestor": "False",
|
||||
"relatorios_email": "True",
|
||||
"relatorios_diario_gestor": "False",
|
||||
"relatorios_semanal_colaboradores": "True"
|
||||
}
|
||||
]
|
||||
|
||||
for setting in settings_data:
|
||||
existing = db.session.query(SettingsNotificacoes).filter_by(
|
||||
service_instance_id=setting["service_instance_id"]
|
||||
).first()
|
||||
|
||||
if not existing:
|
||||
new_setting = SettingsNotificacoes(
|
||||
service_instance_id=setting["service_instance_id"],
|
||||
notificar_esquecimento_ponto=setting["notificar_esquecimento_ponto"],
|
||||
notificar_horas_extras=setting["notificar_horas_extras"],
|
||||
notificar_solicitacao_pendentes=setting["notificar_solicitacao_pendentes"],
|
||||
notificar_banco_horas=setting["notificar_banco_horas"],
|
||||
notificar_gestor=setting["notificar_gestor"],
|
||||
relatorios_email=setting["relatorios_email"],
|
||||
relatorios_diario_gestor=setting["relatorios_diario_gestor"],
|
||||
relatorios_semanal_colaboradores=setting["relatorios_semanal_colaboradores"]
|
||||
)
|
||||
print("antes do banco")
|
||||
db.session.add(new_setting)
|
||||
print("adicionei no banco")
|
||||
|
||||
db.session.commit()
|
||||
30
seeds/time_schedule.py
Normal file
30
seeds/time_schedule.py
Normal file
@ -0,0 +1,30 @@
|
||||
from extensions import db
|
||||
from models.time_schedule import TimeSchedule
|
||||
|
||||
def seed_time_schedules():
|
||||
# Lista de dias da semana
|
||||
days = [
|
||||
{"id": 1, "name": "Domingo"},
|
||||
{"id": 2, "name": "Segunda-feira"},
|
||||
{"id": 3, "name": "Terça-feira"},
|
||||
{"id": 4, "name": "Quarta-feira"},
|
||||
{"id": 5, "name": "Quinta-feira"},
|
||||
{"id": 6, "name": "Sexta-feira"},
|
||||
{"id": 7, "name": "Sábado"},
|
||||
]
|
||||
|
||||
# Verifica se já existe algum dia na tabela
|
||||
existing_days = TimeSchedule.query.all()
|
||||
existing_names = [day.name for day in existing_days]
|
||||
|
||||
for day in days:
|
||||
if day["name"] in existing_names:
|
||||
print(f"Dia '{day['name']}' já existe. Pulando...")
|
||||
continue
|
||||
|
||||
# Cria e adiciona o dia
|
||||
new_day = TimeSchedule(id=day["id"], name=day["name"])
|
||||
db.session.add(new_day)
|
||||
|
||||
db.session.commit()
|
||||
print("Dias da semana criados com sucesso, se não existirem.")
|
||||
@ -66,8 +66,7 @@ def seed_users():
|
||||
user = User(
|
||||
username=user_data["username"],
|
||||
email=user_data["email"],
|
||||
phone=user_data["phone"],
|
||||
service_role_id=user_data["service_role_id"]
|
||||
service_instance_id=user_data["service_instance_id"]
|
||||
)
|
||||
user.set_password(user_data["password"]) # Gerar o hash da senha
|
||||
db.session.add(user)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user