from flask import Blueprint, request, jsonify from flask_jwt_extended import jwt_required from flasgger.utils import swag_from from models.holiday import Holiday from models.user import db from models.service_instance import ServiceInstance holiday_bp = Blueprint('holiday', __name__, url_prefix='/holiday') # Criar feriado @holiday_bp.route('/', methods=['POST']) @jwt_required() @swag_from('../docs/holiday/create.yml') def create_holiday(): data = request.get_json() 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 service_instance_id = data.get('service_instance_id') holiday = Holiday( name=name, type=type, date=date, estado=estado, municipio=municipio, parent_id=parent_id, service_instance_id=service_instance_id, recorrente=recorrente, adicional_he=adicional_he, ) db.session.add(holiday) db.session.commit() return jsonify({'message': 'Feriado criado com sucesso', 'holiday_id': holiday.id}), 201 # Atualizar feriado @holiday_bp.route('/', methods=['PUT']) @jwt_required() @swag_from('../docs/holiday/update.yml') def update_holiday(holiday_id): data = request.get_json() holiday = Holiday.query.get_or_404(holiday_id) if 'name' in data: holiday.name = data['name'] if 'date' in data: 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'] db.session.commit() return jsonify({'message': 'Feriado atualizado com sucesso'}), 200 # Listar feriados @holiday_bp.route('/', methods=['GET']) @jwt_required() @swag_from('../docs/holiday/list.yml') def list_holiday(): service_instance_id = request.args.get('service_instance_id') if service_instance_id: holidays = Holiday.query.filter_by(service_instance_id=service_instance_id).all() else: holidays = Holiday.query.all() return jsonify({ '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, 'service_instance_id': holiday.service_instance_id, 'recorrente': holiday.recorrente, 'adicional_he': holiday.adicional_he } for holiday in holidays] }), 200 # Buscar feriado por ID @holiday_bp.route('/', methods=['GET']) @jwt_required() @swag_from('../docs/holiday/get.yml') def get_holiday_id(holiday_id): holiday = Holiday.query.get_or_404(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, 'adicional_he': holiday.adicional_he, }), 200 # Deletar feriado @holiday_bp.route('/', methods=['DELETE']) @jwt_required() @swag_from('../docs/holiday/delete.yml') def delete_holiday(holiday_id): holiday = Holiday.query.get_or_404(holiday_id) db.session.delete(holiday) db.session.commit() return jsonify({'message': 'Feriado deletado com sucesso'}), 200