From e534e5d58896a4348110d916dca472cfd68ebb8c Mon Sep 17 00:00:00 2001 From: Chris Dodge Date: Mon, 23 Nov 2015 15:26:44 -0500 Subject: [PATCH] fix broken report when there is a zero seat invoice fix quality error --- lms/djangoapps/instructor/views/api.py | 2 +- lms/djangoapps/instructor_analytics/basic.py | 14 ++++--- .../instructor_analytics/tests/test_basic.py | 39 ++++++++++++++++++- 3 files changed, 48 insertions(+), 7 deletions(-) diff --git a/lms/djangoapps/instructor/views/api.py b/lms/djangoapps/instructor/views/api.py index f2df7db524..e76f746bdd 100644 --- a/lms/djangoapps/instructor/views/api.py +++ b/lms/djangoapps/instructor/views/api.py @@ -968,7 +968,7 @@ def get_sale_records(request, course_id, csv=False): # pylint: disable=unused-a course_id = SlashSeparatedCourseKey.from_deprecated_string(course_id) query_features = [ 'company_name', 'company_contact_name', 'company_contact_email', 'total_codes', 'total_used_codes', - 'total_amount', 'created_at', 'customer_reference_number', 'recipient_name', 'recipient_email', 'created_by', + 'total_amount', 'created', 'customer_reference_number', 'recipient_name', 'recipient_email', 'created_by', 'internal_reference', 'invoice_number', 'codes', 'course_id' ] diff --git a/lms/djangoapps/instructor_analytics/basic.py b/lms/djangoapps/instructor_analytics/basic.py index 3e9ebfe044..b1d2d01575 100644 --- a/lms/djangoapps/instructor_analytics/basic.py +++ b/lms/djangoapps/instructor_analytics/basic.py @@ -32,12 +32,12 @@ ORDER_ITEM_FEATURES = ('list_price', 'unit_cost', 'status') ORDER_FEATURES = ('purchase_time',) SALE_FEATURES = ('total_amount', 'company_name', 'company_contact_name', 'company_contact_email', 'recipient_name', - 'recipient_email', 'customer_reference_number', 'internal_reference') + 'recipient_email', 'customer_reference_number', 'internal_reference', 'created') SALE_ORDER_FEATURES = ('id', 'company_name', 'company_contact_name', 'company_contact_email', 'purchase_time', 'customer_reference_number', 'recipient_name', 'recipient_email', 'bill_to_street1', 'bill_to_street2', 'bill_to_city', 'bill_to_state', 'bill_to_postalcode', - 'bill_to_country', 'order_type',) + 'bill_to_country', 'order_type', 'created') AVAILABLE_FEATURES = STUDENT_FEATURES + PROFILE_FEATURES COURSE_REGISTRATION_FEATURES = ('code', 'course_id', 'created_by', 'created_at', 'is_valid') @@ -154,9 +154,13 @@ def sale_record_features(course_id, features): codes = [reg_code.code for reg_code in sale.courseregistrationcode_set.all()] # Extracting registration code information - obj_course_reg_code = sale.courseregistrationcode_set.all()[:1].get() - course_reg_dict = dict((feature, getattr(obj_course_reg_code, feature)) - for feature in course_reg_features) + if len(codes) > 0: + obj_course_reg_code = sale.courseregistrationcode_set.all()[:1].get() + course_reg_dict = dict((feature, getattr(obj_course_reg_code, feature)) + for feature in course_reg_features) + else: + course_reg_dict = dict((feature, None) + for feature in course_reg_features) course_reg_dict['course_id'] = course_id.to_deprecated_string() course_reg_dict.update({'codes': ", ".join(codes)}) diff --git a/lms/djangoapps/instructor_analytics/tests/test_basic.py b/lms/djangoapps/instructor_analytics/tests/test_basic.py index 307a3eaaaf..71608000d2 100644 --- a/lms/djangoapps/instructor_analytics/tests/test_basic.py +++ b/lms/djangoapps/instructor_analytics/tests/test_basic.py @@ -225,7 +225,7 @@ class TestCourseSaleRecordsAnalyticsBasic(ModuleStoreTestCase): query_features = [ 'company_name', 'company_contact_name', 'company_contact_email', 'total_codes', 'total_used_codes', - 'total_amount', 'created_at', 'customer_reference_number', 'recipient_name', 'recipient_email', + 'total_amount', 'created', 'customer_reference_number', 'recipient_name', 'recipient_email', 'created_by', 'internal_reference', 'invoice_number', 'codes', 'course_id' ] @@ -264,6 +264,43 @@ class TestCourseSaleRecordsAnalyticsBasic(ModuleStoreTestCase): self.assertEqual(sale_record['total_used_codes'], 0) self.assertEqual(sale_record['total_codes'], 5) + def test_course_sale_no_codes(self): + + query_features = [ + 'company_name', 'company_contact_name', 'company_contact_email', 'total_codes', 'total_used_codes', + 'total_amount', 'created', 'customer_reference_number', 'recipient_name', 'recipient_email', + 'created_by', 'internal_reference', 'invoice_number', 'codes', 'course_id' + ] + + #create invoice + sale_invoice = Invoice.objects.create( + total_amount=0.00, company_name='Test1', company_contact_name='TestName', + company_contact_email='test@company.com', recipient_name='Testw_1', recipient_email='test2@test.com', + customer_reference_number='2Fwe23S', internal_reference="ABC", course_id=self.course.id + ) + CourseRegistrationCodeInvoiceItem.objects.create( + invoice=sale_invoice, + qty=0, + unit_price=0.00, + course_id=self.course.id + ) + + course_sale_records_list = sale_record_features(self.course.id, query_features) + + for sale_record in course_sale_records_list: + self.assertEqual(sale_record['total_amount'], sale_invoice.total_amount) + self.assertEqual(sale_record['recipient_email'], sale_invoice.recipient_email) + self.assertEqual(sale_record['recipient_name'], sale_invoice.recipient_name) + self.assertEqual(sale_record['company_name'], sale_invoice.company_name) + self.assertEqual(sale_record['company_contact_name'], sale_invoice.company_contact_name) + self.assertEqual(sale_record['company_contact_email'], sale_invoice.company_contact_email) + self.assertEqual(sale_record['internal_reference'], sale_invoice.internal_reference) + self.assertEqual(sale_record['customer_reference_number'], sale_invoice.customer_reference_number) + self.assertEqual(sale_record['invoice_number'], sale_invoice.id) + self.assertEqual(sale_record['created_by'], None) + self.assertEqual(sale_record['total_used_codes'], 0) + self.assertEqual(sale_record['total_codes'], 0) + def test_sale_order_features_with_discount(self): """ Test Order Sales Report CSV