def create_ticket(): data = request.get_json() or {} if 'title' not in data or 'content' not in data or 'category_id' not in data or 'ticket_priority_id' not in data: return bad_request('Must include title, content, category_id and ticket_priority_id.') if not isinstance(data['category_id'], int) or not isinstance(data['ticket_priority_id'], int): return bad_request('ticket_priority_id and category_id must be integers.') if not FlicketCategory.query.filter_by(id=data['category_id']).first(): return bad_request('not a valid category_id') if not FlicketPriority.query.filter_by(id=data['ticket_priority_id']).first(): return bad_request('not a valid ticket_priority_id') ticket = FlicketTicket() ticket.from_dict(data) ticket.started_id = g.current_user.id ticket.date_added = datetime.datetime.now() ticket.status_id = 1 db.session.add(ticket) db.session.commit() response = jsonify(ticket.to_dict()) response.status_code = 201 response.headers['Location'] = url_for('bp_api.get_ticket', id=ticket.id) return response
def topic_creation(): # if the number of topics is already satisfied don't add any more. topic_count = FlicketTicket.query.count() if topic_count == num_topics: print('Topic number already satisfied') return for i in range(topic_count, num_topics): new_ticket = FlicketTicket( title=get_random_words(), content=get_random_sentence(), user=get_random_user(), date_added=datetime.datetime.now(), current_status=get_random_status(), ticket_priority=get_random_priority(), category=get_random_category(), assigned=get_random_user() ) db.session.add(new_ticket) mess_1 = "#{}: ticket ....".format(i) print(mess_1, end="\r") replies = randint(0, num_replies) for ii in range(0, replies): create_ticket_reply(new_ticket) mess_2 = mess_1 + "adding replies ... # {}".format(ii) print(mess_2, end="\r") db.session.commit()
def get_tickets(page=1): # todo: add filtering tickets = FlicketTicket.query per_page = min(request.args.get('per_page', app.config['posts_per_page'], type=int), 100) data = FlicketTicket.to_collection_dict(tickets, page, per_page, 'bp_api.get_tickets') return jsonify(data)
def create_ticket(title=None, user=None, content=None, priority=None, category=None, files=None, hours=0): """ :param title: :param user: :param content: :param priority: :param category: :param files: :param hours: :return: """ ticket_status = FlicketStatus.query.filter_by(status="Open").first() ticket_priority = FlicketPriority.query.filter_by( id=int(priority)).first() ticket_category = FlicketCategory.query.filter_by( id=int(category)).first() upload_attachments = UploadAttachment(files) if upload_attachments.are_attachments(): upload_attachments.upload_files() date_added = datetime.datetime.now() # submit ticket data to database new_ticket = FlicketTicket( title=title, date_added=date_added, user=user, current_status=ticket_status, content=content, ticket_priority=ticket_priority, category=ticket_category, hours=hours, last_updated=date_added, ) db.session.add(new_ticket) # add attachments to the database upload_attachments.populate_db(new_ticket) # subscribe user to ticket. subscribe = FlicketSubscription(user=user, ticket=new_ticket) db.session.add(subscribe) # add count of 1 to users total posts. user.total_posts += 1 db.session.commit() return new_ticket
def tickets(page=1): form = SearchTicketForm() # get request arguments from the url status = request.args.get('status') department = request.args.get('department') category = request.args.get('category') content = request.args.get('content') user_id = request.args.get('user_id') if form.validate_on_submit(): redirect_url = FlicketTicket.form_redirect(form, url='flicket_bp.tickets') return redirect(redirect_url) ticket_query, form = FlicketTicket.query_tickets(form, department=department, category=category, status=status, user_id=user_id, content=content) number_results = ticket_query.count() ticket_query = ticket_query.paginate(page, app.config['posts_per_page']) title = gettext('Tickets') # todo: pull from api on page load as other fields? if content: form.content.data = content return render_template('flicket_tickets.html', title=title, form=form, tickets=ticket_query, page=page, number_results=number_results, status=status, department=department, category=category, user_id=user_id, base_url='flicket_bp.tickets')
def tickets_csv(): # get request arguments from the url status = request.args.get("status") institute = request.args.get("institute") domain = request.args.get("domain") content = request.args.get("content") requester = request.args.get("requester") referee = request.args.get("referee") user_id = request.args.get("user_id") ticket_query, form = FlicketTicket.query_tickets( institute=institute, domain=domain, status=status, user_id=user_id, content=content, requester=requester, referee=referee, ) ticket_query = ticket_query.limit(app.config["csv_dump_limit"]) date_stamp = datetime.now().strftime("%Y%m%d-%H%M%S") file_name = date_stamp + "ticketdump.csv" csv_contents = "Ticket_ID,Title,Submitted By,Date,Replies,Total Days,Institute,Domain,Assigned,URL\n" for ticket in ticket_query: if hasattr(ticket.assigned, "name"): _name = ticket.assigned.name else: _name = ticket.user.name csv_contents += ( f"{ticket.id_zfill}," f"{clean_csv_data(ticket.title)}," f'"{ticket.user.name}",' f'{ticket.date_added.strftime("%Y-%m-%d")},' f"{ticket.num_replies}," f"{ticket.total_days}," f"{clean_csv_data(ticket.institute.institute)}," f"{clean_csv_data(ticket.domain.domain)}," f"{_name}," f'{app.config["base_url"]}' f'{url_for("flicket_bp.ticket_view", ticket_id=ticket.id)}\n') return Response( csv_contents, mimetype="text/csv", headers={"Content-disposition": f"attachment; filename={file_name}"}, )
def ticket_create(): form = CreateTicketForm() if form.validate_on_submit(): # this is a new post so ticket status is 'open' ticket_status = FlicketStatus.query.filter_by(status='open').first() ticket_priority = FlicketPriority.query.filter_by( id=int(form.priority.data)).first() ticket_category = FlicketCategory.query.filter_by( id=int(form.category.data)).first() files = request.files.getlist("file") upload_attachments = UploadAttachment(files) if upload_attachments.are_attachements(): upload_attachments.upload_files() # submit ticket data to database new_ticket = FlicketTicket(title=form.title.data, date_added=datetime.datetime.now(), user=g.user, current_status=ticket_status, content=form.content.data, ticket_priority=ticket_priority, category=ticket_category) db.session.add(new_ticket) # add attachments to the dataabase. upload_attachments.populate_db(new_ticket) # subscribe user to ticket subscribe = FlicketSubscription(user=g.user, ticket=new_ticket) db.session.add(subscribe) # commit changes to the database db.session.commit() # send email # TEST SEND EMAIL HERE f_mail = FlicketMail() f_mail.create_ticket(ticket=new_ticket) flash('New Ticket created.', category='success') return redirect( url_for('flicket_bp.ticket_view', ticket_id=new_ticket.id)) return render_template('flicket_create.html', title='Flicket - Create Ticket', form=form)
def index(): """ View showing flicket main page. We use this to display some statistics.""" days = 7 # CAROUSEL tickets = FlicketTicket.carousel_query() # PIE CHARTS ids, graph_json = create_pie_chart_dict() return render_template('flicket_index.html', days=days, tickets=tickets, ids=ids, graph_json=graph_json)
def __init__(self, user): title = 'I have a problem with my mouse' content = 'It squeeks! most troublesome.' status = FlicketStatus.query.first() priority = FlicketPriority.query.first() category = FlicketCategory.query.first() self.ticket = FlicketTicket(title=title, date_added=datetime.datetime.now(), user=user, current_status=status, content=content, ticket_priority=priority, category=category) db.session.add(self.ticket) db.session.commit()
def tickets_csv(): # get request arguments from the url status = request.args.get('status') department = request.args.get('department') category = request.args.get('category') content = request.args.get('content') user_id = request.args.get('user_id') ticket_query, form = FlicketTicket.query_tickets(department=department, category=category, status=status, user_id=user_id, content=content) ticket_query = ticket_query.limit(app.config['csv_dump_limit']) date_stamp = datetime.now().strftime("%Y%m%d-%H%M%S") file_name = date_stamp + 'ticketdump.csv' csv_contents = 'Ticket_ID,Priority,Title,Submitted By,Date,Replies,Category,Status,Assigned,URL\n' for ticket in ticket_query: if hasattr(ticket.assigned, 'name'): _name = ticket.assigned.name else: _name = 'Not assigned' csv_contents += '{},{},"{}",{},{},{},{} - {},{},{},{}{}\n'.format(ticket.id_zfill, ticket.ticket_priority.priority, clean_csv_data(ticket.title), ticket.user.name, ticket.date_added.strftime("%Y-%m-%d"), ticket.num_replies, clean_csv_data( ticket.category.department.department), clean_csv_data(ticket.category.category), ticket.current_status.status, _name, app.config["base_url"], url_for("flicket_bp.ticket_view", ticket_id=ticket.id)) return Response( csv_contents, mimetype='text/csv', headers={"Content-disposition": f"attachment; filename={file_name}"} )
def create_ticket(): data = request.get_json() or {} if "title" not in data or "content" not in data or "domain_id" not in data: return bad_request("Must include title, content, domain_id") if not FlicketDomain.query.filter_by(id=data["domain_id"]).first(): return bad_request("not a valid domain_id") ticket = FlicketTicket() ticket.from_dict(data) ticket.started_id = g.current_user.id ticket.date_added = datetime.datetime.now() ticket.status_id = 1 db.session.add(ticket) db.session.commit() response = jsonify(ticket.to_dict()) response.status_code = 201 response.headers["Location"] = url_for("bp_api.get_ticket", id=ticket.id) return response
def topic_creation(num_topics_): # if the number of topics is already satisfied don't add any more. topic_count = FlicketTicket.query.count() if topic_count >= num_topics_: print('Topic number already satisfied') return else: num_topics_ = num_topics_ - topic_count for i in range(topic_count, num_topics_): t = Text() new_ticket = FlicketTicket( title=t.title()[0:field_size['title_max_length']], content=t.text(randint(3, 15)), user=get_random_user(), date_added=datetime.datetime.now(), current_status=get_random_status(), ticket_priority=get_random_priority(), category=get_random_category(), assigned=get_random_user() ) new_ticket.user.total_posts += 1 db.session.add(new_ticket) mess_1 = "#{}: ticket ....".format(i) print(mess_1, end="\r") replies = randint(0, num_replies) for ii in range(0, replies): create_ticket_reply(new_ticket) mess_2 = mess_1 + "adding replies ... # {}".format(ii) print(mess_2, end="\r") db.session.commit()
def create_ticket( title=None, user=None, content=None, requester=None, referee=None, requester_role=None, request_stage=None, procedure_stage=None, domain=None, institute=None, files=None, days=0, ): """ :param title: :param user: :param content: :param requester: :param requester_role: :param domain: :param files: :param days: :return: """ ticket_status = FlicketStatus.query.filter_by(status="Open").first() ticket_institute = FlicketInstitute.query.filter_by( id=int(institute)).first() ticket_domain = FlicketDomain.query.filter_by(id=int(domain)).first() requester_role = FlicketRequesterRole.query.filter_by( id=int(requester_role)).first() request_stage = FlicketRequestStage.query.filter_by( request_stage="New").first() procedure_stage = FlicketProcedureStage.query.filter_by( id=int(procedure_stage)).first() upload_attachments = UploadAttachment(files) if upload_attachments.are_attachments(): upload_attachments.upload_files() # submit ticket data to database new_ticket = FlicketTicket( title=title, date_added=datetime.datetime.now(), user=user, current_status=ticket_status, content=content, institute=ticket_institute, requester=requester, referee=referee, requester_role=requester_role, request_stage=request_stage, procedure_stage=procedure_stage, domain=ticket_domain, days=days, ) db.session.add(new_ticket) # add attachments to the database upload_attachments.populate_db(new_ticket) # subscribe user to ticket. subscribe = FlicketSubscription(user=user, ticket=new_ticket) db.session.add(subscribe) # add count of 1 to users total posts. user.total_posts += 1 db.session.commit() return new_ticket
def tickets_view(page, is_my_view=False): """ Function common to 'tickets' and 'my_tickets' expect where query is filtered for users own tickets. """ form = SearchTicketForm() # get request arguments from the url status = request.args.get('status') department = request.args.get('department') category = request.args.get('category') content = request.args.get('content') user_id = request.args.get('user_id') if form.validate_on_submit(): redirect_url = FlicketTicket.form_redirect(form, url='flicket_bp.tickets') return redirect(redirect_url) arg_sort = request.args.get('sort') if arg_sort: args = request.args.copy() del args['sort'] response = make_response( redirect(url_for('flicket_bp.tickets', **args))) response.set_cookie('tickets_sort', arg_sort, max_age=2419200, path=url_for('flicket_bp.tickets', **args)) return response sort = request.cookies.get('tickets_sort') if sort: set_cookie = True else: sort = 'priority_desc' set_cookie = False ticket_query, form = FlicketTicket.query_tickets(form, department=department, category=category, status=status, user_id=user_id, content=content) if is_my_view: ticket_query = FlicketTicket.my_tickets(ticket_query) ticket_query = FlicketTicket.sorted_tickets(ticket_query, sort) number_results = ticket_query.count() ticket_query = ticket_query.paginate(page, app.config['posts_per_page']) title = gettext('Tickets') if is_my_view: title = gettext('My Tickets') if content: form.content.data = content response = make_response( render_template('flicket_tickets.html', title=title, form=form, tickets=ticket_query, page=page, number_results=number_results, status=status, department=department, category=category, user_id=user_id, sort=sort, base_url='flicket_bp.tickets')) if set_cookie: response.set_cookie('tickets_sort', sort, max_age=2419200, path=url_for('flicket_bp.tickets')) return response
def tickets_view(page, is_my_view=False): """ Function common to 'tickets' and 'my_tickets' expect where query is filtered for users own tickets. """ form = SearchTicketForm() # get request arguments from the url status = request.args.get("status") institute = request.args.get("institute") domain = request.args.get("domain") content = request.args.get("content") requester = request.args.get("requester") referee = request.args.get("referee") user_id = request.args.get("user_id") requester_role = request.args.get("requester_role") request_stage = request.args.get("request_stage") procedure_stage = request.args.get("procedure_stage") if form.validate_on_submit(): redirect_url = FlicketTicket.form_redirect(form, url="flicket_bp.tickets") return redirect(redirect_url) arg_sort = request.args.get("sort") if arg_sort: print(arg_sort) args = request.args.copy() del args["sort"] response = make_response( redirect(url_for("flicket_bp.tickets", **args))) response.set_cookie( "tickets_sort", arg_sort, max_age=2419200, path=url_for("flicket_bp.tickets", **args), ) return response sort = request.cookies.get("tickets_sort") if sort: set_cookie = True else: sort = "date_desc" set_cookie = False ticket_query, form = FlicketTicket.query_tickets( form, institute=institute, domain=domain, status=status, user_id=user_id, content=content, requester=requester, referee=referee, requester_role=requester_role, request_stage=request_stage, procedure_stage=procedure_stage, ) if is_my_view: ticket_query = FlicketTicket.my_tickets(ticket_query) ticket_query = FlicketTicket.sorted_tickets(ticket_query, sort) number_results = ticket_query.count() ticket_query = ticket_query.paginate(page, app.config["posts_per_page"]) title = gettext("Tickets") if is_my_view: title = gettext("My Tickets") if content: form.content.data = content if requester: form.requester.data = requester if referee: form.referee.data = referee response = make_response( render_template( "flicket_tickets.html", title=title, form=form, tickets=ticket_query, page=page, number_results=number_results, status=status, institute=institute, domain=domain, requester_role=requester_role, request_stage=request_stage, procedure_stage=procedure_stage, user_id=user_id, sort=sort, base_url="flicket_bp.tickets", )) if set_cookie: response.set_cookie("tickets_sort", sort, max_age=2419200, path=url_for("flicket_bp.tickets")) return response
def tickets(page=1): form = SearchTicketForm() # get request arguments from the url status = request.args.get('status') department = request.args.get('department') category = request.args.get('category') content = request.args.get('content') user_id = request.args.get('user_id') if form.validate_on_submit(): redirect_url = FlicketTicket.form_redirect(form, url='flicket_bp.tickets') return redirect(redirect_url) sort = request.args.get('sort') if sort: args = request.args.copy() del args['sort'] response = make_response( redirect(url_for('flicket_bp.tickets', **args))) response.set_cookie('tickets_sort', sort, max_age=2419200, path=url_for('flicket_bp.tickets')) return response sort = request.cookies.get('tickets_sort') if sort: set_cookie = True else: sort = 'priority_desc' set_cookie = False ticket_query, form = FlicketTicket.query_tickets(form, department=department, category=category, status=status, user_id=user_id, content=content) ticket_query = FlicketTicket.sorted_tickets(ticket_query, sort) number_results = ticket_query.count() ticket_query = ticket_query.paginate(page, app.config['posts_per_page']) title = gettext('Tickets') # todo: pull from api on page load as other fields? if content: form.content.data = content response = make_response( render_template('flicket_tickets.html', title=title, form=form, tickets=ticket_query, page=page, number_results=number_results, status=status, department=department, category=category, user_id=user_id, sort=sort, base_url='flicket_bp.tickets')) if set_cookie: response.set_cookie('tickets_sort', sort, max_age=2419200, path=url_for('flicket_bp.tickets')) return response