diff --git a/assets/js/EditProfile.jsx b/assets/js/EditProfile.jsx index a6510952e1120c85d675826da84b50d5c7d8476c..1f328cb1d8db63749b57c47ab270a4335447699c 100644 --- a/assets/js/EditProfile.jsx +++ b/assets/js/EditProfile.jsx @@ -78,6 +78,7 @@ export default class EditProfile extends ProfileHandler { interests: '', dependants: '', related_course: '', + ielts: 1.0, }; this.getProfile = this.getProfile.bind(this); this.handleChange = this.handleChange.bind(this); @@ -120,6 +121,7 @@ export default class EditProfile extends ProfileHandler { seminar: data.seminar, interests: data.interests, related_course: data.related_course, + ielts: data.ielts, }); if (this.props.route.own) { const newSession = this.props.user.data; @@ -611,6 +613,23 @@ export default class EditProfile extends ProfileHandler { type="File" /> </Form.Field> + <Form.Field> + <label htmlFor="ielts">IELTS</label> + <input + onChange={this.handleChange} + placeholder={ + this.state.ielts === null + ? '400' + : this.state.ielts + } + defaultValue={ + this.state.ielts === null + ? null + : this.state.ielts + } + name="ielts" + /> + </Form.Field> </Form> </Segment> diff --git a/assets/js/ProfilePage.jsx b/assets/js/ProfilePage.jsx index 005d984591625143f290d73001774d00618ccb51..1799377a2dd55d92eada9934a680c0da2279eb1f 100755 --- a/assets/js/ProfilePage.jsx +++ b/assets/js/ProfilePage.jsx @@ -102,6 +102,7 @@ export default class ProfilePage extends ProfileHandler { interests: '', dependants: '', related_course: '', + ielts: 1.0, }; this.getProfile = this.getProfile.bind(this); this.handleChange = this.handleChange.bind(this); @@ -172,6 +173,7 @@ export default class ProfilePage extends ProfileHandler { interests: data.interests, dependants: data.dependants, related_course: data.related_course, + ielts: data.ielts, }); if (this.props.route.own) { const newSession = this.props.user.data; @@ -825,6 +827,20 @@ export default class ProfilePage extends ProfileHandler { </Grid.Column> </Grid> </Segment> + <Segment basic vertical> + <Grid> + <Grid.Column width={2}> + <Icon name="pencil alternate" size="big" /> + </Grid.Column> + <Grid.Column width={13}> + <p href={this.state.ielts}> + {' '} + {this.state.ielts || 'N/A'} + {' '} + </p> + </Grid.Column> + </Grid> + </Segment> </Grid.Column> </Grid> </Segment> diff --git a/core/migrations/0002_student_ielts.py b/core/migrations/0002_student_ielts.py new file mode 100644 index 0000000000000000000000000000000000000000..d2c27feb8f4c4e569cd9eb8d4dc20e86f70d718f --- /dev/null +++ b/core/migrations/0002_student_ielts.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.8 on 2019-12-05 15:09 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='student', + name='ielts', + field=models.FloatField(blank=True, db_column='ielts', default=1.0, null=True), + ), + ] diff --git a/core/models/accounts.py b/core/models/accounts.py index e43284125fd65e3144e64ef36b95be90c2cad79e..c9dddd8d4f5520433d90ab7148606a11bf50ec46 100755 --- a/core/models/accounts.py +++ b/core/models/accounts.py @@ -128,7 +128,8 @@ class Student(models.Model): interests = models.CharField(max_length=100, blank=True, null=True) dependants = models.IntegerField(db_column='dependants', default=0, blank=True, null=True) related_course = models.CharField(max_length=200, blank=True, null=True) - + ielts = models.FloatField(db_column='ielts', default=1.0, blank=True, null=True) + @property def name(self): return get_display_name(self.user) diff --git a/core/serializers/accounts.py b/core/serializers/accounts.py index afd6e58e92640f71da6a46cba571b050a1a2eca4..c6c4bdcb1d19a53672a8ab6f71b041730e1cf26c 100755 --- a/core/serializers/accounts.py +++ b/core/serializers/accounts.py @@ -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', 'student_toefl_file', 'related_course'] + 'interests', 'alamat', 'projects', 'dependants', 'student_toefl', 'student_toefl_file', 'related_course', 'ielts'] @staticmethod def get_accepted_no(obj): @@ -89,6 +89,7 @@ class StudentUpdateSerializer(serializers.ModelSerializer): 'interests': instance.interests, 'dependants': instance.dependants, 'related_course':instance.related_course, + 'ielts':instance.ielts, } def update(self, instance, validated_data): @@ -154,6 +155,7 @@ class StudentUpdateSerializer(serializers.ModelSerializer): instance.dependants = validated_data.get('dependants', instance.dependants) instance.related_course = validated_data.get( 'related_course', instance.related_course) + instance.ielts = validated_data.get('ielts', instance.ielts) instance.save() instance.user.save() return instance @@ -165,7 +167,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', 'student_toefl_file', 'related_course'] + 'interests', 'alamat', 'projects', 'dependants', 'student_toefl', 'student_toefl_file', 'related_course', 'ielts'] class CompanyUpdateSerializer(serializers.ModelSerializer): diff --git a/core/tests/test_accounts.py b/core/tests/test_accounts.py index 5014f4b4c5ad97320ed8c0e614b056a2e14b2128..fa65ad1b01c7719dc3249b8bb4ca9923900e1721 100755 --- a/core/tests/test_accounts.py +++ b/core/tests/test_accounts.py @@ -451,6 +451,16 @@ class ProfileUpdateTests(APITestCase): response = self.client.patch(url, {'dependants': 'this is not valid dependants input'}, format='multipart') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + url = '/api/students/' + str(student_id) + "/profile/" + response = self.client.patch(url, {'ielts': 6.0}, format='multipart') + self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) + self.assertEqual(response.data.get('ielts'), 6.0) + + url = '/api/students/' + str(student_id) + "/profile/" + response = self.client.patch(url, {'ielts': 'invalid input'}, format='multipart') + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + + def _create_test_file(self, path): f = open(path, 'rb') return {'pdf_file': f}