示例#1
0
    def database_data_layer(self) -> tuple:
        if self.subawards:
            queryset = subaward_filter(self.filters)
            obligation_column = "amount"
        else:
            queryset = spending_over_time(self.filters)
            obligation_column = "generated_pragmatic_obligation"

        values = ["fy"]
        if self.group == "month":
            queryset = queryset.annotate(month=FiscalMonth("action_date"),
                                         fy=FiscalYear("action_date"))
            values.append("month")

        elif self.group == "quarter":
            queryset = queryset.annotate(quarter=FiscalQuarter("action_date"),
                                         fy=FiscalYear("action_date"))
            values.append("quarter")

        elif self.group == "fiscal_year":
            queryset = queryset.annotate(fy=FiscalYear("action_date"))

        queryset = (queryset.values(*values).annotate(
            aggregated_amount=Sum(obligation_column)).order_by(
                *["{}".format(value) for value in values]))

        return queryset, values
示例#2
0
    def database_data_layer(self):
        recipient_hash = self.filters['recipient_id'][:-2]
        time_ranges = []
        for t in self.filters['time_period']:
            t['date_type'] = 'action_date'
            time_ranges.append(t)
        queryset = SummaryAwardRecipient.objects.filter()
        queryset &= combine_date_range_queryset(time_ranges,
                                                SummaryAwardRecipient,
                                                API_SEARCH_MIN_DATE,
                                                API_MAX_DATE)

        if self.filters['recipient_id'][-1] == 'P':
            # there *should* only one record with that hash and recipient_level = 'P'
            parent_duns_rows = RecipientProfile.objects.filter(
                recipient_hash=recipient_hash,
                recipient_level='P').values('recipient_unique_id')
            if len(parent_duns_rows) != 1:
                raise InvalidParameterException(
                    'Provided recipient_id has no parent records')
            parent_duns = parent_duns_rows[0]['recipient_unique_id']
            queryset = queryset.filter(parent_recipient_unique_id=parent_duns)
        elif self.filters['recipient_id'][-1] == 'R':
            queryset = queryset.filter(recipient_hash=recipient_hash,
                                       parent_recipient_unique_id__isnull=True)
        else:
            queryset = queryset.filter(
                recipient_hash=recipient_hash,
                parent_recipient_unique_id__isnull=False)

        values = ['fy']
        if self.groupings[self.json_request['group']] == 'month':
            queryset = queryset.annotate(month=FiscalMonth('action_date'),
                                         fy=FiscalYear('action_date'))
            values.append('month')

        elif self.groupings[self.json_request['group']] == 'quarter':
            queryset = queryset.annotate(quarter=FiscalQuarter('action_date'),
                                         fy=FiscalYear('action_date'))
            values.append('quarter')

        elif self.groupings[self.json_request['group']] == 'fiscal_year':
            queryset = queryset.annotate(fy=FiscalYear('action_date'))

        queryset = queryset.values(*values).annotate(count=Count('award_id'))
        return queryset, values
示例#3
0
    def database_data_layer(self):
        recipient_hash = self.filters["recipient_id"][:-2]
        time_ranges = []
        for t in self.filters["time_period"]:
            t["date_type"] = "action_date"
            time_ranges.append(t)
        queryset = SummaryAwardRecipient.objects.filter()
        queryset &= combine_date_range_queryset(time_ranges,
                                                SummaryAwardRecipient,
                                                API_SEARCH_MIN_DATE,
                                                API_MAX_DATE)

        if self.filters["recipient_id"][-1] == "P":
            # there *should* only one record with that hash and recipient_level = 'P'
            parent_duns_rows = RecipientProfile.objects.filter(
                recipient_hash=recipient_hash,
                recipient_level="P").values("recipient_unique_id")
            if len(parent_duns_rows) != 1:
                raise InvalidParameterException(
                    "Provided recipient_id has no parent records")
            parent_duns = parent_duns_rows[0]["recipient_unique_id"]
            queryset = queryset.filter(parent_recipient_unique_id=parent_duns)
        elif self.filters["recipient_id"][-1] == "R":
            queryset = queryset.filter(recipient_hash=recipient_hash,
                                       parent_recipient_unique_id__isnull=True)
        else:
            queryset = queryset.filter(
                recipient_hash=recipient_hash,
                parent_recipient_unique_id__isnull=False)

        values = ["fy"]
        if self.groupings[self.json_request["group"]] == "month":
            queryset = queryset.annotate(month=FiscalMonth("action_date"),
                                         fy=FiscalYear("action_date"))
            values.append("month")

        elif self.groupings[self.json_request["group"]] == "quarter":
            queryset = queryset.annotate(quarter=FiscalQuarter("action_date"),
                                         fy=FiscalYear("action_date"))
            values.append("quarter")

        elif self.groupings[self.json_request["group"]] == "fiscal_year":
            queryset = queryset.annotate(fy=FiscalYear("action_date"))

        queryset = queryset.values(*values).annotate(count=Count("award_id"))
        return queryset, values