def test_group_by_and_foreign_key_field(self): report = ReportGenerator( report_model=SimpleSales, group_by='client', columns=[ 'name', 'contact_id', 'contact__address', SlickReportField.create(Sum, 'value'), '__total__' ], # time_series_pattern='monthly', date_field='doc_date', # time_series_columns=['__debit__', '__credit__', '__balance__', '__total__'] ) self.assertTrue(report._report_fields_dependencies) data = report.get_report_data() # import pdb; # pdb.set_trace() self.assertNotEqual(data, []) self.assertEqual(data[0]['name'], 'Client 1') self.assertEqual(data[1]['name'], 'Client 2') self.assertEqual(data[2]['name'], 'Client 3') self.assertEqual(data[0]['contact_id'], 1) self.assertEqual(data[1]['contact_id'], 2) self.assertEqual(data[2]['contact_id'], 3) self.assertEqual(data[0]['sum__value'], 300) self.assertEqual(Client.objects.get(pk=1).contact.address, 'Street 1') self.assertEqual(data[0]['contact__address'], 'Street 1') self.assertEqual(data[1]['contact__address'], 'Street 2') self.assertEqual(data[2]['contact__address'], 'Street 3')
def test_time_series_columns_inclusion(self): x = ReportGenerator(OrderLine, date_field='order__date_placed', group_by='client', columns=['title'], time_series_columns=['__total_quantity__'], time_series_pattern='monthly', start_date=datetime(2020, 1, 1, tzinfo=pytz.timezone('utc')), end_date=datetime(2020, 12, 31, tzinfo=pytz.timezone('utc'))) # import pdb; # pdb.set_trace() self.assertEqual(len(x.get_list_display_columns()), 13)
def test_view(self): response = self.client.get(reverse('report1')) self.assertEqual(response.status_code, 200) view_report_data = response.context['report_data']['data'] report_generator = ReportGenerator( report_model=SimpleSales, date_field='doc_date', group_by='client', columns=['slug', 'name'], time_series_pattern='monthly', time_series_columns=['__total__', '__balance__']) self.assertTrue(view_report_data) self.assertEqual(view_report_data, report_generator.get_report_data())
def test_ajax(self): report_generator = ReportGenerator(report_model=SimpleSales, date_field='doc_date', group_by='client', columns=['slug', 'name'], time_series_pattern='monthly', time_series_columns=['__total__', '__balance__'] ) data = report_generator.get_report_data() response = self.client.get(reverse('report1'), HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(response.status_code, 200) view_report_data = response.json() self.assertEqual(view_report_data['data'], data)
def test_view(self): reponse = self.client.get(reverse('report1')) self.assertEqual(reponse.status_code, 200) # import pdb; pdb.set_trace() view_report_data = reponse.context['report_data']['data'] report_generator = ReportGenerator( report_model=OrderLine, date_field='date_placed', # or 'order__date_placed', group_by='product', columns=['name', 'sku'], time_series_pattern='monthly', time_series_columns=['__total_quantity__'], ) self.assertEqual(view_report_data, report_generator.get_report_data())
def test_joined_per_day(self): field_registry.register(SlickReportField.create(Count, 'id', 'count__id')) report_generator = ReportGenerator(report_model=UserJoined, date_field='date_joined', group_by='date_joined', start_date=datetime.date(2020, 1, 1), end_date=datetime.date(2020, 1, 10), columns=['date_joined', 'count__id'], ) data = report_generator.get_report_data() self.assertEqual(len(data), 3) self.assertEqual(data[0]['count__id'], 1) self.assertEqual(data[1]['count__id'], 1) self.assertEqual(data[2]['count__id'], 2)
def test_many_to_many_group_by(self): field_registry.register(SlickReportField.create(Count, 'tax__name', 'tax__count')) report_generator = ReportGenerator(report_model=ComplexSales, date_field='doc_date', group_by='tax__name', columns=['tax__name', 'tax__count'], ) data = report_generator.get_report_data() self.assertEqual(len(data), 3) self.assertEqual(data[0]['tax__name'], 'State') self.assertEqual(data[0]['tax__count'], 3) self.assertEqual(data[1]['tax__name'], 'Vat reduced') self.assertEqual(data[1]['tax__count'], 2) self.assertEqual(data[2]['tax__name'], 'Vat full') self.assertEqual(data[2]['tax__count'], 1)
def test_gather_dependencies_for_time_series(self): report = ReportGenerator(report_model=SimpleSales, group_by='client', columns=['slug', 'title'], time_series_pattern='monthly', date_field='doc_date', time_series_columns=['__debit__', '__credit__', '__balance__', '__total__'] ) self.assertTrue(report._report_fields_dependencies)
def test_group_by_traverse(self): report = ReportGenerator( report_model=SimpleSales, group_by='product__category', columns=[ 'product__category', SlickReportField.create(Sum, 'value'), '__total__' ], # time_series_pattern='monthly', date_field='doc_date', # time_series_columns=['__debit__', '__credit__', '__balance__', '__total__'] ) self.assertTrue(report._report_fields_dependencies) data = report.get_report_data() # import pdb; # pdb.set_trace() self.assertNotEqual(data, []) self.assertEqual(data[0]['product__category'], 'small') self.assertEqual(data[1]['product__category'], 'big')
def load(): ReportGenerator(OrderLine, group_by='no_field', date_field='order__date_placed')
def test_time_series_patterns(self): from slick_reporting.fields import TotalReportField report = ReportGenerator( OrderLine, date_field='order__date_placed', group_by='client', columns=['name', '__time_series__'], time_series_columns=['__total_quantity__'], time_series_pattern='monthly', start_date=datetime(2020, 1, 1, tzinfo=pytz.timezone('utc')), end_date=datetime(2020, 12, 31, tzinfo=pytz.timezone('utc'))) report_field_class = TotalReportField dates = report._get_time_series_dates() self.assertEqual(len(dates), 12) self.assertIsNotNone( report.get_time_series_field_verbose_name(TotalReportField, dates[0], 0, dates)) dates = report._get_time_series_dates('daily') self.assertEqual(len(dates), 365, len(dates)) self.assertIsNotNone( report.get_time_series_field_verbose_name(TotalReportField, dates[0], 0, dates, 'daily')) dates = report._get_time_series_dates('weekly') self.assertEqual(len(dates), 53, len(dates)) self.assertIsNotNone( report.get_time_series_field_verbose_name(TotalReportField, dates[0], 0, dates, 'weekly')) dates = report._get_time_series_dates('semimonthly') self.assertEqual(len(dates), 27, len(dates)) self.assertIsNotNone( report.get_time_series_field_verbose_name(TotalReportField, dates[0], 0, dates, 'semimonthly')) dates = report._get_time_series_dates('quarterly') self.assertEqual(len(dates), 4, len(dates)) dates = report._get_time_series_dates('semiannually') self.assertEqual(len(dates), 2, len(dates)) dates = report._get_time_series_dates('annually') self.assertEqual(len(dates), 1, len(dates)) self.assertIsNotNone( report.get_time_series_field_verbose_name(TotalReportField, dates[0], 0, dates))
def load(): ReportGenerator(report_model=OrderLine, group_by='product', date_field='order__date_placed', columns=['product', 'not_here'])
def load(): ReportGenerator(report_model=OrderLine, group_by='product', date_field='not_here')
def load(): ReportGenerator(report_model=None, group_by='product', date_field='order__date_placed')