Skip to content

Commit 1a03481

Browse files
committed
Add BaselineWealthCharacteristicsValueViewSet and related serializer see HEA-772
1 parent 5843bd2 commit 1a03481

3 files changed

Lines changed: 115 additions & 0 deletions

File tree

apps/baseline/serializers.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,52 @@ def get_wealth_group_label(self, obj):
412412
)
413413

414414

415+
class BaselineWealthCharacteristicsValueSerializer(serializers.ModelSerializer):
416+
417+
class Meta:
418+
model = WealthGroupCharacteristicValue
419+
fields = [
420+
"id",
421+
"wealth_group",
422+
"wealth_group_category",
423+
"wealth_group_category_name",
424+
"livelihood_zone_baseline",
425+
"livelihood_zone_baseline_label",
426+
"wealth_characteristic",
427+
"wealth_characteristic_name",
428+
"characteristic_group",
429+
"product",
430+
"product_name",
431+
"unit_of_measure",
432+
"unit_of_measure_name",
433+
"value",
434+
"min_value",
435+
"max_value",
436+
]
437+
438+
wealth_group_category = serializers.CharField(source="wealth_group.wealth_group_category.pk", read_only=True)
439+
wealth_group_category_name = serializers.CharField(
440+
source="wealth_group.wealth_group_category.name", read_only=True
441+
)
442+
livelihood_zone_baseline = serializers.IntegerField(
443+
source="wealth_group.livelihood_zone_baseline.pk", read_only=True, allow_null=True
444+
)
445+
livelihood_zone_baseline_label = serializers.SerializerMethodField()
446+
447+
def get_livelihood_zone_baseline_label(self, obj):
448+
"""Get label for livelihood zone baseline."""
449+
if hasattr(obj.wealth_group, "livelihood_zone_baseline") and obj.wealth_group.livelihood_zone_baseline:
450+
return str(obj.wealth_group.livelihood_zone_baseline)
451+
return None
452+
453+
wealth_characteristic_name = serializers.CharField(source="wealth_characteristic.name", read_only=True)
454+
characteristic_group = serializers.CharField(
455+
source="wealth_characteristic.characteristic_group", read_only=True, allow_null=True
456+
)
457+
product_name = serializers.CharField(source="product.name", read_only=True, allow_null=True)
458+
unit_of_measure_name = serializers.CharField(source="unit_of_measure.name", read_only=True, allow_null=True)
459+
460+
415461
class LivelihoodStrategySerializer(serializers.ModelSerializer):
416462
class Meta:
417463
model = LivelihoodStrategy

apps/baseline/viewsets.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
)
5555
from .serializers import (
5656
BaselineLivelihoodActivitySerializer,
57+
BaselineWealthCharacteristicsValueSerializer,
5758
BaselineWealthGroupSerializer,
5859
ButterProductionSerializer,
5960
CommunityCropProductionSerializer,
@@ -512,6 +513,70 @@ class WealthGroupCharacteristicValueViewSet(BaseModelViewSet):
512513
filterset_class = WealthGroupCharacteristicValueFilterSet
513514

514515

516+
class BaselineWealthCharacteristicsFilterSet(filters.FilterSet):
517+
518+
class Meta:
519+
model = WealthGroupCharacteristicValue
520+
fields = ["wealth_characteristic", "wealth_group"]
521+
522+
livelihood_zone_baseline = filters.NumberFilter(
523+
field_name="wealth_group__livelihood_zone_baseline",
524+
label="Livelihood Zone Baseline ID",
525+
)
526+
527+
country = MultiFieldFilter(
528+
[
529+
"wealth_group__livelihood_zone_baseline__livelihood_zone__country__iso3166a2",
530+
"wealth_group__livelihood_zone_baseline__livelihood_zone__country__iso_en_ro_name",
531+
"wealth_group__livelihood_zone_baseline__livelihood_zone__country__iso_en_name",
532+
"wealth_group__livelihood_zone_baseline__livelihood_zone__country__iso_en_ro_proper",
533+
"wealth_group__livelihood_zone_baseline__livelihood_zone__country__iso_en_proper",
534+
"wealth_group__livelihood_zone_baseline__livelihood_zone__country__iso_fr_name",
535+
"wealth_group__livelihood_zone_baseline__livelihood_zone__country__iso_fr_proper",
536+
"wealth_group__livelihood_zone_baseline__livelihood_zone__country__iso_es_name",
537+
],
538+
lookup_expr="iexact",
539+
label="Country",
540+
)
541+
542+
has_value = filters.BooleanFilter(
543+
method="filter_has_value",
544+
label="Has Value",
545+
)
546+
547+
def filter_has_value(self, queryset, name, value):
548+
if value:
549+
return queryset.exclude(value__isnull=True).exclude(value__exact="")
550+
else:
551+
return queryset.filter(Q(value__isnull=True) | Q(value__exact=""))
552+
553+
554+
class BaselineWealthCharacteristicsValueViewSet(BaseModelViewSet):
555+
"""
556+
API endpoint for baseline wealth characteristics with grouping.
557+
"""
558+
559+
queryset = (
560+
WealthGroupCharacteristicValue.objects.select_related(
561+
"wealth_characteristic",
562+
"wealth_group__wealth_group_category",
563+
"wealth_group__livelihood_zone_baseline",
564+
"product",
565+
"unit_of_measure",
566+
)
567+
.filter(wealth_group__community__isnull=True)
568+
.order_by(
569+
"wealth_characteristic__characteristic_group",
570+
"wealth_characteristic__ordering",
571+
"wealth_characteristic__code",
572+
"wealth_group__wealth_group_category__ordering",
573+
)
574+
)
575+
576+
serializer_class = BaselineWealthCharacteristicsValueSerializer
577+
filterset_class = BaselineWealthCharacteristicsFilterSet
578+
579+
515580
class LivelihoodStrategyFilterSet(filters.FilterSet):
516581
class Meta:
517582
model = LivelihoodStrategy

hea/urls.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
from baseline.viewsets import (
1313
BaselineLivelihoodActivityViewSet,
14+
BaselineWealthCharacteristicsValueViewSet,
1415
BaselineWealthGroupViewSet,
1516
ButterProductionViewSet,
1617
CommunityCropProductionViewSet,
@@ -96,6 +97,9 @@
9697
router.register(r"baselinewealthgroup", BaselineWealthGroupViewSet)
9798
router.register(r"communitywealthgroup", CommunityWealthGroupViewSet)
9899
router.register(r"wealthgroupcharacteristicvalue", WealthGroupCharacteristicValueViewSet)
100+
router.register(
101+
r"baselinewealthcharacteristicsvalue", BaselineWealthCharacteristicsValueViewSet, "baselinewealthcharacteristics"
102+
)
99103
router.register(r"livelihoodstrategy", LivelihoodStrategyViewSet)
100104
router.register(r"livelihoodactivity", LivelihoodActivityViewSet)
101105
router.register(r"baselinelivelihoodactivity", BaselineLivelihoodActivityViewSet)

0 commit comments

Comments
 (0)