front_ponto_eletronico/routes/holiday.py

124 lines
4.1 KiB
Python

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