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