diff --git a/care/facility/api/serializers/patient.py b/care/facility/api/serializers/patient.py index c4059c2577..721df68fbe 100644 --- a/care/facility/api/serializers/patient.py +++ b/care/facility/api/serializers/patient.py @@ -56,7 +56,7 @@ class PatientMetaInfoSerializer(serializers.ModelSerializer): - occupation = ChoiceField(choices=PatientMetaInfo.OccupationChoices) + occupation = ChoiceField(choices=PatientMetaInfo.OccupationChoices, allow_null=True) class Meta: model = PatientMetaInfo @@ -312,9 +312,8 @@ def create(self, validated_data): Disease.objects.bulk_create(diseases, ignore_conflicts=True) if meta_info: - meta_info_obj = PatientMetaInfo.objects.create(**meta_info) - patient.meta_info = meta_info_obj - patient.save() + patient.meta_info = PatientMetaInfo.objects.create(**meta_info) + patient.meta_info.save() if contacted_patients: contacted_patient_objs = [ @@ -361,8 +360,12 @@ def update(self, instance, validated_data): Disease.objects.bulk_create(diseases, ignore_conflicts=True) if meta_info: - for key, value in meta_info.items(): - setattr(patient.meta_info, key, value) + if patient.meta_info is None: + meta_info_obj = PatientMetaInfo.objects.create(**meta_info) + patient.meta_info = meta_info_obj + else: + for key, value in meta_info.items(): + setattr(patient.meta_info, key, value) patient.meta_info.save() if self.partial is not True: # clear the list and enter details if PUT diff --git a/care/facility/migrations/0415_alter_patientmetainfo_head_of_household_and_more.py b/care/facility/migrations/0415_alter_patientmetainfo_head_of_household_and_more.py new file mode 100644 index 0000000000..473d4c8ddb --- /dev/null +++ b/care/facility/migrations/0415_alter_patientmetainfo_head_of_household_and_more.py @@ -0,0 +1,33 @@ +# Generated by Django 4.2.10 on 2024-02-20 13:26 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("facility", "0414_remove_bed_old_name"), + ] + + operations = [ + migrations.AlterField( + model_name="patientmetainfo", + name="head_of_household", + field=models.BooleanField(blank=True, null=True), + ), + migrations.AlterField( + model_name="patientmetainfo", + name="occupation", + field=models.IntegerField( + blank=True, + choices=[ + (1, "STUDENT"), + (2, "BUSINESSMAN"), + (3, "HEALTH_CARE_WORKER"), + (4, "HEALTH_CARE_LAB_WORKER"), + (5, "ANIMAL_HANDLER"), + (6, "OTHERS"), + ], + null=True, + ), + ), + ] diff --git a/care/facility/models/patient.py b/care/facility/models/patient.py index b967a6e956..1c5408bebe 100644 --- a/care/facility/models/patient.py +++ b/care/facility/models/patient.py @@ -577,17 +577,16 @@ def format_diagnoses(diagnosis_ids): class PatientMetaInfo(models.Model): class OccupationEnum(enum.Enum): STUDENT = 1 - MEDICAL_WORKER = 2 - GOVT_EMPLOYEE = 3 - PRIVATE_EMPLOYEE = 4 - HOME_MAKER = 5 - WORKING_ABROAD = 6 - OTHERS = 7 + BUSINESSMAN = 2 + HEALTH_CARE_WORKER = 3 + HEALTH_CARE_LAB_WORKER = 4 + ANIMAL_HANDLER = 5 + OTHERS = 6 OccupationChoices = [(item.value, item.name) for item in OccupationEnum] - occupation = models.IntegerField(choices=OccupationChoices) - head_of_household = models.BooleanField() + occupation = models.IntegerField(choices=OccupationChoices, blank=True, null=True) + head_of_household = models.BooleanField(blank=True, null=True) class PatientContactDetails(models.Model):