def create_coupon_and_vouchers(self, cleaned_voucher_data): coupon_product = create_coupon_product_and_stockrecord( cleaned_voucher_data['title'], cleaned_voucher_data['category'], cleaned_voucher_data['partner'], cleaned_voucher_data['price']) vouchers = create_enterprise_vouchers( voucher_type=cleaned_voucher_data['voucher_type'], quantity=cleaned_voucher_data['quantity'], coupon_id=coupon_product.id, benefit_type=cleaned_voucher_data['benefit_type'], benefit_value=cleaned_voucher_data['benefit_value'], enterprise_customer=cleaned_voucher_data['enterprise_customer'], enterprise_customer_catalog=cleaned_voucher_data[ 'enterprise_customer_catalog'], max_uses=cleaned_voucher_data['max_uses'], email_domains=cleaned_voucher_data['email_domains'], site=self.request.site, end_datetime=cleaned_voucher_data['end_datetime'], start_datetime=cleaned_voucher_data['start_datetime'], code=cleaned_voucher_data['code'], name=cleaned_voucher_data['title']) attach_vouchers_to_coupon_product( coupon_product, vouchers, cleaned_voucher_data['note'], cleaned_voucher_data.get('notify_email'), cleaned_voucher_data['enterprise_customer'], cleaned_voucher_data['sales_force_id']) attach_or_update_contract_metadata_on_coupon( coupon_product, discount_type=cleaned_voucher_data['contract_discount_type'], discount_value=cleaned_voucher_data['contract_discount_value'], amount_paid=cleaned_voucher_data['prepaid_invoice_amount'], ) return coupon_product
def update_coupon_product_data(self, request_data, coupon): baskets = Basket.objects.filter(lines__product_id=coupon.id, status=Basket.SUBMITTED) category_data = request_data.get('category') if category_data: category = Category.objects.get(name=category_data['name']) ProductCategory.objects.filter(product=coupon).update( category=category) client_username = request_data.get('client') enterprise_customer_data = request_data.get('enterprise_customer') enterprise_customer = enterprise_customer_data.get( 'id', None) if enterprise_customer_data else None enterprise_customer_name = enterprise_customer_data.get( 'name', None) if enterprise_customer_data else None if client_username or enterprise_customer: client, __ = BusinessClient.objects.update_or_create( name=enterprise_customer_name or client_username, ) Invoice.objects.filter(order__basket=baskets.first()).update( business_client=client) coupon.attr.enterprise_customer_uuid = enterprise_customer coupon_price = request_data.get('price') if coupon_price: StockRecord.objects.filter(product=coupon).update( price_excl_tax=coupon_price) note = request_data.get('note') if note is not None: coupon.attr.note = note if 'notify_email' in request_data: coupon.attr.notify_email = request_data.get('notify_email') sales_force_id = request_data.get('sales_force_id') if sales_force_id is not None: coupon.attr.sales_force_id = sales_force_id if 'inactive' in request_data: coupon.attr.inactive = request_data.get('inactive') coupon.save() discount_value = request_data.get('contract_discount_value') prepaid_invoice_amount = request_data.get('prepaid_invoice_amount') if discount_value is not None or prepaid_invoice_amount is not None: discount_type = request_data.get('contract_discount_type') logger.info( "Calling attach_or_update_contract_metadata_on_coupon " "from api/v2/views/coupons.py for coupon [%s]", coupon.id) attach_or_update_contract_metadata_on_coupon( coupon, discount_type=discount_type, discount_value=discount_value, amount_paid=prepaid_invoice_amount, )