from flask import Blueprint, request, jsonify from flask_jwt_extended import jwt_required from flasgger.utils import swag_from from models.service import Service from models.service_roles import ServiceRole from models.holiday import Holiday from models.user import db from models.service_instance import ServiceInstance holiday_bp = Blueprint('holiday', __name__, url_prefix='/holiday') @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') service_instance_id = data.get('service_instance_id') # Cria um novo ServiceRole holiday = Holiday( name=name, type=type, date=date, estado=estado, municipio=municipio, service_instance_id = service_instance_id, parent_id=parent_id, ) # Adiciona e comita no banco de dados db.session.add(holiday) db.session.commit() return jsonify({'message': 'feriado criado com sucesso', 'feriado_id': holiday.id}), 201 @holiday_bp.route('/', methods=['PUT']) @swag_from('../docs/holiday/update.yml') def update_holiday(holiday_id): """Atualiza um turno existente.""" data = request.get_json() print(data) # Localiza ou retorna 404 holiday = Holiday.query.get_or_404(holiday_id) # Atualiza os campos fornecidos no body 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 'parent_id' in data: holiday.parent_id=data['parent_id'] if 'service_instance_id' in data: ServiceInstance.query.get_or_404(data['service_instance_id']) # Valida a existência holiday.service_instance_id = data['service_instance_id'] db.session.commit() return jsonify({'message': 'holiday updated successfully'}), 200 #Listar @holiday_bp.route('/', methods=['GET']) @swag_from('../docs/holiday/list.yml') def list_holiday(): """Lista todos os turnos, opcionalmente filtrando por instância de serviço.""" service_instance_id = request.args.get('service_instance_id') if service_instance_id: # Filtrar por service_instance_id holidays = Holiday.query.filter_by(service_instance_id=service_instance_id).all() else: # Retornar todos os turnos holidays = Holiday.query.all() print(holidays) return jsonify({ 'holiday_list' : [{ 'id': holiday.id, 'name': holiday.name, 'estado': holiday.estado, "date": holiday.date.strftime("%Y-%m-%d"), "municipio": holiday.municipio, 'parent_id' : holiday.parent_id, 'service_instance_id': holiday.service_instance_id } for holiday in holidays]}), 200 #Get @holiday_bp.route('/', methods=['GET']) @swag_from('../docs/holiday/get.yml') def get_holiday_id(holiday_id): holiday = Holiday.query.get(holiday_id) if not holiday: return jsonify({'error': 'Escala não encontrada'}), 404 return jsonify({ 'id': holiday.id, 'name': holiday.name, 'estado': holiday.estado, 'municipio': holiday.municipio, 'type':holiday.type, "date": holiday.date.strftime("%Y-%m-%d"), 'parent_id' : holiday.parent_id, 'service_instance_id': holiday.service_instance_id}),200 #deletar @holiday_bp.route('/', methods=['DELETE']) @swag_from('../docs/holiday/delete.yml') def delete_holiday(holiday_id): """Deleta um turno pelo ID.""" holiday = Holiday.query.get_or_404(holiday_id) db.session.delete(holiday) db.session.commit() return jsonify({'message': 'Shift deleted successfully'}), 200