Compare commits

...

5 Commits

Author SHA1 Message Date
karthik mv 134272008a
Merge 5412aef50e into 9447654979 2023-12-07 04:03:57 +05:30
karthikmurakonda 5412aef50e remove recaptcha and added new jnf fields 2023-12-05 01:05:40 +05:30
karthik mv c31ac2e6f3
Merge branch 'main' into add-migrations 2023-12-01 02:41:10 +05:30
karthikmurakonda 4356f3d3ea create field allowed_degree 2023-10-26 11:08:52 +05:30
karthikmurakonda a5907f1c75 Added migrations to git
Added degree feild in exported csv
change can_apply feild to can_apply_placements
2023-10-26 10:42:42 +05:30
25 changed files with 1268 additions and 46 deletions

3
.gitignore vendored
View File

@ -133,9 +133,6 @@ dmypy.json
./CDC_Backend/Storage ./CDC_Backend/Storage
/CDC_Backend/CDC_Backend/__pycache__/ /CDC_Backend/CDC_Backend/__pycache__/
/CDC_Backend/APIs/__pycache__/ /CDC_Backend/APIs/__pycache__/
/CDC_Backend/APIs/migrations/
/CDC_Backend/internAPIs/__pycache__/
/CDC_Backend/internAPIs/migrations/
/CDC_Backend/static/ /CDC_Backend/static/
/CDC_Backend/Storage/ /CDC_Backend/Storage/
.idea .idea

View File

@ -64,7 +64,7 @@ class StudentAdmin(ImportExportMixin, SimpleHistoryAdmin):
@admin.register(Student) @admin.register(Student)
class Student(StudentAdmin): class Student(StudentAdmin):
list_display = ("roll_no", "name", "batch", "branch", "phone_number", 'can_apply') list_display = ("roll_no", "name", "batch", "branch", "phone_number", 'can_apply_placements')
search_fields = ("roll_no", "name", "phone_number") search_fields = ("roll_no", "name", "phone_number")
ordering = ("roll_no", "name", "batch", "branch", "phone_number") ordering = ("roll_no", "name", "batch", "branch", "phone_number")
list_filter = ("batch", "branch") list_filter = ("batch", "branch")
@ -72,12 +72,12 @@ class Student(StudentAdmin):
@admin.action(description="Deregister students") @admin.action(description="Deregister students")
def mark_can_apply_as_no(self, request, queryset): def mark_can_apply_as_no(self, request, queryset):
queryset.update(can_apply=False) queryset.update(can_apply_placements=False)
self.message_user(request, "Deregistered the users") self.message_user(request, "Deregistered the users")
@admin.action(description="Register students") @admin.action(description="Register students")
def mark_can_apply_as_yes(self, request, queryset): def mark_can_apply_as_yes(self, request, queryset):
queryset.update(can_apply=True) queryset.update(can_apply_placements=True)
self.message_user(request, "Registered the users") self.message_user(request, "Registered the users")
class PlacementResources(resources.ModelResource): class PlacementResources(resources.ModelResource):

View File

@ -439,6 +439,7 @@ def generateCSV(request, id, email, user_type):
row_details.append(apl.student.phone_number) row_details.append(apl.student.phone_number)
row_details.append(apl.student.branch) row_details.append(apl.student.branch)
row_details.append(apl.student.batch) row_details.append(apl.student.batch)
row_details.append(apl.student.degree)
row_details.append(apl.student.cpi) row_details.append(apl.student.cpi)
link = LINK_TO_STORAGE_RESUME + urllib.parse.quote(str(apl.student.id)) + "/" + urllib.parse.quote(str(apl.resume)) link = LINK_TO_STORAGE_RESUME + urllib.parse.quote(str(apl.student.id)) + "/" + urllib.parse.quote(str(apl.resume))
row_details.append(link) row_details.append(link)

View File

@ -11,10 +11,11 @@ logger = logging.getLogger('db')
IS_COMPANY_DETAILS_PDF, CONTACT_PERSON_NAME, PHONE_NUMBER, EMAIL, CITY, STATE, COUNTRY, PINCODE, DESIGNATION, IS_COMPANY_DETAILS_PDF, CONTACT_PERSON_NAME, PHONE_NUMBER, EMAIL, CITY, STATE, COUNTRY, PINCODE, DESIGNATION,
DESCRIPTION, DESCRIPTION,
IS_DESCRIPTION_PDF, COMPENSATION_CTC, COMPENSATION_GROSS, COMPENSATION_TAKE_HOME, COMPENSATION_BONUS, IS_DESCRIPTION_PDF, COMPENSATION_CTC, COMPENSATION_GROSS, COMPENSATION_TAKE_HOME, COMPENSATION_BONUS,
IS_COMPENSATION_DETAILS_PDF, ALLOWED_BRANCH, RS_ELIGIBLE, SELECTION_PROCEDURE_ROUNDS, IS_COMPENSATION_DETAILS_PDF, BTECH_ALLOWED, MTECH_ALLOWED, MS_ALLOWED, PHD_ALLOWED,
SELECTION_PROCEDURE_DETAILS, BTECH_BRANCH, MTECH_BRANCH, MS_BRANCH, PHD_BRANCH,
SELECTION_PROCEDURE_ROUNDS, SELECTION_PROCEDURE_DETAILS,
IS_SELECTION_PROCEDURE_DETAILS_PDF, TENTATIVE_DATE_OF_JOINING, TENTATIVE_NO_OF_OFFERS, OTHER_REQUIREMENTS, IS_SELECTION_PROCEDURE_DETAILS_PDF, TENTATIVE_DATE_OF_JOINING, TENTATIVE_NO_OF_OFFERS, OTHER_REQUIREMENTS,
RECAPTCHA_VALUE, JOB_LOCATION JOB_LOCATION
]) ])
def addPlacement(request): def addPlacement(request):
logger.info("JNF filled by " + str(request.data['email'])) logger.info("JNF filled by " + str(request.data['email']))
@ -23,8 +24,6 @@ def addPlacement(request):
data = request.data data = request.data
files = request.FILES files = request.FILES
opening = Placement() opening = Placement()
if not verify_recaptcha(data[RECAPTCHA_VALUE]):
raise Exception("Recaptcha Failed")
opening.id = generateRandomString() opening.id = generateRandomString()
# Add a company details in the opening # Add a company details in the opening
@ -36,10 +35,6 @@ def addPlacement(request):
opening.website = data[WEBSITE] opening.website = data[WEBSITE]
opening.company_details = data[COMPANY_DETAILS] opening.company_details = data[COMPANY_DETAILS]
opening.is_company_details_pdf = data[IS_COMPANY_DETAILS_PDF] opening.is_company_details_pdf = data[IS_COMPANY_DETAILS_PDF]
if data[RS_ELIGIBLE] == 'Yes':
opening.rs_eligible = True
else:
opening.rs_eligible = False
if opening.is_company_details_pdf: if opening.is_company_details_pdf:
company_details_pdf = [] company_details_pdf = []
@ -198,13 +193,19 @@ def addPlacement(request):
# Only Allowing Fourth Year for Placement # Only Allowing Fourth Year for Placement
opening.allowed_batch = [FOURTH_YEAR,] opening.allowed_batch = [FOURTH_YEAR,]
# Check if allowed_branch are valid opening.btech_allowed = data[BTECH_ALLOWED] == "true"
if data[ALLOWED_BRANCH] is None: opening.mtech_allowed = data[MTECH_ALLOWED] == "true"
raise ValueError('Allowed Branch cannot be empty') opening.ms_allowed = data[MS_ALLOWED] == "true"
elif set(json.loads(data[ALLOWED_BRANCH])).issubset(BRANCHES): opening.phd_allowed = data[PHD_ALLOWED] == "true"
opening.allowed_branch = json.loads(data[ALLOWED_BRANCH])
else: if opening.btech_allowed:
raise ValueError('Allowed Branch must be a subset of ' + str(BRANCHES)) opening.btech_allowed_branch = json.loads(data[BTECH_BRANCH])
if opening.mtech_allowed:
opening.mtech_allowed_branch = json.loads(data[MTECH_BRANCH])
if opening.ms_allowed:
opening.ms_allowed_branch = json.loads(data[MS_BRANCH])
if opening.phd_allowed:
opening.phd_allowed_branch = json.loads(data[PHD_BRANCH])
# Check if tentative_no_of_offers is integer # Check if tentative_no_of_offers is integer
if data[TENTATIVE_NO_OF_OFFERS].isdigit(): if data[TENTATIVE_NO_OF_OFFERS].isdigit():
@ -352,7 +353,7 @@ def autoFillInf(request):
ALLOWED_BRANCH, SOPHOMORES_ELIIGIBLE, RS_ELIGIBLE, NUM_OFFERS, IS_STIPEND_DETAILS_PDF, STIPEND, ALLOWED_BRANCH, SOPHOMORES_ELIIGIBLE, RS_ELIGIBLE, NUM_OFFERS, IS_STIPEND_DETAILS_PDF, STIPEND,
FACILITIES, OTHER_FACILITIES, SELECTION_PROCEDURE_ROUNDS, SELECTION_PROCEDURE_DETAILS, IS_SELECTION_PROCEDURE_DETAILS_PDF, FACILITIES, OTHER_FACILITIES, SELECTION_PROCEDURE_ROUNDS, SELECTION_PROCEDURE_DETAILS, IS_SELECTION_PROCEDURE_DETAILS_PDF,
SELECTION_PROCEDURE_DETAILS, OTHER_REQUIREMENTS, SELECTION_PROCEDURE_DETAILS, OTHER_REQUIREMENTS,
CONTACT_PERSON_NAME, PHONE_NUMBER, EMAIL, RECAPTCHA_VALUE]) CONTACT_PERSON_NAME, PHONE_NUMBER, EMAIL])
def addInternship(request): def addInternship(request):
logger.info("INF filled by " + str(request.data['email'])) logger.info("INF filled by " + str(request.data['email']))
logger.info(request.data) logger.info(request.data)
@ -360,9 +361,6 @@ def addInternship(request):
data = request.data data = request.data
files = request.FILES files = request.FILES
internship = Internship() internship = Internship()
if not verify_recaptcha(data[RECAPTCHA_VALUE]):
raise Exception("Recaptcha Failed")
internship.id = generateRandomString() internship.id = generateRandomString()
# Add a company details in the internship # Add a company details in the internship
internship.company_name = data[COMPANY_NAME] internship.company_name = data[COMPANY_NAME]

View File

@ -163,7 +163,15 @@ COMPENSATION_DETAILS_PDF = 'compensation_details_pdf'
COMPENSATION_DETAILS_PDF_NAMES = 'compensation_details_pdf_names' COMPENSATION_DETAILS_PDF_NAMES = 'compensation_details_pdf_names'
IS_COMPENSATION_DETAILS_PDF = 'is_compensation_details_pdf' IS_COMPENSATION_DETAILS_PDF = 'is_compensation_details_pdf'
ALLOWED_BATCH = 'allowed_batch' ALLOWED_BATCH = 'allowed_batch'
ALLOWED_BRANCH = 'allowed_branch' BTECH_ALLOWED = 'btech_allowed'
MTECH_ALLOWED = 'mtech_allowed'
MS_ALLOWED = 'ms_allowed'
PHD_ALLOWED = 'phd_allowed'
BTECH_BRANCH = 'btech_branches'
MTECH_BRANCH = 'mtech_branches'
MS_BRANCH = 'ms_branches'
PHD_BRANCH = 'phd_branches'
ALLOWED_BRANCH = 'allowed_batch'
RS_ELIGIBLE = 'rs_eligible' RS_ELIGIBLE = 'rs_eligible'
BOND_DETAILS = 'bond_details' BOND_DETAILS = 'bond_details'
SELECTION_PROCEDURE_ROUNDS = 'selection_procedure_rounds' SELECTION_PROCEDURE_ROUNDS = 'selection_procedure_rounds'
@ -208,7 +216,7 @@ COMPANY_EMAIL_VERIFICATION_TEMPLATE = 'company_email_verification.html'
COMPANY_JNF_RESPONSE_TEMPLATE = 'company_jnf_response.html' COMPANY_JNF_RESPONSE_TEMPLATE = 'company_jnf_response.html'
NOTIFY_STUDENTS_OPENING_TEMPLATE = 'notify_students_new_opening.html' NOTIFY_STUDENTS_OPENING_TEMPLATE = 'notify_students_new_opening.html'
REMINDER_STUDENTS_OPENING_TEMPLATE = 'students_opening_reminder.html' REMINDER_STUDENTS_OPENING_TEMPLATE = 'students_opening_reminder.html'
APPLICATION_CSV_COL_NAMES = ['Applied At', 'Roll No.', 'Name', 'Email', 'Phone Number', 'Branch', 'Batch', 'CPI', APPLICATION_CSV_COL_NAMES = ['Applied At', 'Roll No.', 'Name', 'Email', 'Phone Number', 'Branch', 'Batch', 'Degree', 'CPI',
'Resume', 'Selected', ] 'Resume', 'Selected', ]

View File

@ -0,0 +1,341 @@
# Generated by Django 3.2.13 on 2023-07-09 20:05
import APIs.models
from django.conf import settings
import django.contrib.postgres.fields
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
import simple_history.models
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Contributor',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('name', models.CharField(default='', max_length=50)),
('email', models.EmailField(default='', max_length=50, unique=True)),
('github_id', models.CharField(default='', max_length=50, unique=True)),
('linkedin', models.CharField(max_length=50, null=True, unique=True)),
('commits', models.IntegerField(default=0)),
('image', models.CharField(default='', max_length=50, null=True)),
],
),
migrations.CreateModel(
name='User',
fields=[
('email', models.EmailField(max_length=100, primary_key=True, serialize=False)),
('id', models.CharField(db_index=True, max_length=25)),
('user_type', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=10), default=list, size=4)),
('last_login_time', models.DateTimeField(default=django.utils.timezone.now)),
],
options={
'verbose_name_plural': 'User',
'unique_together': {('email', 'id')},
},
),
migrations.CreateModel(
name='Student',
fields=[
('id', models.CharField(max_length=15, primary_key=True, serialize=False)),
('roll_no', models.IntegerField()),
('name', models.CharField(max_length=100)),
('batch', models.CharField(choices=[['2021', '2021'], ['2020', '2020'], ['2019', '2019'], ['2018', '2018'], ['2017', '2017']], max_length=10)),
('branch', models.CharField(choices=[['CSE', 'CSE'], ['EE', 'EE'], ['ME', 'ME'], ['MMAE', 'MMAE'], ['EP', 'EP']], max_length=10)),
('phone_number', models.PositiveBigIntegerField(blank=True, default=None, null=True)),
('resumes', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(default=None, max_length=100, null=True), blank=True, default=list, size=10)),
('cpi', models.DecimalField(decimal_places=2, max_digits=4)),
('can_apply', models.BooleanField(default=True, verbose_name='Registered')),
('degree', models.CharField(choices=[['bTech', 'B.Tech'], ['ms/phd', 'MS/ PhD']], default='bTech', max_length=10)),
('changed_by', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.RESTRICT, to='APIs.user')),
],
),
migrations.CreateModel(
name='PrePlacementOffer',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('company', models.CharField(default='', max_length=50, verbose_name='Company Name')),
('compensation', models.IntegerField()),
('compensation_details', models.CharField(blank=True, max_length=200)),
('tier', models.CharField(choices=[['psu', 'PSU'], ['1', 'Tier 1'], ['2', 'Tier 2'], ['3', 'Tier 3'], ['4', 'Tier 4'], ['5', 'Tier 5'], ['6', 'Tier 6'], ['7', 'Tier 7']], max_length=10)),
('designation', models.CharField(default=None, max_length=100, null=True)),
('accepted', models.BooleanField(default=None, null=True)),
('changed_by', models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.RESTRICT, to='APIs.user')),
('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='APIs.student')),
],
),
migrations.CreateModel(
name='Placement',
fields=[
('id', models.CharField(max_length=15, primary_key=True, serialize=False)),
('company_name', models.CharField(max_length=50)),
('address', models.CharField(max_length=1000)),
('company_type', models.CharField(max_length=50)),
('nature_of_business', models.CharField(default='', max_length=50)),
('type_of_organisation', models.CharField(default='', max_length=50)),
('website', models.CharField(blank=True, max_length=100)),
('company_details', models.CharField(blank=True, default=None, max_length=1000, null=True)),
('company_details_pdf_names', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(default=None, max_length=100, null=True), blank=True, default=list, size=5)),
('is_company_details_pdf', models.BooleanField(default=False)),
('contact_person_name', models.CharField(max_length=100)),
('phone_number', models.PositiveBigIntegerField()),
('email', models.CharField(default='', max_length=50)),
('city', models.CharField(default='', max_length=50)),
('state', models.CharField(default='', max_length=50)),
('country', models.CharField(default='', max_length=50)),
('pin_code', models.IntegerField(default=None, null=True)),
('city_type', models.CharField(choices=[['Domestic', 'Domestic'], ['International', 'International']], max_length=15)),
('designation', models.CharField(default=None, max_length=100, null=True)),
('description', models.CharField(default=None, max_length=1000, null=True)),
('job_location', models.CharField(default='', max_length=50)),
('description_pdf_names', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(default=None, max_length=100, null=True), blank=True, default=list, size=5)),
('is_description_pdf', models.BooleanField(default=False)),
('compensation_CTC', models.IntegerField(default=None, null=True)),
('compensation_gross', models.IntegerField(default=None, null=True)),
('compensation_take_home', models.IntegerField(default=None, null=True)),
('compensation_bonus', models.IntegerField(blank=True, default=None, null=True)),
('compensation_details_pdf_names', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(default=None, max_length=100, null=True), blank=True, default=list, size=5)),
('is_compensation_details_pdf', models.BooleanField(default=False)),
('bond_details', models.CharField(blank=True, max_length=1000)),
('selection_procedure_rounds', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(default=None, max_length=100, null=True), blank=True, default=list, size=10)),
('selection_procedure_details', models.CharField(blank=True, max_length=1000)),
('selection_procedure_details_pdf_names', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(default=None, max_length=100, null=True), blank=True, default=list, size=5)),
('is_selection_procedure_details_pdf', models.BooleanField(default=False)),
('tier', models.CharField(choices=[['psu', 'PSU'], ['1', 'Tier 1'], ['2', 'Tier 2'], ['3', 'Tier 3'], ['4', 'Tier 4'], ['5', 'Tier 5'], ['6', 'Tier 6'], ['7', 'Tier 7']], default=None, max_length=10, null=True)),
('tentative_date_of_joining', models.DateField(default=django.utils.timezone.now, verbose_name='Tentative Date')),
('allowed_batch', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['2021', '2021'], ['2020', '2020'], ['2019', '2019'], ['2018', '2018'], ['2017', '2017']], max_length=10), default=list, size=5)),
('allowed_branch', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['CSE', 'CSE'], ['EE', 'EE'], ['ME', 'ME'], ['MMAE', 'MMAE'], ['EP', 'EP']], max_length=10), default=list, size=4)),
('tentative_no_of_offers', models.IntegerField(default=None, null=True)),
('rs_eligible', models.BooleanField(default=False)),
('other_requirements', models.CharField(blank=True, default='', max_length=1000)),
('additional_info', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(blank=True, max_length=200), blank=True, default=list, size=15)),
('email_verified', models.BooleanField(default=False)),
('offer_accepted', models.BooleanField(default=None, null=True)),
('deadline_datetime', models.DateTimeField(default=APIs.models.two_day_after_today, verbose_name='Deadline Date')),
('created_at', models.DateTimeField(default=None, null=True)),
('updated_at', models.DateTimeField(default=None, null=True)),
('changed_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='APIs.user')),
],
),
migrations.CreateModel(
name='HistoricalUser',
fields=[
('email', models.EmailField(db_index=True, max_length=100)),
('id', models.CharField(db_index=True, max_length=25)),
('user_type', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=10), default=list, size=4)),
('last_login_time', models.DateTimeField(default=django.utils.timezone.now)),
('history_id', models.AutoField(primary_key=True, serialize=False)),
('history_date', models.DateTimeField(db_index=True)),
('history_change_reason', models.CharField(max_length=100, null=True)),
('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)),
('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)),
],
options={
'verbose_name': 'historical user',
'verbose_name_plural': 'historical User',
'ordering': ('-history_date', '-history_id'),
'get_latest_by': ('history_date', 'history_id'),
},
bases=(simple_history.models.HistoricalChanges, models.Model),
),
migrations.CreateModel(
name='HistoricalStudent',
fields=[
('id', models.CharField(db_index=True, max_length=15)),
('roll_no', models.IntegerField()),
('name', models.CharField(max_length=100)),
('batch', models.CharField(choices=[['2021', '2021'], ['2020', '2020'], ['2019', '2019'], ['2018', '2018'], ['2017', '2017']], max_length=10)),
('branch', models.CharField(choices=[['CSE', 'CSE'], ['EE', 'EE'], ['ME', 'ME'], ['MMAE', 'MMAE'], ['EP', 'EP']], max_length=10)),
('phone_number', models.PositiveBigIntegerField(blank=True, default=None, null=True)),
('resumes', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(default=None, max_length=100, null=True), blank=True, default=list, size=10)),
('cpi', models.DecimalField(decimal_places=2, max_digits=4)),
('can_apply', models.BooleanField(default=True, verbose_name='Registered')),
('degree', models.CharField(choices=[['bTech', 'B.Tech'], ['ms/phd', 'MS/ PhD']], default='bTech', max_length=10)),
('history_id', models.AutoField(primary_key=True, serialize=False)),
('history_date', models.DateTimeField(db_index=True)),
('history_change_reason', models.CharField(max_length=100, null=True)),
('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)),
('changed_by', models.ForeignKey(blank=True, db_constraint=False, default=None, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='APIs.user')),
('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='APIs.user')),
],
options={
'verbose_name': 'historical student',
'verbose_name_plural': 'historical students',
'ordering': ('-history_date', '-history_id'),
'get_latest_by': ('history_date', 'history_id'),
},
bases=(simple_history.models.HistoricalChanges, models.Model),
),
migrations.CreateModel(
name='HistoricalPrePlacementOffer',
fields=[
('id', models.IntegerField(blank=True, db_index=True)),
('company', models.CharField(default='', max_length=50, verbose_name='Company Name')),
('compensation', models.IntegerField()),
('compensation_details', models.CharField(blank=True, max_length=200)),
('tier', models.CharField(choices=[['psu', 'PSU'], ['1', 'Tier 1'], ['2', 'Tier 2'], ['3', 'Tier 3'], ['4', 'Tier 4'], ['5', 'Tier 5'], ['6', 'Tier 6'], ['7', 'Tier 7']], max_length=10)),
('designation', models.CharField(default=None, max_length=100, null=True)),
('accepted', models.BooleanField(default=None, null=True)),
('history_id', models.AutoField(primary_key=True, serialize=False)),
('history_date', models.DateTimeField(db_index=True)),
('history_change_reason', models.CharField(max_length=100, null=True)),
('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)),
('changed_by', models.ForeignKey(blank=True, db_constraint=False, default=None, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='APIs.user')),
('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='APIs.user')),
('student', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='APIs.student')),
],
options={
'verbose_name': 'historical pre placement offer',
'verbose_name_plural': 'historical pre placement offers',
'ordering': ('-history_date', '-history_id'),
'get_latest_by': ('history_date', 'history_id'),
},
bases=(simple_history.models.HistoricalChanges, models.Model),
),
migrations.CreateModel(
name='HistoricalPlacementApplication',
fields=[
('id', models.CharField(db_index=True, max_length=15)),
('resume', models.CharField(default=None, max_length=100, null=True)),
('additional_info', models.JSONField(blank=True, default=None, null=True)),
('selected', models.BooleanField(blank=True, default=None, null=True)),
('applied_at', models.DateTimeField(default=None, null=True)),
('updated_at', models.DateTimeField(default=None, null=True)),
('history_id', models.AutoField(primary_key=True, serialize=False)),
('history_date', models.DateTimeField(db_index=True)),
('history_change_reason', models.CharField(max_length=100, null=True)),
('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)),
('changed_by', models.ForeignKey(blank=True, db_constraint=False, default=None, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='APIs.user')),
('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='APIs.user')),
('placement', models.ForeignKey(blank=True, db_constraint=False, default=None, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='APIs.placement')),
('student', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='APIs.student')),
],
options={
'verbose_name': 'historical placement application',
'verbose_name_plural': 'historical Placement Applications',
'ordering': ('-history_date', '-history_id'),
'get_latest_by': ('history_date', 'history_id'),
},
bases=(simple_history.models.HistoricalChanges, models.Model),
),
migrations.CreateModel(
name='HistoricalPlacement',
fields=[
('id', models.CharField(db_index=True, max_length=15)),
('company_name', models.CharField(max_length=50)),
('address', models.CharField(max_length=1000)),
('company_type', models.CharField(max_length=50)),
('nature_of_business', models.CharField(default='', max_length=50)),
('type_of_organisation', models.CharField(default='', max_length=50)),
('website', models.CharField(blank=True, max_length=100)),
('company_details', models.CharField(blank=True, default=None, max_length=1000, null=True)),
('company_details_pdf_names', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(default=None, max_length=100, null=True), blank=True, default=list, size=5)),
('is_company_details_pdf', models.BooleanField(default=False)),
('contact_person_name', models.CharField(max_length=100)),
('phone_number', models.PositiveBigIntegerField()),
('email', models.CharField(default='', max_length=50)),
('city', models.CharField(default='', max_length=50)),
('state', models.CharField(default='', max_length=50)),
('country', models.CharField(default='', max_length=50)),
('pin_code', models.IntegerField(default=None, null=True)),
('city_type', models.CharField(choices=[['Domestic', 'Domestic'], ['International', 'International']], max_length=15)),
('designation', models.CharField(default=None, max_length=100, null=True)),
('description', models.CharField(default=None, max_length=1000, null=True)),
('job_location', models.CharField(default='', max_length=50)),
('description_pdf_names', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(default=None, max_length=100, null=True), blank=True, default=list, size=5)),
('is_description_pdf', models.BooleanField(default=False)),
('compensation_CTC', models.IntegerField(default=None, null=True)),
('compensation_gross', models.IntegerField(default=None, null=True)),
('compensation_take_home', models.IntegerField(default=None, null=True)),
('compensation_bonus', models.IntegerField(blank=True, default=None, null=True)),
('compensation_details_pdf_names', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(default=None, max_length=100, null=True), blank=True, default=list, size=5)),
('is_compensation_details_pdf', models.BooleanField(default=False)),
('bond_details', models.CharField(blank=True, max_length=1000)),
('selection_procedure_rounds', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(default=None, max_length=100, null=True), blank=True, default=list, size=10)),
('selection_procedure_details', models.CharField(blank=True, max_length=1000)),
('selection_procedure_details_pdf_names', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(default=None, max_length=100, null=True), blank=True, default=list, size=5)),
('is_selection_procedure_details_pdf', models.BooleanField(default=False)),
('tier', models.CharField(choices=[['psu', 'PSU'], ['1', 'Tier 1'], ['2', 'Tier 2'], ['3', 'Tier 3'], ['4', 'Tier 4'], ['5', 'Tier 5'], ['6', 'Tier 6'], ['7', 'Tier 7']], default=None, max_length=10, null=True)),
('tentative_date_of_joining', models.DateField(default=django.utils.timezone.now, verbose_name='Tentative Date')),
('allowed_batch', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['2021', '2021'], ['2020', '2020'], ['2019', '2019'], ['2018', '2018'], ['2017', '2017']], max_length=10), default=list, size=5)),
('allowed_branch', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['CSE', 'CSE'], ['EE', 'EE'], ['ME', 'ME'], ['MMAE', 'MMAE'], ['EP', 'EP']], max_length=10), default=list, size=4)),
('tentative_no_of_offers', models.IntegerField(default=None, null=True)),
('rs_eligible', models.BooleanField(default=False)),
('other_requirements', models.CharField(blank=True, default='', max_length=1000)),
('additional_info', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(blank=True, max_length=200), blank=True, default=list, size=15)),
('email_verified', models.BooleanField(default=False)),
('offer_accepted', models.BooleanField(default=None, null=True)),
('deadline_datetime', models.DateTimeField(default=APIs.models.two_day_after_today, verbose_name='Deadline Date')),
('created_at', models.DateTimeField(default=None, null=True)),
('updated_at', models.DateTimeField(default=None, null=True)),
('history_id', models.AutoField(primary_key=True, serialize=False)),
('history_date', models.DateTimeField(db_index=True)),
('history_change_reason', models.CharField(max_length=100, null=True)),
('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)),
('changed_by', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='APIs.user')),
('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='APIs.user')),
],
options={
'verbose_name': 'historical placement',
'verbose_name_plural': 'historical placements',
'ordering': ('-history_date', '-history_id'),
'get_latest_by': ('history_date', 'history_id'),
},
bases=(simple_history.models.HistoricalChanges, models.Model),
),
migrations.CreateModel(
name='HistoricalAdmin',
fields=[
('id', models.CharField(db_index=True, max_length=15)),
('name', models.CharField(max_length=100)),
('history_id', models.AutoField(primary_key=True, serialize=False)),
('history_date', models.DateTimeField(db_index=True)),
('history_change_reason', models.CharField(max_length=100, null=True)),
('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)),
('changed_by', models.ForeignKey(blank=True, db_constraint=False, default=None, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='APIs.user')),
('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='APIs.user')),
],
options={
'verbose_name': 'historical admin',
'verbose_name_plural': 'historical admins',
'ordering': ('-history_date', '-history_id'),
'get_latest_by': ('history_date', 'history_id'),
},
bases=(simple_history.models.HistoricalChanges, models.Model),
),
migrations.CreateModel(
name='Admin',
fields=[
('id', models.CharField(max_length=15, primary_key=True, serialize=False)),
('name', models.CharField(max_length=100)),
('changed_by', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.RESTRICT, to='APIs.user')),
],
),
migrations.CreateModel(
name='PlacementApplication',
fields=[
('id', models.CharField(max_length=15, primary_key=True, serialize=False)),
('resume', models.CharField(default=None, max_length=100, null=True)),
('additional_info', models.JSONField(blank=True, default=None, null=True)),
('selected', models.BooleanField(blank=True, default=None, null=True)),
('applied_at', models.DateTimeField(default=None, null=True)),
('updated_at', models.DateTimeField(default=None, null=True)),
('changed_by', models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.RESTRICT, to='APIs.user')),
('placement', models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.RESTRICT, to='APIs.placement')),
('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='APIs.student')),
],
options={
'verbose_name_plural': 'Placement Applications',
'unique_together': {('placement_id', 'student_id')},
},
),
]

View File

@ -0,0 +1,23 @@
# Generated by Django 3.2.13 on 2023-07-11 14:10
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('APIs', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='historicalplacementapplication',
name='offer_accepted',
field=models.BooleanField(blank=True, default=None, null=True),
),
migrations.AddField(
model_name='placementapplication',
name='offer_accepted',
field=models.BooleanField(blank=True, default=None, null=True),
),
]

View File

@ -0,0 +1,122 @@
# Generated by Django 3.2.13 on 2023-07-24 07:09
import django.contrib.postgres.fields
from django.db import migrations, models
import django.db.models.deletion
import simple_history.models
class Migration(migrations.Migration):
dependencies = [
('APIs', '0002_auto_20230711_1940'),
]
operations = [
migrations.CreateModel(
name='Internship',
fields=[
('id', models.CharField(max_length=15, primary_key=True, serialize=False)),
('company_name', models.CharField(max_length=50)),
('address', models.CharField(max_length=1000)),
('company_type', models.CharField(max_length=50)),
('nature_of_business', models.CharField(default='', max_length=50)),
('type_of_organisation', models.CharField(default='', max_length=50)),
('website', models.CharField(blank=True, max_length=100)),
('company_details', models.CharField(blank=True, default=None, max_length=1000, null=True)),
('company_details_pdf_names', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(default=None, max_length=100, null=True), blank=True, default=list, size=5)),
('is_company_details_pdf', models.BooleanField(default=False)),
('city', models.CharField(default='', max_length=50)),
('state', models.CharField(default='', max_length=50)),
('country', models.CharField(default='', max_length=50)),
('pin_code', models.IntegerField(default=None, null=True)),
('selection_procedure_rounds', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(default=None, max_length=100, null=True), blank=True, default=list, size=10)),
('selection_procedure_details', models.CharField(blank=True, max_length=1000)),
('selection_procedure_details_pdf_names', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(default=None, max_length=100, null=True), blank=True, default=list, size=5)),
('is_selection_procedure_details_pdf', models.BooleanField(default=False)),
('description_pdf_names', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(default=None, max_length=100, null=True), blank=True, default=list, size=5)),
('is_description_pdf', models.BooleanField(default=False)),
('description', models.CharField(default=None, max_length=1000, null=True)),
('interning_period_from', models.DateField(default=None, null=True)),
('interning_period_to', models.DateField(default=None, null=True)),
('season', models.CharField(choices=[['summer', 'Summer'], ['winter', 'Winter'], ['autumn', 'Autumn'], ['spring', 'Spring']], default=None, max_length=10)),
('is_work_from_home', models.BooleanField(default=False)),
('sophomore_eligible', models.BooleanField(default=False)),
('tentative_no_of_offers', models.IntegerField(default=None, null=True)),
('stipend_description_pdf_names', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(default=None, max_length=100, null=True), blank=True, default=list, size=5)),
('is_stipend_description_pdf', models.BooleanField(default=False)),
('stipend', models.IntegerField(default=None, null=True)),
('facilities_provided', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['Accommodation', 'Accommodation'], ['Food', 'Food'], ['Transport', 'Transport'], ['Medical', 'Medical']], max_length=20), default=list, size=4)),
('additional_facilities', models.CharField(blank=True, default=None, max_length=1000, null=True)),
('academic_requirements', models.CharField(blank=True, default=None, max_length=1000, null=True)),
('contact_person_name', models.CharField(max_length=100)),
('phone_number', models.PositiveBigIntegerField()),
('email', models.EmailField(max_length=254)),
('contact_person_designation', models.CharField(default='', max_length=50)),
('telephone_number', models.PositiveBigIntegerField(blank=True, default=None, null=True)),
('email_verified', models.BooleanField(default=False)),
('created_at', models.DateTimeField(default=None, null=True)),
('updated_at', models.DateTimeField(default=None, null=True)),
('changed_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='APIs.user')),
],
),
migrations.CreateModel(
name='HistoricalInternship',
fields=[
('id', models.CharField(db_index=True, max_length=15)),
('company_name', models.CharField(max_length=50)),
('address', models.CharField(max_length=1000)),
('company_type', models.CharField(max_length=50)),
('nature_of_business', models.CharField(default='', max_length=50)),
('type_of_organisation', models.CharField(default='', max_length=50)),
('website', models.CharField(blank=True, max_length=100)),
('company_details', models.CharField(blank=True, default=None, max_length=1000, null=True)),
('company_details_pdf_names', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(default=None, max_length=100, null=True), blank=True, default=list, size=5)),
('is_company_details_pdf', models.BooleanField(default=False)),
('city', models.CharField(default='', max_length=50)),
('state', models.CharField(default='', max_length=50)),
('country', models.CharField(default='', max_length=50)),
('pin_code', models.IntegerField(default=None, null=True)),
('selection_procedure_rounds', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(default=None, max_length=100, null=True), blank=True, default=list, size=10)),
('selection_procedure_details', models.CharField(blank=True, max_length=1000)),
('selection_procedure_details_pdf_names', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(default=None, max_length=100, null=True), blank=True, default=list, size=5)),
('is_selection_procedure_details_pdf', models.BooleanField(default=False)),
('description_pdf_names', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(default=None, max_length=100, null=True), blank=True, default=list, size=5)),
('is_description_pdf', models.BooleanField(default=False)),
('description', models.CharField(default=None, max_length=1000, null=True)),
('interning_period_from', models.DateField(default=None, null=True)),
('interning_period_to', models.DateField(default=None, null=True)),
('season', models.CharField(choices=[['summer', 'Summer'], ['winter', 'Winter'], ['autumn', 'Autumn'], ['spring', 'Spring']], default=None, max_length=10)),
('is_work_from_home', models.BooleanField(default=False)),
('sophomore_eligible', models.BooleanField(default=False)),
('tentative_no_of_offers', models.IntegerField(default=None, null=True)),
('stipend_description_pdf_names', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(default=None, max_length=100, null=True), blank=True, default=list, size=5)),
('is_stipend_description_pdf', models.BooleanField(default=False)),
('stipend', models.IntegerField(default=None, null=True)),
('facilities_provided', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['Accommodation', 'Accommodation'], ['Food', 'Food'], ['Transport', 'Transport'], ['Medical', 'Medical']], max_length=20), default=list, size=4)),
('additional_facilities', models.CharField(blank=True, default=None, max_length=1000, null=True)),
('academic_requirements', models.CharField(blank=True, default=None, max_length=1000, null=True)),
('contact_person_name', models.CharField(max_length=100)),
('phone_number', models.PositiveBigIntegerField()),
('email', models.EmailField(max_length=254)),
('contact_person_designation', models.CharField(default='', max_length=50)),
('telephone_number', models.PositiveBigIntegerField(blank=True, default=None, null=True)),
('email_verified', models.BooleanField(default=False)),
('created_at', models.DateTimeField(default=None, null=True)),
('updated_at', models.DateTimeField(default=None, null=True)),
('history_id', models.AutoField(primary_key=True, serialize=False)),
('history_date', models.DateTimeField(db_index=True)),
('history_change_reason', models.CharField(max_length=100, null=True)),
('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)),
('changed_by', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='APIs.user')),
('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='APIs.user')),
],
options={
'verbose_name': 'historical internship',
'verbose_name_plural': 'historical internships',
'ordering': ('-history_date', '-history_id'),
'get_latest_by': ('history_date', 'history_id'),
},
bases=(simple_history.models.HistoricalChanges, models.Model),
),
]

View File

@ -0,0 +1,60 @@
# Generated by Django 3.2.13 on 2023-07-24 13:24
import django.contrib.postgres.fields
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('APIs', '0003_historicalinternship_internship'),
]
operations = [
migrations.AddField(
model_name='historicalinternship',
name='designation',
field=models.CharField(default='', max_length=100),
),
migrations.AddField(
model_name='historicalinternship',
name='location',
field=models.CharField(default='', max_length=50),
),
migrations.AddField(
model_name='historicalinternship',
name='rs_eligible',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='internship',
name='designation',
field=models.CharField(default='', max_length=100),
),
migrations.AddField(
model_name='internship',
name='location',
field=models.CharField(default='', max_length=50),
),
migrations.AddField(
model_name='internship',
name='rs_eligible',
field=models.BooleanField(default=False),
),
migrations.AlterField(
model_name='historicalinternship',
name='season',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['summer', 'Summer'], ['winter', 'Winter'], ['autumn', 'Autumn'], ['spring', 'Spring']], max_length=10), default=list, size=4),
),
migrations.AlterField(
model_name='internship',
name='season',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['summer', 'Summer'], ['winter', 'Winter'], ['autumn', 'Autumn'], ['spring', 'Spring']], max_length=10), default=list, size=4),
),
migrations.AlterField(
model_name='placement',
name='changed_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT, to='APIs.user'),
),
]

View File

@ -0,0 +1,19 @@
# Generated by Django 3.2.13 on 2023-07-24 13:29
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('APIs', '0004_auto_20230724_1854'),
]
operations = [
migrations.AlterField(
model_name='internship',
name='changed_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT, to='APIs.user'),
),
]

View File

@ -0,0 +1,24 @@
# Generated by Django 3.2.13 on 2023-07-24 17:45
import django.contrib.postgres.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('APIs', '0005_alter_internship_changed_by'),
]
operations = [
migrations.AddField(
model_name='historicalinternship',
name='allowed_branch',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['CSE', 'CSE'], ['EE', 'EE'], ['ME', 'ME'], ['MMAE', 'MMAE'], ['EP', 'EP']], max_length=10), default=list, size=4),
),
migrations.AddField(
model_name='internship',
name='allowed_branch',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['CSE', 'CSE'], ['EE', 'EE'], ['ME', 'ME'], ['MMAE', 'MMAE'], ['EP', 'EP']], max_length=10), default=list, size=4),
),
]

View File

@ -0,0 +1,23 @@
# Generated by Django 3.2.13 on 2023-07-24 18:03
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('APIs', '0006_auto_20230724_2315'),
]
operations = [
migrations.AddField(
model_name='historicalinternship',
name='city_type',
field=models.CharField(blank=True, choices=[['Domestic', 'Domestic'], ['International', 'International']], max_length=15),
),
migrations.AddField(
model_name='internship',
name='city_type',
field=models.CharField(blank=True, choices=[['Domestic', 'Domestic'], ['International', 'International']], max_length=15),
),
]

View File

@ -0,0 +1,21 @@
# Generated by Django 3.2.13 on 2023-07-24 18:47
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('APIs', '0007_auto_20230724_2333'),
]
operations = [
migrations.RemoveField(
model_name='historicalinternship',
name='type_of_organisation',
),
migrations.RemoveField(
model_name='internship',
name='type_of_organisation',
),
]

View File

@ -0,0 +1,29 @@
# Generated by Django 3.2.13 on 2023-07-24 21:24
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('APIs', '0008_auto_20230725_0017'),
]
operations = [
migrations.RemoveField(
model_name='historicalinternship',
name='contact_person_designation',
),
migrations.RemoveField(
model_name='historicalinternship',
name='telephone_number',
),
migrations.RemoveField(
model_name='internship',
name='contact_person_designation',
),
migrations.RemoveField(
model_name='internship',
name='telephone_number',
),
]

View File

@ -0,0 +1,24 @@
# Generated by Django 3.2.13 on 2023-07-25 07:05
import django.contrib.postgres.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('APIs', '0009_auto_20230725_0254'),
]
operations = [
migrations.AlterField(
model_name='historicalinternship',
name='season',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['Summer', 'Summer'], ['Winter', 'Winter'], ['Autumn', 'Autumn'], ['Spring', 'Spring']], max_length=10), default=list, size=4),
),
migrations.AlterField(
model_name='internship',
name='season',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['Summer', 'Summer'], ['Winter', 'Winter'], ['Autumn', 'Autumn'], ['Spring', 'Spring']], max_length=10), default=list, size=4),
),
]

View File

@ -0,0 +1,70 @@
# Generated by Django 3.2.13 on 2023-08-02 19:38
import django.contrib.postgres.fields
from django.db import migrations, models
import django.db.models.deletion
import simple_history.models
class Migration(migrations.Migration):
dependencies = [
('APIs', '0010_auto_20230725_1235'),
]
operations = [
migrations.AlterField(
model_name='historicalinternship',
name='facilities_provided',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['Accommodation', 'Accommodation'], ['Food', 'Food'], ['Transport', 'Transport'], ['Medical', 'Medical']], max_length=20, null=True), default=list, size=4),
),
migrations.AlterField(
model_name='internship',
name='facilities_provided',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['Accommodation', 'Accommodation'], ['Food', 'Food'], ['Transport', 'Transport'], ['Medical', 'Medical']], max_length=20, null=True), default=list, size=4),
),
migrations.CreateModel(
name='HistoricalInternshipApplication',
fields=[
('id', models.CharField(db_index=True, max_length=15)),
('resume', models.CharField(default=None, max_length=100, null=True)),
('additional_info', models.JSONField(blank=True, default=None, null=True)),
('selected', models.BooleanField(blank=True, default=None, null=True)),
('applied_at', models.DateTimeField(default=None, null=True)),
('updated_at', models.DateTimeField(default=None, null=True)),
('history_id', models.AutoField(primary_key=True, serialize=False)),
('history_date', models.DateTimeField(db_index=True)),
('history_change_reason', models.CharField(max_length=100, null=True)),
('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)),
('changed_by', models.ForeignKey(blank=True, db_constraint=False, default=None, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='APIs.user')),
('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='APIs.user')),
('internship', models.ForeignKey(blank=True, db_constraint=False, default=None, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='APIs.internship')),
('student', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='APIs.student')),
],
options={
'verbose_name': 'historical internship application',
'verbose_name_plural': 'historical Internship Applications',
'ordering': ('-history_date', '-history_id'),
'get_latest_by': ('history_date', 'history_id'),
},
bases=(simple_history.models.HistoricalChanges, models.Model),
),
migrations.CreateModel(
name='InternshipApplication',
fields=[
('id', models.CharField(max_length=15, primary_key=True, serialize=False)),
('resume', models.CharField(default=None, max_length=100, null=True)),
('additional_info', models.JSONField(blank=True, default=None, null=True)),
('selected', models.BooleanField(blank=True, default=None, null=True)),
('applied_at', models.DateTimeField(default=None, null=True)),
('updated_at', models.DateTimeField(default=None, null=True)),
('changed_by', models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.RESTRICT, to='APIs.user')),
('internship', models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.RESTRICT, to='APIs.internship')),
('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='APIs.student')),
],
options={
'verbose_name_plural': 'Internship Applications',
'unique_together': {('internship_id', 'student_id')},
},
),
]

View File

@ -0,0 +1,230 @@
# Generated by Django 3.2.13 on 2023-10-09 19:16
import APIs.models
import django.contrib.postgres.fields
from django.db import migrations, models
import django.db.models.deletion
import simple_history.models
class Migration(migrations.Migration):
dependencies = [
('APIs', '0011_auto_20230803_0108'),
]
operations = [
migrations.AddField(
model_name='historicalinternship',
name='additional_info',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(blank=True, max_length=200), blank=True, default=list, size=15),
),
migrations.AddField(
model_name='historicalinternship',
name='allowed_batch',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['2022', '2022'], ['2021', '2021'], ['2020', '2020'], ['2019', '2019'], ['2018', '2018'], ['2017', '2017']], max_length=10), default=list, size=6),
),
migrations.AddField(
model_name='historicalinternship',
name='deadline_datetime',
field=models.DateTimeField(default=APIs.models.two_day_after_today, verbose_name='Deadline Date'),
),
migrations.AddField(
model_name='historicalinternship',
name='offer_accepted',
field=models.BooleanField(default=None, null=True),
),
migrations.AddField(
model_name='historicalinternshipapplication',
name='offer_accepted',
field=models.BooleanField(blank=True, default=None, null=True),
),
migrations.AddField(
model_name='historicalinternshipapplication',
name='stipend',
field=models.IntegerField(blank=True, default=None, null=True),
),
migrations.AddField(
model_name='historicalstudent',
name='can_apply_internship',
field=models.BooleanField(default=True, verbose_name='Internship Registered'),
),
migrations.AddField(
model_name='internship',
name='additional_info',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(blank=True, max_length=200), blank=True, default=list, size=15),
),
migrations.AddField(
model_name='internship',
name='allowed_batch',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['2022', '2022'], ['2021', '2021'], ['2020', '2020'], ['2019', '2019'], ['2018', '2018'], ['2017', '2017']], max_length=10), default=list, size=6),
),
migrations.AddField(
model_name='internship',
name='deadline_datetime',
field=models.DateTimeField(default=APIs.models.two_day_after_today, verbose_name='Deadline Date'),
),
migrations.AddField(
model_name='internship',
name='offer_accepted',
field=models.BooleanField(default=None, null=True),
),
migrations.AddField(
model_name='internshipapplication',
name='offer_accepted',
field=models.BooleanField(blank=True, default=None, null=True),
),
migrations.AddField(
model_name='internshipapplication',
name='stipend',
field=models.IntegerField(blank=True, default=None, null=True),
),
migrations.AddField(
model_name='student',
name='can_apply_internship',
field=models.BooleanField(default=True, verbose_name='Internship Registered'),
),
migrations.AlterField(
model_name='historicalinternship',
name='allowed_branch',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['CSE', 'CSE'], ['EE', 'EE'], ['ME', 'ME'], ['MMAE', 'MMAE'], ['EP', 'EP'], ['CIVIL', 'CIVIL'], ['CHEMICAL', 'CHEMICAL'], ['BSMS', 'BSMS']], max_length=10), default=list, size=7),
),
migrations.AlterField(
model_name='historicalinternship',
name='facilities_provided',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['Accommodation', 'Accommodation'], ['Food', 'Food'], ['Transport', 'Transport'], ['Medical', 'Medical']], max_length=20, null=True), blank=True, default=list, size=4),
),
migrations.AlterField(
model_name='historicalplacement',
name='allowed_batch',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['2022', '2022'], ['2021', '2021'], ['2020', '2020'], ['2019', '2019'], ['2018', '2018'], ['2017', '2017']], max_length=10), default=list, size=6),
),
migrations.AlterField(
model_name='historicalplacement',
name='allowed_branch',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['CSE', 'CSE'], ['EE', 'EE'], ['ME', 'ME'], ['MMAE', 'MMAE'], ['EP', 'EP'], ['CIVIL', 'CIVIL'], ['CHEMICAL', 'CHEMICAL'], ['BSMS', 'BSMS']], max_length=10), default=list, size=7),
),
migrations.AlterField(
model_name='historicalplacement',
name='tier',
field=models.CharField(choices=[['psu', 'PSU'], ['1', 'Tier 1'], ['2', 'Tier 2'], ['3', 'Tier 3'], ['4', 'Tier 4'], ['5', 'Tier 5'], ['6', 'Tier 6'], ['7', 'Tier 7'], ['8', 'Open Tier']], default=None, max_length=10, null=True),
),
migrations.AlterField(
model_name='historicalpreplacementoffer',
name='tier',
field=models.CharField(choices=[['psu', 'PSU'], ['1', 'Tier 1'], ['2', 'Tier 2'], ['3', 'Tier 3'], ['4', 'Tier 4'], ['5', 'Tier 5'], ['6', 'Tier 6'], ['7', 'Tier 7'], ['8', 'Open Tier']], max_length=10),
),
migrations.AlterField(
model_name='historicalstudent',
name='batch',
field=models.CharField(choices=[['2022', '2022'], ['2021', '2021'], ['2020', '2020'], ['2019', '2019'], ['2018', '2018'], ['2017', '2017']], max_length=10),
),
migrations.AlterField(
model_name='historicalstudent',
name='branch',
field=models.CharField(choices=[['CSE', 'CSE'], ['EE', 'EE'], ['ME', 'ME'], ['MMAE', 'MMAE'], ['EP', 'EP'], ['CIVIL', 'CIVIL'], ['CHEMICAL', 'CHEMICAL'], ['BSMS', 'BSMS']], max_length=10),
),
migrations.AlterField(
model_name='historicalstudent',
name='degree',
field=models.CharField(choices=[['bTech', 'B.Tech'], ['ms/phd', 'MS/ PhD'], ['mTech', 'M.Tech']], default='bTech', max_length=10),
),
migrations.AlterField(
model_name='historicalstudent',
name='roll_no',
field=models.CharField(db_index=True, max_length=15),
),
migrations.AlterField(
model_name='internship',
name='allowed_branch',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['CSE', 'CSE'], ['EE', 'EE'], ['ME', 'ME'], ['MMAE', 'MMAE'], ['EP', 'EP'], ['CIVIL', 'CIVIL'], ['CHEMICAL', 'CHEMICAL'], ['BSMS', 'BSMS']], max_length=10), default=list, size=7),
),
migrations.AlterField(
model_name='internship',
name='facilities_provided',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['Accommodation', 'Accommodation'], ['Food', 'Food'], ['Transport', 'Transport'], ['Medical', 'Medical']], max_length=20, null=True), blank=True, default=list, size=4),
),
migrations.AlterField(
model_name='placement',
name='allowed_batch',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['2022', '2022'], ['2021', '2021'], ['2020', '2020'], ['2019', '2019'], ['2018', '2018'], ['2017', '2017']], max_length=10), default=list, size=6),
),
migrations.AlterField(
model_name='placement',
name='allowed_branch',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['CSE', 'CSE'], ['EE', 'EE'], ['ME', 'ME'], ['MMAE', 'MMAE'], ['EP', 'EP'], ['CIVIL', 'CIVIL'], ['CHEMICAL', 'CHEMICAL'], ['BSMS', 'BSMS']], max_length=10), default=list, size=7),
),
migrations.AlterField(
model_name='placement',
name='tier',
field=models.CharField(choices=[['psu', 'PSU'], ['1', 'Tier 1'], ['2', 'Tier 2'], ['3', 'Tier 3'], ['4', 'Tier 4'], ['5', 'Tier 5'], ['6', 'Tier 6'], ['7', 'Tier 7'], ['8', 'Open Tier']], default=None, max_length=10, null=True),
),
migrations.AlterField(
model_name='preplacementoffer',
name='tier',
field=models.CharField(choices=[['psu', 'PSU'], ['1', 'Tier 1'], ['2', 'Tier 2'], ['3', 'Tier 3'], ['4', 'Tier 4'], ['5', 'Tier 5'], ['6', 'Tier 6'], ['7', 'Tier 7'], ['8', 'Open Tier']], max_length=10),
),
migrations.AlterField(
model_name='student',
name='batch',
field=models.CharField(choices=[['2022', '2022'], ['2021', '2021'], ['2020', '2020'], ['2019', '2019'], ['2018', '2018'], ['2017', '2017']], max_length=10),
),
migrations.AlterField(
model_name='student',
name='branch',
field=models.CharField(choices=[['CSE', 'CSE'], ['EE', 'EE'], ['ME', 'ME'], ['MMAE', 'MMAE'], ['EP', 'EP'], ['CIVIL', 'CIVIL'], ['CHEMICAL', 'CHEMICAL'], ['BSMS', 'BSMS']], max_length=10),
),
migrations.AlterField(
model_name='student',
name='degree',
field=models.CharField(choices=[['bTech', 'B.Tech'], ['ms/phd', 'MS/ PhD'], ['mTech', 'M.Tech']], default='bTech', max_length=10),
),
migrations.AlterField(
model_name='student',
name='roll_no',
field=models.CharField(max_length=15, unique=True),
),
migrations.CreateModel(
name='Issues',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('title', models.CharField(default='', max_length=50)),
('description', models.CharField(default='', max_length=200)),
('opening_id', models.CharField(default=None, max_length=15, null=True)),
('opening_type', models.CharField(choices=[('Placement', 'Placement'), ('Internship', 'Internship')], default='Placement', max_length=15)),
('created_at', models.DateTimeField(default=None, null=True)),
('updated_at', models.DateTimeField(default=None, null=True)),
('changed_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT, to='APIs.user')),
('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='APIs.student')),
],
options={
'verbose_name_plural': 'Issues',
},
),
migrations.CreateModel(
name='HistoricalIssues',
fields=[
('id', models.IntegerField(blank=True, db_index=True)),
('title', models.CharField(default='', max_length=50)),
('description', models.CharField(default='', max_length=200)),
('opening_id', models.CharField(default=None, max_length=15, null=True)),
('opening_type', models.CharField(choices=[('Placement', 'Placement'), ('Internship', 'Internship')], default='Placement', max_length=15)),
('created_at', models.DateTimeField(default=None, null=True)),
('updated_at', models.DateTimeField(default=None, null=True)),
('history_id', models.AutoField(primary_key=True, serialize=False)),
('history_date', models.DateTimeField(db_index=True)),
('history_change_reason', models.CharField(max_length=100, null=True)),
('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)),
('changed_by', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='APIs.user')),
('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='APIs.user')),
('student', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='APIs.student')),
],
options={
'verbose_name': 'historical issues',
'verbose_name_plural': 'historical Issues',
'ordering': ('-history_date', '-history_id'),
'get_latest_by': ('history_date', 'history_id'),
},
bases=(simple_history.models.HistoricalChanges, models.Model),
),
]

View File

@ -0,0 +1,147 @@
# Generated by Django 3.2.13 on 2023-11-30 19:02
import django.contrib.postgres.fields
from django.db import migrations, models
from django.db.migrations.operations import RunPython
def eligibility_conversion(apps, schema_editor):
Placement = apps.get_model('APIs', 'Placement')
HistoricalPlacement = apps.get_model('APIs', 'HistoricalPlacement')
for placement in Placement.objects.all():
placement.btech_allowed = True
placement.btech_allowed_branch = placement.allowed_branch
if placement.rs_eligible:
placement.mtech_allowed = True
placement.ms_allowed = True
placement.phd_allowed = True
placement.mtech_allowed_branch = placement.allowed_branch
placement.ms_allowed_branch = placement.allowed_branch
placement.phd_allowed_branch = placement.allowed_branch
placement.save()
for placement in HistoricalPlacement.objects.all():
placement.btech_allowed = True
placement.btech_allowed_branch = placement.allowed_branch
if placement.rs_eligible:
placement.mtech_allowed = True
placement.ms_allowed = True
placement.phd_allowed = True
placement.mtech_allowed_branch = placement.allowed_branch
placement.ms_allowed_branch = placement.allowed_branch
placement.phd_allowed_branch = placement.allowed_branch
placement.save()
def reverse_eligibility_conversion(apps, schema_editor):
Placement = apps.get_model('APIs', 'Placement')
HistoricalPlacement = apps.get_model('APIs', 'HistoricalPlacement')
for placement in Placement.objects.all():
placement.allowed_branch = placement.btech_allowed_branch
placement.rs_eligible = placement.mtech_allowed or placement.ms_allowed or placement.phd_allowed
placement.save()
for placement in HistoricalPlacement.objects.all():
placement.allowed_branch = placement.btech_allowed_branch
placement.rs_eligible = placement.mtech_allowed or placement.ms_allowed or placement.phd_allowed
placement.save()
class Migration(migrations.Migration):
dependencies = [
('APIs', '0012_auto_20231010_0046'),
]
operations = [
migrations.AddField(
model_name='historicalplacement',
name='btech_allowed',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='historicalplacement',
name='btech_allowed_branch',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['CSE', 'CSE'], ['EE', 'EE'], ['ME', 'ME'], ['MMAE', 'MMAE'], ['EP', 'EP'], ['CIVIL', 'CIVIL'], ['CHEMICAL', 'CHEMICAL'], ['BSMS', 'BSMS']], max_length=10), default=list, size=7),
),
migrations.AddField(
model_name='historicalplacement',
name='ms_allowed',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='historicalplacement',
name='ms_allowed_branch',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['CSE', 'CSE'], ['EE', 'EE'], ['ME', 'ME'], ['MMAE', 'MMAE'], ['EP', 'EP'], ['CIVIL', 'CIVIL'], ['CHEMICAL', 'CHEMICAL'], ['BSMS', 'BSMS']], max_length=10), default=list, size=7),
),
migrations.AddField(
model_name='historicalplacement',
name='mtech_allowed',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='historicalplacement',
name='mtech_allowed_branch',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['CSE', 'CSE'], ['EE', 'EE'], ['ME', 'ME'], ['MMAE', 'MMAE'], ['EP', 'EP'], ['CIVIL', 'CIVIL'], ['CHEMICAL', 'CHEMICAL'], ['BSMS', 'BSMS']], max_length=10), default=list, size=7),
),
migrations.AddField(
model_name='historicalplacement',
name='phd_allowed',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='historicalplacement',
name='phd_allowed_branch',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['CSE', 'CSE'], ['EE', 'EE'], ['ME', 'ME'], ['MMAE', 'MMAE'], ['EP', 'EP'], ['CIVIL', 'CIVIL'], ['CHEMICAL', 'CHEMICAL'], ['BSMS', 'BSMS']], max_length=10), default=list, size=7),
),
migrations.RenameField(
model_name='historicalstudent',
old_name='can_apply',
new_name='can_apply_placements',
),
migrations.AddField(
model_name='placement',
name='btech_allowed',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='placement',
name='btech_allowed_branch',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['CSE', 'CSE'], ['EE', 'EE'], ['ME', 'ME'], ['MMAE', 'MMAE'], ['EP', 'EP'], ['CIVIL', 'CIVIL'], ['CHEMICAL', 'CHEMICAL'], ['BSMS', 'BSMS']], max_length=10), default=list, size=7),
),
migrations.AddField(
model_name='placement',
name='ms_allowed',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='placement',
name='ms_allowed_branch',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['CSE', 'CSE'], ['EE', 'EE'], ['ME', 'ME'], ['MMAE', 'MMAE'], ['EP', 'EP'], ['CIVIL', 'CIVIL'], ['CHEMICAL', 'CHEMICAL'], ['BSMS', 'BSMS']], max_length=10), default=list, size=7),
),
migrations.AddField(
model_name='placement',
name='mtech_allowed',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='placement',
name='mtech_allowed_branch',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['CSE', 'CSE'], ['EE', 'EE'], ['ME', 'ME'], ['MMAE', 'MMAE'], ['EP', 'EP'], ['CIVIL', 'CIVIL'], ['CHEMICAL', 'CHEMICAL'], ['BSMS', 'BSMS']], max_length=10), default=list, size=7),
),
migrations.AddField(
model_name='placement',
name='phd_allowed',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='placement',
name='phd_allowed_branch',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[['CSE', 'CSE'], ['EE', 'EE'], ['ME', 'ME'], ['MMAE', 'MMAE'], ['EP', 'EP'], ['CIVIL', 'CIVIL'], ['CHEMICAL', 'CHEMICAL'], ['BSMS', 'BSMS']], max_length=10), default=list, size=7),
),
migrations.RenameField(
model_name='student',
old_name='can_apply',
new_name='can_apply_placements',
),
migrations.RunPython(eligibility_conversion, reverse_eligibility_conversion),
]

View File

@ -0,0 +1,39 @@
# Generated by Django 3.2.13 on 2023-11-30 21:08
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('APIs', '0013_auto_20231201_0032'),
]
operations = [
migrations.RemoveField(
model_name='historicalplacement',
name='allowed_branch',
),
migrations.RemoveField(
model_name='historicalplacement',
name='rs_eligible',
),
migrations.RemoveField(
model_name='placement',
name='allowed_branch',
),
migrations.RemoveField(
model_name='placement',
name='rs_eligible',
),
migrations.AlterField(
model_name='historicalstudent',
name='can_apply_placements',
field=models.BooleanField(default=True, verbose_name='Placement_Registered'),
),
migrations.AlterField(
model_name='student',
name='can_apply_placements',
field=models.BooleanField(default=True, verbose_name='Placement_Registered'),
),
]

View File

View File

@ -6,9 +6,6 @@ from simple_history.models import HistoricalRecords
from .constants import * from .constants import *
# from .utils import *
class User(models.Model): class User(models.Model):
email = models.EmailField(primary_key=True, blank=False, max_length=JNF_TEXT_MAX_CHARACTER_COUNT) email = models.EmailField(primary_key=True, blank=False, max_length=JNF_TEXT_MAX_CHARACTER_COUNT)
id = models.CharField(blank=False, max_length=25, db_index=True) id = models.CharField(blank=False, max_length=25, db_index=True)
@ -31,7 +28,7 @@ class Student(models.Model):
resumes = ArrayField(models.CharField(null=True, default=None, max_length=JNF_TEXT_MAX_CHARACTER_COUNT), size=10, resumes = ArrayField(models.CharField(null=True, default=None, max_length=JNF_TEXT_MAX_CHARACTER_COUNT), size=10,
default=list, blank=True) default=list, blank=True)
cpi = models.DecimalField(decimal_places=2, max_digits=4) cpi = models.DecimalField(decimal_places=2, max_digits=4)
can_apply = models.BooleanField(default=True, verbose_name='Registered') can_apply_placements = models.BooleanField(default=True, verbose_name='Placement_Registered')
can_apply_internship = models.BooleanField(default=True, verbose_name='Internship Registered') #added for internship can_apply_internship = models.BooleanField(default=True, verbose_name='Internship Registered') #added for internship
changed_by = models.ForeignKey(User, blank=True, on_delete=models.RESTRICT, default=None, null=True) changed_by = models.ForeignKey(User, blank=True, on_delete=models.RESTRICT, default=None, null=True)
degree = models.CharField(choices=DEGREE_CHOICES, blank=False, max_length=10, default=DEGREE_CHOICES[0][0]) degree = models.CharField(choices=DEGREE_CHOICES, blank=False, max_length=10, default=DEGREE_CHOICES[0][0])
@ -129,14 +126,31 @@ class Placement(models.Model):
size=TOTAL_BATCHES, size=TOTAL_BATCHES,
default=list default=list
) )
btech_allowed = models.BooleanField(blank=False, default=False)
allowed_branch = ArrayField( btech_allowed_branch = ArrayField(
models.CharField(choices=BRANCH_CHOICES, blank=False, max_length=10),
size=TOTAL_BRANCHES,
default=list
)
mtech_allowed = models.BooleanField(blank=False, default=False)
mtech_allowed_branch = ArrayField(
models.CharField(choices=BRANCH_CHOICES, blank=False, max_length=10),
size=TOTAL_BRANCHES,
default=list
)
ms_allowed = models.BooleanField(blank=False, default=False)
ms_allowed_branch = ArrayField(
models.CharField(choices=BRANCH_CHOICES, blank=False, max_length=10),
size=TOTAL_BRANCHES,
default=list
)
phd_allowed = models.BooleanField(blank=False, default=False)
phd_allowed_branch = ArrayField(
models.CharField(choices=BRANCH_CHOICES, blank=False, max_length=10), models.CharField(choices=BRANCH_CHOICES, blank=False, max_length=10),
size=TOTAL_BRANCHES, size=TOTAL_BRANCHES,
default=list default=list
) )
tentative_no_of_offers = models.IntegerField(blank=False, default=None, null=True) tentative_no_of_offers = models.IntegerField(blank=False, default=None, null=True)
rs_eligible = models.BooleanField(blank=False, default=False)
other_requirements = models.CharField(blank=True, max_length=JNF_TEXTAREA_MAX_CHARACTER_COUNT, default="") other_requirements = models.CharField(blank=True, max_length=JNF_TEXTAREA_MAX_CHARACTER_COUNT, default="")
additional_info = ArrayField(models.CharField(blank=True, max_length=JNF_TEXTMEDIUM_MAX_CHARACTER_COUNT), size=15, additional_info = ArrayField(models.CharField(blank=True, max_length=JNF_TEXTMEDIUM_MAX_CHARACTER_COUNT), size=15,
default=list, blank=True) default=list, blank=True)

View File

@ -101,10 +101,28 @@ def getDashboard(request, id, email, user_type):
try: try:
studentDetails = get_object_or_404(Student, id=id) studentDetails = get_object_or_404(Student, id=id)
placements = Placement.objects.filter(allowed_batch__contains=[studentDetails.batch], placements = []
allowed_branch__contains=[studentDetails.branch], if studentDetails.degree == 'bTech':
placements = Placement.objects.filter(btech_allowed = True,
btech_allowed_branch__contains=[studentDetails.branch],
deadline_datetime__gte=datetime.datetime.now(), deadline_datetime__gte=datetime.datetime.now(),
offer_accepted=True, email_verified=True).order_by('deadline_datetime') offer_accepted=True, email_verified=True).order_by('deadline_datetime')
elif studentDetails.degree == 'mTech':
placements = Placement.objects.filter(mtech_allowed = True,
mtech_allowed_branch__contains=[studentDetails.branch],
deadline_datetime__gte=datetime.datetime.now(),
offer_accepted=True, email_verified=True).order_by('deadline_datetime')
elif studentDetails.degree == 'ms':
placements = Placement.objects.filter(ms_allowed = True,
ms_allowed_branch__contains=[studentDetails.branch],
deadline_datetime__gte=datetime.datetime.now(),
offer_accepted=True, email_verified=True).order_by('deadline_datetime')
elif studentDetails.degree == 'phd':
placements = Placement.objects.filter(phd_allowed = True,
phd_allowed_branch__contains=[studentDetails.branch],
deadline_datetime__gte=datetime.datetime.now(),
offer_accepted=True, email_verified=True).order_by('deadline_datetime')
filtered_placements = placement_eligibility_filters(studentDetails, placements) filtered_placements = placement_eligibility_filters(studentDetails, placements)
placementsdata = PlacementSerializerForStudent(filtered_placements, many=True).data placementsdata = PlacementSerializerForStudent(filtered_placements, many=True).data
@ -179,7 +197,7 @@ def submitApplication(request, id, email, user_type):
# Only Allowing Applications for Placements # Only Allowing Applications for Placements
if data[OPENING_TYPE] == PLACEMENT: if data[OPENING_TYPE] == PLACEMENT:
if not student.can_apply: if not student.can_apply_placements:
return Response({'action': "Submit Application", 'message': "Student Can't Apply"}, return Response({'action': "Submit Application", 'message': "Student Can't Apply"},
status=status.HTTP_400_BAD_REQUEST) status=status.HTTP_400_BAD_REQUEST)
if not len(PlacementApplication.objects.filter( if not len(PlacementApplication.objects.filter(
@ -187,7 +205,6 @@ def submitApplication(request, id, email, user_type):
application = PlacementApplication() application = PlacementApplication()
opening = get_object_or_404(Placement, id=data[OPENING_ID], opening = get_object_or_404(Placement, id=data[OPENING_ID],
allowed_batch__contains=[student.batch], allowed_batch__contains=[student.batch],
allowed_branch__contains=[student.branch],
deadline_datetime__gte=timezone.now() deadline_datetime__gte=timezone.now()
) )
if not opening.offer_accepted or not opening.email_verified: if not opening.offer_accepted or not opening.email_verified:

View File

@ -24,13 +24,13 @@ class AdminView(APITestCase):
self.user4 = User.objects.create( self.user4 = User.objects.create(
email="200030058@iitdh.ac.in", id="200030058", user_type=[STUDENT]) email="200030058@iitdh.ac.in", id="200030058", user_type=[STUDENT])
self.student1 = Student.objects.create( self.student1 = Student.objects.create(
name='John Doe', roll_no='200010032', batch='2020', branch='CSE', cpi=9.5, id="200010032", can_apply=True, resumes=["8BSLybntULgrPPm_beehyv.pdf", "8BSLybntULgrPPm_kalera.pdf"], can_apply_internship=True) name='John Doe', roll_no='200010032', batch='2020', branch='CSE', cpi=9.5, id="200010032", can_apply_placements=True, resumes=["8BSLybntULgrPPm_beehyv.pdf", "8BSLybntULgrPPm_kalera.pdf"], can_apply_internship=True)
self.student2 = Student.objects.create( self.student2 = Student.objects.create(
name='Jane Doe', roll_no='200010038', batch='2020', branch='EE', cpi=9.0, id="200010038", can_apply=True, resumes=["8BSLybntULgrPPm_beehyv.pdf"], can_apply_internship=True) name='Jane Doe', roll_no='200010038', batch='2020', branch='EE', cpi=9.0, id="200010038", can_apply_placements=True, resumes=["8BSLybntULgrPPm_beehyv.pdf"], can_apply_internship=True)
self.student3 = Student.objects.create( self.student3 = Student.objects.create(
name='Bob Smith', roll_no='200010054', batch='2020', branch='CSE', cpi=8.5, id="200010054", can_apply=True, resumes=["8BSLybntULgrPPm_beehyv.pdf"], can_apply_internship=True) name='Bob Smith', roll_no='200010054', batch='2020', branch='CSE', cpi=8.5, id="200010054", can_apply_placements=True, resumes=["8BSLybntULgrPPm_beehyv.pdf"], can_apply_internship=True)
self.student4 = Student.objects.create( self.student4 = Student.objects.create(
name='Bob Marley', roll_no='200030058', batch='2020', branch='CSE', cpi=8.5, id="200030058", can_apply=True, resumes=["8BSLybntULgrPPm_beehyv.pdf"], can_apply_internship=True) name='Bob Marley', roll_no='200030058', batch='2020', branch='CSE', cpi=8.5, id="200030058", can_apply_placements=True, resumes=["8BSLybntULgrPPm_beehyv.pdf"], can_apply_internship=True)
self.placement1 = Placement.objects.create( self.placement1 = Placement.objects.create(
company_name='ABC Corp', compensation_CTC=1000000, tier='1', id=generateRandomString(), allowed_branch=["CSE", "EE"], allowed_batch=["2020"], contact_person_name="test", phone_number="1234567890", email="test1@test.com", email_verified=True, offer_accepted=True) company_name='ABC Corp', compensation_CTC=1000000, tier='1', id=generateRandomString(), allowed_branch=["CSE", "EE"], allowed_batch=["2020"], contact_person_name="test", phone_number="1234567890", email="test1@test.com", email_verified=True, offer_accepted=True)

View File

@ -21,7 +21,7 @@ class StudentViewsTestCase(APITestCase):
self.assertEqual( self.assertEqual(
self.user.email, User.objects.get(id=self.user.id).email) self.user.email, User.objects.get(id=self.user.id).email)
self.student = Student.objects.create( self.student = Student.objects.create(
name="Test Student", id=self.user.id, resumes=["8BSLybntULgrPPm_beehyv.pdf"], roll_no=str(os.environ.get("ROLL_NO")), branch="CSE", batch="2020", phone_number=1234567890, changed_by=self.user, can_apply=True, name="Test Student", id=self.user.id, resumes=["8BSLybntULgrPPm_beehyv.pdf"], roll_no=str(os.environ.get("ROLL_NO")), branch="CSE", batch="2020", phone_number=1234567890, changed_by=self.user, can_apply_placements=True,
can_apply_internship=True, degree="bTech", cpi=7.95, can_apply_internship=True, degree="bTech", cpi=7.95,
) )
self.assertEqual(self.student.name, self.assertEqual(self.student.name,
@ -409,7 +409,7 @@ class StudentViewsTestCase(APITestCase):
RESUME_FILE_NAME: '8BSLybntULgrPPm_beehyv.pdf', RESUME_FILE_NAME: '8BSLybntULgrPPm_beehyv.pdf',
ADDITIONAL_INFO: [] ADDITIONAL_INFO: []
} }
self.student.can_apply = False self.student.can_apply_placements = False
self.student.save() self.student.save()
self.client.credentials( self.client.credentials(
HTTP_AUTHORIZATION='Bearer ' + self.student_token) HTTP_AUTHORIZATION='Bearer ' + self.student_token)

View File

@ -261,7 +261,22 @@ def PlacementApplicationConditions(student, placement):
elif int(i.tier) == 1 and int(placement.tier) != 1: elif int(i.tier) == 1 and int(placement.tier) != 1:
return False, "Can't apply for this tier" return False, "Can't apply for this tier"
if student.degree != 'bTech' and not placement.rs_eligible: if student.degree == 'bTech' and not placement.btech_allowed:
raise PermissionError("Can't apply for this placement")
if student.degree == 'mTech' and not placement.mtech_allowed:
raise PermissionError("Can't apply for this placement")
if student.degree == 'ms' and not placement.ms_allowed:
raise PermissionError("Can't apply for this placement")
if student.degree == 'phd' and not placement.phd_allowed:
raise PermissionError("Can't apply for this placement")
if student.degree == 'bTech' and student.branch not in placement.btech_allowed_branch:
raise PermissionError("Can't apply for this placement")
if student.degree == 'mTech' and student.branch not in placement.mtech_allowed_branch:
raise PermissionError("Can't apply for this placement")
if student.degree == 'ms' and student.branch not in placement.ms_allowed_branch:
raise PermissionError("Can't apply for this placement")
if student.degree == 'phd' and student.branch not in placement.phd_allowed_branch:
raise PermissionError("Can't apply for this placement") raise PermissionError("Can't apply for this placement")
return True, "Conditions Satisfied" return True, "Conditions Satisfied"