diff --git a/backend/acara_donor/admin.py b/backend/acara_donor/admin.py
index c953769a6ef1a352369125ee02ed53cf2ed8d492..d583317f1ead724551ad46643c2d3327094582b6 100644
--- a/backend/acara_donor/admin.py
+++ b/backend/acara_donor/admin.py
@@ -1,38 +1,19 @@
-from django.http import HttpResponse
from django.contrib import admin
+from django.conf import settings
+from django.utils.timezone import localtime
+from django.utils.html import mark_safe
from acara_donor.models import AcaraDonor
+from donor.models import JadwalDonor
from acara_donor.filters import AcaraDonorFilter
-def download_acara_donor(modeladmin, request, queryset):
- import pandas as pd
- from django_pandas.io import read_frame
-
- response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
- response['Content-Disposition'] = f'attachment; filename={modeladmin.model._meta}.xlsx'
-
- df = read_frame(queryset)
- df['waktu_donor'] = df['waktu_donor'].astype(str).str[:-6] # Strip tzinfo
-
- writer = pd.ExcelWriter(response, engine='xlsxwriter')
-
- df.to_excel(writer, sheet_name='Sheet1')
-
- workbook = writer.book
- # worksheet = writer.sheets['Sheet1']
-
- workbook.close()
-
- return response
-
-
-download_acara_donor.short_description = 'Download Acara Donor as Excel Workbook'
-
-
@admin.register(AcaraDonor)
class AcaraDonorAdmin(admin.ModelAdmin):
+ list_display = ('nama_institusi', 'alamat_lokasi_donor',
+ 'display_waktu', 'status')
list_filter = ('status', AcaraDonorFilter, 'kecamatan', 'kategori')
- search_fields = ('waktu_mulai',)
+ search_fields = ('waktu_mulai', 'alamat_lokasi_donor')
+
readonly_fields = ('id',
'user',
'nama_institusi',
@@ -43,4 +24,59 @@ class AcaraDonorAdmin(admin.ModelAdmin):
'email_koor',
'no_telp_koor',
'keterangan',
- 'foto_lokasi')
+ 'foto_lokasi',
+ 'show_image')
+ fieldsets = (
+ (None, {
+ 'fields': ('id',
+ 'user',
+ 'status')
+ }),
+ ('INFORMASI ACARA DONOR', {
+ 'fields': ('kategori',
+ 'alamat_lokasi_donor',
+ 'kecamatan',
+ ('waktu_mulai', 'waktu_berakhir'),
+ 'perkiraan_jumlah_donor',
+ 'keterangan',
+ 'show_image')
+ }),
+ ('INFORMASI PENYELENGGARA', {
+ 'fields': ('nama_institusi', 'alamat_institusi',
+ 'email_kantor', 'no_telp_kantor')
+ }),
+ ('KONTAK KOORDINATOR', {
+ 'fields': ('nama_koor', 'email_koor', 'no_telp_koor')
+ }),
+ )
+
+ def display_waktu(self, obj):
+ """Create a string for waktu acara donor."""
+ waktu_mulai = localtime(obj.waktu_mulai)
+ waktu_berakhir = localtime(obj.waktu_berakhir)
+ return f"{waktu_mulai.date().strftime('%d/%m/%Y')} \
+ ({waktu_mulai.hour:02d}:{waktu_mulai.minute:02d} \
+ - {waktu_berakhir.hour:02d}:{waktu_berakhir.minute:02d})"
+
+ def show_image(self, obj):
+ """Create an image preview for foto lokasi acara donor."""
+ return mark_safe(''
+ % (obj.foto_lokasi.url))
+
+ display_waktu.short_description = 'Waktu'
+ show_image.short_description = 'Preview foto lokasi'
+
+ class Media:
+ js = [settings.MEDIA_URL+'/js/acara_donor_custom_admin.js', ]
+
+ def save_model(self, request, obj, form, change):
+ if(obj.status):
+ JadwalDonor.objects.create(kecamatan=obj.kecamatan,
+ location=obj.alamat_lokasi_donor,
+ time_start=obj.waktu_mulai,
+ time_end=obj.waktu_berakhir,
+ quota=obj.perkiraan_jumlah_donor,
+ category=obj.kategori)
+
+ super().save_model(request, obj, form, change)
diff --git a/backend/acara_donor/factories.py b/backend/acara_donor/factories.py
index 5f173081e2435740fe87a3f075df153c3ae34f92..996e2d4a4b0482b09b5588571f1a396f2aae08af 100644
--- a/backend/acara_donor/factories.py
+++ b/backend/acara_donor/factories.py
@@ -26,17 +26,15 @@ class AcaraDonorFactory(factory.DjangoModelFactory):
email_koor = factory.Faker('free_email', locale=LOCALE)
no_telp_koor = factory.Sequence(lambda n: '021-1128-%04d' % n)
- kategori = factory.LazyAttribute(lambda _:
- choice(JadwalDonor.Category.choices)[0])
+ kategori = factory.LazyAttribute(
+ lambda _: choice(JadwalDonor.Category.choices)[0]) # NOSONAR
alamat_lokasi_donor = factory.Faker('address', locale=LOCALE)
- kecamatan = factory.LazyAttribute(lambda _:
- choice(JadwalDonor.Kecamatan.choices)[0])
- waktu_mulai = factory.LazyAttribute(lambda _: timezone.now()
- + timedelta(
- days=randint(1, 66),
- hours=randint(1, 23))) # NOSONAR
- waktu_berakhir = factory.LazyAttribute(lambda t: t.waktu_mulai
- + timedelta(
- hours=randint(2, 6))) # NOSONAR
+ kecamatan = factory.LazyAttribute(
+ lambda _: choice(JadwalDonor.Kecamatan.choices)[0]) # NOSONAR
+ waktu_mulai = factory.LazyAttribute(
+ lambda _: timezone.now() + timedelta(days=randint(1, 66), # NOSONAR
+ hours=randint(1, 23))) # NOSONAR
+ waktu_berakhir = factory.LazyAttribute(
+ lambda t: t.waktu_mulai + timedelta(hours=randint(2, 6))) # NOSONAR
perkiraan_jumlah_donor = factory.fuzzy.FuzzyInteger(low=33, high=666)
keterangan = factory.Faker('text')
diff --git a/backend/acara_donor/migrations/0002_auto_20200602_2055.py b/backend/acara_donor/migrations/0002_auto_20200602_2055.py
new file mode 100644
index 0000000000000000000000000000000000000000..cde608cc039d8bd4dd7269ba38acebcf15e42789
--- /dev/null
+++ b/backend/acara_donor/migrations/0002_auto_20200602_2055.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.0.5 on 2020-06-02 13:55
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('acara_donor', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='acaradonor',
+ name='status',
+ field=models.BooleanField(default=None, null=True),
+ ),
+ ]
diff --git a/backend/acara_donor/models.py b/backend/acara_donor/models.py
index 09ecce37fdeb6448a53607cf54539841de66dbba..cbe59d5a66b1a997ff631100e1b45df4c71b1710 100644
--- a/backend/acara_donor/models.py
+++ b/backend/acara_donor/models.py
@@ -7,7 +7,7 @@ from donor.models import JadwalDonor
class AcaraDonor(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
- status = models.BooleanField(null=True)
+ status = models.BooleanField(null=True, default=None)
nama_institusi = models.CharField(max_length=95)
alamat_institusi = models.CharField(max_length=140)
@@ -18,10 +18,10 @@ class AcaraDonor(models.Model):
email_koor = models.EmailField()
no_telp_koor = models.CharField(max_length=20)
- kategori = models.CharField(max_length=20,
+ kategori = models.CharField(max_length=20, blank=False, null=False,
choices=JadwalDonor.Category.choices)
alamat_lokasi_donor = models.CharField(max_length=140)
- kecamatan = models.CharField(max_length=20,
+ kecamatan = models.CharField(max_length=20, blank=False, null=False,
choices=JadwalDonor.Kecamatan.choices)
waktu_mulai = models.DateTimeField()
waktu_berakhir = models.DateTimeField()
diff --git a/backend/acara_donor/serializers.py b/backend/acara_donor/serializers.py
index 8f241dcb86ed6e5a2d428216e02075bbae45d7b5..ccce4f8110f715cba8bbfc6bd419c8b21b057fe5 100644
--- a/backend/acara_donor/serializers.py
+++ b/backend/acara_donor/serializers.py
@@ -26,4 +26,5 @@ class AcaraDonorSerializer(serializers.ModelSerializer):
class Meta:
model = AcaraDonor
exclude = ["user", ]
- extra_kwargs = {'foto_lokasi': {'required': False}}
+ extra_kwargs = {'foto_lokasi': {'required': False},
+ 'status': {'default': None}}
diff --git a/backend/acara_donor/tests.py b/backend/acara_donor/tests.py
index fde7469e919e986117ce2dda23d4ac0b8ccf529d..b8104eebe284935704c0671b19333f851e75ddad 100644
--- a/backend/acara_donor/tests.py
+++ b/backend/acara_donor/tests.py
@@ -1,6 +1,5 @@
import datetime
from unittest.mock import patch
-from django.contrib.auth import get_user_model
from django.test import TestCase
from django.utils import timezone
from django.utils.timezone import localtime
@@ -14,9 +13,6 @@ from acara_donor.admin import AcaraDonorAdmin
from acara_donor.filters import AcaraDonorFilter
-User = get_user_model()
-
-
class AcaraDonorTest(TestCase):
""" Test module for Acara Donor model"""
diff --git a/backend/donor/admin.py b/backend/donor/admin.py
index 4b93a0aae497bc5ff5bf7823f0d52454c87accdd..63b125749b57fea96a6a73274c5c91d85bd6a37d 100644
--- a/backend/donor/admin.py
+++ b/backend/donor/admin.py
@@ -1,4 +1,5 @@
from django.contrib import admin
+from django.conf import settings
from django.http import HttpResponse
from donor.models import JadwalDonor, DaftarDonor
@@ -65,12 +66,70 @@ download_jadwaldonor.short_description = 'Download Jadwal Donor as Excel Workboo
@admin.register(JadwalDonor)
class JadwalDonorAdmin(admin.ModelAdmin):
list_filter = ('kecamatan', 'time_start', 'category')
+ search_fields = ('time_start', 'location')
actions = [download_jadwaldonor]
+ class Media:
+ js = [settings.MEDIA_URL+'/js/acara_donor_custom_admin.js', ]
+
@admin.register(DaftarDonor)
class DaftarDonorAdmin(admin.ModelAdmin):
- list_filter = ('has_attended', )
+ list_display = ('user', 'has_attended', 'get_goldar', 'jadwal_donor')
+ search_fields = ('user__email',
+ 'jadwal_donor__location', 'jadwal_donor__time_start')
+ fields = ('has_attended',
+ 'id',
+ 'user',
+ 'jadwal_donor',
+ 'merasa_sehat',
+ 'minum_antibiotik',
+ 'minum_obat_infeksi',
+ 'minum_aspirin',
+ 'sakit_kepala_dan_demam',
+ 'sedang_hamil',
+ 'kehamilan_berapa',
+ 'donor_darah_trombosit_plasma',
+ 'menerima_vaksinasi',
+ 'kontak_vaksinasi',
+ 'donor_aferesis',
+ 'pernah_transfusi',
+ 'pernah_transplasi',
+ 'pernah_cangkok_tulang',
+ 'pernah_tusuk_jarum_medis',
+ 'pernah_seks_aids',
+ 'pernah_seks_psk',
+ 'pernah_seks_narkoba',
+ 'pernah_seks_konsentrat',
+ 'wanita_pernah_seks_laki_biseksual',
+ 'pernah_seks_dengan_hepatitis',
+ 'tinggal_dengan_hepatitis',
+ 'punya_tato',
+ 'punya_tindik',
+ 'sedang_sifilis_go',
+ 'pernah_dipenjara',
+ 'pernah_di_luar_indonesia',
+ 'pernah_jualan_seks',
+ 'pernah_homoseks',
+ 'pernah_tinggal_di_eropa',
+ 'pernah_terima_transfusi_di_inggris',
+ 'pernah_tinggal_di_inggris',
+ 'positif_aids',
+ 'pakai_jarum_suntik',
+ 'pakai_konsentrat',
+ 'menderita_hepatitis',
+ 'menderita_malaria',
+ 'menderita_kanker',
+ 'bermasalah_jantung_paru_paru',
+ 'menderita_pendarahan',
+ 'seks_dengan_orang_afrika',
+ 'tinggal_di_afrika')
+ list_filter = ('has_attended', 'user__profile__blood_type')
+
+ def get_goldar(self, obj):
+ return obj.user.profile.blood_type
+ get_goldar.short_description = 'Goldar'
+ get_goldar.admin_order_field = 'user__profile__blood_type'
def get_readonly_fields(self, request, obj=None):
readonly_fields = list(set(
@@ -80,3 +139,6 @@ class DaftarDonorAdmin(admin.ModelAdmin):
if 'has_attended' in readonly_fields:
readonly_fields.remove('has_attended')
return readonly_fields
+
+ class Media:
+ js = [settings.MEDIA_URL+'/js/daftar_donor_custom_admin.js', ]
diff --git a/backend/donor/migrations/0012_auto_20200604_1236.py b/backend/donor/migrations/0012_auto_20200604_1236.py
new file mode 100644
index 0000000000000000000000000000000000000000..9cfecdf94717178a15af237159fffa460484f8e6
--- /dev/null
+++ b/backend/donor/migrations/0012_auto_20200604_1236.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.0.5 on 2020-06-04 05:36
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('donor', '0011_auto_20200602_0227'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='jadwaldonor',
+ name='location',
+ field=models.CharField(max_length=140),
+ ),
+ ]
diff --git a/backend/donor/models.py b/backend/donor/models.py
index f176abd0e0a7cf996b0857899dee6c2e76eb6a4d..6f4c4d3bbc01102e368a3d38b50bf1c8a29bdf70 100644
--- a/backend/donor/models.py
+++ b/backend/donor/models.py
@@ -26,7 +26,7 @@ class JadwalDonor(models.Model):
PRIVATE = "Tertutup"
kecamatan = models.CharField(max_length=20, choices=Kecamatan.choices)
- location = models.CharField(max_length=30)
+ location = models.CharField(max_length=140)
time_start = models.DateTimeField()
time_end = models.DateTimeField()
quota = models.PositiveIntegerField()
diff --git a/backend/edukasi/admin.py b/backend/edukasi/admin.py
index 12fea278c463624603ccfdc0a37d2c65fe98a6a8..390c3080e16e02183ca8f6f3fd893418552e7e20 100644
--- a/backend/edukasi/admin.py
+++ b/backend/edukasi/admin.py
@@ -1,7 +1,14 @@
from django.contrib import admin
+from django.conf import settings
from edukasi.models import Artikel
@admin.register(Artikel)
class ArtikelAdmin(admin.ModelAdmin):
- pass
+ list_display = ('title', 'posted_at')
+ search_fields = ('posted_at', 'title')
+ fields = ('posted_at', 'title', 'featured_image', 'content')
+ readonly_fields = ('posted_at',)
+
+ class Media:
+ js = [settings.MEDIA_URL+'/js/artikel_custom_admin.js', ]
diff --git a/backend/edukasi/factories.py b/backend/edukasi/factories.py
index 615b3fadbe214a6200277385e56718577815d3e7..b20e09f45e2a3ee7158911b35f86aab050adc67a 100644
--- a/backend/edukasi/factories.py
+++ b/backend/edukasi/factories.py
@@ -12,6 +12,6 @@ class ArtikelFactory(factory.DjangoModelFactory):
class Meta:
model = Artikel
- title = fake.sentence()[:-1][:30]
+ title = fake.sentence()[:-1][:58]
featured_image = os.path.join("edukasi", "placeholder.jpg")
content = "\n".join(fake.paragraphs())
diff --git a/backend/edukasi/management/commands/seed_artikel.py b/backend/edukasi/management/commands/seed_artikel.py
index 5f6e84c2f180afca82ed898d1b1ae4765ba86b00..077e1ca679cd0aa1a6322d2a39a41683bc6721ab 100644
--- a/backend/edukasi/management/commands/seed_artikel.py
+++ b/backend/edukasi/management/commands/seed_artikel.py
@@ -14,9 +14,9 @@ class Command(BaseCommand):
help = 'Add dummy data artikel edukasi'
def handle(self, *args, **options):
- for i in range(20):
+ for _ in range(20):
content = []
- for i in range(5):
+ for _ in range(5):
content.append(" ".join(fake.paragraphs()))
Artikel.objects.create(
title=fake.sentence()[:-1][:30],
diff --git a/backend/edukasi/migrations/0003_auto_20200603_2016.py b/backend/edukasi/migrations/0003_auto_20200603_2016.py
new file mode 100644
index 0000000000000000000000000000000000000000..2b7c8f3dc3c66fcc20b3128a155cd78a57f37473
--- /dev/null
+++ b/backend/edukasi/migrations/0003_auto_20200603_2016.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.0.5 on 2020-06-03 13:16
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('edukasi', '0002_artikel_posted_at'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='artikel',
+ name='title',
+ field=models.CharField(max_length=25),
+ ),
+ ]
diff --git a/backend/edukasi/migrations/0004_auto_20200603_2020.py b/backend/edukasi/migrations/0004_auto_20200603_2020.py
new file mode 100644
index 0000000000000000000000000000000000000000..3de5ae4f1579acb8607c2fa750ea09c53c706929
--- /dev/null
+++ b/backend/edukasi/migrations/0004_auto_20200603_2020.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.0.5 on 2020-06-03 13:20
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('edukasi', '0003_auto_20200603_2016'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='artikel',
+ name='title',
+ field=models.CharField(max_length=30),
+ ),
+ ]
diff --git a/backend/edukasi/migrations/0005_auto_20200603_2118.py b/backend/edukasi/migrations/0005_auto_20200603_2118.py
new file mode 100644
index 0000000000000000000000000000000000000000..6521914e7cbac34683d5f4d51cd45b83fcc8a90d
--- /dev/null
+++ b/backend/edukasi/migrations/0005_auto_20200603_2118.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.0.5 on 2020-06-03 14:18
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('edukasi', '0004_auto_20200603_2020'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='artikel',
+ name='title',
+ field=models.CharField(max_length=60),
+ ),
+ ]
diff --git a/backend/edukasi/models.py b/backend/edukasi/models.py
index 0b3d6e5d69f4b05e98f70a70a61162d056fa406a..ee9d8c0b2e735d314719fbf88863eff8b4173baa 100644
--- a/backend/edukasi/models.py
+++ b/backend/edukasi/models.py
@@ -2,7 +2,7 @@ from django.db import models
class Artikel(models.Model):
- title = models.CharField(max_length=32)
+ title = models.CharField(max_length=60)
featured_image = models.ImageField()
content = models.TextField()
posted_at = models.DateTimeField(auto_now_add=True)
diff --git a/backend/edukasi/serializers.py b/backend/edukasi/serializers.py
index 122315274edc26cc0db746740c0e39f49f8afb85..4980d127b4a995f3a1d1a1ec53b0bd7e47e57a02 100644
--- a/backend/edukasi/serializers.py
+++ b/backend/edukasi/serializers.py
@@ -6,4 +6,4 @@ from .models import Artikel
class ArtikelSerializer(serializers.ModelSerializer):
class Meta:
model = Artikel
- fields = ['id', 'title', 'featured_image', 'content']
+ fields = ['id', 'title', 'featured_image', 'content', 'posted_at']
diff --git a/backend/main/admin.py b/backend/main/admin.py
index ab11241c0b94d2c014b668ef20732c8278ca4292..ce05abad43fe18c0c7ea5c0342504beb3b5314a3 100644
--- a/backend/main/admin.py
+++ b/backend/main/admin.py
@@ -1,4 +1,5 @@
from django.contrib import admin
+from django.conf import settings
from django.contrib.auth.admin import UserAdmin as DjangoUserAdmin
from django.utils.translation import ugettext_lazy as _
@@ -9,10 +10,17 @@ from .models import User, Profile
class UserAdmin(DjangoUserAdmin):
"""Define admin model for custom User model with no username field."""
+ readonly_fields = ('email',
+ 'first_name',
+ 'last_name',
+ 'last_login',
+ 'date_joined')
+
fieldsets = (
(None, {'fields': ('email', 'password')}),
(_('Personal info'), {'fields': ('first_name', 'last_name')}),
- (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser', 'is_verified',
+ (_('Permissions'), {'fields': ('is_active', 'is_staff',
+ 'is_superuser', 'is_verified',
'groups', 'user_permissions')}),
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
)
@@ -26,7 +34,61 @@ class UserAdmin(DjangoUserAdmin):
search_fields = ('email', 'first_name', 'last_name')
ordering = ('email',)
+ class Media:
+ js = [settings.MEDIA_URL+'/js/user_custom_admin.js', ]
+
@admin.register(Profile)
class ProfileAdmin(admin.ModelAdmin):
- pass
+ list_display = ('user', 'district', 'address', 'age', 'sex', 'blood_type')
+ list_filter = ('blood_type', 'sex')
+ search_fields = ('address', 'district')
+
+ readonly_fields = ('user',
+ 'body_weight',
+ 'id_card_no',
+ 'birthplace',
+ 'birthdate',
+ 'sex',
+ 'profession',
+ 'blood_type',
+ 'married_status',
+ 'address',
+ 'city',
+ 'district',
+ 'village',
+ 'phone_no',
+ 'work_address',
+ 'work_email',
+ 'work_phone_no',
+ 'age')
+
+ fieldsets = (
+ (None, {'fields': ('user',)}),
+ ('INFORMASI PRIBADI', {
+ 'fields': ('id_card_no',
+ 'birthplace',
+ 'birthdate',
+ 'age',
+ 'body_weight',
+ 'sex',
+ 'profession',
+ 'blood_type',
+ 'married_status')
+ }),
+ ('ALAMAT', {
+ 'fields': ('address',
+ 'village',
+ 'district',
+ 'city',
+ 'work_address')
+ }),
+ ('KONTAK', {
+ 'fields': ('phone_no',
+ 'work_email',
+ 'work_phone_no')
+ }),
+ )
+
+ class Media:
+ js = [settings.MEDIA_URL+'/js/profile_custom_admin.js', ]
diff --git a/backend/main/models.py b/backend/main/models.py
index ebc6ce8424082c419c8be179f28a0fe19cdbc8dd..8207262672781f0fcf81f406e975b17e9f0493db 100644
--- a/backend/main/models.py
+++ b/backend/main/models.py
@@ -98,7 +98,7 @@ class Profile(models.Model):
return today.year - born.year - ((today.month, today.day) < (born.month, born.day))
def __str__(self):
- return f'({self.sex}, {self.blood_type})'
+ return f'{self.user} ({self.sex}, {self.blood_type})'
class Meta:
pass
diff --git a/backend/main/test_models.py b/backend/main/test_models.py
index 0ea18b1b116b2783eee139d2a995dd03aac6f9ff..13e355f605e74c8acd3d63b5f77d09fbd784adcc 100644
--- a/backend/main/test_models.py
+++ b/backend/main/test_models.py
@@ -105,7 +105,7 @@ class ProfileTests(TestCase):
profile__sex=Sex.FEMALE,
profile__blood_type='O+')
- self.assertEqual(str(user.profile), '(F, O+)')
+ self.assertEqual(str(user.profile), f'{str(user)} (F, O+)')
def test_dont_save_new_profile_on_user_update(self):
user = UserFactory(last_name='Musthofa')
diff --git a/backend/media/formulir-daftar-donor/formulir-1.pdf b/backend/media/formulir-daftar-donor/formulir-1.pdf
index e50c52accc0d587ee07a38ae28f43b5d1867f854..dbbe840b44cd2fe4c97ec5289cd04e4b7247355f 100644
Binary files a/backend/media/formulir-daftar-donor/formulir-1.pdf and b/backend/media/formulir-daftar-donor/formulir-1.pdf differ
diff --git a/frontend/src/components/FirstConsentForm.js b/frontend/src/components/FirstConsentForm.js
index 28f55d937304a497456b33ee257301f1bc3abba1..c4e2212e813e5036c882f90c205e0719779cc074 100644
--- a/frontend/src/components/FirstConsentForm.js
+++ b/frontend/src/components/FirstConsentForm.js
@@ -24,76 +24,52 @@ function FirstConsentForm({ setValue }) {
{item.title}
-{item.title}