From 61f816339a7bc7641fe43c9826e38159e3c41c73 Mon Sep 17 00:00:00 2001 From: "metta.anantha" <anantha_metta@yahoo.com> Date: Sun, 6 Oct 2019 17:06:35 +0700 Subject: [PATCH 1/6] added testcase for portfolio_link --- core/models/accounts.py | 1 + core/tests/test_accounts.py | 9 +++++++++ requirements.txt | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/core/models/accounts.py b/core/models/accounts.py index 7361aa32..6564c805 100644 --- a/core/models/accounts.py +++ b/core/models/accounts.py @@ -65,6 +65,7 @@ class Student(models.Model): batch = models.CharField(max_length=4, blank=True, null=True) show_transcript = models.BooleanField(default=False) photo = models.FileField(upload_to=get_student_photo_file_path, null=True, blank=True, validators=[validate_image_file_extension]) + portfolio_link = models.URLField(blank=True, db_index=True, null=True) @property def name(self): diff --git a/core/tests/test_accounts.py b/core/tests/test_accounts.py index 25281a7c..cd4247d2 100644 --- a/core/tests/test_accounts.py +++ b/core/tests/test_accounts.py @@ -136,6 +136,15 @@ class ProfileUpdateTests(APITestCase): self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) self.assertEqual(response.data.get('phone_number'), '08123123123') + url = '/api/students/' + str(student_id) + "/profile/" + response = self.client.patch(url, {'portfolio_link': 'https://www.example.com/myproject'}, format='multipart') + self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) + self.assertEqual(response.data.get('portfolio_link'), 'https://www.example.com/myproject') + + url = '/api/students/' + str(student_id) + "/profile/" + response = self.client.patch(url, {'portfolio_link': 'asdfghjkl'}, format='multipart') + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + url = '/api/students/' + str(student_id) + "/profile/" response = self.client.patch(url, {'email': 'saasdasd'}, format='multipart') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) diff --git a/requirements.txt b/requirements.txt index 46dd30dc..a99aac4e 100755 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,7 @@ Django==1.10.5 django-webpack-loader==0.4.1 djangorestframework==3.5.4 packaging==16.8 -psycopg2==2.6.2 +psycopg2-binary==2.8.3 pyparsing==2.1.10 six==1.10.0 gunicorn -- GitLab From cf3d36679b611ea95454ad83abfaac534c03504a Mon Sep 17 00:00:00 2001 From: "metta.anantha" <anantha_metta@yahoo.com> Date: Sun, 6 Oct 2019 17:14:48 +0700 Subject: [PATCH 2/6] added portfolio_link in models.py --- core/models/accounts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/models/accounts.py b/core/models/accounts.py index 6564c805..859d87a9 100644 --- a/core/models/accounts.py +++ b/core/models/accounts.py @@ -65,7 +65,7 @@ class Student(models.Model): batch = models.CharField(max_length=4, blank=True, null=True) show_transcript = models.BooleanField(default=False) photo = models.FileField(upload_to=get_student_photo_file_path, null=True, blank=True, validators=[validate_image_file_extension]) - portfolio_link = models.URLField(blank=True, db_index=True, null=True) + portfolio_link = models.URLField(blank=True, null=True) @property def name(self): -- GitLab From 82c4c247afdbbc60bb6bd019df938674a4bb5a20 Mon Sep 17 00:00:00 2001 From: "metta.anantha" <anantha_metta@yahoo.com> Date: Sun, 6 Oct 2019 17:21:08 +0700 Subject: [PATCH 3/6] added portfolio_link in serializers/accounts.py --- core/lib/validators.py | 2 +- core/serializers/accounts.py | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/core/lib/validators.py b/core/lib/validators.py index 4aaa2242..45149032 100644 --- a/core/lib/validators.py +++ b/core/lib/validators.py @@ -17,4 +17,4 @@ def validate_document_file_extension(value): def validate_image_file_extension(value): - validate_file(value, ['.jpeg', '.jpg', '.png', '.JPG', '.JPEG']) + validate_file(value, ['.jpeg', '.jpg', '.png', '.JPG', '.JPEG']) \ No newline at end of file diff --git a/core/serializers/accounts.py b/core/serializers/accounts.py index e57747ce..53535755 100644 --- a/core/serializers/accounts.py +++ b/core/serializers/accounts.py @@ -19,7 +19,7 @@ class StudentSerializer(serializers.ModelSerializer): class Meta: model = Student fields = ['id', 'name', 'user', 'npm', 'resume', 'phone_number', 'birth_place', 'birth_date', 'major', 'batch', \ - 'show_transcript', 'photo', 'accepted_no'] + 'show_transcript', 'photo', 'accepted_no', 'portfolio_link'] def get_accepted_no(self, obj): apps = Application.objects.filter(student=obj, status=4) @@ -43,6 +43,7 @@ class StudentUpdateSerializer(serializers.ModelSerializer): 'phone_number': instance.phone_number, 'photo': photo, 'show_transcript': instance.show_transcript + 'portfolio_link': instance.portfolio_link } def update(self, instance, validated_data): @@ -51,13 +52,14 @@ class StudentUpdateSerializer(serializers.ModelSerializer): instance.phone_number = validated_data.get('phone_number', instance.phone_number) instance.photo = validated_data.get('photo', instance.photo) instance.user.email = validated_data.get('email', instance.user.email) + instance.portfolio_link = validated_data.get('portfolio_link', instance.portfolio_link) instance.save() instance.user.save() return instance class Meta: model = Student - fields = ['resume', 'email', 'phone_number', 'photo', 'show_transcript'] + fields = ['resume', 'email', 'phone_number', 'photo', 'show_transcript', 'portfolio_link'] class CompanyUpdateSerializer(serializers.ModelSerializer): -- GitLab From ba725602ab366410961761a2154d3ae4c11f98c9 Mon Sep 17 00:00:00 2001 From: "metta.anantha" <anantha_metta@yahoo.com> Date: Sun, 6 Oct 2019 17:26:05 +0700 Subject: [PATCH 4/6] added portfolio_link in ProfilePage.jsx --- assets/js/ProfilePage.jsx | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/assets/js/ProfilePage.jsx b/assets/js/ProfilePage.jsx index a9c0fc9f..ff35a606 100644 --- a/assets/js/ProfilePage.jsx +++ b/assets/js/ProfilePage.jsx @@ -27,6 +27,7 @@ export default class ProfilePage extends React.Component { dateOfBirth: '', resume: '', phone_number: '', + portfolio_link: '', show_transcript: '', photo: '', form: { @@ -34,6 +35,7 @@ export default class ProfilePage extends React.Component { email: '', phone_number: '', resume: '', + portfolio_link: '', show_transcript: '', }, bagikanTranskrip: '', @@ -66,6 +68,7 @@ export default class ProfilePage extends React.Component { cityOfBirth: data.birth_place, dateOfBirth: data.birth_date, phone_number: data.phone_number, + portfolio_link: data.portfolio_link, photo: data.photo, show_transcript: data.show_transcript, acceptedNo: data.accepted_no, @@ -158,6 +161,10 @@ export default class ProfilePage extends React.Component { <label htmlFor="resume">Resume</label> <input onChange={this.handleFile} placeholder="Resume" name="resume" type="File" /> </Form.Field> + <Form.Field> + <label htmlFor="portfolio_link">Portfolio Link</label> + <input onChange={this.handleChange} placeholder="www.example.com/myproject" name="portfolio_link" /> + </Form.Field> <Form.Field> <Checkbox onChange={this.handleCheckbox} @@ -229,6 +236,17 @@ export default class ProfilePage extends React.Component { </Grid> </Segment> + <Segment basic vertical> + <Grid> + <Grid.Column width={2}> + <Icon name="portfolio" size="big" /> + </Grid.Column> + <Grid.Column width={13}> + <p> { this.state.portfolio_link || 'N/A' }</p> + </Grid.Column> + </Grid> + </Segment> + <Segment basic vertical> <Grid> <Grid.Column width={2}> -- GitLab From d5276446dc4a5e93f868866eb29d7e0163776b41 Mon Sep 17 00:00:00 2001 From: "metta.anantha" <anantha_metta@yahoo.com> Date: Sun, 6 Oct 2019 17:32:30 +0700 Subject: [PATCH 5/6] migrate portfolio_link --- .../migrations/0014_student_portfolio_link.py | 20 +++++++++++++++++++ core/serializers/accounts.py | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 core/migrations/0014_student_portfolio_link.py diff --git a/core/migrations/0014_student_portfolio_link.py b/core/migrations/0014_student_portfolio_link.py new file mode 100644 index 00000000..a02dad41 --- /dev/null +++ b/core/migrations/0014_student_portfolio_link.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2019-10-06 10:31 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0013_auto_20170602_1130'), + ] + + operations = [ + migrations.AddField( + model_name='student', + name='portfolio_link', + field=models.URLField(blank=True, null=True), + ), + ] diff --git a/core/serializers/accounts.py b/core/serializers/accounts.py index 53535755..3a9df4dc 100644 --- a/core/serializers/accounts.py +++ b/core/serializers/accounts.py @@ -42,7 +42,7 @@ class StudentUpdateSerializer(serializers.ModelSerializer): 'email': instance.user.email, 'phone_number': instance.phone_number, 'photo': photo, - 'show_transcript': instance.show_transcript + 'show_transcript': instance.show_transcript, 'portfolio_link': instance.portfolio_link } -- GitLab From 7ea13423c0b37d810496c788ca90ec05d5123fb3 Mon Sep 17 00:00:00 2001 From: "metta.anantha" <anantha_metta@yahoo.com> Date: Sun, 6 Oct 2019 18:03:46 +0700 Subject: [PATCH 6/6] edit icon and placeholder --- assets/js/ProfilePage.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/js/ProfilePage.jsx b/assets/js/ProfilePage.jsx index ff35a606..76c043e6 100644 --- a/assets/js/ProfilePage.jsx +++ b/assets/js/ProfilePage.jsx @@ -239,10 +239,10 @@ export default class ProfilePage extends React.Component { <Segment basic vertical> <Grid> <Grid.Column width={2}> - <Icon name="portfolio" size="big" /> + <Icon name="linkify" size="big" /> </Grid.Column> <Grid.Column width={13}> - <p> { this.state.portfolio_link || 'N/A' }</p> + <p> { this.state.portfolio_link || '-' }</p> </Grid.Column> </Grid> </Segment> -- GitLab