Refactor holiday model and routes to include additional fields and improve functionality
This commit is contained in:
parent
207430ba05
commit
cc91b6f0fb
6
app.py
6
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")
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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,35 +19,35 @@ 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('/<int:holiday_id>', 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:
|
||||
@ -56,68 +55,68 @@ def update_holiday(holiday_id):
|
||||
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' : [{
|
||||
'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
|
||||
'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('/<int:holiday_id>', 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
|
||||
'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
|
||||
# Deletar feriado
|
||||
@holiday_bp.route('/<int:holiday_id>', 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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user