dailyoverview/routes.py

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'))