from flask import render_template, redirect, url_for, request, jsonify from models import db, Ticket, Note, Company, Onsite from forms import TicketForm, NoteForm, CompanyForm, OnsiteForm from datetime import datetime, date def register_routes(app): @app.route('/') def index(): today = date.today() open_tickets = Ticket.query.filter(Ticket.status == 'Open', Ticket.archived == False).all() closed_tickets = Ticket.query.filter(Ticket.status == 'Closed', Ticket.archived == False).all() onsites = {day: Onsite.query.filter_by(day_of_week=day).all() for day in ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']} return render_template('index.html', open_tickets=open_tickets, closed_tickets=closed_tickets, onsites=onsites) @app.route('/overview') def overview(): today = date.today() open_tickets = Ticket.query.filter(Ticket.status == 'Open', Ticket.archived == False).all() closed_tickets = Ticket.query.filter(Ticket.status == 'Closed', Ticket.archived == False).all() onsites = {day: Onsite.query.filter_by(day_of_week=day).all() for day in ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']} return render_template('overview.html', open_tickets=open_tickets, closed_tickets=closed_tickets, onsites=onsites) @app.route('/add_ticket', methods=['GET', 'POST']) def add_ticket(): form = TicketForm() form.company.choices = [(company.id, company.name) for company in Company.query.all()] if form.validate_on_submit(): new_ticket = Ticket( company_id=form.company.data, name=form.name.data, subject=form.subject.data, ticket_number=form.ticket_number.data, status=form.status.data, created_at=datetime.utcnow() ) db.session.add(new_ticket) db.session.commit() return redirect(url_for('index')) return render_template('add_ticket.html', form=form) @app.route('/add_note/', methods=['GET', 'POST']) def add_note(ticket_id): form = NoteForm() ticket = Ticket.query.get(ticket_id) if form.validate_on_submit(): new_note = Note(ticket_id=ticket_id, note=form.note.data, created_at=datetime.utcnow()) db.session.add(new_note) db.session.commit() return redirect(url_for('index')) return render_template('add_note.html', form=form, ticket_id=ticket_id, ticket=ticket) @app.route('/close_ticket/', methods=['GET']) def close_ticket(ticket_id): ticket = Ticket.query.get(ticket_id) if ticket: ticket.status = 'Closed' ticket.closed_at = datetime.utcnow() db.session.commit() return redirect(url_for('index')) @app.route('/archive_ticket/', methods=['GET']) def archive_ticket(ticket_id): ticket = Ticket.query.get(ticket_id) if ticket: ticket.archived = True db.session.commit() return redirect(url_for('index')) @app.route('/archive_note/', methods=['GET']) def archive_note(note_id): note = Note.query.get(note_id) if note: note.archive = True db.session.commit() return redirect(url_for('index')) @app.route('/delete_ticket/', methods=['GET']) def delete_ticket(ticket_id): ticket = Ticket.query.get(ticket_id) if ticket: db.session.delete(ticket) db.session.commit() return redirect(url_for('all_tickets')) @app.route('/all_tickets') def all_tickets(): closed_tickets = Ticket.query.filter_by(status='Closed').all() open_tickets = Ticket.query.filter_by(status='Open').all() return render_template('all_tickets.html', closed_tickets=closed_tickets, open_tickets=open_tickets) @app.route('/companies', methods=['GET', 'POST']) def companies(): form = CompanyForm() if form.validate_on_submit(): new_company = Company(name=form.name.data) db.session.add(new_company) db.session.commit() return redirect(url_for('companies')) all_companies = Company.query.all() return render_template('companies.html', form=form, companies=all_companies) @app.route('/add_onsite', methods=['GET', 'POST']) def add_onsite(): form = OnsiteForm() if form.validate_on_submit(): new_onsite = Onsite( company_id=form.company.data, day_of_week=form.day_of_week.data, note=form.note.data ) db.session.add(new_onsite) db.session.commit() return redirect(url_for('index')) return render_template('add_onsite.html', form=form) @app.route('/delete_onsite/', methods=['GET']) def delete_onsite(onsite_id): onsite = Onsite.query.get(onsite_id) if onsite: db.session.delete(onsite) db.session.commit() return redirect(url_for('index')) @app.route('/update_ticket/', methods=['POST']) def update_ticket(ticket_id): data = request.get_json() ticket = Ticket.query.get(ticket_id) if ticket: if data['field'] == 'company_id': company = Company.query.filter_by(name=data['value']).first() if company: ticket.company_id = company.id elif data['field'] == 'name': ticket.name = data['value'] elif data['field'] == 'subject': ticket.subject = data['value'] elif data['field'] == 'ticket_number': ticket.ticket_number = data['value'] db.session.commit() return jsonify(success=True) return jsonify(success=False), 400 @app.route('/reopen_ticket/', methods=['GET']) def reopen_ticket(ticket_id): ticket = Ticket.query.get(ticket_id) if ticket: ticket.status = 'Open' ticket.archived = False db.session.commit() return redirect(url_for('index'))