117 lines
5.1 KiB
Python
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
|