05/22 Implement license version

This commit is contained in:
2026-05-22 16:31:19 -04:00
parent e6657e60cf
commit 687216e332
16 changed files with 1373 additions and 37 deletions
+15 -2
View File
@@ -999,6 +999,10 @@ def ticket_survey(token):
@tickets_bp.route('/tickets/<int:ticket_id>/watch', methods=['POST'])
@login_required
def watch_ticket(ticket_id):
from app.services.license_service import feature_enabled
from flask import jsonify
if not feature_enabled('watchers'):
return jsonify({'error': 'Ticket watchers require a Business or Enterprise license.'}), 403
ticket = db.session.get(Ticket, ticket_id) or abort(404)
if not current_user.is_it_staff and ticket.created_by_id != current_user.id:
abort(403)
@@ -1006,19 +1010,21 @@ def watch_ticket(ticket_id):
if not existing:
db.session.add(TicketWatcher(ticket_id=ticket_id, user_id=current_user.id))
db.session.commit()
from flask import jsonify
return jsonify({'watching': True})
@tickets_bp.route('/tickets/<int:ticket_id>/unwatch', methods=['POST'])
@login_required
def unwatch_ticket(ticket_id):
from app.services.license_service import feature_enabled
from flask import jsonify
if not feature_enabled('watchers'):
return jsonify({'error': 'Ticket watchers require a Business or Enterprise license.'}), 403
ticket = db.session.get(Ticket, ticket_id) or abort(404)
if not current_user.is_it_staff and ticket.created_by_id != current_user.id:
abort(403)
TicketWatcher.query.filter_by(ticket_id=ticket_id, user_id=current_user.id).delete()
db.session.commit()
from flask import jsonify
return jsonify({'watching': False})
@@ -1027,6 +1033,13 @@ def unwatch_ticket(ticket_id):
@tickets_bp.route('/tickets/<int:ticket_id>/log-time', methods=['POST'])
@login_required
def log_time(ticket_id):
from app.services.license_service import feature_enabled
if not feature_enabled('time_tracking'):
if request.headers.get('X-Requested-With') == 'XMLHttpRequest':
from flask import jsonify
return jsonify({'error': 'Time tracking requires a Business or Enterprise license.'}), 403
flash('Time tracking requires a Business or Enterprise license.', 'warning')
return redirect(url_for('tickets.ticket_detail', ticket_id=ticket_id))
if not current_user.is_it_staff:
abort(403)
ticket = db.session.get(Ticket, ticket_id) or abort(404)