104 lines
4.6 KiB
Python
104 lines
4.6 KiB
Python
|
from django.contrib.postgres.fields import ArrayField
|
||
|
from django.db import models
|
||
|
from django.utils import timezone
|
||
|
from .constants import *
|
||
|
|
||
|
|
||
|
class User(models.Model):
|
||
|
email = models.CharField(primary_key=True, blank=False, max_length=50)
|
||
|
id = models.CharField(blank=False, max_length=25)
|
||
|
user_type = ArrayField(models.CharField(blank=False, max_length=10), size=4, default=list, blank=False)
|
||
|
|
||
|
|
||
|
class Student(models.Model):
|
||
|
id = models.CharField(blank=False, max_length=15, primary_key=True)
|
||
|
roll_no = models.IntegerField(blank=False)
|
||
|
name = models.CharField(blank=False, max_length=50)
|
||
|
batch = models.CharField(max_length=10, choices=BATCH_CHOICES, blank=False)
|
||
|
branch = models.CharField(choices=BRANCH_CHOICES, blank=False, max_length=10)
|
||
|
phone_number = models.PositiveBigIntegerField(blank=True, default=None, null=True)
|
||
|
resumes = ArrayField(models.CharField(null=True, default=None, max_length=100), size=10, default=list, blank=True)
|
||
|
cpi = models.DecimalField(decimal_places=2, max_digits=4)
|
||
|
|
||
|
|
||
|
class Admin(models.Model):
|
||
|
id = models.CharField(blank=False, max_length=15, primary_key=True)
|
||
|
name = models.CharField(blank=False, max_length=50)
|
||
|
|
||
|
|
||
|
class Placement(models.Model):
|
||
|
id = models.CharField(blank=False, primary_key=True, max_length=15)
|
||
|
name = models.CharField(blank=False, max_length=50)
|
||
|
address = models.CharField(blank=False, max_length=150)
|
||
|
companyType = models.CharField(blank=False, max_length=50)
|
||
|
website = models.CharField(blank=True, max_length=50)
|
||
|
contact_person_name = models.CharField(blank=False, max_length=50)
|
||
|
phone_number = models.PositiveBigIntegerField(blank=False)
|
||
|
designation = models.CharField(blank=False, max_length=25, default=None, null=True)
|
||
|
description = models.CharField(blank=False, max_length=200)
|
||
|
start_date = models.DateField(blank=False, verbose_name="Start Date")
|
||
|
city = models.CharField(blank=False, max_length=100, default="")
|
||
|
city_type = models.CharField(blank=False, max_length=15, choices=OFFER_CITY_TYPE)
|
||
|
compensation = models.IntegerField(blank=False) # Job - Per Year
|
||
|
compensation_details = models.CharField(blank=True, max_length=200)
|
||
|
tier = models.CharField(blank=False, choices=TIERS, max_length=10, default=None, null=True)
|
||
|
allowed_batch = ArrayField(
|
||
|
models.CharField(max_length=10, choices=BATCH_CHOICES),
|
||
|
size=TOTAL_BATCHES,
|
||
|
default=list
|
||
|
)
|
||
|
allowed_branch = ArrayField(
|
||
|
models.CharField(choices=BRANCH_CHOICES, blank=False, max_length=10),
|
||
|
size=TOTAL_BRANCHES,
|
||
|
default=list
|
||
|
)
|
||
|
attachments = ArrayField(
|
||
|
models.CharField(max_length=100, blank=True),
|
||
|
size=10,
|
||
|
blank=True
|
||
|
)
|
||
|
rounds = ArrayField(
|
||
|
models.CharField(max_length=25, blank=True),
|
||
|
size=10,
|
||
|
)
|
||
|
additional_info = ArrayField(
|
||
|
models.CharField(max_length=25, blank=True),
|
||
|
size=10,
|
||
|
blank=True
|
||
|
)
|
||
|
status = models.CharField(max_length=50, blank=False)
|
||
|
rounds_details = models.JSONField(blank=True, default=dict)
|
||
|
created_at = models.DateTimeField(blank=False, default=None, null=True)
|
||
|
|
||
|
|
||
|
class PlacementApplication(models.Model):
|
||
|
id = models.CharField(blank=False, primary_key=True, max_length=15)
|
||
|
placement = models.ForeignKey(Placement, blank=False, on_delete=models.RESTRICT, default=None, null=True)
|
||
|
student = models.ForeignKey(Student, blank=False, on_delete=models.CASCADE)
|
||
|
resume = models.CharField(max_length=100, blank=False, null=True, default=None)
|
||
|
status = models.CharField(max_length=50, null=True, blank=True, default=None)
|
||
|
additional_info = models.JSONField(blank=True, default=None, null=True)
|
||
|
selected = models.BooleanField(null=True, default=None, blank=True)
|
||
|
applied_at = models.DateTimeField(blank=False, default=None, null=True)
|
||
|
|
||
|
def save(self, *args, **kwargs):
|
||
|
''' On save, add timestamps '''
|
||
|
if not self.applied_at:
|
||
|
self.applied_at = timezone.now()
|
||
|
|
||
|
return super(PlacementApplication, self).save(*args, **kwargs)
|
||
|
|
||
|
class Meta:
|
||
|
verbose_name_plural = "Placement Applications"
|
||
|
|
||
|
|
||
|
class PrePlacementOffer(models.Model):
|
||
|
id = models.AutoField(primary_key=True)
|
||
|
student = models.ForeignKey(Student, on_delete=models.CASCADE, blank=False)
|
||
|
company = models.CharField(max_length=50, blank=False)
|
||
|
compensation = models.IntegerField(blank=False) # Job - Per Year
|
||
|
compensation_details = models.CharField(blank=True, max_length=200)
|
||
|
tier = models.CharField(blank=False, choices=TIERS, max_length=10)
|
||
|
designation = models.CharField(blank=False, max_length=25, default=None, null=True)
|
||
|
accepted = models.BooleanField(default=None, null=True)
|