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
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
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