summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--workshop_app/admin.py14
-rw-r--r--workshop_app/forms.py4
-rw-r--r--workshop_app/models.py35
-rw-r--r--workshop_app/templates/workshop_app/my_workshops.html23
-rw-r--r--workshop_app/views.py48
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/')