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('/', 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('/', 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('/', 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