From 47be3b81904838846bf8af43a01eb0bf14380302 Mon Sep 17 00:00:00 2001 From: karthikmurakonda Date: Mon, 24 Jul 2023 19:00:52 +0530 Subject: [PATCH] init interns support --- CDC_Backend/APIs/admin.py | 2 + CDC_Backend/APIs/companyViews.py | 10 +++ CDC_Backend/APIs/constants.py | 20 +++++ CDC_Backend/APIs/models.py | 133 +++++++++++++++++++++++++++- CDC_Backend/CDC_Backend/settings.py | 1 - 5 files changed, 164 insertions(+), 2 deletions(-) diff --git a/CDC_Backend/APIs/admin.py b/CDC_Backend/APIs/admin.py index 08ac51b..6b80e78 100644 --- a/CDC_Backend/APIs/admin.py +++ b/CDC_Backend/APIs/admin.py @@ -161,3 +161,5 @@ class PrePlacementOffer(PrePlacementOfferAdmin): def Student(self, obj): return model_admin_url(obj.student) + +admin.site.register(Internship) \ No newline at end of file diff --git a/CDC_Backend/APIs/companyViews.py b/CDC_Backend/APIs/companyViews.py index 60e144c..467f6df 100644 --- a/CDC_Backend/APIs/companyViews.py +++ b/CDC_Backend/APIs/companyViews.py @@ -320,3 +320,13 @@ def autoFillJnf(request): logger.warning("Get AutoFill: " + traceback_str) return Response({'action': "Get AutoFill", 'message': "Something went wrong"}, status=status.HTTP_400_BAD_REQUEST) + + +## Internships ## + + +@api_view(['POST']) +def addInternship(request): + logger.info(request.data) + return Response({'action': "Add Internship", 'message': "Internship Added Successfully"}, + status=status.HTTP_200_OK) diff --git a/CDC_Backend/APIs/constants.py b/CDC_Backend/APIs/constants.py index d2daf91..f792f6b 100644 --- a/CDC_Backend/APIs/constants.py +++ b/CDC_Backend/APIs/constants.py @@ -178,3 +178,23 @@ REMINDER_STUDENTS_OPENING_TEMPLATE = 'students_opening_reminder.html' APPLICATION_CSV_COL_NAMES = ['Applied At', 'Roll No.', 'Name', 'Email', 'Phone Number', 'Branch', 'Batch', 'CPI', 'Resume', 'Selected', ] + + +# Internships +SEASON_CHOICES = ( + ['summer', 'Summer'], + ['winter', 'Winter'], + ['autumn', 'Autumn'], + ['spring', 'Spring'], + ) + +INF_FACILITIES_PROVIDED = [ + ['Accommodation', 'Accommodation'], + ['Food', 'Food'], + ['Transport', 'Transport'], + ['Medical', 'Medical'], +] + +INF_TOTAL_SEASONS = 4 + +INF_TOTAL_FACILITIES = 4 diff --git a/CDC_Backend/APIs/models.py b/CDC_Backend/APIs/models.py index 8f9360b..1bc05ff 100644 --- a/CDC_Backend/APIs/models.py +++ b/CDC_Backend/APIs/models.py @@ -144,7 +144,7 @@ class Placement(models.Model): deadline_datetime = models.DateTimeField(blank=False, verbose_name="Deadline Date", default=two_day_after_today) created_at = models.DateTimeField(blank=False, default=None, null=True) updated_at = models.DateTimeField(blank=False, default=None, null=True) - changed_by = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True) + changed_by = models.ForeignKey(User, on_delete=models.RESTRICT, blank=True, null=True) history = HistoricalRecords(user_model=User) def format(self): @@ -278,6 +278,137 @@ class PrePlacementOffer(models.Model): else: self.changed_by = None +class Internship(models.Model): + id = models.CharField(blank=False, primary_key=True, max_length=15) #unique id for each internship + # Company Details + company_name = models.CharField(blank=False, max_length=JNF_SMALLTEXT_MAX_CHARACTER_COUNT) + website = models.CharField(blank=True, max_length=JNF_TEXT_MAX_CHARACTER_COUNT) + is_company_details_pdf = models.BooleanField(blank=False, default=False) + company_details_pdf_names = ArrayField( + models.CharField(null=True, default=None, max_length=JNF_TEXT_MAX_CHARACTER_COUNT), size=5, + default=list, blank=True) + company_details = models.CharField(max_length=JNF_TEXTAREA_MAX_CHARACTER_COUNT, default=None, null=True, blank=True) + #Company Address + address = models.CharField(blank=False, max_length=JNF_TEXTAREA_MAX_CHARACTER_COUNT) + city = models.CharField(blank=False, max_length=JNF_SMALLTEXT_MAX_CHARACTER_COUNT, default="") + state = models.CharField(blank=False, max_length=JNF_SMALLTEXT_MAX_CHARACTER_COUNT, default="") + country = models.CharField(blank=False, max_length=JNF_SMALLTEXT_MAX_CHARACTER_COUNT, default="") + pin_code = models.IntegerField(blank=False, default=None, null=True) + company_type = models.CharField(blank=False, max_length=JNF_SMALLTEXT_MAX_CHARACTER_COUNT) + nature_of_business = models.CharField(blank=False, max_length=JNF_SMALLTEXT_MAX_CHARACTER_COUNT, default="") + type_of_organisation = models.CharField(max_length=JNF_SMALLTEXT_MAX_CHARACTER_COUNT, default="", blank=False) + #Internship Details + is_description_pdf = models.BooleanField(blank=False, default=False) + description_pdf_names = ArrayField( + models.CharField(null=True, default=None, max_length=JNF_TEXT_MAX_CHARACTER_COUNT), size=5, default=list, + blank=True) + designation = models.CharField(blank=False, max_length=JNF_TEXT_MAX_CHARACTER_COUNT, default="") + description = models.CharField(blank=False, max_length=JNF_TEXTAREA_MAX_CHARACTER_COUNT, default=None, null=True) + location = models.CharField(blank=False, max_length=JNF_SMALLTEXT_MAX_CHARACTER_COUNT, default="") + season = ArrayField( + models.CharField(choices=SEASON_CHOICES, max_length=10, blank=False), + size=INF_TOTAL_SEASONS, + default=list + ) + interning_period_from = models.DateField(blank=False, default=None, null=True) + interning_period_to = models.DateField(blank=False, default=None, null=True) + is_work_from_home = models.BooleanField(blank=False, default=False) + sophomore_eligible = models.BooleanField(blank=False, default=False) + rs_eligible = models.BooleanField(blank=False, default=False) + tentative_no_of_offers = models.IntegerField(blank=False, default=None, null=True) + is_stipend_description_pdf = models.BooleanField(blank=False, default=False) + stipend_description_pdf_names=ArrayField( + models.CharField(null=True, default=None, max_length=JNF_TEXT_MAX_CHARACTER_COUNT), size=5, default=list, + blank=True) + stipend=models.IntegerField(blank=False, default=None, null=True) + facilities_provided=ArrayField( + models.CharField(choices=INF_FACILITIES_PROVIDED, blank=False, max_length=20), + size=INF_TOTAL_FACILITIES, + default=list + ) + additional_facilities = models.CharField(blank=True, max_length=JNF_TEXTAREA_MAX_CHARACTER_COUNT, default=None, null=True) + academic_requirements = models.CharField(blank=True, max_length=JNF_TEXTAREA_MAX_CHARACTER_COUNT, default=None, null=True) + # selection process + selection_procedure_rounds = ArrayField( + models.CharField(null=True, default=None, max_length=JNF_TEXT_MAX_CHARACTER_COUNT), size=10, + default=list, blank=True) + selection_procedure_details = models.CharField(blank=True, max_length=JNF_TEXTAREA_MAX_CHARACTER_COUNT) + selection_procedure_details_pdf_names = ArrayField( + models.CharField(null=True, default=None, max_length=JNF_TEXT_MAX_CHARACTER_COUNT), + size=5, default=list, blank=True) + is_selection_procedure_details_pdf = models.BooleanField(blank=False, default=False) + #contact details of company person + contact_person_name = models.CharField(blank=False, max_length=JNF_TEXT_MAX_CHARACTER_COUNT) + phone_number = models.PositiveBigIntegerField(blank=False) + email = models.EmailField(blank=False) + contact_person_designation = models.CharField(blank=False, max_length=JNF_SMALLTEXT_MAX_CHARACTER_COUNT, default="") + telephone_number = models.PositiveBigIntegerField(blank=True, default=None, null=True) + email_verified = models.BooleanField(blank=False, default=False) + #history + created_at = models.DateTimeField(blank=False, default=None, null=True) + updated_at = models.DateTimeField(blank=False, default=None, null=True) + changed_by = models.ForeignKey(User, on_delete=models.RESTRICT, blank=True, null=True) + history = HistoricalRecords(user_model=User) + + + def format(self): + if self.company_name is not None: + self.company_name = self.company_name.strip()[:JNF_SMALLTEXT_MAX_CHARACTER_COUNT] + if self.company_type is not None: + self.company_type = self.company_type.strip()[:JNF_SMALLTEXT_MAX_CHARACTER_COUNT] + if self.company_details is not None: + self.company_details = self.company_details.strip()[:JNF_TEXTAREA_MAX_CHARACTER_COUNT] + if self.address is not None: + self.address = self.address.strip()[:JNF_TEXTAREA_MAX_CHARACTER_COUNT] + if self.nature_of_business is not None: + self.nature_of_business = self.nature_of_business.strip()[:JNF_TEXTAREA_MAX_CHARACTER_COUNT] + if self.type_of_organisation is not None: + self.type_of_organisation = self.type_of_organisation.strip()[:JNF_TEXTAREA_MAX_CHARACTER_COUNT] + if self.website is not None: + self.website = self.website.strip()[:JNF_TEXT_MAX_CHARACTER_COUNT] + if self.contact_person_name is not None: + self.contact_person_name = self.contact_person_name.strip()[:JNF_TEXT_MAX_CHARACTER_COUNT] + if self.city is not None: + self.city = self.city.strip()[:JNF_SMALLTEXT_MAX_CHARACTER_COUNT] + if self.state is not None: + self.state = self.state.strip()[:JNF_SMALLTEXT_MAX_CHARACTER_COUNT] + if self.country is not None: + self.country = self.country.strip()[:JNF_SMALLTEXT_MAX_CHARACTER_COUNT] + if self.city_type is not None: + self.city_type = self.city_type.strip()[:JNF_SMALLTEXT_MAX_CHARACTER_COUNT] + if self.selection_procedure_details is not None: + self.selection_procedure_details = self.selection_procedure_details.strip()[:JNF_TEXTAREA_MAX_CHARACTER_COUNT] + if self.description is not None: + self.description = self.description.strip()[:JNF_TEXTAREA_MAX_CHARACTER_COUNT] + if self.additional_facilities is not None: + self.additional_facilities = self.additional_facilities.strip()[:JNF_TEXTAREA_MAX_CHARACTER_COUNT] + if self.academic_requirements is not None: + self.academic_requirements = self.academic_requirements.strip()[:JNF_TEXTAREA_MAX_CHARACTER_COUNT] + if self.contact_person_designation is not None: + self.contact_person_designation = self.contact_person_designation.strip()[:JNF_SMALLTEXT_MAX_CHARACTER_COUNT] + + @property + def _history_user(self): + return self.changed_by + + @_history_user.setter + def _history_user(self, value): + if isinstance(value, User): + self.changed_by = value + else: + self.changed_by = None + + def save(self, *args, **kwargs): + ''' On save, add timestamps ''' + if not self.created_at: + self.created_at = timezone.now() + self.format() + self.updated_at = timezone.now() + return super(Internship, self).save(*args, **kwargs) + + def __str__(self): + return self.company_name + " - " + self.id + class Contributor(models.Model): id = models.AutoField(primary_key=True) diff --git a/CDC_Backend/CDC_Backend/settings.py b/CDC_Backend/CDC_Backend/settings.py index 786e67b..7df7fc3 100644 --- a/CDC_Backend/CDC_Backend/settings.py +++ b/CDC_Backend/CDC_Backend/settings.py @@ -41,7 +41,6 @@ INSTALLED_APPS = [ 'django.contrib.messages', 'django.contrib.staticfiles', 'APIs', - 'internAPIs', 'rest_framework', 'corsheaders', 'django_db_logger',