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