diff options
Diffstat (limited to 'workshop_app/models.py')
-rw-r--r-- | workshop_app/models.py | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/workshop_app/models.py b/workshop_app/models.py new file mode 100644 index 0000000..8eae29e --- /dev/null +++ b/workshop_app/models.py @@ -0,0 +1,142 @@ + +from django.db import models +from django.contrib.auth.models import User +from django.core.validators import RegexValidator +from recurrence.fields import RecurrenceField + +position_choices = ( + ("coordinator", "Coordinator"), + ("instructor", "Instructor") + ) + + +def has_profile(user): + """ check if user has profile """ + return True if hasattr(user, 'profile') else False + +class Profile(models.Model): + """Profile for users(instructors and coordinators)""" + + user = models.OneToOneField(User) + institute = models.CharField(max_length=150) + department = models.CharField(max_length=150) + phone_number = models.CharField( + max_length=15, + validators=[RegexValidator( + regex=r'^\+?1?\d{9,15}$', message=( + "Phone number must be entered \ + in the format: '+929490956'.\ + Up to 15 digits allowed.") + )]) + position = models.CharField(max_length=32, choices=position_choices) + 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 + ) + + +class WorkshopType(models.Model): + """"Admin creates types of workshops which can be used by the instructor + 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') + + 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() + + def __str__(self): + return u"{0} | {1} ".format( + self.workshop_title, + self.workshop_instructor + ) + + +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 + ) + + +class ProposeWorkshopDate(models.Model): + """ + Contains details of proposed date and workshop from coordinator + """ + + condition_one = models.BooleanField(default=False, help_text='I will give\ + minimum 50 participants for the workshop.') + condition_two = models.BooleanField(default=False, help_text='I agree \ + that this booking won\'t be cancelled without \ + 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" + ) + + +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) |