def test_get_voucher_discount_info(self): """ Verify that get_voucher_discount_info() returns correct info. """ benefits = self.create_benefits() for benefit in benefits: discount_info = get_voucher_discount_info(benefit, self.seat_price) if (benefit.type == "Percentage" and benefit.value == 100.00) or \ (benefit.type == "Absolute" and benefit.value == self.seat_price): self.assertEqual(discount_info['discount_percentage'], 100.00) self.assertEqual(discount_info['discount_value'], 100.00) self.assertFalse(discount_info['is_discounted']) else: self.assertEqual(discount_info['discount_percentage'], 50.00) self.assertEqual(discount_info['discount_value'], 50.00) self.assertTrue(discount_info['is_discounted']) discount_info = get_voucher_discount_info(benefit, 0.0) self.assertEqual(discount_info['discount_percentage'], 0.00) self.assertEqual(discount_info['discount_value'], 0.00) self.assertFalse(discount_info['is_discounted']) discount_info = get_voucher_discount_info(None, 0.0) self.assertEqual(discount_info['discount_percentage'], 0.00) self.assertEqual(discount_info['discount_value'], 0.00) self.assertFalse(discount_info['is_discounted']) discount_info = get_voucher_discount_info(None, self.seat_price) self.assertEqual(discount_info['discount_percentage'], 0.00) self.assertEqual(discount_info['discount_value'], 0.00) self.assertFalse(discount_info['is_discounted']) discount_info = get_voucher_discount_info(benefits[-1], 20.00) self.assertEqual(discount_info['discount_percentage'], 100.00) self.assertEqual(discount_info['discount_value'], 20.00) self.assertFalse(discount_info['is_discounted'])
def test_get_voucher_discount_info(self): """ Verify that get_voucher_discount_info() returns correct info. """ benefits = self.create_benefits() for benefit in benefits: discount_info = get_voucher_discount_info(benefit, self.seat_price) if (benefit.type == "Percentage" and benefit.value == 100.00) or \ (benefit.type == "Absolute" and benefit.value == self.seat_price): self.assertEqual(discount_info['discount_percentage'], 100.00) self.assertEqual(discount_info['discount_value'], 100.00) self.assertFalse(discount_info['is_discounted']) else: self.assertEqual(discount_info['discount_percentage'], 50.00) self.assertEqual(discount_info['discount_value'], 50.00) self.assertTrue(discount_info['is_discounted']) discount_info = get_voucher_discount_info(benefit, 0.0) self.assertEqual(discount_info['discount_percentage'], 0.00) self.assertEqual(discount_info['discount_value'], 0.00) self.assertFalse(discount_info['is_discounted']) discount_info = get_voucher_discount_info(None, 0.0) self.assertEqual(discount_info['discount_percentage'], 0.00) self.assertEqual(discount_info['discount_value'], 0.00) self.assertFalse(discount_info['is_discounted']) discount_info = get_voucher_discount_info(None, self.seat_price) self.assertEqual(discount_info['discount_percentage'], 0.00) self.assertEqual(discount_info['discount_value'], 0.00) self.assertFalse(discount_info['is_discounted']) discount_info = get_voucher_discount_info(benefits[-1], 20.00) self.assertEqual(discount_info['discount_percentage'], 100.00) self.assertEqual(discount_info['discount_value'], 20.00) self.assertFalse(discount_info['is_discounted'])
def test_get_voucher_discount_info(self): """ Test get voucher discount info """ benefits = self.create_benefits() for benefit in benefits: discount_info = get_voucher_discount_info(benefit, self.seat_price) if ( benefit.type == "Percentage" and benefit.value == 100.00 or benefit.type == "Absolute" and benefit.value == self.seat_price ): self.assertEqual(discount_info['discount_percentage'], 100.00) self.assertFalse(discount_info['is_discounted']) else: self.assertEqual(discount_info['discount_percentage'], 50.00) self.assertTrue(discount_info['is_discounted']) discount_info = get_voucher_discount_info(benefit, 0.0) self.assertEqual(discount_info['discount_percentage'], 0.00) self.assertFalse(discount_info['is_discounted']) discount_info = get_voucher_discount_info(None, 0.0) self.assertEqual(discount_info['discount_percentage'], 0.00) self.assertFalse(discount_info['is_discounted']) discount_info = get_voucher_discount_info(None, self.seat_price) self.assertEqual(discount_info['discount_percentage'], 0.00) self.assertFalse(discount_info['is_discounted'])
def assert_report_first_row(self, row, coupon, voucher): """ Verify that the first row fields contain the right data. Args: row (list): First row in report coupon (Product): Coupon for which the report is generated voucher (Voucher): Voucher associated with the Coupon """ offer = voucher.offers.first() discount_data = get_voucher_discount_info( offer.benefit, offer.condition.range.catalog.stock_records.first().price_excl_tax) coupon_type = _('Discount') if discount_data['is_discounted'] else _( 'Enrollment') discount_percentage = _("{percentage} %").format( percentage=discount_data['discount_percentage']) discount_amount = currency(discount_data['discount_value']) self.assertEqual(row['Coupon Type'], coupon_type) self.assertEqual( row['Category'], ProductCategory.objects.get(product=coupon).category.name) self.assertEqual(row['Discount Percentage'], discount_percentage) self.assertEqual(row['Discount Amount'], discount_amount) self.assertEqual(row['Client'], coupon.client.name) self.assertEqual(row['Note'], coupon.attr.note) self.assertEqual(row['Created By'], coupon.history.first().history_user.full_name) self.assertEqual( row['Create Date'], coupon.history.latest().history_date.strftime("%b %d, %y")) self.assertEqual(row['Coupon Start Date'], voucher.start_datetime.strftime("%b %d, %y")) self.assertEqual(row['Coupon Expiry Date'], voucher.end_datetime.strftime("%b %d, %y"))
def assert_report_row(self, row, coupon, voucher): """ Verify that the row fields contain the right data. """ offer = voucher.offers.all().first() discount_data = get_voucher_discount_info( offer.benefit, offer.condition.range.catalog.stock_records.first().price_excl_tax) coupon_type = _('Discount') if discount_data['is_discounted'] else _( 'Enrollment') discount_percentage = _("{percentage} %").format( percentage=discount_data['discount_percentage']) discount_amount = currency(discount_data['discount_value']) self.assertEqual(row['Coupon Type'], coupon_type) self.assertEqual( row['Category'], ProductCategory.objects.get(product=coupon).category.name) self.assertEqual(row['Discount Percentage'], discount_percentage) self.assertEqual(row['Discount Amount'], discount_amount) self.assertEqual(row['Client'], coupon.client.name) self.assertEqual( row['URL'], get_ecommerce_url() + self.REDEMPTION_URL.format(voucher.code)) self.assertEqual(row['Note'], coupon.attr.note) self.assertEqual(row['Created By'], coupon.history.first().history_user.full_name) self.assertEqual( row['Create Date'], coupon.history.latest().history_date.strftime("%b %d, %y")) self.assertEqual(row['Coupon Start Date'], voucher.start_datetime.strftime("%b %d, %y")) self.assertEqual(row['Coupon Expiry Date'], voucher.end_datetime.strftime("%b %d, %y"))
def assert_report_row(self, row, coupon, voucher): """ Verify that the row fields contain the right data. """ offer = voucher.offers.all().first() discount_data = get_voucher_discount_info( offer.benefit, offer.condition.range.catalog.stock_records.first().price_excl_tax ) coupon_type = _('Discount') if discount_data['is_discounted'] else _('Enrollment') discount_percentage = _("{percentage} %").format(percentage=discount_data['discount_percentage']) discount_amount = currency(discount_data['discount_value']) self.assertEqual(row['Coupon Type'], coupon_type) self.assertEqual(row['Category'], ProductCategory.objects.get(product=coupon).category.name) self.assertEqual(row['Discount Percentage'], discount_percentage) self.assertEqual(row['Discount Amount'], discount_amount) self.assertEqual(row['Client'], coupon.client.name) self.assertEqual( row['URL'], get_ecommerce_url() + self.REDEMPTION_URL.format(voucher.code) ) self.assertEqual(row['Note'], coupon.attr.note) self.assertEqual(row['Created By'], coupon.history.first().history_user.full_name) self.assertEqual(row['Create Date'], coupon.history.latest().history_date.strftime("%b %d, %y")) self.assertEqual(row['Coupon Start Date'], voucher.start_datetime.strftime("%b %d, %y")) self.assertEqual(row['Coupon Expiry Date'], voucher.end_datetime.strftime("%b %d, %y"))
def assert_report_first_row(self, row, coupon, voucher): """ Verify that the first row fields contain the right data. Args: row (list): First row in report coupon (Product): Coupon for which the report is generated voucher (Voucher): Voucher associated with the Coupon """ offer = voucher.offers.first() discount_data = get_voucher_discount_info( offer.benefit, offer.condition.range.catalog.stock_records.first().price_excl_tax ) coupon_type = _('Discount') if discount_data['is_discounted'] else _('Enrollment') discount_percentage = _("{percentage} %").format(percentage=discount_data['discount_percentage']) discount_amount = currency(discount_data['discount_value']) self.assertEqual(row['Coupon Type'], coupon_type) self.assertEqual(row['Category'], ProductCategory.objects.get(product=coupon).category.name) self.assertEqual(row['Discount Percentage'], discount_percentage) self.assertEqual(row['Discount Amount'], discount_amount) self.assertEqual(row['Client'], coupon.client.name) self.assertEqual(row['Note'], coupon.attr.note) self.assertEqual(row['Created By'], coupon.history.first().history_user.full_name) self.assertEqual(row['Create Date'], coupon.history.latest().history_date.strftime("%b %d, %y")) self.assertEqual(row['Coupon Start Date'], voucher.start_datetime.strftime("%b %d, %y")) self.assertEqual(row['Coupon Expiry Date'], voucher.end_datetime.strftime("%b %d, %y"))
def get_context_data(self, **kwargs): context = super(CouponOfferView, self).get_context_data(**kwargs) footer = get_lms_footer() code = self.request.GET.get('code', None) if code is not None: voucher, product = get_voucher_from_code(code=code) valid_voucher, msg = voucher_is_valid(voucher, product, self.request) if valid_voucher: api = EdxRestApiClient( get_lms_url('api/courses/v1/'), ) try: course = api.courses(product.course_id).get() except SlumberHttpBaseException as e: logger.exception('Could not get course information. [%s]', e) return { 'error': _('Could not get course information. [{error}]'.format(error=e)), 'footer': footer } course['image_url'] = get_lms_url(course['media']['course_image']['uri']) benefit = voucher.offers.first().benefit stock_record = benefit.range.catalog.stock_records.first() price = stock_record.price_excl_tax context.update(get_voucher_discount_info(benefit, price)) if benefit.type == 'Percentage': new_price = price - (price * (benefit.value / 100)) else: new_price = price - benefit.value if new_price < 0: new_price = Decimal(0) context.update({ 'benefit': benefit, 'course': course, 'code': code, 'is_discount_value_percentage': benefit.type == 'Percentage', 'is_enrollment_code': benefit.type == Benefit.PERCENTAGE and benefit.value == 100.00, 'discount_value': "%.2f" % (price - new_price), 'price': price, 'new_price': "%.2f" % new_price, 'verified': (product.attr.certificate_type == 'verified'), 'verification_deadline': product.course.verification_deadline, 'footer': footer }) return context return { 'error': msg, 'footer': footer } return { 'error': _('This coupon code is invalid.'), 'footer': footer }