From 912a63cd103c229d9a157f88616b5a3bd39938ab Mon Sep 17 00:00:00 2001 From: extremeunix Date: Sun, 1 Jun 2014 10:45:49 +0530 Subject: [PATCH] [Fixes #10] Feature: bulk creation events --- cito/templates/bulk_upload.html | 51 ++++++++++++++++++++++ cito/templates/generic_form.html | 3 +- cito/templates/top_nav_bar.html | 15 +++++++ cito/urls.py | 7 ++- cito_engine/forms/tools_form.py | 10 +++++ cito_engine/views/tools.py | 73 ++++++++++++++++++++++++++++++++ 6 files changed, 157 insertions(+), 2 deletions(-) create mode 100644 cito/templates/bulk_upload.html create mode 100644 cito_engine/forms/tools_form.py create mode 100644 cito_engine/views/tools.py diff --git a/cito/templates/bulk_upload.html b/cito/templates/bulk_upload.html new file mode 100644 index 0000000..26fa363 --- /dev/null +++ b/cito/templates/bulk_upload.html @@ -0,0 +1,51 @@ +{% include 'header.html' %} + + +{% include 'top_nav_bar.html' %} + +
+ {% include 'noscript.html' %} +
+ + {% if not errors %} +
+
+
+

{{ box_title }}

+
+ +
+
+ {% csrf_token %} + {{ formset.management_form }} + {% for form in formset %} +

Event {{ forloop.counter }}

+ + {{ form }} +
+ + {% endfor %} +
+ + +
+
+ +
+
+
+ {% elif errors %} +{#
#} +
+
    + {% for error in errors %} +
  • {{ error }}
  • + {% endfor %} +
+
+ +{#
#} + {% endif %} +
+
+{% include 'footer.html' %} \ No newline at end of file diff --git a/cito/templates/generic_form.html b/cito/templates/generic_form.html index cf2a811..52b422e 100644 --- a/cito/templates/generic_form.html +++ b/cito/templates/generic_form.html @@ -15,7 +15,8 @@

{{ box_title }}

-
{% csrf_token %} + + {% csrf_token %} {% for field in form.hidden_fields %} {{ field }} diff --git a/cito/templates/top_nav_bar.html b/cito/templates/top_nav_bar.html index 145d8d8..dbd3b41 100644 --- a/cito/templates/top_nav_bar.html +++ b/cito/templates/top_nav_bar.html @@ -84,6 +84,21 @@ + + + + +
diff --git a/cito/urls.py b/cito/urls.py index e203c6c..f8e3402 100644 --- a/cito/urls.py +++ b/cito/urls.py @@ -87,4 +87,9 @@ urlpatterns += patterns('', url(r'^content/(?P.*)$', 'django.views.static.serve', - {'document_root': settings.STATIC_FILES}),) \ No newline at end of file + {'document_root': settings.STATIC_FILES}),) + +urlpatterns += patterns('', + url(r'^tools/bulkupload/(?P\w+)/$', 'cito_engine.views.tools.show_bulk_upload_form'), + url(r'^tools/bulkupload/events/confirm/$', 'cito_engine.views.tools.bulk_upload_events'), +) \ No newline at end of file diff --git a/cito_engine/forms/tools_form.py b/cito_engine/forms/tools_form.py new file mode 100644 index 0000000..3eb88e8 --- /dev/null +++ b/cito_engine/forms/tools_form.py @@ -0,0 +1,10 @@ +from django import forms + + +class BulkUploadForm(forms.Form): + + list_of_items = forms.CharField(widget=forms.Textarea, label='Paste items here') + + def __init__(self, *args, **kwargs): + super(BulkUploadForm, self).__init__(*args, **kwargs) + self.fields['list_of_items'].widget.attrs['rows'] = "15" \ No newline at end of file diff --git a/cito_engine/views/tools.py b/cito_engine/views/tools.py new file mode 100644 index 0000000..e65ef91 --- /dev/null +++ b/cito_engine/views/tools.py @@ -0,0 +1,73 @@ +"""Copyright 2014 Cyrus Dasadia + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +""" + +from django.shortcuts import get_object_or_404, redirect, render_to_response +from django.forms.formsets import formset_factory +from django.forms import ValidationError +from django.contrib.auth.decorators import login_required +from django.template import RequestContext +from cito_engine.forms import tools_form, events + + +@login_required(login_url='/login/') +def bulk_upload_events(request): + BulkEventsFormset = formset_factory(events.EventForm, extra=0) + render_vars = dict() + if request.method != 'POST': + return redirect('/incidents/') + else: + print request.POST.keys() + # list_of_events = request.POST.get('list_of_items') + # If we got a bunch of lines for events + if 'list_of_items' in request.POST: + list_of_events = request.POST.get('list_of_items') + initial_data = [] + if list_of_events: + for event_summary in list_of_events.splitlines(): + initial_data.append({'summary': event_summary, + 'description': event_summary, + 'severity': 'S3', + 'team': request.user.team_set.all()[0], + }) + render_vars['formset'] = BulkEventsFormset(initial=initial_data) + else: + render_vars['errors'] = ['List was empty!'] + + # We got the formset + elif 'form-INITIAL_FORMS' in request.POST: + render_vars['formset'] = BulkEventsFormset(request.POST) + user_teams = request.user.team_set.all() + if render_vars['formset'].is_valid(): + for form in render_vars['formset']: + if form.cleaned_data.get('team') not in user_teams: + render_vars['errors'] = ['Cannot add event for %s, you are not a member of this team.' % + form.cleaned_data.get('team')] + return render_to_response('bulk_upload.html', render_vars, + context_instance=RequestContext(request)) + else: + form.save() + return redirect('/events/') + return render_to_response('bulk_upload.html', render_vars, context_instance=RequestContext(request)) + + + +@login_required(login_url='/login/') +def show_bulk_upload_form(request, upload_item): + form = tools_form.BulkUploadForm() + render_vars = dict() + render_vars['form'] = form + if upload_item == 'events': + render_vars['form_action'] = '/tools/bulkupload/events/confirm/' + return render_to_response('generic_form.html', render_vars, context_instance=RequestContext(request))