Ejemplo n.º 1
0
    def get_context_data(self, **kwargs):
        """Obtain context data."""
        context = super(SprayOperatorSummaryView,
                        self).get_context_data(**kwargs)
        district = context["object"]
        team_leader = self.kwargs.get("team_leader")
        team_leader_assistant = get_object_or_404(TeamLeaderAssistant,
                                                  pk=team_leader)

        queryset = SprayOperator.objects.raw(SOP_PERFORMANCE_SQL,
                                             [team_leader_assistant.id])

        serializer = SprayOperatorPerformanceReportSerializer(queryset,
                                                              many=True)
        totals = {
            "other":
            sum((i["other"] for i in serializer.data)),
            "refused":
            sum((i["refused"] for i in serializer.data)),
            "sprayed":
            sum((i["sprayed"] for i in serializer.data)),
            "sprayable":
            sum((i["sprayable"] for i in serializer.data)),
            "not_sprayable":
            0,
            "not_sprayed_total":
            sum((i["not_sprayed_total"] for i in serializer.data)),
            "data_quality_check":
            all((i["data_quality_check"] for i in serializer.data)),
            "found_difference":
            sum((i["found_difference"] for i in serializer.data)),
            "sprayed_difference":
            sum((i["sprayed_difference"] for i in serializer.data)),
            "no_of_days_worked":
            sum((i["no_of_days_worked"] for i in serializer.data)),
            "avg_structures_per_so":
            sum((i["avg_structures_per_so"] for i in serializer.data)),
            "avg_start_time":
            average_time([i["avg_start_time"] for i in serializer.data]),
            "avg_end_time":
            average_time([i["avg_end_time"] for i in serializer.data]),
        }

        context.update({
            "data":
            serializer.data,
            "totals":
            totals,
            "team_leader":
            team_leader,
            "team_leader_name":
            get_object_or_404(TeamLeaderAssistant, pk=team_leader).name,
            "district":
            district,
            "district_name":
            district.name,
        })
        context.update(DEFINITIONS["sop"])

        return context
Ejemplo n.º 2
0
    def get_context_data(self, **kwargs):
        """Obtain context data."""
        context = super(DistrictPerfomanceView,
                        self).get_context_data(**kwargs)
        districts = Location.objects.filter(parent=None).order_by("name")

        queryset = Location.objects.raw(DISTRICT_PERFORMANCE_SQL)
        serializer = DistrictPerformanceReportSerializer(queryset, many=True)
        num_of_districts = round(districts.count())
        num_of_succes_rates = round(len([i for i in serializer.data]))
        totals = {
            "other":
            sum((i["other"] for i in serializer.data)),
            "refused":
            sum((i["refused"] for i in serializer.data)),
            "sprayed":
            sum((i["sprayed"] for i in serializer.data)),
            "sprayable":
            sum((i["sprayable"] for i in serializer.data)),
            "not_sprayable":
            0,
            "not_eligible":
            sum((i["not_eligible"] for i in serializer.data)),
            "not_sprayed_total":
            sum((i["not_sprayed_total"] for i in serializer.data)),
            "data_quality_check":
            all((i["data_quality_check"] for i in serializer.data)),
            "found_difference":
            sum((i["found_difference"] for i in serializer.data)),
            "sprayed_difference":
            sum((i["sprayed_difference"] for i in serializer.data)),
            "pre_season_target":
            sum((i["location"].pre_season_target for i in serializer.data)),
            "houses":
            sum((i["location"].structures for i in serializer.data)),
            "no_of_days_worked":
            sum((i["no_of_days_worked"] for i in serializer.data)),
        }
        totals["avg_structures_per_so"] = ((sum(
            (i["avg_structures_per_so"]
             for i in serializer.data)) / num_of_districts)
                                           if num_of_districts else 0)
        totals["avg_start_time"] = average_time([
            i["avg_start_time"] for i in serializer.data
            if i["avg_start_time"] != ""
        ])
        totals["avg_end_time"] = average_time([
            i["avg_end_time"] for i in serializer.data
            if i["avg_start_time"] != ""
        ])
        totals["success_rate"] = ((sum(
            (i["success_rate"]
             for i in serializer.data)) / num_of_succes_rates)
                                  if num_of_succes_rates else 0)

        context.update({"data": serializer.data, "totals": totals})
        context.update(DEFINITIONS["performance:district"])

        return context
Ejemplo n.º 3
0
    def get_context_data(self, **kwargs):
        """Obtain context data."""
        context = super(TeamLeadersPerformanceView,
                        self).get_context_data(**kwargs)
        district = context["object"]

        queryset = TeamLeaderAssistant.objects.raw(TLA_PERFORMANCE_SQL,
                                                   [district.id])
        serializer = TLAPerformanceReportSerializer(queryset, many=True)

        totals = {
            "other":
            sum((i["other"] for i in serializer.data)),
            "refused":
            sum((i["refused"] for i in serializer.data)),
            "sprayed":
            sum((i["sprayed"] for i in serializer.data)),
            "sprayable":
            sum((i["sprayable"] for i in serializer.data)),
            "not_sprayable":
            0,
            "not_eligible":
            sum((i["not_eligible"] for i in serializer.data)),
            "not_sprayed_total":
            sum((i["not_sprayed_total"] for i in serializer.data)),
            "data_quality_check":
            all((i["data_quality_check"] for i in serializer.data)),
            "found_difference":
            sum((i["found_difference"] for i in serializer.data)),
            "sprayed_difference":
            sum((i["sprayed_difference"] for i in serializer.data)),
            "no_of_days_worked":
            sum((i["no_of_days_worked"] for i in serializer.data)),
            "avg_structures_per_so":
            (sum((i["avg_structures_per_so"] for i in serializer.data)) /
             round(
                 TeamLeaderAssistant.objects.filter(location=district).count()
                 or 1)),
            "avg_start_time":
            average_time([
                i["avg_start_time"] for i in serializer.data
                if i["avg_start_time"] != ""
            ]),
            "avg_end_time":
            average_time([
                i["avg_end_time"] for i in serializer.data
                if i["avg_end_time"] != ""
            ]),
        }

        context.update({
            "data": serializer.data,
            "totals": totals,
            "district": district,
            "district_name": district.name,
        })
        context.update(DEFINITIONS["tla"])

        return context
Ejemplo n.º 4
0
    def get_context_data(self, **kwargs):
        """Obtain context data."""
        context = super(SprayOperatorDailyView,
                        self).get_context_data(**kwargs)
        district = context["object"]

        team_leader = self.kwargs.get("team_leader")
        spray_operator_id = self.kwargs.get("spray_operator")
        spray_operator = get_object_or_404(SprayOperator, pk=spray_operator_id)
        queryset = PerformanceReport.objects.filter(
            spray_operator=spray_operator).order_by("spray_date")
        serializer = PerformanceReportSerializer(queryset, many=True)
        totals = {
            "other":
            sum((i["other"] for i in serializer.data)),
            "refused":
            sum((i["refused"] for i in serializer.data)),
            "sprayed":
            sum((i["sprayed"] for i in serializer.data)),
            "sprayable":
            sum((i["sprayable"] for i in serializer.data)),
            "not_sprayable":
            0,
            "not_sprayed_total":
            sum((i["not_sprayed_total"] for i in serializer.data)),
            "data_quality_check":
            all((i["data_quality_check"] for i in serializer.data)),
            "found_difference":
            sum((i["found_difference"] for i in serializer.data)),
            "sprayed_difference":
            sum((i["sprayed_difference"] for i in serializer.data)),
            "avg_start_time":
            average_time([i["avg_start_time"] for i in serializer.data]),
            "avg_end_time":
            average_time([i["avg_end_time"] for i in serializer.data]),
        }
        context.update({
            "data":
            serializer.data,
            "totals":
            totals,
            "spray_operator":
            spray_operator.code,
            "spray_operator_name":
            spray_operator.name,
            "district":
            district,
            "district_name":
            district.name,
            "team_leader":
            team_leader,
            "team_leader_name":
            spray_operator.team_leader_assistant.name,
        })
        context.update(DEFINITIONS["sop"])

        return context
Ejemplo n.º 5
0
    def get_context_data(self, **kwargs):
        """Obtain context data."""
        context = super().get_context_data(**kwargs)
        rhc = context["object"]

        spray_operator_id = self.kwargs.get("spray_operator")
        spray_operator = get_object_or_404(SprayOperator, pk=spray_operator_id)
        queryset = PerformanceReport.objects.filter(
            spray_operator=spray_operator).order_by("spray_date")
        serializer = PerformanceReportSerializer(queryset, many=True)
        totals = {
            "other":
            sum((i["other"] for i in serializer.data)),
            "refused":
            sum((i["refused"] for i in serializer.data)),
            "sprayed":
            sum((i["sprayed"] for i in serializer.data)),
            "sprayable":
            sum((i["sprayable"] for i in serializer.data)),
            "not_sprayable":
            0,
            "not_eligible":
            sum((i["not_eligible"] for i in serializer.data)),
            "not_sprayed_total":
            sum((i["not_sprayed_total"] for i in serializer.data)),
            "data_quality_check":
            all((i["data_quality_check"] for i in serializer.data)),
            "found_difference":
            sum((i["found_difference"] for i in serializer.data)),
            "sprayed_difference":
            sum((i["sprayed_difference"] for i in serializer.data)),
            "avg_start_time":
            average_time([i["avg_start_time"] for i in serializer.data]),
            "avg_end_time":
            average_time([i["avg_end_time"] for i in serializer.data]),
            "data": {},
        }
        custom_aggregations = getattr(settings,
                                      "EXTRA_PERFORMANCE_AGGREGATIONS", {})
        for field in custom_aggregations:
            totals["data"][field] = sum(i["data"][field]
                                        for i in serializer.data)

        context.update({
            "data": serializer.data,
            "totals": totals,
            "spray_operator": spray_operator.code,
            "spray_operator_name": spray_operator.name,
            "rhc": rhc,
            "rhc_name": rhc.name,
        })
        context.update(DEFINITIONS["mda-sop-daily"])

        return context
Ejemplo n.º 6
0
 def get_avg_end_time(self, obj):  # pylint: disable=no-self-use
     """Return end_time as time object."""
     return average_time([
         report.end_time for report in PerformanceReport.objects.filter(
             spray_operator__rhc=obj).only("end_time")
         if report.end_time is not None
     ])
Ejemplo n.º 7
0
 def get_avg_end_time(self, obj):  # pylint: disable=no-self-use
     """Return end_time as time object."""
     return average_time([
         report.end_time
         for report in obj.performancereport_set.all().only("end_time")
         if report.end_time is not None
     ])
Ejemplo n.º 8
0
 def get_avg_start_time(self, obj):  # pylint: disable=no-self-use
     """
     Returns start_time as time object.
     """
     return average_time([
         report.start_time
         for report in obj.performancereport_set.all().only("start_time")
     ])
Ejemplo n.º 9
0
    def get_context_data(self, **kwargs):
        """Obtain context data."""
        context = super().get_context_data(**kwargs)
        rhc = context["object"]
        custom_aggregations = getattr(settings,
                                      "EXTRA_PERFORMANCE_AGGREGATIONS", {})
        extra_annotations = {}
        for field in custom_aggregations:
            extra_annotations["data_%s" % field] = Coalesce(
                Sum(
                    Cast(
                        KeyTextTransform(field, "performancereport__data"),
                        IntegerField(),
                    )),
                Value(0),
            )

        queryset = (SprayOperator.objects.filter(rhc_id=rhc.pk).annotate(
            found=Coalesce(Sum("performancereport__found"), Value(0)),
            refused=Coalesce(Sum("performancereport__refused"), Value(0)),
            other=Coalesce(Sum("performancereport__other"), Value(0)),
            sprayed=Coalesce(Sum("performancereport__sprayed"), Value(0)),
            not_eligible=Coalesce(Sum("performancereport__not_eligible"),
                                  Value(0)),
            no_of_days_worked=Coalesce(Count("performancereport__id"),
                                       Value(0)),
            **extra_annotations).order_by("name"))
        context["spray_operator_qs"] = queryset

        serializer = SprayOperatorPerformanceReportSerializer(queryset,
                                                              many=True)
        totals = {
            "other":
            sum((i["other"] for i in serializer.data)),
            "refused":
            sum((i["refused"] for i in serializer.data)),
            "sprayed":
            sum((i["sprayed"] for i in serializer.data)),
            "sprayable":
            sum((i["sprayable"] for i in serializer.data)),
            "not_sprayable":
            0,
            "not_sprayed_total":
            sum((i["not_sprayed_total"] for i in serializer.data)),
            "not_eligible":
            sum((i["not_eligible"] for i in serializer.data)),
            "data_quality_check":
            all((i["data_quality_check"] for i in serializer.data)),
            "found_difference":
            sum((i["found_difference"] for i in serializer.data)),
            "sprayed_difference":
            sum((i["sprayed_difference"] for i in serializer.data)),
            "no_of_days_worked":
            sum((i["no_of_days_worked"] for i in serializer.data)),
            "avg_structures_per_so":
            sum((i["avg_structures_per_so"] for i in serializer.data)),
            "avg_start_time":
            average_time([i["avg_start_time"] for i in serializer.data]),
            "avg_end_time":
            average_time([i["avg_end_time"] for i in serializer.data]),
            "custom": {},
        }

        for field in custom_aggregations:
            totals["custom"][field] = sum(i["custom"][field]
                                          for i in serializer.data)

        context.update({
            "data": serializer.data,
            "totals": totals,
            "rhc": rhc,
            "rhc_name": rhc.name,
        })
        context.update(DEFINITIONS["mda-sop"])

        return context
Ejemplo n.º 10
0
    def get_context_data(self, **kwargs):
        """Obtain context data."""
        context = super().get_context_data(**kwargs)
        rhcs = Location.objects.filter(parent=self.object,
                                       target=True).order_by("name")
        custom_aggregations = getattr(settings,
                                      "EXTRA_PERFORMANCE_AGGREGATIONS", {})
        extra_annotations = {}
        for field in custom_aggregations:
            extra_annotations["data_%s" % field] = Coalesce(
                Sum(
                    Cast(
                        KeyTextTransform(field,
                                         "sop_rhc__performancereport__data"),
                        IntegerField(),
                    )),
                Value(0),
            )
        queryset = Location.performance_queryset("sop_rhc", self.object,
                                                 **extra_annotations)
        context["rhc_queryset"] = queryset
        serializer = RHCPerformanceReportSerializer(queryset, many=True)
        num_of_rhcs = round(rhcs.count())
        num_of_succes_rates = round(len([i for i in serializer.data]))
        totals = {
            "other":
            sum((i["other"] for i in serializer.data)),
            "refused":
            sum((i["refused"] for i in serializer.data)),
            "sprayed":
            sum((i["sprayed"] for i in serializer.data)),
            "sprayable":
            sum((i["sprayable"] for i in serializer.data)),
            "not_sprayable":
            0,
            "not_eligible":
            sum((i["not_eligible"] for i in serializer.data)),
            "not_sprayed_total":
            sum((i["not_sprayed_total"] for i in serializer.data)),
            "data_quality_check":
            all((i["data_quality_check"] for i in serializer.data)),
            "found_difference":
            sum((i["found_difference"] for i in serializer.data)),
            "sprayed_difference":
            sum((i["sprayed_difference"] for i in serializer.data)),
            "houses":
            sum((i["location"].structures_on_ground for i in serializer.data)),
            "no_of_days_worked":
            sum((i["no_of_days_worked"] for i in serializer.data)),
            "days_worked":
            sum((i["days_worked"] for i in serializer.data)),
            "custom": {},
        }
        totals["avg_structures_per_so"] = ((sum(
            (i["avg_structures_per_so"]
             for i in serializer.data)) / num_of_rhcs) if num_of_rhcs else 0)
        totals["avg_start_time"] = average_time([
            i["avg_start_time"] for i in serializer.data
            if i["avg_start_time"] != ""
        ])
        totals["avg_end_time"] = average_time([
            i["avg_end_time"] for i in serializer.data
            if i["avg_start_time"] != ""
        ])
        totals["success_rate"] = ((sum(
            (i["success_rate"]
             for i in serializer.data)) / num_of_succes_rates)
                                  if num_of_succes_rates else 0)

        for field in custom_aggregations:
            totals["custom"][field] = sum(i["custom"][field]
                                          for i in serializer.data)

        context.update({"data": serializer.data, "totals": totals})
        context.update(DEFINITIONS["performance:district"])

        return context