From 198431be862cea5fe369fc07bca3e435ce2f7d79 Mon Sep 17 00:00:00 2001
From: pnshiralkar
Date: Thu, 7 May 2020 13:58:16 +0530
Subject: Add workshop types done without attachment files
---
workshop_app/forms.py | 15 +++++-
.../templates/workshop_app/add_workshop_type.html | 50 ++++++++++++++++++
.../workshop_app/workshop_type_details.html | 33 +++++++++---
.../templates/workshop_app/workshop_type_list.html | 60 ++++------------------
workshop_app/urls.py | 3 +-
workshop_app/views.py | 23 +++++++--
6 files changed, 121 insertions(+), 63 deletions(-)
create mode 100644 workshop_app/templates/workshop_app/add_workshop_type.html
diff --git a/workshop_app/forms.py b/workshop_app/forms.py
index 334bd4e..fcb34c4 100644
--- a/workshop_app/forms.py
+++ b/workshop_app/forms.py
@@ -3,7 +3,7 @@ from string import punctuation, digits
from django import forms
from django.utils import timezone
-from .models import (Profile, Workshop, ProfileComments, department_choices, title, source, states)
+from .models import (Profile, Workshop, ProfileComments, department_choices, title, source, states, WorkshopType)
try:
from string import letters
@@ -189,3 +189,16 @@ class ProfileCommentsForm(forms.ModelForm):
widgets = {
'comments': forms.CharField(),
}
+
+
+class WorkshopTypeForm(forms.ModelForm):
+ def __init__(self, *args, **kwargs):
+ super(WorkshopTypeForm, self).__init__(*args, **kwargs)
+ for field in self.visible_fields():
+ field.field.widget.attrs['class'] = 'form-control'
+ field.field.widget.attrs['placeholder'] = field.label
+ field.field.widget.attrs['rows'] = 6
+
+ class Meta:
+ model = WorkshopType
+ exclude = []
diff --git a/workshop_app/templates/workshop_app/add_workshop_type.html b/workshop_app/templates/workshop_app/add_workshop_type.html
new file mode 100644
index 0000000..ed28b03
--- /dev/null
+++ b/workshop_app/templates/workshop_app/add_workshop_type.html
@@ -0,0 +1,50 @@
+{% extends 'workshop_app/base.html' %}
+
+{% block title %}
+ Add new Workshop type
+{% endblock %}
+
+{% block content %}
+
+
New Workshop Type
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/workshop_app/templates/workshop_app/workshop_type_details.html b/workshop_app/templates/workshop_app/workshop_type_details.html
index b8d6559..298d976 100644
--- a/workshop_app/templates/workshop_app/workshop_type_details.html
+++ b/workshop_app/templates/workshop_app/workshop_type_details.html
@@ -1,23 +1,40 @@
-
{% extends 'workshop_app/base.html' %}
{% block title %}
- View Workshop details
+ View Workshop details
{% endblock %}
{% block extra %}
-
+
-
-
+
+
{% endblock %}
{% block content %}
-
- {{ workshop_type.description | safe }}
-
+
+
Workshop Details
+
+
+ Workshop Name : |
+ {{ workshop_type.name }} |
+
+
+ Duration : |
+ {{ workshop_type.duration }} |
+
+
+ Description : |
+ {{ workshop_type.description }} |
+
+
+ Terms and Conditions : |
+ {{ workshop_type.terms_and_conditions }} |
+
+
+
{% endblock %}
diff --git a/workshop_app/templates/workshop_app/workshop_type_list.html b/workshop_app/templates/workshop_app/workshop_type_list.html
index 0531864..a3d9c6e 100644
--- a/workshop_app/templates/workshop_app/workshop_type_list.html
+++ b/workshop_app/templates/workshop_app/workshop_type_list.html
@@ -4,55 +4,16 @@
View List of available Workshops
{% endblock %}
-{% block extra %}
-
-
-
-
-
-
- {% endblock %}
-
{% block content %}
-
+
+
Workshop Types
+
+ {% if request.user.profile.position == 'instructor' %}
+
+
+
+
+ {% endif %}
@@ -60,6 +21,7 @@
id |
Workshop Name |
Workshop Duration |
+ Action |
@@ -119,5 +81,5 @@
-
+
{% endblock %}
diff --git a/workshop_app/urls.py b/workshop_app/urls.py
index 4bb140c..76a0be6 100644
--- a/workshop_app/urls.py
+++ b/workshop_app/urls.py
@@ -32,6 +32,7 @@ urlpatterns = [
url(r'^my_workshops/$', views.my_workshops),
url(r'^propose_workshop/$', views.propose_workshop),
url(r'^workshop_types/$', views.workshop_type_list),
- url(r'^workshop_type_details/([1-9][0-9]*)$', views.workshop_type_details),
+ url(r'^workshop_type_details/([1-9][0-9]*)$', views.workshop_type_details, name='workshop_type_details'),
+ url(r'^add_workshop_type$', views.add_workshop_type, name='add_workshop_type'),
url(r'^view_profile/([1-9][0-9]*)$', views.view_comment_profile),
]
diff --git a/workshop_app/views.py b/workshop_app/views.py
index 5d0525c..d71f066 100644
--- a/workshop_app/views.py
+++ b/workshop_app/views.py
@@ -1,3 +1,5 @@
+from django.urls import reverse
+
try:
from StringIO import StringIO as string_io
except ImportError:
@@ -6,13 +8,13 @@ from datetime import datetime
from django.contrib.auth import login, logout, authenticate
from django.contrib.auth.decorators import login_required
-from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
+from django.core.paginator import Paginator
from django.shortcuts import render, redirect
from django.utils import timezone
from .forms import (
UserRegistrationForm, UserLoginForm,
- ProfileForm, WorkshopForm
+ ProfileForm, WorkshopForm, WorkshopTypeForm
)
from .models import (
Profile, User,
@@ -360,13 +362,26 @@ def workshop_type_list(request):
workshop_types = WorkshopType.objects.all()
paginator = Paginator(workshop_types, 12) # Show upto 12 workshops per page
-
page = request.GET.get('page')
- workshop_type = paginator.get_page(paginator.num_pages)
+ workshop_type = paginator.get_page(page)
return render(request, 'workshop_app/workshop_type_list.html', {'workshop_type': workshop_type})
+@login_required
+def add_workshop_type(request):
+ if not is_instructor(request.user):
+ return redirect(get_landing_page(request.user))
+ if request.method == 'POST':
+ form = WorkshopTypeForm(request.POST)
+ if form.is_valid():
+ form_data = form.save()
+ return redirect(reverse('workshop_type_details', args=[form_data.id]))
+ else:
+ form = WorkshopTypeForm
+ return render(request, 'workshop_app/add_workshop_type.html', {'form': form})
+
+
@login_required
def view_comment_profile(request, user_id):
"""instructor can view/post comments on coordinator profile """
--
cgit
From a06daa5d5bbb7225c52292e6b5cfeb624d668bdd Mon Sep 17 00:00:00 2001
From: pnshiralkar
Date: Thu, 7 May 2020 19:39:09 +0530
Subject: File upload done
---
workshop_app/forms.py | 13 ++-
workshop_app/models.py | 2 +-
.../templates/workshop_app/edit_workshop_type.html | 102 +++++++++++++++++++++
workshop_app/urls.py | 2 +-
workshop_app/views.py | 36 +++++++-
5 files changed, 150 insertions(+), 5 deletions(-)
create mode 100644 workshop_app/templates/workshop_app/edit_workshop_type.html
diff --git a/workshop_app/forms.py b/workshop_app/forms.py
index fcb34c4..4bef28c 100644
--- a/workshop_app/forms.py
+++ b/workshop_app/forms.py
@@ -1,9 +1,11 @@
from string import punctuation, digits
from django import forms
+from django.forms import inlineformset_factory
from django.utils import timezone
-from .models import (Profile, Workshop, ProfileComments, department_choices, title, source, states, WorkshopType)
+from .models import (Profile, Workshop, ProfileComments, department_choices, title, source, states, WorkshopType,
+ AttachmentFile)
try:
from string import letters
@@ -202,3 +204,12 @@ class WorkshopTypeForm(forms.ModelForm):
class Meta:
model = WorkshopType
exclude = []
+
+
+class AttachmentFileForm(forms.ModelForm):
+ def __init__(self, *args, **kwargs):
+ super(AttachmentFileForm, self).__init__(*args, **kwargs)
+
+ class Meta:
+ model = AttachmentFile
+ exclude = ['workshop_type']
diff --git a/workshop_app/models.py b/workshop_app/models.py
index b35d9a7..b43600f 100644
--- a/workshop_app/models.py
+++ b/workshop_app/models.py
@@ -145,7 +145,7 @@ class WorkshopType(models.Model):
class AttachmentFile(models.Model):
- attachments = models.FileField(upload_to=attachments, blank=True,
+ attachments = models.FileField(upload_to=attachments, blank=False,
help_text='Please upload workshop documents one by one, \
ie.workshop schedule, instructions etc. \
Please Note: Name of Schedule file should be similar to \
diff --git a/workshop_app/templates/workshop_app/edit_workshop_type.html b/workshop_app/templates/workshop_app/edit_workshop_type.html
new file mode 100644
index 0000000..9c883d7
--- /dev/null
+++ b/workshop_app/templates/workshop_app/edit_workshop_type.html
@@ -0,0 +1,102 @@
+{% extends 'workshop_app/base.html' %}
+
+{% block title %}
+ Add new Workshop type
+{% endblock %}
+
+{% block extra-dependencies %}
+{% endblock %}
+
+{% block extra-custom-scripts %}
+
+
+{% endblock %}
+
+{% block content %}
+
+
View / Edit Workshop Type
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/workshop_app/urls.py b/workshop_app/urls.py
index 76a0be6..37b56d5 100644
--- a/workshop_app/urls.py
+++ b/workshop_app/urls.py
@@ -31,7 +31,7 @@ urlpatterns = [
url(r'^edit_profile/$', views.edit_profile),
url(r'^my_workshops/$', views.my_workshops),
url(r'^propose_workshop/$', views.propose_workshop),
- url(r'^workshop_types/$', views.workshop_type_list),
+ url(r'^workshop_types/$', views.workshop_type_list, name='workshop_type_list'),
url(r'^workshop_type_details/([1-9][0-9]*)$', views.workshop_type_details, name='workshop_type_details'),
url(r'^add_workshop_type$', views.add_workshop_type, name='add_workshop_type'),
url(r'^view_profile/([1-9][0-9]*)$', views.view_comment_profile),
diff --git a/workshop_app/views.py b/workshop_app/views.py
index d71f066..0f68cfb 100644
--- a/workshop_app/views.py
+++ b/workshop_app/views.py
@@ -1,3 +1,4 @@
+from django.forms import inlineformset_factory, model_to_dict
from django.urls import reverse
try:
@@ -19,7 +20,7 @@ from .forms import (
from .models import (
Profile, User,
Workshop,
- WorkshopType
+ WorkshopType, AttachmentFile
)
from .send_mails import send_email
@@ -340,13 +341,44 @@ def propose_workshop(request):
)
+@login_required
def workshop_type_details(request, workshop_type_id):
"""Gives the types of workshop details """
user = request.user
if user.is_superuser:
return redirect("/admin")
- workshop_type = WorkshopType.objects.get(id=workshop_type_id)
+ workshop_type = WorkshopType.objects.filter(id=workshop_type_id)
+ if workshop_type.exists():
+ workshop_type = workshop_type.first()
+ else:
+ return redirect(reverse('workshop_type_list'))
+
+ qs = AttachmentFile.objects.filter(workshop_type=workshop_type)
+ AttachmentFileFormSet = inlineformset_factory(WorkshopType, AttachmentFile, fields=['attachments'],
+ can_delete=False, extra=(qs.count() + 1))
+
+ if is_instructor(user):
+ if request.method == 'POST':
+ form = WorkshopTypeForm(request.POST, instance=workshop_type)
+ form_file = AttachmentFileFormSet(request.POST, request.FILES, instance=form.instance)
+ if form.is_valid():
+ form_data = form.save()
+ for file in form_file:
+ if file.is_valid() and file.clean() and file.clean()['attachments']:
+ if file.cleaned_data['id']:
+ file.cleaned_data['id'].delete()
+ file.save()
+ return redirect(reverse('workshop_type_details', args=[form_data.id]))
+ else:
+ print(request.POST)
+ print(form_file.errors)
+ else:
+ form = WorkshopTypeForm(instance=workshop_type)
+ form_file = AttachmentFileFormSet()
+ for subform, data in zip(form_file, qs):
+ subform.initial = model_to_dict(data)
+ return render(request, 'workshop_app/edit_workshop_type.html', {'form': form, 'form_file': form_file})
return render(
request, 'workshop_app/workshop_type_details.html', {'workshop_type': workshop_type}
--
cgit
From c72ac71318caf14d559074a4b02f5e14afcff2e0 Mon Sep 17 00:00:00 2001
From: pnshiralkar
Date: Thu, 7 May 2020 20:22:40 +0530
Subject: File delete done
---
.../templates/workshop_app/edit_workshop_type.html | 16 ++++++++++++----
workshop_app/urls.py | 1 +
workshop_app/views.py | 12 ++++++++++++
3 files changed, 25 insertions(+), 4 deletions(-)
diff --git a/workshop_app/templates/workshop_app/edit_workshop_type.html b/workshop_app/templates/workshop_app/edit_workshop_type.html
index 9c883d7..b756f39 100644
--- a/workshop_app/templates/workshop_app/edit_workshop_type.html
+++ b/workshop_app/templates/workshop_app/edit_workshop_type.html
@@ -71,11 +71,19 @@
{{ form_file.non_form_errors }}
{% for form in form_file %}