152 lines
6.2 KiB
Python
152 lines
6.2 KiB
Python
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/<int:ticket_id>', 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/<int:ticket_id>', 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/<int:ticket_id>', 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/<int:note_id>', 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/<int:ticket_id>', 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/<int:onsite_id>', 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/<int:ticket_id>', 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/<int:ticket_id>', 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'))
|