diff options
-rw-r--r-- | workshop_app/admin.py | 14 | ||||
-rw-r--r-- | workshop_app/forms.py | 4 | ||||
-rw-r--r-- | workshop_app/models.py | 35 | ||||
-rw-r--r-- | workshop_app/templates/workshop_app/my_workshops.html | 23 | ||||
-rw-r--r-- | workshop_app/views.py | 48 |
5 files changed, 56 insertions, 68 deletions
diff --git a/workshop_app/admin.py b/workshop_app/admin.py index e713589..8a0a8c5 100644 --- a/workshop_app/admin.py +++ b/workshop_app/admin.py @@ -6,7 +6,7 @@ from django.http import HttpResponse from .models import ( Profile, WorkshopType, Workshop, - Testimonial, ProfileComments, Banner + Testimonial, ProfileComments, Banner, AttachmentFile ) try: @@ -44,8 +44,8 @@ class ProfileAdmin(admin.ModelAdmin): class WorkshopAdmin(admin.ModelAdmin): - list_display = ['title', 'instructor', 'date', 'status', 'coordinator'] - list_filter = ['title', 'date'] + list_display = ['workshop_type', 'instructor', 'date', 'status', 'coordinator'] + list_filter = ['workshop_type', 'date'] actions = ['download_csv'] def download_csv(self, request, queryset): @@ -53,7 +53,7 @@ class WorkshopAdmin(admin.ModelAdmin): response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment;filename=workshop_data.csv' writer = csv.writer(response) - writer.writerow(['title', 'date', 'instructor', 'coordinator', 'status']) + writer.writerow(['workshop_type', 'date', 'instructor', 'coordinator', 'status']) for q in queryset: writer.writerow([q.title, q.date, q.instructor, q.coordinator, q.status]) @@ -65,10 +65,15 @@ class WorkshopAdmin(admin.ModelAdmin): download_csv.short_description = "Download CSV file for selected stats." +class AttachmentFileInline(admin.TabularInline): + model = AttachmentFile + + class WorkshopTypeAdmin(admin.ModelAdmin): list_display = ['name', 'duration'] list_filter = ['name'] actions = ['download_csv'] + inlines = [AttachmentFileInline] def download_csv(self, request, queryset): openfile = string_io() @@ -123,3 +128,4 @@ admin.site.register(Workshop, WorkshopAdmin) admin.site.register(Testimonial, TestimonialAdmin) admin.site.register(ProfileComments, ProfileCommentAdmin) admin.site.register(Banner) +admin.site.register(AttachmentFile) diff --git a/workshop_app/forms.py b/workshop_app/forms.py index 1bddada..ba21c6b 100644 --- a/workshop_app/forms.py +++ b/workshop_app/forms.py @@ -156,7 +156,7 @@ class CreateWorkshop(forms.ModelForm): class Meta: model = Workshop - fields = ['title'] + fields = ['workshop_type'] # debug : Changed this @@ -171,7 +171,7 @@ class WorkshopForm(forms.ModelForm): super(WorkshopForm, self).__init__(*args, **kwargs) self.fields['tnc_accepted'].label = "" self.fields['tnc_accepted'].required = True - self.fields['title'].label = "Workshop :" + self.fields['workshop_type'].label = "Workshop :" self.fields['date'].label = "Workshop Date :" class Meta: diff --git a/workshop_app/models.py b/workshop_app/models.py index c526999..04aabca 100644 --- a/workshop_app/models.py +++ b/workshop_app/models.py @@ -87,7 +87,7 @@ def has_profile(user): def attachments(instance, filename): - return os.sep.join((instance.name.replace(" ", '_'), filename)) + return os.sep.join((instance.workshop_type.name.replace(" ", '_'), filename)) class Profile(models.Model): @@ -136,11 +136,6 @@ class WorkshopType(models.Model): duration = models.CharField(max_length=32, help_text='Please write this in \ following format eg: 3days, 8hours a day') - attachments = models.FileField(upload_to=attachments, blank=True, - help_text='Please upload workshop documents one by one, \ - ie.workshop schedule, instructions etc. \ - Please Note: Name of Schedule file should be similar to \ - WorkshopType Name') terms_and_conditions = models.TextField() def __str__(self): @@ -149,26 +144,44 @@ class WorkshopType(models.Model): ) +class AttachmentFile(models.Model): + attachments = models.FileField(upload_to=attachments, blank=True, + help_text='Please upload workshop documents one by one, \ + ie.workshop schedule, instructions etc. \ + Please Note: Name of Schedule file should be similar to \ + WorkshopType Name') + workshop_type = models.ForeignKey(WorkshopType, on_delete=models.CASCADE) + + class Workshop(models.Model): """ Contains details of workshops """ coordinator = models.ForeignKey(User, on_delete=models.CASCADE) - instructor = models.ForeignKey(User, null=True, related_name="%(app_label)s_%(class)s_related", on_delete=models.CASCADE) - title = models.ForeignKey(WorkshopType, on_delete=models.CASCADE, help_text='Select the type of workshop.') + instructor = models.ForeignKey(User, null=True, related_name="%(app_label)s_%(class)s_related", + on_delete=models.CASCADE) + workshop_type = models.ForeignKey(WorkshopType, on_delete=models.CASCADE, help_text='Select the type of workshop.') date = models.DateField() - status = models.CharField(max_length=32, default="Pending") + # status = models.CharField(max_length=32, default="Pending") + status_choices = [(0, 'Pending'), + (1, 'Accepted'), + (2, 'Deleted')] + + status = models.IntegerField(choices=status_choices, default=0) tnc_accepted = models.BooleanField(help_text="I accept the terms and conditions") def __str__(self): return u"{0} | {1} | {2} | {3} | {4}".format( self.date, - self.title, + self.workshop_type, self.coordinator, self.instructor, - self.status + self.status_choices[self.status][1] ) + def get_status(self): + return str(self.status_choices[self.status][1]) + class Testimonial(models.Model): """ diff --git a/workshop_app/templates/workshop_app/my_workshops.html b/workshop_app/templates/workshop_app/my_workshops.html index a22dced..735e6b5 100644 --- a/workshop_app/templates/workshop_app/my_workshops.html +++ b/workshop_app/templates/workshop_app/my_workshops.html @@ -179,7 +179,7 @@ {% for workshop in workshops %} <tbody> <tr> - {% if workshop.status == 'Pending' and workshop.instructor %} + {% if workshop.status == 0 and workshop.instructor %} {% if request.user.profile.position == 'instructor' %} <td><a href="{{ URL_ROOT }}/view_comment_profile/{{ workshop.coordinator.profile.user.id }}"> {{ workshop.coordinator.get_full_name }}</a></td> @@ -190,7 +190,7 @@ <td>{{ workshop.date | date }}</td> <td><span class = "label label-warning">{{ workshop.status }}</span></td> {% endif %} - {% if request.user.profile.position == 'instructor' and workshop.status == 'Pending' and workshop.instructor %} + {% if request.user.profile.position == 'instructor' and workshop.status == 0 and workshop.instructor %} <td><button class="btn btn-primary btn-sm" id="book-btn" onClick="sendData('{{workshop.coordinator}},{{workshop.date| safe}},{{ workshop.title_id }},ACCEPTED')" data-toggle="popover" title="Please Note" data-content="Once Accepted you can't Reject, you have to personally contact the Coordinator if the workshop is to be cancelled"> Accept</button></td> <td><button class="btn btn-danger btn-sm" id="book-btn" onClick="sendData('{{workshop.coordinator}},{{workshop.date| safe}},{{ workshop.title_id }},REJECTED')" data-toggle="popover" title="Please Note" data-content="Once Rejected you cannot revoke this action."> Reject </button></td> {% endif %} @@ -236,9 +236,14 @@ class="datepicker" onclick="changeDate('R,{{ workshop.date| safe}}, {{forloop.counter}}')"> </span> <div class="myDialogR{{forloop.counter}}" style="display: none;" title="Select New Date"> - - <input type="text" class="rDate{{forloop.counter}}" /><br> - <button class="btn btn-primary btn-xs" type="submit" onclick="submitNewDate('{{forloop.counter}},R,{{workshop.instructor_id}},{{workshop.coordinator_id}},{{ workshop.title_id }},{{ workshop.date | safe}}')">Save</button> + <form method="post"> + <input type="text" name="new_date" class="rDate{{forloop.counter}}" /><br> + <input type="hidden" name="action" value="change_date"> + <input type="hidden" name="workshop_id" value="{{ workshop.id }}"> + <input type="hidden" name="cid" value="{{ workshop.coordinator.id }}"> + {% csrf_token %} + <button class="btn btn-primary btn-xs" type="submit" >Save</button> + </form> </div> </td> {% else %} @@ -306,18 +311,18 @@ {% for workshop in workshops %} <tbody> <tr> - {% if workshop.status == 'Pending' and workshop.tnc_accepted %} + {% if workshop.status == 0 and workshop.tnc_accepted %} {% if request.user.profile.position == 'instructor' %} <td><a href="{{ URL_ROOT }}/view_comment_profile/{{ workshop.coordinator.profile.user.id }}"> {{ workshop.coordinator.get_full_name }}</a></td> <td>{{ workshop.coordinator.profile.institute }}</td> {% endif %} - <td>{{ workshop.title }}</td> + <td>{{ workshop.workshop_type }}</td> <td>{{ workshop.date | date }}</td> - <td><span class = "label label-warning">{{ workshop.status }}</span></td> - {% if request.user.profile.position == 'instructor' and workshop.status == 'Pending' %} + <td><span class = "label label-warning">{{ workshop.get_status }}</span></td> + {% if request.user.profile.position == 'instructor' and workshop.status == 0 %} <td><form method="post"> <input type="hidden" name="action" value="approve"> <input type="hidden" name="workshop_id" value="{{ workshop.id }}"> diff --git a/workshop_app/views.py b/workshop_app/views.py index a5a7f66..b2ce129 100644 --- a/workshop_app/views.py +++ b/workshop_app/views.py @@ -442,7 +442,7 @@ def my_workshops(request): if request.method == 'POST': client_data = request.POST action = request.POST.get('action') - if action == 'accept' or 'approve': + if action == 'accept' or action == 'approve': workshop_status = Workshop.objects.get(id=client_data.get('workshop_id')) # Change Status of the selected workshop workshop_status.status = 'ACCEPTED' @@ -477,38 +477,6 @@ def my_workshops(request): phone_number=inum ) - elif action == 'reject': - # Change Status of the selected workshop - workshop_status = RequestedWorkshop.objects.get(id=client_data.get('workshop_id')) - workshop_status.status = 'REJECTED' - workshop_status.save() - ws = workshop_status - # Parameters for emails - wtitle = ws.requested_workshop_title.workshoptype_name - cmail = ws.requested_workshop_coordinator.email - cname = ws.requested_workshop_coordinator.profile.user.get_full_name() - cnum = ws.requested_workshop_coordinator.profile.phone_number - cinstitute = ws.requested_workshop_coordinator.profile.institute - workshop_date = str(ws.requested_workshop_date) - - # For Instructor - send_email(request, call_on='Booking Request Rejected', - user_position='instructor', - workshop_date=workshop_date, - workshop_title=wtitle, - user_name=str(cname), - other_email=cmail, - phone_number=cnum, - institute=cinstitute - ) - - # For Coordinator - send_email(request, call_on='Booking Request Rejected', - workshop_date=workshop_date, - workshop_title=wtitle, - other_email=cmail - ) - elif action == 'change_date': cid = client_data.get('cid') new_workshop_date = datetime.strptime(client_data.get('new_date'), "%Y-%m-%d") @@ -518,14 +486,9 @@ def my_workshops(request): # Invalid date pass else: - if client_data.get('workshop_type') == 'requested': - workshop = RequestedWorkshop.objects.filter(id=client_data.get('workshop_id')) - workshop_date = workshop[0].requested_workshop_date - workshop.update(requested_workshop_date=new_workshop_date) - else: - workshop = ProposeWorkshopDate.objects.objects.filter(id=client_data.get('workshop_id')) - workshop_date = workshop.proposed_workshop_date - workshop.update(proposed_workshop_date=new_workshop_date) + workshop = Workshop.objects.filter(id=client_data.get('workshop_id')) + workshop_date = workshop[0].date + workshop.update(date=new_workshop_date) # For Instructor send_email(request, call_on='Change Date', @@ -575,6 +538,7 @@ def my_workshops(request): workshops = Workshop.objects.filter( coordinator=user.id ).order_by('-date') + print(workshops) return render(request, 'workshop_app/my_workshops.html', {"workshops": workshops}) else: @@ -600,7 +564,7 @@ def propose_workshop(request): # Avoiding Duplicate workshop entries for same date and workshop_title if Workshop.objects.filter( date=form_data.date, - title=form_data.title, + workshop_type=form_data.workshop_type, coordinator=form_data.coordinator ).exists(): return redirect('/my_workshops/') |