def update_offer_data(self, request_data, vouchers, site): """ Remove all offers from the vouchers and add a new offer Arguments: request_data (dict): the request parameters sent via api. vouchers (list): the vouchers attached to this coupon to update. site (Site): the site for this request. """ benefit_value = request_data.get('benefit_value') enterprise_customer = request_data.get('enterprise_customer', {}).get('id', None) enterprise_catalog = request_data.get('enterprise_customer_catalog') or None max_uses = request_data.get('max_uses') email_domains = request_data.get('email_domains') # Validate max_uses if max_uses is not None: if vouchers.first().usage == Voucher.SINGLE_USE: log_message_and_raise_validation_error( 'Failed to update Coupon. ' 'max_global_applications field cannot be set for voucher type [{voucher_type}].'.format( voucher_type=Voucher.SINGLE_USE )) try: max_uses = int(max_uses) if max_uses < 1: raise ValueError except ValueError: raise ValidationError('max_global_applications field must be a positive number.') coupon_was_migrated = False for voucher in vouchers.all(): updated_enterprise_offer = update_voucher_with_enterprise_offer( offer=voucher.enterprise_offer, benefit_value=benefit_value, max_uses=max_uses, enterprise_customer=enterprise_customer, enterprise_catalog=enterprise_catalog, email_domains=email_domains, site=site, ) updated_orginal_offer = None if voucher.original_offer != voucher.enterprise_offer: coupon_was_migrated = True updated_orginal_offer = update_voucher_offer( offer=voucher.original_offer, benefit_value=benefit_value, max_uses=max_uses, email_domains=email_domains, site=site, ) voucher.offers.clear() voucher.offers.add(updated_enterprise_offer) if updated_orginal_offer: voucher.offers.add(updated_orginal_offer) update_assignments_for_multi_use_per_customer(voucher) if coupon_was_migrated: super(EnterpriseCouponViewSet, self).update_range_data(request_data, vouchers)
def update_offer_data(self, request_data, vouchers, site): """ Remove all offers from the vouchers and add a new offer Arguments: request_data (dict): the request parameters sent via api. vouchers (list): the vouchers attached to this coupon to update. site (Site): the site for this request. """ benefit_value = request_data.get('benefit_value') enterprise_customer = request_data.get('enterprise_customer', {}).get('id', None) enterprise_catalog = request_data.get( 'enterprise_customer_catalog') or None max_uses = request_data.get('max_uses') email_domains = request_data.get('email_domains') if not self.is_offer_data_updated(benefit_value, enterprise_customer, enterprise_catalog, max_uses, email_domains): # Offer data does not need to be updated for current request return coupon_was_migrated = False for voucher in vouchers: updated_enterprise_offer = update_voucher_with_enterprise_offer( offer=voucher.enterprise_offer, benefit_value=benefit_value, max_uses=max_uses, enterprise_customer=enterprise_customer, enterprise_catalog=enterprise_catalog, email_domains=email_domains, site=site, ) updated_orginal_offer = None if voucher.original_offer != voucher.enterprise_offer: coupon_was_migrated = True updated_orginal_offer = update_voucher_offer( offer=voucher.original_offer, benefit_value=benefit_value, max_uses=max_uses, email_domains=email_domains, site=site, ) voucher.offers.clear() voucher.offers.add(updated_enterprise_offer) if updated_orginal_offer: voucher.offers.add(updated_orginal_offer) update_assignments_for_multi_use_per_customer(voucher) if coupon_was_migrated: super(EnterpriseCouponViewSet, self).update_range_data(request_data, vouchers)