summaryrefslogtreecommitdiff
path: root/workshop_app/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'workshop_app/models.py')
-rw-r--r--workshop_app/models.py309
1 files changed, 116 insertions, 193 deletions
diff --git a/workshop_app/models.py b/workshop_app/models.py
index 4d589bf..62d10b5 100644
--- a/workshop_app/models.py
+++ b/workshop_app/models.py
@@ -1,14 +1,16 @@
-from django.db import models
+import os
+import uuid
+
from django.contrib.auth.models import User
from django.core.validators import RegexValidator
-from recurrence.fields import RecurrenceField
+from django.db import models
from django.utils import timezone
-import os
+from django.core.validators import MinValueValidator
position_choices = (
("coordinator", "Coordinator"),
("instructor", "Instructor")
- )
+)
department_choices = (
("computer engineering", "Computer Science"),
@@ -21,7 +23,7 @@ department_choices = (
("biosciences and bioengineering", "Biosciences and BioEngineering"),
("electronics", "Electronics"),
("energy science and engineering", "Energy Science and Engineering"),
- )
+)
title = (
("Professor", "Prof."),
@@ -32,53 +34,53 @@ title = (
("Mr", "Mr."),
("Mrs", "Mrs."),
("Miss", "Ms."),
- )
+)
source = (
("FOSSEE website", "FOSSEE website"),
("Google", "Google"),
("Social Media", "Social Media"),
("From other College", "From other College"),
- )
+)
states = (
- ("IN-AP", "Andhra Pradesh"),
- ("IN-AR", "Arunachal Pradesh"),
- ("IN-AS", "Assam"),
- ("IN-BR", "Bihar"),
- ("IN-CT", "Chhattisgarh"),
- ("IN-GA", "Goa"),
- ("IN-GJ", "Gujarat"),
- ("IN-HR", "Haryana"),
- ("IN-HP", "Himachal Pradesh"),
- ("IN-JK", "Jammu and Kashmir"),
- ("IN-JH", "Jharkhand"),
- ("IN-KA", "Karnataka"),
- ("IN-KL", "Kerala"),
- ("IN-MP", "Madhya Pradesh"),
- ("IN-MH", "Maharashtra"),
- ("IN-MN", "Manipur"),
- ("IN-ML", "Meghalaya"),
- ("IN-MZ", "Mizoram"),
- ("IN-NL", "Nagaland"),
- ("IN-OR", "Odisha"),
- ("IN-PB", "Punjab"),
- ("IN-RJ", "Rajasthan"),
- ("IN-SK", "Sikkim"),
- ("IN-TN", "Tamil Nadu"),
- ("IN-TG", "Telangana"),
- ("IN-TR", "Tripura"),
- ("IN-UT", "Uttarakhand"),
- ("IN-UP", "Uttar Pradesh"),
- ("IN-WB", "West Bengal"),
- ("IN-AN", "Andaman and Nicobar Islands"),
- ("IN-CH", "Chandigarh"),
- ("IN-DN", "Dadra and Nagar Haveli"),
- ("IN-DD", "Daman and Diu"),
- ("IN-DL", "Delhi"),
- ("IN-LD", "Lakshadweep"),
- ("IN-PY", "Puducherry")
- )
+ ("IN-AP", "Andhra Pradesh"),
+ ("IN-AR", "Arunachal Pradesh"),
+ ("IN-AS", "Assam"),
+ ("IN-BR", "Bihar"),
+ ("IN-CT", "Chhattisgarh"),
+ ("IN-GA", "Goa"),
+ ("IN-GJ", "Gujarat"),
+ ("IN-HR", "Haryana"),
+ ("IN-HP", "Himachal Pradesh"),
+ ("IN-JK", "Jammu and Kashmir"),
+ ("IN-JH", "Jharkhand"),
+ ("IN-KA", "Karnataka"),
+ ("IN-KL", "Kerala"),
+ ("IN-MP", "Madhya Pradesh"),
+ ("IN-MH", "Maharashtra"),
+ ("IN-MN", "Manipur"),
+ ("IN-ML", "Meghalaya"),
+ ("IN-MZ", "Mizoram"),
+ ("IN-NL", "Nagaland"),
+ ("IN-OR", "Odisha"),
+ ("IN-PB", "Punjab"),
+ ("IN-RJ", "Rajasthan"),
+ ("IN-SK", "Sikkim"),
+ ("IN-TN", "Tamil Nadu"),
+ ("IN-TG", "Telangana"),
+ ("IN-TR", "Tripura"),
+ ("IN-UT", "Uttarakhand"),
+ ("IN-UP", "Uttar Pradesh"),
+ ("IN-WB", "West Bengal"),
+ ("IN-AN", "Andaman and Nicobar Islands"),
+ ("IN-CH", "Chandigarh"),
+ ("IN-DN", "Dadra and Nagar Haveli"),
+ ("IN-DD", "Daman and Diu"),
+ ("IN-DL", "Delhi"),
+ ("IN-LD", "Lakshadweep"),
+ ("IN-PY", "Puducherry")
+)
def has_profile(user):
@@ -87,44 +89,43 @@ def has_profile(user):
def attachments(instance, filename):
- return os.sep.join((instance.workshoptype_name.replace(" ", '_'), filename))
+ return os.sep.join((instance.workshop_type.name.replace(" ", '_'), filename))
class Profile(models.Model):
"""Profile for users(instructors and coordinators)"""
- user = models.OneToOneField(User)
- title = models.CharField(max_length=32,blank=True, choices=title)
+ user = models.OneToOneField(User, on_delete=models.CASCADE)
+ title = models.CharField(max_length=32, blank=True, choices=title)
institute = models.CharField(max_length=150)
department = models.CharField(max_length=150, choices=department_choices)
phone_number = models.CharField(
- max_length=10,
- validators=[RegexValidator(
- regex=r'^.{10}$', message=(
- "Phone number must be entered \
- in the format: '9999999999'.\
- Up to 10 digits allowed.")
- )]
- ,null=False)
- position = models.CharField(max_length=32, choices=position_choices,
- default='coordinator',
- help_text='Select Coordinator if you want to organise a workshop\
+ max_length=10,
+ validators=[RegexValidator(
+ regex=r'^.{10}$', message=(
+ "Phone number must be entered \
+ in the format: '9999999999'.\
+ Up to 10 digits allowed.")
+ )], null=False)
+ position = models.CharField(
+ max_length=32, choices=position_choices,
+ default='coordinator',
+ help_text='Select Coordinator if you want to organise a workshop\
in your college/school. <br> Select Instructor if you want to conduct\
a workshop.')
- how_did_you_hear_about_us = models.CharField(max_length=255, blank=True,choices=source)
- location = models.CharField(max_length=255,blank=True, help_text="Place/City")
+ how_did_you_hear_about_us = models.CharField(
+ max_length=255, blank=True, choices=source
+ )
+ location = models.CharField(
+ max_length=255, blank=True, help_text="Place/City"
+ )
state = models.CharField(max_length=255, choices=states, default="IN-MH")
is_email_verified = models.BooleanField(default=False)
activation_key = models.CharField(max_length=255, blank=True, null=True)
key_expiry_time = models.DateTimeField(blank=True, null=True)
def __str__(self):
- return u"id: {0}| {1} {2} | {3} ".format(
- self.user.id,
- self.user.first_name,
- self.user.last_name,
- self.user.email
- )
+ return f"Profile for {self.user.get_full_name()}"
class WorkshopType(models.Model):
@@ -132,126 +133,58 @@ class WorkshopType(models.Model):
to create workshops.
"""
- workshoptype_name = models.CharField(max_length=120)
- workshoptype_description = models.TextField()
- workshoptype_duration = models.CharField(max_length=32,
- help_text='Please write this in \
- following format eg: 3days, 8hours a day')
- workshoptype_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')
-
- def __str__(self):
- return u"{0} {1}".format(self.workshoptype_name,
- self.workshoptype_duration
- )
-
-
-class Workshop(models.Model):
- """Instructor Creates workshop based on
- WorkshopTypes available"""
-
- workshop_instructor = models.ForeignKey(User, on_delete=models.CASCADE)
- workshop_title = models.ForeignKey(
- WorkshopType, on_delete=models.CASCADE,
- help_text=' [Select the type of workshop.] '
- )
- #For recurring workshops source: django-recurrence
- recurrences = RecurrenceField()
+ name = models.CharField(max_length=120)
+ description = models.TextField()
+ duration = models.PositiveIntegerField(
+ help_text='Please enter duration in days',
+ validators=[MinValueValidator(1)]
+ )
+ terms_and_conditions = models.TextField()
def __str__(self):
- return u"{0} | {1} ".format(
- self.workshop_title,
- self.workshop_instructor
- )
+ return f"{self.name} for {self.duration} day(s)"
-class RequestedWorkshop(models.Model):
- """
- Contains Data of request for Workshops
- """
-
- requested_workshop_instructor = models.ForeignKey(
- User,
- on_delete=models.CASCADE
- )
- requested_workshop_coordinator = models.ForeignKey(
- User,
- related_name="%(app_label)s_%(class)s_related"
- )
- requested_workshop_date = models.DateField()
- status = models.CharField(
- max_length=32, default="Pending"
- )
- requested_workshop_title = models.ForeignKey(
- WorkshopType,
- on_delete=models.CASCADE
- )
-
- def __str__(self):
- return u"{0} | {1} | {2}| {3}".format(
- self.requested_workshop_date,
- self.requested_workshop_title,
- self.requested_workshop_coordinator,
- self.status
- )
+class AttachmentFile(models.Model):
+ 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 \
+ WorkshopType Name')
+ workshop_type = models.ForeignKey(WorkshopType, on_delete=models.CASCADE)
-class ProposeWorkshopDate(models.Model):
+class Workshop(models.Model):
"""
- Contains details of proposed date and workshop from coordinator
+ Contains details of workshops
"""
-
- condition_one = models.BooleanField(default=False, help_text='We assure to\
- give minimum 25 participants for the workshop.')
- condition_two = models.BooleanField(default=False, help_text='We agree \
- that this booking won\'t be cancelled without \
- 2days of prior notice to the instructor and fossee.')
- condition_three = models.BooleanField(default=False, help_text='This \
- proposal is subject to FOSSEE and instructor approval.')
-
- proposed_workshop_coordinator = models.ForeignKey(
- User,
- on_delete=models.CASCADE
- )
- proposed_workshop_instructor = models.ForeignKey(User, null=True,
- related_name="%(app_label)s_%(class)s_related")
-
- proposed_workshop_title = models.ForeignKey(
- WorkshopType, on_delete=models.CASCADE,
- help_text='Select the type of workshop.'
- )
-
- proposed_workshop_date = models.DateField()
-
- status = models.CharField(
- max_length=32, default="Pending"
- )
+ uid = models.UUIDField(default=uuid.uuid4, unique=True, editable=False)
+ 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
+ )
+ workshop_type = models.ForeignKey(
+ WorkshopType, on_delete=models.CASCADE,
+ help_text='Select the type of workshop.'
+ )
+ date = models.DateField()
+ 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}".format(
- self.proposed_workshop_date,
- self.proposed_workshop_title,
- self.proposed_workshop_coordinator,
- self.status
- )
+ return f"{self.workshop_type} on {self.date} by {self.coordinator}"
-
-class BookedWorkshop(models.Model):
- """
- Contains details about Confirmed Booked/Completed Workshops
- """
-
- booked_workshop_requested = models.ForeignKey(RequestedWorkshop, null=True)
- booked_workshop_proposed = models.ForeignKey(ProposeWorkshopDate,null=True)
-
- def __str__(self):
- return u"{0} | {1} |".format(
- self.booked_workshop_requested,
- self.booked_workshop_proposed
- )
+ def get_status(self):
+ choice = dict(self.STATUS_CHOICES)
+ return choice.get(self.status)
class Testimonial(models.Model):
@@ -265,33 +198,23 @@ class Testimonial(models.Model):
message = models.TextField()
def __str__(self):
- return u"{0} | {1} ".format(
- self.name,
- self.institute,
- self.department
- )
+ return f"Testimonial by {self.name}"
-
-class ProfileComments(models.Model):
+class Comment(models.Model):
"""
- Contains comments posted by instructors on coordinator profile
+ Contains comments posted by users on workshop instances
"""
- coordinator_profile = models.ForeignKey(User,
- on_delete=models.CASCADE)
+ author = models.ForeignKey(User, on_delete=models.CASCADE)
comment = models.TextField()
- instructor_profile = models.ForeignKey(User,
- related_name="%(app_label)s_%(class)s_related")
+ public = models.BooleanField(default=True)
created_date = models.DateTimeField(default=timezone.now)
+ workshop = models.ForeignKey(Workshop, on_delete=models.CASCADE)
def __str__(self):
- return u"{0} | {1}".format(
- self.comment,
- self.created_date,
- self.coordinator_profile,
- self.instructor_profile
- )
+ return f"Comment by {self.author.get_full_name()}"
+
class Banner(models.Model):
"""