From 6a05ed1e5fd5bf5eaa2b42dc522e724b520a1ba0 Mon Sep 17 00:00:00 2001
From: Dwi Nanda Susanto <dwi.nanda@ui.ac.id>
Date: Thu, 5 Dec 2019 22:21:56 +0700
Subject: [PATCH] 1506722720 219

---
 assets/js/EditProfile.jsx             | 19 +++++++++++++++++++
 assets/js/ProfilePage.jsx             | 16 ++++++++++++++++
 core/migrations/0002_student_ielts.py | 18 ++++++++++++++++++
 core/models/accounts.py               |  3 ++-
 core/serializers/accounts.py          |  6 ++++--
 core/tests/test_accounts.py           | 10 ++++++++++
 6 files changed, 69 insertions(+), 3 deletions(-)
 create mode 100644 core/migrations/0002_student_ielts.py

diff --git a/assets/js/EditProfile.jsx b/assets/js/EditProfile.jsx
index a6510952..1f328cb1 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 005d9845..1799377a 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 00000000..d2c27feb
--- /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 e4328412..c9dddd8d 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 afd6e58e..c6c4bdcb 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 5014f4b4..fa65ad1b 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}
-- 
GitLab