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 }
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