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 }) {
-
- Merasa sehat pada hari ini? -
+
Merasa sehat pada hari ini?
-
- Sedang minum antibiotik? -
+
Sedang minum antibiotik?
-
- Sedang minum obat lain untuk infeksi? -
+
Sedang minum obat lain untuk infeksi?
-
- - Dalam waktu 48 jam terakhir - -
+
Dalam waktu 48 jam terakhir
-
- - Apakah anda sedang minum aspirin atau obat yang mengandung - aspirin? - -
+
+ Apakah anda sedang minum aspirin atau obat yang mengandung + aspirin? +
-
- - Dalam waktu 1 minggu terakhir - -
+
Dalam waktu 1 minggu terakhir
-
- - Apakah anda mengalami sakit kepala dan demam secara - bersamaan? - -
+
+ Apakah anda mengalami sakit kepala dan demam secara + bersamaan? +
-
- - Dalam waktu 6 minggu terakhir - -
+
Dalam waktu 6 minggu terakhir
-
- - Untuk pendonor darah wanita: Apakah anda saat ini sedang - hamil? - -
+
+ Untuk pendonor darah wanita: Apakah anda saat ini sedang + hamil? +
@@ -104,9 +80,7 @@ function FirstConsentForm({ setValue }) { controlId="formBornPlace" > -
- Kehamilan berapa? -
+
Kehamilan berapa?
)} -
- - Dalam waktu 8 minggu terakhir - -
+
Dalam waktu 8 minggu terakhir
-
- - Apakah anda mendonorkan darah, trombosit, atau plasma? - -
+
+ Apakah anda mendonorkan darah, trombosit, atau plasma? +
-
- Apakah anda menerima vaksinasi atau suntikan lainnya? -
+
Apakah anda menerima vaksinasi atau suntikan lainnya?
-
- - Apakah anda pernah kontak dengan orang yang menerima - vaksinasi smallpox ? - -
+
+ Apakah anda pernah kontak dengan orang yang menerima + vaksinasi smallpox ? +
diff --git a/frontend/src/components/ForthConsentForm.js b/frontend/src/components/ForthConsentForm.js index 058a7134b8a2300d6b417ff9b2df926900babbe4..ad3e433928844e83f2159d164fd2f245395bc9ff 100644 --- a/frontend/src/components/ForthConsentForm.js +++ b/frontend/src/components/ForthConsentForm.js @@ -14,85 +14,61 @@ function ForthConsentForm({ setValue }) {
-
- - Tahun 1980 hingga 1996 - -
+
Tahun 1980 hingga 1996
-
- - Apakah anda tinggal selama 3 bulan atau lebih di Inggris? - -
+
+ Apakah anda tinggal selama 3 bulan atau lebih di Inggris? +
-
- - Apakah anda pernah - -
+
Apakah anda pernah
-
- Mendapat hasil positif untuk tes HIV/AIDS? -
+
Mendapat hasil positif untuk tes HIV/AIDS?
-
- - Menggunakan jarum suntik untuk obat-obatan, Steroid yang - tidak diresepkan dokter? - -
+
+ Menggunakan jarum suntik untuk obat-obatan, Steroid yang + tidak diresepkan dokter? +
-
- Menggunakan konsentrat faktor pembekuan? -
+
Menggunakan konsentrat faktor pembekuan?
-
- Menderita hepatitis? -
+
Menderita hepatitis?
-
- Menderita malaria? -
+
Menderita malaria?
-
- Menderita kanker termasuk leukimia? -
+
Menderita kanker termasuk leukimia?
-
- Bermasalah dengan jantung atau paru-paru? -
+
Bermasalah dengan jantung atau paru-paru?
-
- - Menderita pendarahan atau penyakit berhubungan dengan - darah? - -
+
+ Menderita pendarahan atau penyakit berhubungan dengan darah? +
-
- - Berhubungan seksual dengan orang yang tinggal di Afrika? - -
+
+ Berhubungan seksual dengan orang yang tinggal di Afrika? +
-
- Tinggal di Afrika? -
+
Tinggal di Afrika?
diff --git a/frontend/src/components/ModalEventDonorSubmission.js b/frontend/src/components/ModalEventDonorSubmission.js index 7e56c1df2562db58e0f7797b10c8f479c1fef2f0..dd5e6cd9a669f85a3f0d4c0537190d8a7c2cd115 100644 --- a/frontend/src/components/ModalEventDonorSubmission.js +++ b/frontend/src/components/ModalEventDonorSubmission.js @@ -23,6 +23,11 @@ const ModalEventDonorSubmission = ({ show, handleClose }) => { const { control, register, setValue, handleSubmit, errors } = useForm({ mode: "onChange", validationSchema: EventSubmissionSchema, + defaultValues: { + tanggal_donor: moment(), + jam_mulai: moment(), + jam_selesai: moment(), + }, }) const onSubmit = async data => { @@ -421,6 +426,7 @@ const ModalEventDonorSubmission = ({ show, handleClose }) => { disablePast required variant="inline" + inputVariant="outlined" format="DD/MM/YYYY" placeholder="DD/MM/YYYY" views={["year", "month", "date"]} @@ -459,6 +465,7 @@ const ModalEventDonorSubmission = ({ show, handleClose }) => { fullWidth required variant="inline" + inputVariant="outlined" placeholder="HH:mm" InputAdornmentProps={{ position: "start" }} inputProps={{ id: "formEventStartTime" }} @@ -492,6 +499,7 @@ const ModalEventDonorSubmission = ({ show, handleClose }) => { fullWidth required variant="inline" + inputVariant="outlined" placeholder="HH:mm" InputAdornmentProps={{ position: "start" }} inputProps={{ id: "formEventEndTime" }} diff --git a/frontend/src/components/ModalLogin.js b/frontend/src/components/ModalLogin.js index 3ff22e70acf7228fa0b46e7283dbcf791b0670d9..aa78c6cd8c5f907e28c78c86d17e8a860206eb62 100644 --- a/frontend/src/components/ModalLogin.js +++ b/frontend/src/components/ModalLogin.js @@ -1,5 +1,5 @@ import React, { useState } from "react" -import { Button, Form, Modal } from "react-bootstrap" +import { Button, Form, Modal, OverlayTrigger, Tooltip } from "react-bootstrap" import { GoogleLogin } from "react-google-login" import { useForm } from "react-hook-form" import { useAuth } from "../hooks/authenticate" @@ -141,9 +141,15 @@ const ModalLogin = ({ show, handleClose, handleSuccess }) => {

- + Silakan hubungi admin ;) + } + > + +
diff --git a/frontend/src/components/SecondConsentForm.js b/frontend/src/components/SecondConsentForm.js index 876eb8d706023e82cf592e49c39d13e605e6e264..990ce7dc1347f129c765bdf5a1f9f38aafd9db5a 100644 --- a/frontend/src/components/SecondConsentForm.js +++ b/frontend/src/components/SecondConsentForm.js @@ -14,51 +14,35 @@ function SecondConsentForm({ setValue }) {
-
- - Dalam waktu 16 minggu terakhir - -
+
Dalam waktu 16 minggu terakhir
-
- - Apakah anda mendonorkan 2 kantung sel darah merah melalui - prose aferesis? - -
+
+ Apakah anda mendonorkan 2 kantung sel darah merah melalui + prose aferesis? +
-
- - Dalam waktu 12 bulan terakhir - -
+
Dalam waktu 12 bulan terakhir
-
- Apakah anda pernah menerima transfusi darah? -
+
Apakah anda pernah menerima transfusi darah?
-
- - Apakah anda pernah menerima transplasi, organ, jaringan, - atau sumsum tulang? - -
+
+ Apakah anda pernah menerima transplasi, organ, jaringan, + atau sumsum tulang? +
-
- Apakah anda pernah cangkok tulang untuk kulit? -
+
Apakah anda pernah cangkok tulang untuk kulit?
-
- Apakah anda pernah tertusuk jarum medis? -
+
Apakah anda pernah tertusuk jarum medis?
-
- - Apakah anda pernah berhubungan seksual dengan orang dengan - HIV/AIDS? - -
+
+ Apakah anda pernah berhubungan seksual dengan orang dengan + HIV/AIDS? +
-
- - Apakah anda pernah berhubungan seksual dengan pekerja seks - komersial? - -
+
+ Apakah anda pernah berhubungan seksual dengan pekerja seks + komersial? +
-
- - Apakah anda pernah berhubungan seksual dengan pengguna - narkoba jarum suntik? - -
+
+ Apakah anda pernah berhubungan seksual dengan pengguna + narkoba jarum suntik? +
-
- - Apakah anda pernah berhubungan seksual dengan pengguna - konsentrat faktor pembekuan? - -
+
+ Apakah anda pernah berhubungan seksual dengan pengguna + konsentrat faktor pembekuan? +
-
- - Donor wanita: Apakah anda pernah berhubungan seksual - dengan laki-laki yang biseksual? - -
+
+ Pendonor wanita: Apakah + anda pernah berhubungan seksual dengan laki-laki yang + biseksual? +
-
- - Apakah anda pernah berhubungan seksual dengan penderita - hepatitis? - -
+
+ Apakah anda pernah berhubungan seksual dengan penderita + hepatitis? +
-
- Apakah anda tinggal bersama penderita hepatitis? -
+
Apakah anda tinggal bersama penderita hepatitis?
-
- Apakah anda memiliki tatto? -
+
Apakah anda memiliki tatto?
-
- - Apakah anda memiliki tindik telinga atau pada bagian tubuh - lainnya? - -
+
+ Apakah anda memiliki tindik telinga atau pada bagian tubuh + lainnya? +
-
- - Apakah anda sedang atau pernah mendapat pengobatan sifilis - atua GO (kencing tanah)? - -
+
+ Apakah anda sedang atau pernah mendapat pengobatan sifilis + atua GO (kencing tanah)? +
-
- - Apakah anda pernah ditahan dipenjara untuk waktu lebih - dari 72 jam? - -
+
+ Apakah anda pernah ditahan dipenjara untuk waktu lebih dari + 72 jam? +
-
- - Dalam waktu 3 tahun - -
+
Dalam waktu 3 tahun
-
- Apakah anda pernah berada di luar wilayah Indonesia? -
+
Apakah anda pernah berada di luar wilayah Indonesia?
-
- - Tahun 1977 hingga sekarang - -
+
Tahun 1977 hingga sekarang
-
- - Apakah anda pernah menerima uang, obat, atau pembayaran - lainnya untuk seks? - -
+
+ Apakah anda pernah menerima uang, obat, atau pembayaran + lainnya untuk seks? +
-
- - Laki-laki: Apakah anda pernah berhubungan seksual dengan - laki-laki, walaupun sekali? - -
+
+ Pendonor laki-laki: + Apakah anda pernah berhubungan seksual dengan laki-laki, + walaupun sekali? +
-
- - Tahun 1980 hingga sekarang - -
+
Tahun 1980 hingga sekarang
-
- - Apakah anda tinggal selama 5 tahun atau lebih di Eropa? - -
+
+ Apakah anda tinggal selama 5 tahun atau lebih di Eropa? +
-
- Apakah anda menerima transfusi darah di Inggris? -
+
Apakah anda menerima transfusi darah di Inggris?
{ }} > -
-

{item.title}

-
+

{item.title}

))} diff --git a/frontend/src/components/complete-profile.js b/frontend/src/components/complete-profile.js index 89e956aad77e60def0d885efc965712a3069afe2..c29b4ae963f7a2ba85985f8a26bd518aca6cc8e2 100644 --- a/frontend/src/components/complete-profile.js +++ b/frontend/src/components/complete-profile.js @@ -12,6 +12,7 @@ import { KeyboardDatePicker, MuiPickersUtilsProvider, } from "@material-ui/pickers" +import moment from "moment" import { useAuth } from "../hooks/authenticate" function CompleteProfile({ @@ -160,6 +161,7 @@ function CompleteProfile({ disableFuture required variant="inline" + inputVariant="outlined" format="DD/MM/YYYY" placeholder="DD/MM/YYYY" views={["year", "month", "date"]} @@ -170,6 +172,7 @@ function CompleteProfile({ } name="birthdate" control={control} + defaultValue={moment()} /> {errors.birthdate && ( @@ -331,10 +334,10 @@ function CompleteProfile({ size="lg" ref={register} > - - - - + + + +
@@ -370,19 +373,19 @@ function CompleteProfile({ @@ -396,14 +399,14 @@ function CompleteProfile({ /> - {errors.district && ( + {errors.village && ( - {errors.district.message} + {errors.village.message} )} - {errors.village && ( + {errors.district && ( - {errors.village.message} + {errors.district.message} )} {errors.city && ( diff --git a/frontend/src/components/event-donor-register.css b/frontend/src/components/event-donor-register.css index fae9060e633d0bf3c0120293c19d1ead38ba8dff..9e214d27e143246f3e1cfaf1b38e1133c76d6e65 100644 --- a/frontend/src/components/event-donor-register.css +++ b/frontend/src/components/event-donor-register.css @@ -6,6 +6,17 @@ overflow-y: auto; width: 100%; } +.text-header { + color: var(--blue); + font-style: italic; + font-weight: bold; + text-transform: uppercase; +} +.text-gender { + color: var(--red); + font-weight: bold; + text-transform: uppercase; +} .red-border-field { border: 1px solid var(--red); diff --git a/frontend/src/components/footer.js b/frontend/src/components/footer.js index f7c2768793457b4412b11afddcbcbbb4972bbbb6..88fbf14c5313eca568fc465bb719fdd97132cf09 100644 --- a/frontend/src/components/footer.js +++ b/frontend/src/components/footer.js @@ -1,13 +1,27 @@ import React from "react" +import logo from "src/images/ig.svg" const Footer = () => (
-
{`© ${new Date().getFullYear()} | UTD PMI DEPOK`}
-
- Jl. Boulevard, Grand Depok City Kota Kembang, Jatimulya, Kec. Cilodong, - Kota Depok, Jawa Barat 16413 +
+
+
+
{`© ${new Date().getFullYear()} | UTD PMI DEPOK`}
+
+ Jl. Boulevard Grand Depok City Kota Kembang, Jatimulya, Kec. + Cilodong, Kota Depok, Jawa Barat 16413 +
+
Tel. 021 8792 7210 | 0895 2200 7210
+
+
+
+
+ + Instagram PMI Depok + +
+
-
Tel. 021 8792 7210 | 0895 2200 7210
) diff --git a/frontend/src/components/form-validation-schema.js b/frontend/src/components/form-validation-schema.js index d40e8667de3d1a2dde9f52f8419e9967b46e83a1..86360587e771cee9a1fef6799a34e8180a8f10be 100644 --- a/frontend/src/components/form-validation-schema.js +++ b/frontend/src/components/form-validation-schema.js @@ -9,10 +9,10 @@ const AccountSchema = yup.object().shape({ password: yup .string() .required("Masukkan password.") - .min(8, "Password terlalu pendek - setidaknya harus 8 karakter.") + .min(9, "Password terlalu pendek - setidaknya harus 9 karakter.") .matches( - /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*])(?=.{8,})/, // NOSONAR - "Password harus terdiri dari minimal 1 huruf kecil, 1 huruf kapital, 1 angka, dan 1 karakter spesial (!@#$%^&*)." + /^(?=.*[a-zA-Z])(?=.*\d)[\w.,/\\+\-!?@#$%^&* ]{9,}$/, // NOSONAR + "Password harus terdiri dari minimal 1 huruf atau 1 angka." ), passwordConfirmation: yup .string() @@ -70,10 +70,10 @@ export const ChangePasswordSchema = yup.object().shape({ new_password: yup .string() .required("Masukkan password.") - .min(8, "Password terlalu pendek - setidaknya harus 8 karakter.") + .min(9, "Password terlalu pendek - setidaknya harus 9 karakter.") .matches( - /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*])(?=.{8,})/, // NOSONAR - "Password harus terdiri dari minimal 1 huruf kecil, 1 huruf kapital, 1 angka, dan 1 karakter spesial (!@#$%^&*)." + /^(?=.*[a-zA-Z])(?=.*\d)[\w.,/\\+\-!?@#$%^&* ]{9,}$/, // NOSONAR + "Password harus terdiri dari minimal 1 huruf atau 1 angka." ), confirm_password: yup .string() diff --git a/frontend/src/components/navbar.css b/frontend/src/components/navbar.css index 5caf34e92dbe71826dc707cdd60a11b24cf1c373..914f29446e00ea02158aec0531ec24c276acac1a 100644 --- a/frontend/src/components/navbar.css +++ b/frontend/src/components/navbar.css @@ -21,3 +21,13 @@ #change-profile-nav { margin-bottom: -0.1rem; } + +@media (max-width: 573px) { + .navbar-button { + display: block; + padding: 0; + margin-top: 0.5rem; + margin-bottom: 0.5rem; + text-align: left; + } +} diff --git a/frontend/src/components/navbar.js b/frontend/src/components/navbar.js index b918b9fdd1183573750aecbb875890fd08e9a233..5c8a540de42e22352c7909068bc92dbe210f34e5 100644 --- a/frontend/src/components/navbar.js +++ b/frontend/src/components/navbar.js @@ -25,6 +25,7 @@ const Navbar = () => { bg="red" variant="red" className="mb-4" + sticky="top" > @@ -32,7 +33,7 @@ const Navbar = () => { Home Jadwal Donor