diff options
Diffstat (limited to 'workshop_app/models.py')
-rw-r--r-- | workshop_app/models.py | 309 |
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): """ |