示例#1
0
 def get_course_offer_data(self, benefit, course, course_info,
                           credit_provider_price, is_verified,
                           multiple_credit_providers, product, stock_record,
                           voucher):
     """
     Gets course offer data.
     Arguments:
         benefit (Benefit): Benefit associated with a voucher
         course (Course): Course associated with a voucher
         course_info (dict): Course info fetched from an API (LMS or Course Catalog)
         is_verified (bool): Indicated whether or not the voucher's range of products contains a verified course seat
         stock_record (StockRecord): Stock record associated with the course seat
         voucher (Voucher): Voucher for which the course offer data is being fetched
     Returns:
         dict: Course offer data
     """
     try:
         image = course_info['image']['src']
     except (KeyError, TypeError):
         image = ''
     return {
         'benefit': serializers.BenefitSerializer(benefit).data,
         'contains_verified': is_verified,
         'course_start_date': course_info.get('start', ''),
         'id': course.id,
         'image_url': image,
         'multiple_credit_providers': multiple_credit_providers,
         'organization': CourseKey.from_string(course.id).org,
         'credit_provider_price': credit_provider_price,
         'seat_type': product.attr.certificate_type,
         'stockrecords':
         serializers.StockRecordSerializer(stock_record).data,
         'title': course.name,
         'voucher_end_date': voucher.end_datetime
     }
示例#2
0
    def get_offers(self, products, request, voucher):
        """
        Get the course offers associated with the voucher.
        Arguments:
            products (List): List of Products associated with the voucher
            request (HttpRequest): Request data
            voucher (Voucher): Oscar Voucher for which the offers are returned
        Returns:
            List: List of course offers where each offer is represented by a dictionary
        """
        benefit = voucher.offers.first().benefit
        offers = []
        query_results = request.site.siteconfiguration.course_catalog_api_client.course_runs.get(
            q=benefit.range.catalog_query)['results']

        course_ids = [product.course_id for product in products]
        courses = Course.objects.filter(id__in=course_ids)
        contains_verified_course = next(
            (False for course in courses if course.type != 'verified'), True)

        for product in products:
            course_catalog_data = next((result for result in query_results
                                        if result['key'] == product.course_id),
                                       None)

            try:
                course = courses.get(id=product.course_id)
            except Course.DoesNotExist:
                logger.error('Course %s not found.', product.course_id)

            if course_catalog_data and course:
                stock_record = StockRecord.objects.get(product__id=product.id)

                offers.append({
                    'benefit':
                    serializers.BenefitSerializer(benefit).data,
                    'contains_verified':
                    contains_verified_course,
                    'course_start_date':
                    course_catalog_data['start'],
                    'id':
                    course.id,
                    'image_url':
                    course_catalog_data['image']['src'],
                    'organization':
                    CourseKey.from_string(course.id).org,
                    'seat_type':
                    course.type,
                    'stockrecords':
                    serializers.StockRecordSerializer(stock_record).data,
                    'title':
                    course.name,
                    'voucher_end_date':
                    voucher.end_datetime,
                })
        return offers