From cc91b6f0fb57655d1bbcc6556f6f27424af7fc87 Mon Sep 17 00:00:00 2001 From: flavia-vic Date: Tue, 29 Apr 2025 09:30:34 -0400 Subject: [PATCH] Refactor holiday model and routes to include additional fields and improve functionality --- app.py | 6 ++-- models/holiday.py | 3 ++ routes/holiday.py | 91 +++++++++++++++++++++++------------------------ 3 files changed, 51 insertions(+), 49 deletions(-) diff --git a/app.py b/app.py index 31b5767..26cc37d 100644 --- a/app.py +++ b/app.py @@ -153,7 +153,7 @@ def get_database_type(uri): if __name__ == "__main__": app = create_app() - with app.app_context(): - db.create_all() # Cria as tabelas - run_all_seeds() + # with app.app_context(): + # db.create_all() # Cria as tabelas + # run_all_seeds() app.run(debug=True, host="0.0.0.0") diff --git a/models/holiday.py b/models/holiday.py index 7dfd043..426c9d2 100644 --- a/models/holiday.py +++ b/models/holiday.py @@ -9,6 +9,9 @@ class Holiday(db.Model): date = db.Column(db.Date, nullable=True) estado = db.Column(db.String(80), nullable=True) municipio = db.Column(db.String(80), nullable=True) + recorrente = db.Column(db.Boolean, default=True, nullable=False) # Se o feriado é recorrente (todo ano) + adicional_he = db.Column(db.Integer, nullable=False) # Percentual adicional de horas extras (%) + #relacionamento service_instance service_instance_id = db.Column(db.Integer, db.ForeignKey('service_instance.id'), nullable=True) diff --git a/routes/holiday.py b/routes/holiday.py index d2c2d79..62c1ab6 100644 --- a/routes/holiday.py +++ b/routes/holiday.py @@ -1,14 +1,13 @@ 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') +# Criar feriado @holiday_bp.route('/', methods=['POST']) @jwt_required() @swag_from('../docs/holiday/create.yml') @@ -20,104 +19,104 @@ def create_holiday(): 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') - - # 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, + service_instance_id=service_instance_id, + recorrente=recorrente, + adicional_he=adicional_he, ) - # 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 + 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): - """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: + if 'type' in data: holiday.type = data['type'] if 'estado' in data: - holiday.estado=data['estado'] + holiday.estado = data['estado'] if 'municipio' in data: - holiday.municipio=data['municipio'] - if 'parent_id' in data: - holiday.parent_id=data['parent_id'] + holiday.municipio = data['municipio'] if 'service_instance_id' in data: - ServiceInstance.query.get_or_404(data['service_instance_id']) # Valida a existência + # 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'] db.session.commit() - return jsonify({'message': 'holiday updated successfully'}), 200 + return jsonify({'message': 'Feriado atualizado com sucesso'}), 200 -#Listar +# Listar feriados @holiday_bp.route('/', methods=['GET']) +@jwt_required() @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 + '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 -#Get +# 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(holiday_id) - if not holiday: - return jsonify({'error': 'Escala não encontrada'}), 404 - + 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"), - 'parent_id' : holiday.parent_id, - 'service_instance_id': holiday.service_instance_id}),200 - -#deletar + '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 + }), 200 + +# Deletar feriado @holiday_bp.route('/', methods=['DELETE']) +@jwt_required() @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 + return jsonify({'message': 'Feriado deletado com sucesso'}), 200