Example #1
0
    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')
Example #2
0
 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())
Example #4
0
 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)
Example #5
0
 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())
Example #6
0
    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)
Example #7
0
    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)
Example #8
0
    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)
Example #9
0
    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')
Example #10
0
 def load():
     ReportGenerator(OrderLine,
                     group_by='no_field',
                     date_field='order__date_placed')
Example #11
0
    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))
Example #12
0
 def load():
     ReportGenerator(report_model=OrderLine,
                     group_by='product',
                     date_field='order__date_placed',
                     columns=['product', 'not_here'])
Example #13
0
 def load():
     ReportGenerator(report_model=OrderLine,
                     group_by='product',
                     date_field='not_here')
Example #14
0
 def load():
     ReportGenerator(report_model=None,
                     group_by='product',
                     date_field='order__date_placed')