front_ponto_eletronico/routes/settings_calculo_horas.py

117 lines
5.1 KiB
Python

from flask import Blueprint, request, jsonify
from flask_jwt_extended import jwt_required
from flasgger.utils import swag_from
from models.user import db
from models.settings_calculo_horas import SettingsCalculoHoras
settings_calculo_horas_bp = Blueprint('settings_calculo_horas', __name__, url_prefix='/settings_calculo_horas')
# Criar configurações de cálculo de horas
@settings_calculo_horas_bp.route('/', methods=['POST'])
@jwt_required()
@swag_from('../docs/settings_calculo_horas/create.yml')
def create_settings_calculo_horas():
data = request.get_json()
settings = SettingsCalculoHoras(
jornada_diaria=data.get('jornada_diaria'),
jornada_semanal=data.get('jornada_semanal'),
inicio_periodo_noturno=data['inicio_periodo_noturno'],
fim_periodo_noturno=data['fim_periodo_noturno'],
desconto_atraso_automatico=data.get('desconto_atraso_automatico', False),
tolerancia_para_descontos=data.get('tolerancia_para_descontos'),
arredondamento_minutos=data.get('arredondamento_minutos'),
service_instance_id=data['service_instance_id']
)
db.session.add(settings)
db.session.commit()
return jsonify({'message': 'Configuração criada com sucesso', 'settings_id': settings.id}), 201
# Atualizar configurações de cálculo de horas
@settings_calculo_horas_bp.route('/<int:settings_id>', methods=['PUT'])
@jwt_required()
@swag_from('../docs/settings_calculo_horas/update.yml')
def update_settings_calculo_horas(settings_id):
data = request.get_json()
settings = SettingsCalculoHoras.query.get_or_404(settings_id)
if 'jornada_diaria' in data:
settings.jornada_diaria = data['jornada_diaria']
if 'jornada_semanal' in data:
settings.jornada_semanal = data['jornada_semanal']
if 'inicio_periodo_noturno' in data:
settings.inicio_periodo_noturno = data['inicio_periodo_noturno']
if 'fim_periodo_noturno' in data:
settings.fim_periodo_noturno = data['fim_periodo_noturno']
if 'desconto_atraso_automatico' in data:
settings.desconto_atraso_automatico = data['desconto_atraso_automatico']
if 'tolerancia_para_descontos' in data:
settings.tolerancia_para_descontos = data['tolerancia_para_descontos']
if 'arredondamento_minutos' in data:
settings.arredondamento_minutos = data['arredondamento_minutos']
if 'service_instance_id' in data:
from models import ServiceInstance # Evita import circular se necessário
ServiceInstance.query.get_or_404(data['service_instance_id'])
settings.service_instance_id = data['service_instance_id']
db.session.commit()
return jsonify({'message': 'Configuração atualizada com sucesso'}), 200
# Listar configurações de cálculo de horas
@settings_calculo_horas_bp.route('/', methods=['GET'])
@jwt_required()
@swag_from('../docs/settings_calculo_horas/list.yml')
def list_settings_calculo_horas():
service_instance_id = request.args.get('service_instance_id')
if service_instance_id:
settings_list = SettingsCalculoHoras.query.filter_by(service_instance_id=service_instance_id).all()
else:
settings_list = SettingsCalculoHoras.query.all()
return jsonify({
'settings_calculo_horas_list': [
{
'id': s.id,
'jornada_diaria': s.jornada_diaria,
'jornada_semanal': s.jornada_semanal,
'inicio_periodo_noturno': s.inicio_periodo_noturno.isoformat(),
'fim_periodo_noturno': s.fim_periodo_noturno.isoformat(),
'desconto_atraso_automatico': s.desconto_atraso_automatico,
'tolerancia_para_descontos': s.tolerancia_para_descontos,
'arredondamento_minutos': s.arredondamento_minutos,
'service_instance_id': s.service_instance_id
} for s in settings_list
]
}), 200
# Obter configuração por ID
@settings_calculo_horas_bp.route('/<int:id>', methods=['GET'])
@jwt_required()
@swag_from('../docs/settings_calculo_horas/get.yml')
def get_settings_calculo_horas_by_id(id):
s = SettingsCalculoHoras.query.get_or_404(id)
return jsonify({
'id': s.id,
'jornada_diaria': s.jornada_diaria,
'jornada_semanal': s.jornada_semanal,
'inicio_periodo_noturno': s.inicio_periodo_noturno.isoformat(),
'fim_periodo_noturno': s.fim_periodo_noturno.isoformat(),
'desconto_atraso_automatico': s.desconto_atraso_automatico,
'tolerancia_para_descontos': s.tolerancia_para_descontos,
'arredondamento_minutos': s.arredondamento_minutos,
'service_instance_id': s.service_instance_id
}), 200
# Deletar configuração
@settings_calculo_horas_bp.route('/<int:id>', methods=['DELETE'])
@jwt_required()
@swag_from('../docs/settings_calculo_horas/delete.yml')
def delete_settings_calculo_horas(id):
s = SettingsCalculoHoras.query.get_or_404(id)
db.session.delete(s)
db.session.commit()
return jsonify({'message': 'Configuração deletada com sucesso.'}), 200