def test_user_has_finance_admin_rights_in_e_commerce_tab(self): response = self.client.get(self.url) self.assertTrue(self.e_commerce_link in response.content) # Total amount html should render in e-commerce page, total amount will be 0 total_amount = PaidCourseRegistration.get_total_amount_of_purchased_item(self.course.id) self.assertTrue('<span>Total Amount: <span>$' + str(total_amount) + '</span></span>' in response.content) # removing the course finance_admin role of login user CourseFinanceAdminRole(self.course.id).remove_users(self.instructor) # total amount should not be visible in e-commerce page if the user is not finance admin url = reverse('instructor_dashboard', kwargs={'course_id': self.course.id.to_deprecated_string()}) response = self.client.post(url) total_amount = PaidCourseRegistration.get_total_amount_of_purchased_item(self.course.id) self.assertFalse('<span>Total Amount: <span>$' + str(total_amount) + '</span></span>' in response.content)
def test_total_credit_cart_sales_amount(self): """ Test to check the total amount for all the credit card purchases. """ student = UserFactory.create() self.client.login(username=student.username, password="******") student_cart = Order.get_cart_for_user(student) item = self.add_course_to_user_cart(student_cart, self.course.id) resp = self.client.post(reverse('shoppingcart.views.update_user_cart'), { 'ItemId': item.id, 'qty': 4 }) self.assertEqual(resp.status_code, 200) student_cart.purchase() self.client.login(username=self.instructor.username, password="******") CourseFinanceAdminRole(self.course.id).add_users(self.instructor) single_purchase_total = PaidCourseRegistration.get_total_amount_of_purchased_item( self.course.id) bulk_purchase_total = CourseRegCodeItem.get_total_amount_of_purchased_item( self.course.id) total_amount = single_purchase_total + bulk_purchase_total response = self.client.get(self.url) self.assertIn( '{currency}{amount}'.format(currency='$', amount=total_amount), response.content)
def _section_e_commerce(course_key, access): """ Provide data for the corresponding dashboard section """ coupons = Coupon.objects.filter(course_id=course_key).order_by('-is_active') total_amount = None course_price = None course_honor_mode = CourseMode.mode_for_course(course_key, 'honor') if course_honor_mode and course_honor_mode.min_price > 0: course_price = course_honor_mode.min_price if access['finance_admin']: total_amount = PaidCourseRegistration.get_total_amount_of_purchased_item(course_key) section_data = { 'section_key': 'e-commerce', 'section_display_name': _('E-Commerce'), 'access': access, 'course_id': course_key.to_deprecated_string(), 'ajax_remove_coupon_url': reverse('remove_coupon', kwargs={'course_id': course_key.to_deprecated_string()}), 'ajax_get_coupon_info': reverse('get_coupon_info', kwargs={'course_id': course_key.to_deprecated_string()}), 'ajax_update_coupon': reverse('update_coupon', kwargs={'course_id': course_key.to_deprecated_string()}), 'ajax_add_coupon': reverse('add_coupon', kwargs={'course_id': course_key.to_deprecated_string()}), 'get_purchase_transaction_url': reverse('get_purchase_transaction', kwargs={'course_id': course_key.to_deprecated_string()}), 'instructor_url': reverse('instructor_dashboard', kwargs={'course_id': course_key.to_deprecated_string()}), 'get_registration_code_csv_url': reverse('get_registration_codes', kwargs={'course_id': course_key.to_deprecated_string()}), 'generate_registration_code_csv_url': reverse('generate_registration_codes', kwargs={'course_id': course_key.to_deprecated_string()}), 'active_registration_code_csv_url': reverse('active_registration_codes', kwargs={'course_id': course_key.to_deprecated_string()}), 'spent_registration_code_csv_url': reverse('spent_registration_codes', kwargs={'course_id': course_key.to_deprecated_string()}), 'set_course_mode_url': reverse('set_course_mode_price', kwargs={'course_id': course_key.to_deprecated_string()}), 'coupons': coupons, 'total_amount': total_amount, 'course_price': course_price } return section_data
def test_default_currency_in_the_html_response(self): """ Test that checks the default currency_symbol ($) in the response """ CourseFinanceAdminRole(self.course.id).add_users(self.instructor) total_amount = PaidCourseRegistration.get_total_amount_of_purchased_item(self.course.id) response = self.client.get(self.url) self.assertTrue('${amount}'.format(amount=total_amount) in response.content)
def test_override_currency_settings_in_the_html_response(self): """ Test that checks the default currency_symbol ($) in the response """ CourseFinanceAdminRole(self.course.id).add_users(self.instructor) total_amount = PaidCourseRegistration.get_total_amount_of_purchased_item(self.course.id) response = self.client.get(self.url) self.assertIn('{currency}{amount}'.format(currency='Rs', amount=total_amount), response.content)
def _section_e_commerce(course, access, paid_mode, coupons_enabled, reports_enabled): """ Provide data for the corresponding dashboard section """ course_key = course.id coupons = Coupon.objects.filter(course_id=course_key).order_by("-is_active") course_price = paid_mode.min_price total_amount = None if access["finance_admin"]: single_purchase_total = PaidCourseRegistration.get_total_amount_of_purchased_item(course_key) bulk_purchase_total = CourseRegCodeItem.get_total_amount_of_purchased_item(course_key) total_amount = single_purchase_total + bulk_purchase_total section_data = { "section_key": "e-commerce", "section_display_name": _("E-Commerce"), "access": access, "course_id": unicode(course_key), "currency_symbol": settings.PAID_COURSE_REGISTRATION_CURRENCY[1], "ajax_remove_coupon_url": reverse("remove_coupon", kwargs={"course_id": unicode(course_key)}), "ajax_get_coupon_info": reverse("get_coupon_info", kwargs={"course_id": unicode(course_key)}), "get_user_invoice_preference_url": reverse( "get_user_invoice_preference", kwargs={"course_id": unicode(course_key)} ), "sale_validation_url": reverse("sale_validation", kwargs={"course_id": unicode(course_key)}), "ajax_update_coupon": reverse("update_coupon", kwargs={"course_id": unicode(course_key)}), "ajax_add_coupon": reverse("add_coupon", kwargs={"course_id": unicode(course_key)}), "get_sale_records_url": reverse("get_sale_records", kwargs={"course_id": unicode(course_key)}), "get_sale_order_records_url": reverse("get_sale_order_records", kwargs={"course_id": unicode(course_key)}), "instructor_url": reverse("instructor_dashboard", kwargs={"course_id": unicode(course_key)}), "get_registration_code_csv_url": reverse("get_registration_codes", kwargs={"course_id": unicode(course_key)}), "generate_registration_code_csv_url": reverse( "generate_registration_codes", kwargs={"course_id": unicode(course_key)} ), "active_registration_code_csv_url": reverse( "active_registration_codes", kwargs={"course_id": unicode(course_key)} ), "spent_registration_code_csv_url": reverse( "spent_registration_codes", kwargs={"course_id": unicode(course_key)} ), "set_course_mode_url": reverse("set_course_mode_price", kwargs={"course_id": unicode(course_key)}), "download_coupon_codes_url": reverse("get_coupon_codes", kwargs={"course_id": unicode(course_key)}), "enrollment_report_url": reverse("get_enrollment_report", kwargs={"course_id": unicode(course_key)}), "exec_summary_report_url": reverse("get_exec_summary_report", kwargs={"course_id": unicode(course_key)}), "list_financial_report_downloads_url": reverse( "list_financial_report_downloads", kwargs={"course_id": unicode(course_key)} ), "list_instructor_tasks_url": reverse("list_instructor_tasks", kwargs={"course_id": unicode(course_key)}), "look_up_registration_code": reverse("look_up_registration_code", kwargs={"course_id": unicode(course_key)}), "coupons": coupons, "sales_admin": access["sales_admin"], "coupons_enabled": coupons_enabled, "reports_enabled": reports_enabled, "course_price": course_price, "total_amount": total_amount, } return section_data
def _section_e_commerce(course, access): """ Provide data for the corresponding dashboard section """ course_key = course.id coupons = Coupon.objects.filter(course_id=course_key).order_by("-is_active") total_amount = None course_price = None course_honor_mode = CourseMode.mode_for_course(course_key, "honor") if course_honor_mode and course_honor_mode.min_price > 0: course_price = course_honor_mode.min_price if access["finance_admin"]: total_amount = PaidCourseRegistration.get_total_amount_of_purchased_item(course_key) section_data = { "section_key": "e-commerce", "section_display_name": _("E-Commerce"), "access": access, "course_id": course_key.to_deprecated_string(), "ajax_remove_coupon_url": reverse("remove_coupon", kwargs={"course_id": course_key.to_deprecated_string()}), "ajax_get_coupon_info": reverse("get_coupon_info", kwargs={"course_id": course_key.to_deprecated_string()}), "get_user_invoice_preference_url": reverse( "get_user_invoice_preference", kwargs={"course_id": course_key.to_deprecated_string()} ), "sale_validation_url": reverse("sale_validation", kwargs={"course_id": course_key.to_deprecated_string()}), "ajax_update_coupon": reverse("update_coupon", kwargs={"course_id": course_key.to_deprecated_string()}), "ajax_add_coupon": reverse("add_coupon", kwargs={"course_id": course_key.to_deprecated_string()}), "get_purchase_transaction_url": reverse( "get_purchase_transaction", kwargs={"course_id": course_key.to_deprecated_string()} ), "get_sale_records_url": reverse("get_sale_records", kwargs={"course_id": course_key.to_deprecated_string()}), "get_sale_order_records_url": reverse( "get_sale_order_records", kwargs={"course_id": course_key.to_deprecated_string()} ), "instructor_url": reverse("instructor_dashboard", kwargs={"course_id": course_key.to_deprecated_string()}), "get_registration_code_csv_url": reverse( "get_registration_codes", kwargs={"course_id": course_key.to_deprecated_string()} ), "generate_registration_code_csv_url": reverse( "generate_registration_codes", kwargs={"course_id": course_key.to_deprecated_string()} ), "active_registration_code_csv_url": reverse( "active_registration_codes", kwargs={"course_id": course_key.to_deprecated_string()} ), "spent_registration_code_csv_url": reverse( "spent_registration_codes", kwargs={"course_id": course_key.to_deprecated_string()} ), "set_course_mode_url": reverse( "set_course_mode_price", kwargs={"course_id": course_key.to_deprecated_string()} ), "download_coupon_codes_url": reverse( "get_coupon_codes", kwargs={"course_id": course_key.to_deprecated_string()} ), "coupons": coupons, "total_amount": total_amount, "course_price": course_price, } return section_data
def test_total_amount_of_purchased_course(self): self.add_course_to_user_cart() self.assertEquals(self.cart.orderitem_set.count(), 1) self.add_coupon(self.course_key, True) resp = self.client.post(reverse('shoppingcart.views.use_code'), {'code': self.coupon_code}) self.assertEqual(resp.status_code, 200) self.cart.purchase(first='FirstNameTesting123', street1='StreetTesting123') # Total amount of a particular course that is purchased by different users total_amount = PaidCourseRegistration.get_total_amount_of_purchased_item(self.course_key) self.assertEqual(total_amount, 36) self.client.login(username=self.instructor.username, password="******") cart = Order.get_cart_for_user(self.instructor) PaidCourseRegistration.add_to_order(cart, self.course_key) cart.purchase(first='FirstNameTesting123', street1='StreetTesting123') total_amount = PaidCourseRegistration.get_total_amount_of_purchased_item(self.course_key) self.assertEqual(total_amount, 76)
def test_total_amount_of_purchased_course(self): self.add_course_to_user_cart(self.course_key) self.assertEquals(self.cart.orderitem_set.count(), 1) self.add_coupon(self.course_key, True, self.coupon_code) resp = self.client.post(reverse('shoppingcart.views.use_code'), {'code': self.coupon_code}) self.assertEqual(resp.status_code, 200) self.cart.purchase(first='FirstNameTesting123', street1='StreetTesting123') # Total amount of a particular course that is purchased by different users total_amount = PaidCourseRegistration.get_total_amount_of_purchased_item(self.course_key) self.assertEqual(total_amount, 36) self.client.login(username=self.instructor.username, password="******") cart = Order.get_cart_for_user(self.instructor) PaidCourseRegistration.add_to_order(cart, self.course_key) cart.purchase(first='FirstNameTesting123', street1='StreetTesting123') total_amount = PaidCourseRegistration.get_total_amount_of_purchased_item(self.course_key) self.assertEqual(total_amount, 76)
def test_user_has_finance_admin_rights_in_e_commerce_tab(self): response = self.client.get(self.url) self.assertTrue(self.e_commerce_link in response.content) # Total amount html should render in e-commerce page, total amount will be 0 total_amount = PaidCourseRegistration.get_total_amount_of_purchased_item( self.course.id) self.assertTrue('<span>Total Amount: <span>$' + str(total_amount) + '</span></span>' in response.content) # removing the course finance_admin role of login user CourseFinanceAdminRole(self.course.id).remove_users(self.instructor) # total amount should not be visible in e-commerce page if the user is not finance admin url = reverse( 'instructor_dashboard', kwargs={'course_id': self.course.id.to_deprecated_string()}) response = self.client.post(url) total_amount = PaidCourseRegistration.get_total_amount_of_purchased_item( self.course.id) self.assertFalse('<span>Total Amount: <span>$' + str(total_amount) + '</span></span>' in response.content)
def _section_e_commerce(course, access, paid_mode, coupons_enabled, reports_enabled): """ Provide data for the corresponding dashboard section """ course_key = course.id coupons = Coupon.objects.filter(course_id=course_key).order_by('-is_active') course_price = paid_mode.min_price total_amount = None if access['finance_admin']: single_purchase_total = PaidCourseRegistration.get_total_amount_of_purchased_item(course_key) bulk_purchase_total = CourseRegCodeItem.get_total_amount_of_purchased_item(course_key) total_amount = single_purchase_total + bulk_purchase_total section_data = { 'section_key': 'e-commerce', 'section_display_name': _('E-Commerce'), 'access': access, 'course_id': unicode(course_key), 'currency_symbol': settings.PAID_COURSE_REGISTRATION_CURRENCY[1], 'ajax_remove_coupon_url': reverse('remove_coupon', kwargs={'course_id': unicode(course_key)}), 'ajax_get_coupon_info': reverse('get_coupon_info', kwargs={'course_id': unicode(course_key)}), 'get_user_invoice_preference_url': reverse('get_user_invoice_preference', kwargs={'course_id': unicode(course_key)}), 'sale_validation_url': reverse('sale_validation', kwargs={'course_id': unicode(course_key)}), 'ajax_update_coupon': reverse('update_coupon', kwargs={'course_id': unicode(course_key)}), 'ajax_add_coupon': reverse('add_coupon', kwargs={'course_id': unicode(course_key)}), 'get_sale_records_url': reverse('get_sale_records', kwargs={'course_id': unicode(course_key)}), 'get_sale_order_records_url': reverse('get_sale_order_records', kwargs={'course_id': unicode(course_key)}), 'instructor_url': reverse('instructor_dashboard', kwargs={'course_id': unicode(course_key)}), 'get_registration_code_csv_url': reverse('get_registration_codes', kwargs={'course_id': unicode(course_key)}), 'generate_registration_code_csv_url': reverse('generate_registration_codes', kwargs={'course_id': unicode(course_key)}), 'active_registration_code_csv_url': reverse('active_registration_codes', kwargs={'course_id': unicode(course_key)}), 'spent_registration_code_csv_url': reverse('spent_registration_codes', kwargs={'course_id': unicode(course_key)}), 'set_course_mode_url': reverse('set_course_mode_price', kwargs={'course_id': unicode(course_key)}), 'download_coupon_codes_url': reverse('get_coupon_codes', kwargs={'course_id': unicode(course_key)}), 'enrollment_report_url': reverse('get_enrollment_report', kwargs={'course_id': unicode(course_key)}), 'exec_summary_report_url': reverse('get_exec_summary_report', kwargs={'course_id': unicode(course_key)}), 'list_financial_report_downloads_url': reverse('list_financial_report_downloads', kwargs={'course_id': unicode(course_key)}), 'list_instructor_tasks_url': reverse( 'api_instructor:list_instructor_tasks', kwargs={'course_id': unicode(course_key)} ), 'look_up_registration_code': reverse('look_up_registration_code', kwargs={'course_id': unicode(course_key)}), 'coupons': coupons, 'sales_admin': access['sales_admin'], 'coupons_enabled': coupons_enabled, 'reports_enabled': reports_enabled, 'course_price': course_price, 'total_amount': total_amount, 'is_ecommerce_course': is_ecommerce_course(course_key) } return section_data
def test_total_credit_cart_sales_amount(self): """ Test to check the total amount for all the credit card purchases. """ student = UserFactory.create() self.client.login(username=student.username, password="******") student_cart = Order.get_cart_for_user(student) item = self.add_course_to_user_cart(student_cart, self.course.id) resp = self.client.post(reverse('shoppingcart.views.update_user_cart'), {'ItemId': item.id, 'qty': 4}) self.assertEqual(resp.status_code, 200) student_cart.purchase() self.client.login(username=self.instructor.username, password="******") CourseFinanceAdminRole(self.course.id).add_users(self.instructor) single_purchase_total = PaidCourseRegistration.get_total_amount_of_purchased_item(self.course.id) bulk_purchase_total = CourseRegCodeItem.get_total_amount_of_purchased_item(self.course.id) total_amount = single_purchase_total + bulk_purchase_total response = self.client.get(self.url) self.assertIn('{currency}{amount}'.format(currency='$', amount=total_amount), response.content)
def _section_e_commerce(course, access): """ Provide data for the corresponding dashboard section """ course_key = course.id coupons = Coupon.objects.filter(course_id=course_key).order_by('-is_active') course_price = None total_amount = None course_honor_mode = CourseMode.mode_for_course(course_key, 'honor') if course_honor_mode and course_honor_mode.min_price > 0: course_price = course_honor_mode.min_price if access['finance_admin']: total_amount = PaidCourseRegistration.get_total_amount_of_purchased_item(course_key) section_data = { 'section_key': 'e-commerce', 'section_display_name': _('E-Commerce'), 'access': access, 'course_id': unicode(course_key), 'currency_symbol': settings.PAID_COURSE_REGISTRATION_CURRENCY[1], 'ajax_remove_coupon_url': reverse('remove_coupon', kwargs={'course_id': unicode(course_key)}), 'ajax_get_coupon_info': reverse('get_coupon_info', kwargs={'course_id': unicode(course_key)}), 'get_user_invoice_preference_url': reverse('get_user_invoice_preference', kwargs={'course_id': unicode(course_key)}), 'sale_validation_url': reverse('sale_validation', kwargs={'course_id': unicode(course_key)}), 'ajax_update_coupon': reverse('update_coupon', kwargs={'course_id': unicode(course_key)}), 'ajax_add_coupon': reverse('add_coupon', kwargs={'course_id': unicode(course_key)}), 'get_sale_records_url': reverse('get_sale_records', kwargs={'course_id': unicode(course_key)}), 'get_sale_order_records_url': reverse('get_sale_order_records', kwargs={'course_id': unicode(course_key)}), 'instructor_url': reverse('instructor_dashboard', kwargs={'course_id': unicode(course_key)}), 'get_registration_code_csv_url': reverse('get_registration_codes', kwargs={'course_id': unicode(course_key)}), 'generate_registration_code_csv_url': reverse('generate_registration_codes', kwargs={'course_id': unicode(course_key)}), 'active_registration_code_csv_url': reverse('active_registration_codes', kwargs={'course_id': unicode(course_key)}), 'spent_registration_code_csv_url': reverse('spent_registration_codes', kwargs={'course_id': unicode(course_key)}), 'set_course_mode_url': reverse('set_course_mode_price', kwargs={'course_id': unicode(course_key)}), 'download_coupon_codes_url': reverse('get_coupon_codes', kwargs={'course_id': unicode(course_key)}), 'coupons': coupons, 'course_price': course_price, 'total_amount': total_amount } return section_data
def get_executive_report(course_id): """ Returns dict containing information about the course executive summary. """ single_purchase_total = PaidCourseRegistration.get_total_amount_of_purchased_item( course_id) bulk_purchase_total = CourseRegCodeItem.get_total_amount_of_purchased_item( course_id) paid_invoices_total = InvoiceTransaction.get_total_amount_of_paid_course_invoices( course_id) gross_paid_revenue = single_purchase_total + bulk_purchase_total + paid_invoices_total all_invoices_total = Invoice.get_invoice_total_amount_for_course(course_id) gross_pending_revenue = all_invoices_total - float(paid_invoices_total) gross_revenue = float(gross_paid_revenue) + float(gross_pending_revenue) refunded_self_purchased_seats = PaidCourseRegistration.get_self_purchased_seat_count( course_id, status='refunded') refunded_bulk_purchased_seats = CourseRegCodeItem.get_bulk_purchased_seat_count( course_id, status='refunded') total_seats_refunded = refunded_self_purchased_seats + refunded_bulk_purchased_seats self_purchased_refunds = PaidCourseRegistration.get_total_amount_of_purchased_item( course_id, status='refunded') bulk_purchase_refunds = CourseRegCodeItem.get_total_amount_of_purchased_item( course_id, status='refunded') total_amount_refunded = self_purchased_refunds + bulk_purchase_refunds top_discounted_codes = CouponRedemption.get_top_discount_codes_used( course_id) total_coupon_codes_purchases = CouponRedemption.get_total_coupon_code_purchases( course_id) bulk_purchased_codes = CourseRegistrationCode.order_generated_registration_codes( course_id) unused_registration_codes = 0 for registration_code in bulk_purchased_codes: if not RegistrationCodeRedemption.is_registration_code_redeemed( registration_code.code): unused_registration_codes += 1 self_purchased_seat_count = PaidCourseRegistration.get_self_purchased_seat_count( course_id) bulk_purchased_seat_count = CourseRegCodeItem.get_bulk_purchased_seat_count( course_id) total_invoiced_seats = CourseRegistrationCode.invoice_generated_registration_codes( course_id).count() total_seats = self_purchased_seat_count + bulk_purchased_seat_count + total_invoiced_seats self_purchases_percentage = 0.0 bulk_purchases_percentage = 0.0 invoice_purchases_percentage = 0.0 avg_price_paid = 0.0 if total_seats != 0: self_purchases_percentage = (float(self_purchased_seat_count) / float(total_seats)) * 100 bulk_purchases_percentage = (float(bulk_purchased_seat_count) / float(total_seats)) * 100 invoice_purchases_percentage = (float(total_invoiced_seats) / float(total_seats)) * 100 avg_price_paid = gross_revenue / total_seats course = get_course_by_id(course_id, depth=0) currency = settings.PAID_COURSE_REGISTRATION_CURRENCY[1] return { 'display_name': course.display_name, 'start_date': course.start.strftime("%Y-%m-%d") if course.start is not None else 'N/A', 'end_date': course.end.strftime("%Y-%m-%d") if course.end is not None else 'N/A', 'total_seats': total_seats, 'currency': currency, 'gross_revenue': float(gross_revenue), 'gross_paid_revenue': float(gross_paid_revenue), 'gross_pending_revenue': gross_pending_revenue, 'total_seats_refunded': total_seats_refunded, 'total_amount_refunded': float(total_amount_refunded), 'average_paid_price': float(avg_price_paid), 'discount_codes_data': top_discounted_codes, 'total_seats_using_discount_codes': total_coupon_codes_purchases, 'total_self_purchase_seats': self_purchased_seat_count, 'total_bulk_purchase_seats': bulk_purchased_seat_count, 'total_invoiced_seats': total_invoiced_seats, 'unused_bulk_purchase_code_count': unused_registration_codes, 'self_purchases_percentage': self_purchases_percentage, 'bulk_purchases_percentage': bulk_purchases_percentage, 'invoice_purchases_percentage': invoice_purchases_percentage, }
def _section_e_commerce(course, access): """ Provide data for the corresponding dashboard section """ course_key = course.id coupons = Coupon.objects.filter( course_id=course_key).order_by('-is_active') course_price = None total_amount = None course_honor_mode = CourseMode.mode_for_course(course_key, 'honor') if course_honor_mode and course_honor_mode.min_price > 0: course_price = course_honor_mode.min_price if access['finance_admin']: total_amount = PaidCourseRegistration.get_total_amount_of_purchased_item( course_key) section_data = { 'section_key': 'e-commerce', 'section_display_name': _('E-Commerce'), 'access': access, 'course_id': course_key.to_deprecated_string(), 'currency_symbol': settings.PAID_COURSE_REGISTRATION_CURRENCY[1], 'ajax_remove_coupon_url': reverse('remove_coupon', kwargs={'course_id': course_key.to_deprecated_string()}), 'ajax_get_coupon_info': reverse('get_coupon_info', kwargs={'course_id': course_key.to_deprecated_string()}), 'get_user_invoice_preference_url': reverse('get_user_invoice_preference', kwargs={'course_id': course_key.to_deprecated_string()}), 'sale_validation_url': reverse('sale_validation', kwargs={'course_id': course_key.to_deprecated_string()}), 'ajax_update_coupon': reverse('update_coupon', kwargs={'course_id': course_key.to_deprecated_string()}), 'ajax_add_coupon': reverse('add_coupon', kwargs={'course_id': course_key.to_deprecated_string()}), 'get_sale_records_url': reverse('get_sale_records', kwargs={'course_id': course_key.to_deprecated_string()}), 'get_sale_order_records_url': reverse('get_sale_order_records', kwargs={'course_id': course_key.to_deprecated_string()}), 'instructor_url': reverse('instructor_dashboard', kwargs={'course_id': course_key.to_deprecated_string()}), 'get_registration_code_csv_url': reverse('get_registration_codes', kwargs={'course_id': course_key.to_deprecated_string()}), 'generate_registration_code_csv_url': reverse('generate_registration_codes', kwargs={'course_id': course_key.to_deprecated_string()}), 'active_registration_code_csv_url': reverse('active_registration_codes', kwargs={'course_id': course_key.to_deprecated_string()}), 'spent_registration_code_csv_url': reverse('spent_registration_codes', kwargs={'course_id': course_key.to_deprecated_string()}), 'set_course_mode_url': reverse('set_course_mode_price', kwargs={'course_id': course_key.to_deprecated_string()}), 'download_coupon_codes_url': reverse('get_coupon_codes', kwargs={'course_id': course_key.to_deprecated_string()}), 'coupons': coupons, 'course_price': course_price, 'total_amount': total_amount } return section_data
def get_executive_report(course_id): """ Returns dict containing information about the course executive summary. """ single_purchase_total = PaidCourseRegistration.get_total_amount_of_purchased_item(course_id) bulk_purchase_total = CourseRegCodeItem.get_total_amount_of_purchased_item(course_id) paid_invoices_total = InvoiceTransaction.get_total_amount_of_paid_course_invoices(course_id) gross_paid_revenue = single_purchase_total + bulk_purchase_total + paid_invoices_total all_invoices_total = Invoice.get_invoice_total_amount_for_course(course_id) gross_pending_revenue = all_invoices_total - float(paid_invoices_total) gross_revenue = float(gross_paid_revenue) + float(gross_pending_revenue) refunded_self_purchased_seats = PaidCourseRegistration.get_self_purchased_seat_count( course_id, status='refunded' ) refunded_bulk_purchased_seats = CourseRegCodeItem.get_bulk_purchased_seat_count( course_id, status='refunded' ) total_seats_refunded = refunded_self_purchased_seats + refunded_bulk_purchased_seats self_purchased_refunds = PaidCourseRegistration.get_total_amount_of_purchased_item( course_id, status='refunded' ) bulk_purchase_refunds = CourseRegCodeItem.get_total_amount_of_purchased_item(course_id, status='refunded') total_amount_refunded = self_purchased_refunds + bulk_purchase_refunds top_discounted_codes = CouponRedemption.get_top_discount_codes_used(course_id) total_coupon_codes_purchases = CouponRedemption.get_total_coupon_code_purchases(course_id) bulk_purchased_codes = CourseRegistrationCode.order_generated_registration_codes(course_id) unused_registration_codes = 0 for registration_code in bulk_purchased_codes: if not RegistrationCodeRedemption.is_registration_code_redeemed(registration_code.code): unused_registration_codes += 1 self_purchased_seat_count = PaidCourseRegistration.get_self_purchased_seat_count(course_id) bulk_purchased_seat_count = CourseRegCodeItem.get_bulk_purchased_seat_count(course_id) total_invoiced_seats = CourseRegistrationCode.invoice_generated_registration_codes(course_id).count() total_seats = self_purchased_seat_count + bulk_purchased_seat_count + total_invoiced_seats self_purchases_percentage = 0.0 bulk_purchases_percentage = 0.0 invoice_purchases_percentage = 0.0 avg_price_paid = 0.0 if total_seats != 0: self_purchases_percentage = (float(self_purchased_seat_count) / float(total_seats)) * 100 bulk_purchases_percentage = (float(bulk_purchased_seat_count) / float(total_seats)) * 100 invoice_purchases_percentage = (float(total_invoiced_seats) / float(total_seats)) * 100 avg_price_paid = gross_revenue / total_seats course = get_course_by_id(course_id, depth=0) currency = settings.PAID_COURSE_REGISTRATION_CURRENCY[1] return { 'display_name': course.display_name, 'start_date': course.start.strftime("%Y-%m-%d") if course.start is not None else 'N/A', 'end_date': course.end.strftime("%Y-%m-%d") if course.end is not None else 'N/A', 'total_seats': total_seats, 'currency': currency, 'gross_revenue': float(gross_revenue), 'gross_paid_revenue': float(gross_paid_revenue), 'gross_pending_revenue': gross_pending_revenue, 'total_seats_refunded': total_seats_refunded, 'total_amount_refunded': float(total_amount_refunded), 'average_paid_price': float(avg_price_paid), 'discount_codes_data': top_discounted_codes, 'total_seats_using_discount_codes': total_coupon_codes_purchases, 'total_self_purchase_seats': self_purchased_seat_count, 'total_bulk_purchase_seats': bulk_purchased_seat_count, 'total_invoiced_seats': total_invoiced_seats, 'unused_bulk_purchase_code_count': unused_registration_codes, 'self_purchases_percentage': self_purchases_percentage, 'bulk_purchases_percentage': bulk_purchases_percentage, 'invoice_purchases_percentage': invoice_purchases_percentage, }