Fakultas Ilmu Komputer UI

Commit aa3fccb4 authored by Fannyah Dita Cahya's avatar Fannyah Dita Cahya
Browse files

Merge branch '1606918414-188' into 'master'

1606918414 188

See merge request !226
parents 2cb50372 ba7e7f98
Pipeline #26609 passed with stages
in 13 minutes and 44 seconds
......@@ -66,6 +66,7 @@ export default class EditProfile extends React.Component {
hackerrank_url: '',
student_gpa: 0.0,
student_toefl: 0,
student_toefl_file: '',
website_url: '',
latest_work: '',
latest_work_desc: '',
......@@ -655,6 +656,12 @@ export default class EditProfile extends React.Component {
}
name="student_toefl"
/>
<input
onChange={this.handleFile}
placeholder="TOEFL file"
name="student_toefl_file"
type="File"
/>
</Form.Field>
<Form.Field>
......
......@@ -88,6 +88,7 @@ export default class ProfilePage extends React.Component {
self_description: '',
student_gpa: 0.0,
student_toefl: 0,
student_toefl_file: '',
website_url: '',
latest_work: '',
latest_work_desc: '',
......@@ -110,6 +111,7 @@ export default class ProfilePage extends React.Component {
this.handleFile = this.handleFile.bind(this);
this.gotoStudentResume = this.gotoStudentResume.bind(this);
this.gotoStudentTranscript = this.gotoStudentTranscript.bind(this);
this.gotoStudentToeflFile = this.gotoStudentToeflFile.bind(this);
this.getProfile();
......@@ -154,6 +156,7 @@ export default class ProfilePage extends React.Component {
self_description: data.self_description,
student_gpa: data.student_gpa,
student_toefl: data.student_toefl,
student_toefl_file: data.student_toefl_file,
website_url: data.website_url,
latest_work: data.latest_work,
alamat: data.alamat,
......@@ -310,6 +313,8 @@ export default class ProfilePage extends React.Component {
gotoStudentResume = () => gotoLink(this.state.resume || '#');
gotoStudentToeflFile = () => gotoLink(this.state.student_toefl_file || '#');
gotoStudentTranscript = () => gotoLink(`transkrip/${this.state.id}`);
updateForm(show) {
......@@ -730,6 +735,12 @@ export default class ProfilePage extends React.Component {
}
name="student_toefl"
/>
<input
onChange={this.handleFile}
placeholder="Student Toefl"
name="student_toefl_file"
type="File"
/>
</Form.Field>
<Form.Field>
<label htmlFor="dependants">Dependants</label>
......@@ -1327,6 +1338,14 @@ export default class ProfilePage extends React.Component {
</Segment>
<Container textAlign="center">
<div className="buttonProfile">
<Button
onClick={this.gotoStudentToeflFile}
disabled={!this.state.student_toefl_file}
primary
size="small"
>
TOEFL
</Button>
<Button
onClick={this.gotoStudentResume}
disabled={!this.state.resume}
......
# -*- coding: utf-8 -*-
# Generated by Django 1.11.17 on 2019-12-04 03:48
from __future__ import unicode_literals
# Generated by Django 2.2.8 on 2019-12-04 06:45
import core.lib.validators
import core.models.accounts
......@@ -48,25 +46,70 @@ class Migration(migrations.Migration):
},
),
migrations.CreateModel(
name='Feedback',
name='Recommendation',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('content', models.TextField(blank=True)),
('created', models.DateTimeField(auto_now_add=True)),
('title', models.CharField(blank=True, default='', max_length=100)),
('content', models.TextField()),
('companyId', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='core.Company')),
('updated', models.DateTimeField(auto_now=True)),
],
options={
'ordering': ['created'],
'ordering': ['-updated'],
},
),
migrations.CreateModel(
name='Recommendation',
name='Vacancy',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('content', models.TextField(blank=True)),
('verified', models.BooleanField(default=False)),
('open_time', models.DateTimeField()),
('description', models.TextField(blank=True)),
('requirements', models.TextField(blank=True)),
('responsibilities', models.TextField(blank=True)),
('close_time', models.DateTimeField()),
('created', models.DateTimeField(auto_now_add=True)),
('updated', models.DateTimeField(auto_now=True)),
('name', models.CharField(max_length=100)),
('amount', models.IntegerField(null=True)),
('max_accepted_applicants', models.IntegerField(default=0)),
('benefits', models.TextField(blank=True)),
('working_period', models.CharField(max_length=100, null=True)),
('tag', models.TextField(blank=True)),
('salary', models.IntegerField(default=0)),
('recruiter_activity', models.CharField(blank=True, max_length=10, null=True)),
('office_address', models.TextField(blank=True, default='')),
('company', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='vacancies', to='core.Company')),
],
options={
'ordering': ['-updated'],
},
),
migrations.CreateModel(
name='ReasonRejected',
fields=[
('application', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='core.Application')),
('reason', models.TextField(default='Tidak memenuhi kualifikasi perusahaan.')),
],
),
migrations.CreateModel(
name='VacancyMilestone',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('detail', models.TextField()),
('expected_start', models.DateField()),
('expected_finish', models.DateField()),
('vacancy', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='milestones', to='core.Vacancy')),
],
),
migrations.CreateModel(
name='Supervisor',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(auto_now_add=True)),
('updated', models.DateTimeField(auto_now=True)),
('nip', models.IntegerField(unique=True, validators=[django.core.validators.MinValueValidator(100000000), django.core.validators.MaxValueValidator(9999999999)])),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
options={
'ordering': ['-updated'],
......@@ -108,6 +151,7 @@ class Migration(migrations.Migration):
('job_seeking_status', models.CharField(blank=True, max_length=30, null=True)),
('student_gpa', models.FloatField(blank=True, db_column='student_gpa', default=1.0, null=True, validators=[core.lib.validators.validate_student_gpa])),
('student_toefl', models.IntegerField(blank=True, db_column='toefl', default=0, null=True)),
('student_toefl_file', models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_toefl_file_path, validators=[django.core.validators.FileExtensionValidator(['pdf'])])),
('volunteer', models.CharField(blank=True, max_length=100, null=True)),
('awards', models.CharField(blank=True, max_length=100, null=True)),
('projects', models.CharField(blank=True, max_length=100, null=True)),
......@@ -117,89 +161,15 @@ class Migration(migrations.Migration):
('interests', models.CharField(blank=True, max_length=100, null=True)),
('dependants', models.IntegerField(blank=True, db_column='dependants', default=0, null=True)),
('related_course', models.CharField(blank=True, max_length=200, null=True)),
],
options={
'ordering': ['-updated'],
},
),
migrations.CreateModel(
name='Supervisor',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(auto_now_add=True)),
('updated', models.DateTimeField(auto_now=True)),
('nip', models.IntegerField(unique=True, validators=[django.core.validators.MinValueValidator(100000000), django.core.validators.MaxValueValidator(9999999999)])),
('applied_vacancies', models.ManyToManyField(blank=True, related_name='applied_vacancies', through='core.Application', to='core.Vacancy')),
('bookmarked_vacancies', models.ManyToManyField(blank=True, related_name='bookmarked_vacancies', to='core.Vacancy')),
('recommendations', models.ManyToManyField(blank=True, related_name='recommendations', to='core.Recommendation')),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
options={
'ordering': ['-updated'],
},
),
migrations.CreateModel(
name='Vacancy',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('verified', models.BooleanField(default=False)),
('open_time', models.DateTimeField()),
('description', models.TextField(blank=True)),
('requirements', models.TextField(blank=True)),
('responsibilities', models.TextField(blank=True)),
('close_time', models.DateTimeField()),
('created', models.DateTimeField(auto_now_add=True)),
('updated', models.DateTimeField(auto_now=True)),
('name', models.CharField(max_length=100)),
('amount', models.IntegerField(null=True)),
('max_accepted_applicants', models.IntegerField(default=0)),
('benefits', models.TextField(blank=True)),
('working_period', models.CharField(max_length=100, null=True)),
('tag', models.TextField(blank=True)),
('salary', models.IntegerField(default=0)),
('recruiter_activity', models.CharField(blank=True, max_length=10, null=True)),
('office_address', models.TextField(blank=True, default='')),
('company', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='vacancies', to='core.Company')),
],
options={
'ordering': ['-updated'],
},
),
migrations.CreateModel(
name='VacancyMilestone',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('detail', models.TextField()),
('expected_start', models.DateField()),
('expected_finish', models.DateField()),
('vacancy', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='milestones', to='core.Vacancy')),
],
),
migrations.CreateModel(
name='ReasonRejected',
fields=[
('application', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='core.Application')),
('reason', models.TextField(default='Tidak memenuhi kualifikasi perusahaan.')),
],
),
migrations.AddField(
model_name='student',
name='applied_vacancies',
field=models.ManyToManyField(blank=True, related_name='applied_vacancies', through='core.Application', to='core.Vacancy'),
),
migrations.AddField(
model_name='student',
name='bookmarked_vacancies',
field=models.ManyToManyField(blank=True, related_name='bookmarked_vacancies', to='core.Vacancy'),
),
migrations.AddField(
model_name='student',
name='recommendations',
field=models.ManyToManyField(blank=True, related_name='recommendations', to='core.Recommendation'),
),
migrations.AddField(
model_name='student',
name='user',
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='recommendation',
name='recommendation_giver',
......@@ -210,10 +180,19 @@ class Migration(migrations.Migration):
name='recommendation_receiver',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='receiver', to='core.Student'),
),
migrations.AddField(
model_name='feedback',
name='studentId',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='core.Student'),
migrations.CreateModel(
name='Feedback',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(auto_now_add=True)),
('title', models.CharField(blank=True, default='', max_length=100)),
('content', models.TextField()),
('companyId', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='core.Company')),
('studentId', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='core.Student')),
],
options={
'ordering': ['created'],
},
),
migrations.AddField(
model_name='application',
......@@ -227,10 +206,10 @@ class Migration(migrations.Migration):
),
migrations.AlterUniqueTogether(
name='recommendation',
unique_together=set([('recommendation_giver', 'recommendation_receiver')]),
unique_together={('recommendation_giver', 'recommendation_receiver')},
),
migrations.AlterUniqueTogether(
name='application',
unique_together=set([('student', 'vacancy')]),
unique_together={('student', 'vacancy')},
),
]
# Generated by Django 2.2.8 on 2019-12-04 04:51
import core.lib.validators
import core.models.accounts
import django.core.validators
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='company',
name='category',
field=models.CharField(default='Belum ada kategori perusahaan', max_length=140),
),
migrations.AlterField(
model_name='company',
name='website',
field=models.CharField(default='Belum ada link website', max_length=100),
),
migrations.AlterField(
model_name='feedback',
name='title',
field=models.CharField(blank=True, default='', max_length=100),
),
migrations.AlterField(
model_name='reasonrejected',
name='reason',
field=models.TextField(default='Tidak memenuhi kualifikasi perusahaan.'),
),
migrations.AlterField(
model_name='student',
name='dependants',
field=models.IntegerField(blank=True, db_column='dependants', default=0, null=True),
),
migrations.AlterField(
model_name='student',
name='expected_salary',
field=models.CharField(blank=True, max_length=10, null=True, validators=[django.core.validators.RegexValidator('^\\d{0,10}$')]),
),
migrations.AlterField(
model_name='student',
name='phone_number',
field=models.CharField(blank=True, db_index=True, max_length=100, null=True, validators=[django.core.validators.RegexValidator('^0\\d{1,11}$')]),
),
migrations.AlterField(
model_name='student',
name='photo',
field=models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_photo_file_path, validators=[django.core.validators.FileExtensionValidator(['jpg', 'jpeg', 'png'])]),
),
migrations.AlterField(
model_name='student',
name='resume',
field=models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_resume_file_path, validators=[django.core.validators.FileExtensionValidator(['pdf'])]),
),
migrations.AlterField(
model_name='student',
name='student_gpa',
field=models.FloatField(blank=True, db_column='student_gpa', default=1.0, null=True, validators=[core.lib.validators.validate_student_gpa]),
),
migrations.AlterField(
model_name='student',
name='student_toefl',
field=models.IntegerField(blank=True, db_column='toefl', default=0, null=True),
),
migrations.AlterField(
model_name='vacancy',
name='office_address',
field=models.TextField(blank=True, default=''),
),
]
......@@ -64,6 +64,11 @@ def get_student_sertifikat_file_path(instance, filename):
filename = "%s.%s" % (uuid.uuid4(), extension)
return os.path.join("student-sertifikat/", filename)
def get_student_toefl_file_path(instance, filename):
extension = filename.split('.')[-1].lower()
filename = "%s.%s" % (uuid.uuid4(), extension)
return os.path.join("student-toefl-file/", filename)
class Student(models.Model):
"""
......@@ -112,6 +117,8 @@ class Student(models.Model):
student_gpa = models.FloatField(db_column='student_gpa', default=1.0, blank=True, null=True,
validators=[validate_student_gpa])
student_toefl = models.IntegerField(db_column='toefl', default=0, blank=True, null=True)
student_toefl_file = models.FileField(upload_to=get_student_toefl_file_path, null=True, blank=True,
validators=[FileExtensionValidator(['pdf'])])
volunteer = models.CharField(max_length=100, blank=True, null=True)
awards = models.CharField(max_length=100, blank=True, null=True)
projects = models.CharField(max_length=100, blank=True, null=True)
......
......@@ -26,7 +26,7 @@ class StudentSerializer(serializers.ModelSerializer):
'work_experience', 'latest_work', 'latest_work_desc', 'read_no', 'volunteer', 'job_seeking_status',
'skills', 'expected_salary',
'self_description', 'github_url', 'gitlab_url', 'awards', 'certification', 'languages', 'seminar',
'interests', 'alamat', 'projects', 'dependants', 'student_toefl', 'related_course']
'interests', 'alamat', 'projects', 'dependants', 'student_toefl', 'student_toefl_file', 'related_course']
@staticmethod
def get_accepted_no(obj):
......@@ -47,10 +47,13 @@ class StudentUpdateSerializer(serializers.ModelSerializer):
def to_representation(self, instance):
resume = None
photo = None
student_toefl_file = None
if instance.resume and hasattr(instance.resume, 'url'):
resume = instance.resume.url
if instance.photo and hasattr(instance.photo, 'url'):
photo = instance.photo.url
if instance.student_toefl_file and hasattr(instance.student_toefl_file, 'url'):
student_toefl_file = instance.student_toefl_file.url
return {
'resume': resume,
'email': instance.user.email,
......@@ -67,6 +70,7 @@ class StudentUpdateSerializer(serializers.ModelSerializer):
'website_url': instance.website_url,
'student_gpa': instance.student_gpa,
'student_toefl':instance.student_toefl,
'student_toefl_file': student_toefl_file,
'volunteer': instance.volunteer,
'linkedin_url': instance.linkedin_url,
'hackerrank_url': instance.hackerrank_url,
......@@ -121,6 +125,7 @@ class StudentUpdateSerializer(serializers.ModelSerializer):
instance.student_gpa = validated_data.get(
'student_gpa', instance.student_gpa)
instance.student_toefl = validated_data.get('student_toefl', instance.student_toefl)
instance.student_toefl_file = validated_data.get('student_toefl_file', instance.student_toefl_file)
instance.website_url = validated_data.get(
'website_url', instance.website_url)
instance.skills = validated_data.get('skills', instance.skills)
......@@ -160,7 +165,7 @@ class StudentUpdateSerializer(serializers.ModelSerializer):
'work_experience', 'latest_work', 'latest_work_desc', 'volunteer', 'job_seeking_status', 'skills',
'expected_salary',
'self_description', 'github_url', 'gitlab_url', 'awards', 'certification', 'languages', 'seminar',
'interests', 'alamat', 'projects', 'dependants', 'student_toefl', 'related_course']
'interests', 'alamat', 'projects', 'dependants', 'student_toefl', 'student_toefl_file', 'related_course']
class CompanyUpdateSerializer(serializers.ModelSerializer):
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment