Implement provisioning of VM on invoice.paid webhook
This commit is contained in:
parent
3389e69af1
commit
cb7a1ed4f4
2 changed files with 247 additions and 204 deletions
|
@ -710,6 +710,7 @@ class OrderConfirmationView(DetailView, FormView):
|
||||||
stripe_api_cus_id = request.session.get('customer')
|
stripe_api_cus_id = request.session.get('customer')
|
||||||
stripe_utils = StripeUtils()
|
stripe_utils = StripeUtils()
|
||||||
logger.debug("user=%s stripe_api_cus_id=%s" % (user, stripe_api_cus_id))
|
logger.debug("user=%s stripe_api_cus_id=%s" % (user, stripe_api_cus_id))
|
||||||
|
card_details_response = None
|
||||||
|
|
||||||
if 'token' in request.session:
|
if 'token' in request.session:
|
||||||
card_details = stripe_utils.get_cards_details_from_token(
|
card_details = stripe_utils.get_cards_details_from_token(
|
||||||
|
@ -954,212 +955,18 @@ class OrderConfirmationView(DetailView, FormView):
|
||||||
}
|
}
|
||||||
return JsonResponse(context)
|
return JsonResponse(context)
|
||||||
else:
|
else:
|
||||||
logger.debug("Handle this case")
|
logger.debug(
|
||||||
|
"Handle this case when "
|
||||||
|
"stripe.subscription_status is incomplete but "
|
||||||
|
"pi.status is neither requires_attention nor "
|
||||||
|
"requires_source_action")
|
||||||
msg = subscription_result.get('error')
|
msg = subscription_result.get('error')
|
||||||
return show_error(msg, self.request)
|
return show_error(msg, self.request)
|
||||||
|
|
||||||
# Create user if the user is not logged in and if he is not already
|
do_create_vm(self.request, user, stripe_api_cus_id,
|
||||||
# registered
|
card_details_response, stripe_subscription_obj,
|
||||||
if not request.user.is_authenticated():
|
stripe_onetime_charge, gp_details, specs, vm_template_id,
|
||||||
try:
|
template
|
||||||
custom_user = CustomUser.objects.get(
|
|
||||||
email=user.get('email'))
|
|
||||||
stripe_customer = StripeCustomer.objects.filter(
|
|
||||||
user_id=custom_user.id).first()
|
|
||||||
if stripe_customer is None:
|
|
||||||
stripe_customer = StripeCustomer.objects.create(
|
|
||||||
user=custom_user, stripe_id=stripe_api_cus_id
|
|
||||||
)
|
|
||||||
stripe_customer_id = stripe_customer.id
|
|
||||||
except CustomUser.DoesNotExist:
|
|
||||||
logger.debug(
|
|
||||||
"Customer {} does not exist.".format(user.get('email')))
|
|
||||||
password = CustomUser.get_random_password()
|
|
||||||
base_url = "{0}://{1}".format(self.request.scheme,
|
|
||||||
self.request.get_host())
|
|
||||||
custom_user = CustomUser.register(
|
|
||||||
user.get('name'), password,
|
|
||||||
user.get('email'),
|
|
||||||
app='dcl', base_url=base_url, send_email=True,
|
|
||||||
account_details=password
|
|
||||||
)
|
|
||||||
logger.debug("Created user {}.".format(user.get('email')))
|
|
||||||
stripe_customer = StripeCustomer.objects. \
|
|
||||||
create(user=custom_user, stripe_id=stripe_api_cus_id)
|
|
||||||
stripe_customer_id = stripe_customer.id
|
|
||||||
new_user = authenticate(username=custom_user.email,
|
|
||||||
password=password)
|
|
||||||
login(request, new_user)
|
|
||||||
if 'new_user_hosting_key_id' in self.request.session:
|
|
||||||
user_hosting_key = UserHostingKey.objects.get(id=self.request.session['new_user_hosting_key_id'])
|
|
||||||
user_hosting_key.user = new_user
|
|
||||||
user_hosting_key.save()
|
|
||||||
else:
|
|
||||||
# We assume that if the user is here, his/her StripeCustomer
|
|
||||||
# object already exists
|
|
||||||
stripe_customer_id = request.user.stripecustomer.id
|
|
||||||
custom_user = request.user
|
|
||||||
|
|
||||||
if 'token' in request.session:
|
|
||||||
ucd = UserCardDetail.get_or_create_user_card_detail(
|
|
||||||
stripe_customer=self.request.user.stripecustomer,
|
|
||||||
card_details=card_details_response
|
|
||||||
)
|
|
||||||
UserCardDetail.save_default_card_local(
|
|
||||||
self.request.user.stripecustomer.stripe_id,
|
|
||||||
ucd.card_id
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
card_id = request.session.get('card_id')
|
|
||||||
user_card_detail = UserCardDetail.objects.get(id=card_id)
|
|
||||||
card_details_dict = {
|
|
||||||
'last4': user_card_detail.last4,
|
|
||||||
'brand': user_card_detail.brand,
|
|
||||||
'card_id': user_card_detail.card_id
|
|
||||||
}
|
|
||||||
if not user_card_detail.preferred:
|
|
||||||
UserCardDetail.set_default_card(
|
|
||||||
stripe_api_cus_id=stripe_api_cus_id,
|
|
||||||
stripe_source_id=user_card_detail.card_id
|
|
||||||
)
|
|
||||||
|
|
||||||
# Save billing address
|
|
||||||
billing_address_data = request.session.get('billing_address_data')
|
|
||||||
logger.debug('billing_address_data is {}'.format(billing_address_data))
|
|
||||||
billing_address_data.update({
|
|
||||||
'user': custom_user.id
|
|
||||||
})
|
|
||||||
|
|
||||||
if 'generic_payment_type' in request.session:
|
|
||||||
stripe_cus = StripeCustomer.objects.filter(
|
|
||||||
stripe_id=stripe_api_cus_id
|
|
||||||
).first()
|
|
||||||
billing_address = BillingAddress(
|
|
||||||
cardholder_name=billing_address_data['cardholder_name'],
|
|
||||||
street_address=billing_address_data['street_address'],
|
|
||||||
city=billing_address_data['city'],
|
|
||||||
postal_code=billing_address_data['postal_code'],
|
|
||||||
country=billing_address_data['country'],
|
|
||||||
vat_number=billing_address_data['vat_number']
|
|
||||||
)
|
|
||||||
billing_address.save()
|
|
||||||
|
|
||||||
order = HostingOrder.create(
|
|
||||||
price=self.request
|
|
||||||
.session['generic_payment_details']['amount'],
|
|
||||||
customer=stripe_cus,
|
|
||||||
billing_address=billing_address,
|
|
||||||
vm_pricing=VMPricing.get_default_pricing()
|
|
||||||
)
|
|
||||||
|
|
||||||
# Create a Hosting Bill
|
|
||||||
HostingBill.create(customer=stripe_cus,
|
|
||||||
billing_address=billing_address)
|
|
||||||
|
|
||||||
# Create Billing Address for User if he does not have one
|
|
||||||
if not stripe_cus.user.billing_addresses.count():
|
|
||||||
billing_address_data.update({
|
|
||||||
'user': stripe_cus.user.id
|
|
||||||
})
|
|
||||||
billing_address_user_form = UserBillingAddressForm(
|
|
||||||
billing_address_data
|
|
||||||
)
|
|
||||||
billing_address_user_form.is_valid()
|
|
||||||
billing_address_user_form.save()
|
|
||||||
|
|
||||||
if self.request.session['generic_payment_details']['recurring']:
|
|
||||||
# Associate the given stripe subscription with the order
|
|
||||||
order.set_subscription_id(
|
|
||||||
stripe_subscription_obj.id, card_details_dict
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
# Associate the given stripe charge id with the order
|
|
||||||
order.set_stripe_charge(stripe_onetime_charge)
|
|
||||||
|
|
||||||
# Set order status approved
|
|
||||||
order.set_approved()
|
|
||||||
order.generic_payment_description = gp_details["description"]
|
|
||||||
order.generic_product_id = gp_details["product_id"]
|
|
||||||
order.save()
|
|
||||||
# send emails
|
|
||||||
context = {
|
|
||||||
'name': user.get('name'),
|
|
||||||
'email': user.get('email'),
|
|
||||||
'amount': gp_details['amount'],
|
|
||||||
'description': gp_details['description'],
|
|
||||||
'recurring': gp_details['recurring'],
|
|
||||||
'product_name': gp_details['product_name'],
|
|
||||||
'product_id': gp_details['product_id'],
|
|
||||||
'order_id': order.id
|
|
||||||
}
|
|
||||||
|
|
||||||
email_data = {
|
|
||||||
'subject': (settings.DCL_TEXT +
|
|
||||||
" Payment received from %s" % context['email']),
|
|
||||||
'from_email': settings.DCL_SUPPORT_FROM_ADDRESS,
|
|
||||||
'to': ['info@ungleich.ch'],
|
|
||||||
'body': "\n".join(
|
|
||||||
["%s=%s" % (k, v) for (k, v) in context.items()]),
|
|
||||||
'reply_to': [context['email']],
|
|
||||||
}
|
|
||||||
send_plain_email_task.delay(email_data)
|
|
||||||
recurring_text = _(" This is a monthly recurring plan.")
|
|
||||||
if gp_details['recurring_interval'] == "year":
|
|
||||||
recurring_text = _(" This is an yearly recurring plan.")
|
|
||||||
|
|
||||||
email_data = {
|
|
||||||
'subject': _("Confirmation of your payment"),
|
|
||||||
'from_email': settings.DCL_SUPPORT_FROM_ADDRESS,
|
|
||||||
'to': [user.get('email')],
|
|
||||||
'body': _("Hi {name},\n\n"
|
|
||||||
"thank you for your order!\n"
|
|
||||||
"We have just received a payment of CHF {amount:.2f}"
|
|
||||||
" from you.{recurring}\n\n"
|
|
||||||
"Cheers,\nYour Data Center Light team".format(
|
|
||||||
name=user.get('name'),
|
|
||||||
amount=gp_details['amount'],
|
|
||||||
recurring=(
|
|
||||||
recurring_text
|
|
||||||
if gp_details['recurring'] else ''
|
|
||||||
)
|
|
||||||
)
|
|
||||||
),
|
|
||||||
'reply_to': ['info@ungleich.ch'],
|
|
||||||
}
|
|
||||||
send_plain_email_task.delay(email_data)
|
|
||||||
|
|
||||||
response = {
|
|
||||||
'status': True,
|
|
||||||
'redirect': (
|
|
||||||
reverse('hosting:invoices')
|
|
||||||
if request.user.is_authenticated()
|
|
||||||
else reverse('datacenterlight:index')
|
|
||||||
),
|
|
||||||
'msg_title': str(_('Thank you for the payment.')),
|
|
||||||
'msg_body': str(
|
|
||||||
_('You will soon receive a confirmation email of the '
|
|
||||||
'payment. You can always contact us at '
|
|
||||||
'info@ungleich.ch for any question that you may have.')
|
|
||||||
)
|
|
||||||
}
|
|
||||||
clear_all_session_vars(request)
|
|
||||||
|
|
||||||
return JsonResponse(response)
|
|
||||||
|
|
||||||
user = {
|
|
||||||
'name': custom_user.name,
|
|
||||||
'email': custom_user.email,
|
|
||||||
'username': custom_user.username,
|
|
||||||
'pass': custom_user.password,
|
|
||||||
'request_scheme': request.scheme,
|
|
||||||
'request_host': request.get_host(),
|
|
||||||
'language': get_language(),
|
|
||||||
}
|
|
||||||
|
|
||||||
create_vm(
|
|
||||||
billing_address_data, stripe_customer_id, specs,
|
|
||||||
stripe_subscription_obj, card_details_dict, request,
|
|
||||||
vm_template_id, template, user
|
|
||||||
)
|
)
|
||||||
|
|
||||||
response = {
|
response = {
|
||||||
|
@ -1179,6 +986,213 @@ class OrderConfirmationView(DetailView, FormView):
|
||||||
return JsonResponse(response)
|
return JsonResponse(response)
|
||||||
|
|
||||||
|
|
||||||
|
def do_create_vm(request, user, stripe_api_cus_id, card_details_response,
|
||||||
|
stripe_subscription_obj, stripe_onetime_charge, gp_details,
|
||||||
|
specs, vm_template_id, template):
|
||||||
|
# Create user if the user is not logged in and if he is not already
|
||||||
|
# registered
|
||||||
|
if not request.user.is_authenticated():
|
||||||
|
try:
|
||||||
|
custom_user = CustomUser.objects.get(
|
||||||
|
email=user.get('email'))
|
||||||
|
stripe_customer = StripeCustomer.objects.filter(
|
||||||
|
user_id=custom_user.id).first()
|
||||||
|
if stripe_customer is None:
|
||||||
|
stripe_customer = StripeCustomer.objects.create(
|
||||||
|
user=custom_user, stripe_id=stripe_api_cus_id
|
||||||
|
)
|
||||||
|
stripe_customer_id = stripe_customer.id
|
||||||
|
except CustomUser.DoesNotExist:
|
||||||
|
logger.debug(
|
||||||
|
"Customer {} does not exist.".format(user.get('email')))
|
||||||
|
password = CustomUser.get_random_password()
|
||||||
|
base_url = "{0}://{1}".format(request.scheme,
|
||||||
|
request.get_host())
|
||||||
|
custom_user = CustomUser.register(
|
||||||
|
user.get('name'), password,
|
||||||
|
user.get('email'),
|
||||||
|
app='dcl', base_url=base_url, send_email=True,
|
||||||
|
account_details=password
|
||||||
|
)
|
||||||
|
logger.debug("Created user {}.".format(user.get('email')))
|
||||||
|
stripe_customer = StripeCustomer.objects. \
|
||||||
|
create(user=custom_user, stripe_id=stripe_api_cus_id)
|
||||||
|
stripe_customer_id = stripe_customer.id
|
||||||
|
new_user = authenticate(username=custom_user.email,
|
||||||
|
password=password)
|
||||||
|
login(request, new_user)
|
||||||
|
if 'new_user_hosting_key_id' in request.session:
|
||||||
|
user_hosting_key = UserHostingKey.objects.get(
|
||||||
|
id=request.session['new_user_hosting_key_id'])
|
||||||
|
user_hosting_key.user = new_user
|
||||||
|
user_hosting_key.save()
|
||||||
|
else:
|
||||||
|
# We assume that if the user is here, his/her StripeCustomer
|
||||||
|
# object already exists
|
||||||
|
stripe_customer_id = request.user.stripecustomer.id
|
||||||
|
custom_user = request.user
|
||||||
|
|
||||||
|
if 'token' in request.session:
|
||||||
|
ucd = UserCardDetail.get_or_create_user_card_detail(
|
||||||
|
stripe_customer=request.user.stripecustomer,
|
||||||
|
card_details=card_details_response
|
||||||
|
)
|
||||||
|
UserCardDetail.save_default_card_local(
|
||||||
|
request.user.stripecustomer.stripe_id,
|
||||||
|
ucd.card_id
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
card_id = request.session.get('card_id')
|
||||||
|
user_card_detail = UserCardDetail.objects.get(id=card_id)
|
||||||
|
card_details_dict = {
|
||||||
|
'last4': user_card_detail.last4,
|
||||||
|
'brand': user_card_detail.brand,
|
||||||
|
'card_id': user_card_detail.card_id
|
||||||
|
}
|
||||||
|
if not user_card_detail.preferred:
|
||||||
|
UserCardDetail.set_default_card(
|
||||||
|
stripe_api_cus_id=stripe_api_cus_id,
|
||||||
|
stripe_source_id=user_card_detail.card_id
|
||||||
|
)
|
||||||
|
|
||||||
|
# Save billing address
|
||||||
|
billing_address_data = request.session.get('billing_address_data')
|
||||||
|
logger.debug('billing_address_data is {}'.format(billing_address_data))
|
||||||
|
billing_address_data.update({
|
||||||
|
'user': custom_user.id
|
||||||
|
})
|
||||||
|
|
||||||
|
if 'generic_payment_type' in request.session:
|
||||||
|
stripe_cus = StripeCustomer.objects.filter(
|
||||||
|
stripe_id=stripe_api_cus_id
|
||||||
|
).first()
|
||||||
|
billing_address = BillingAddress(
|
||||||
|
cardholder_name=billing_address_data['cardholder_name'],
|
||||||
|
street_address=billing_address_data['street_address'],
|
||||||
|
city=billing_address_data['city'],
|
||||||
|
postal_code=billing_address_data['postal_code'],
|
||||||
|
country=billing_address_data['country'],
|
||||||
|
vat_number=billing_address_data['vat_number']
|
||||||
|
)
|
||||||
|
billing_address.save()
|
||||||
|
|
||||||
|
order = HostingOrder.create(
|
||||||
|
price=request.session['generic_payment_details']['amount'],
|
||||||
|
customer=stripe_cus,
|
||||||
|
billing_address=billing_address,
|
||||||
|
vm_pricing=VMPricing.get_default_pricing()
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create a Hosting Bill
|
||||||
|
HostingBill.create(customer=stripe_cus,
|
||||||
|
billing_address=billing_address)
|
||||||
|
|
||||||
|
# Create Billing Address for User if he does not have one
|
||||||
|
if not stripe_cus.user.billing_addresses.count():
|
||||||
|
billing_address_data.update({
|
||||||
|
'user': stripe_cus.user.id
|
||||||
|
})
|
||||||
|
billing_address_user_form = UserBillingAddressForm(
|
||||||
|
billing_address_data
|
||||||
|
)
|
||||||
|
billing_address_user_form.is_valid()
|
||||||
|
billing_address_user_form.save()
|
||||||
|
|
||||||
|
if request.session['generic_payment_details']['recurring']:
|
||||||
|
# Associate the given stripe subscription with the order
|
||||||
|
order.set_subscription_id(
|
||||||
|
stripe_subscription_obj.id, card_details_dict
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
# Associate the given stripe charge id with the order
|
||||||
|
order.set_stripe_charge(stripe_onetime_charge)
|
||||||
|
|
||||||
|
# Set order status approved
|
||||||
|
order.set_approved()
|
||||||
|
order.generic_payment_description = gp_details["description"]
|
||||||
|
order.generic_product_id = gp_details["product_id"]
|
||||||
|
order.save()
|
||||||
|
# send emails
|
||||||
|
context = {
|
||||||
|
'name': user.get('name'),
|
||||||
|
'email': user.get('email'),
|
||||||
|
'amount': gp_details['amount'],
|
||||||
|
'description': gp_details['description'],
|
||||||
|
'recurring': gp_details['recurring'],
|
||||||
|
'product_name': gp_details['product_name'],
|
||||||
|
'product_id': gp_details['product_id'],
|
||||||
|
'order_id': order.id
|
||||||
|
}
|
||||||
|
|
||||||
|
email_data = {
|
||||||
|
'subject': (settings.DCL_TEXT +
|
||||||
|
" Payment received from %s" % context['email']),
|
||||||
|
'from_email': settings.DCL_SUPPORT_FROM_ADDRESS,
|
||||||
|
'to': ['info@ungleich.ch'],
|
||||||
|
'body': "\n".join(
|
||||||
|
["%s=%s" % (k, v) for (k, v) in context.items()]),
|
||||||
|
'reply_to': [context['email']],
|
||||||
|
}
|
||||||
|
send_plain_email_task.delay(email_data)
|
||||||
|
recurring_text = _(" This is a monthly recurring plan.")
|
||||||
|
if gp_details['recurring_interval'] == "year":
|
||||||
|
recurring_text = _(" This is an yearly recurring plan.")
|
||||||
|
|
||||||
|
email_data = {
|
||||||
|
'subject': _("Confirmation of your payment"),
|
||||||
|
'from_email': settings.DCL_SUPPORT_FROM_ADDRESS,
|
||||||
|
'to': [user.get('email')],
|
||||||
|
'body': _("Hi {name},\n\n"
|
||||||
|
"thank you for your order!\n"
|
||||||
|
"We have just received a payment of CHF {amount:.2f}"
|
||||||
|
" from you.{recurring}\n\n"
|
||||||
|
"Cheers,\nYour Data Center Light team".format(
|
||||||
|
name=user.get('name'),
|
||||||
|
amount=gp_details['amount'],
|
||||||
|
recurring=(
|
||||||
|
recurring_text
|
||||||
|
if gp_details['recurring'] else ''
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
'reply_to': ['info@ungleich.ch'],
|
||||||
|
}
|
||||||
|
send_plain_email_task.delay(email_data)
|
||||||
|
|
||||||
|
response = {
|
||||||
|
'status': True,
|
||||||
|
'redirect': (
|
||||||
|
reverse('hosting:invoices')
|
||||||
|
if request.user.is_authenticated()
|
||||||
|
else reverse('datacenterlight:index')
|
||||||
|
),
|
||||||
|
'msg_title': str(_('Thank you for the payment.')),
|
||||||
|
'msg_body': str(
|
||||||
|
_('You will soon receive a confirmation email of the '
|
||||||
|
'payment. You can always contact us at '
|
||||||
|
'info@ungleich.ch for any question that you may have.')
|
||||||
|
)
|
||||||
|
}
|
||||||
|
clear_all_session_vars(request)
|
||||||
|
|
||||||
|
return JsonResponse(response)
|
||||||
|
|
||||||
|
user = {
|
||||||
|
'name': custom_user.name,
|
||||||
|
'email': custom_user.email,
|
||||||
|
'username': custom_user.username,
|
||||||
|
'pass': custom_user.password,
|
||||||
|
'request_scheme': request.scheme,
|
||||||
|
'request_host': request.get_host(),
|
||||||
|
'language': get_language(),
|
||||||
|
}
|
||||||
|
|
||||||
|
create_vm(
|
||||||
|
billing_address_data, stripe_customer_id, specs,
|
||||||
|
stripe_subscription_obj, card_details_dict, request,
|
||||||
|
vm_template_id, template, user
|
||||||
|
)
|
||||||
|
|
||||||
def show_error(msg, request):
|
def show_error(msg, request):
|
||||||
messages.add_message(request, messages.ERROR, msg,
|
messages.add_message(request, messages.ERROR, msg,
|
||||||
extra_tags='failed_payment')
|
extra_tags='failed_payment')
|
||||||
|
|
|
@ -8,7 +8,9 @@ from django.http import HttpResponse
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
from django.views.decorators.http import require_POST
|
from django.views.decorators.http import require_POST
|
||||||
|
|
||||||
|
from datacenterlight.views import do_create_vm
|
||||||
from membership.models import StripeCustomer
|
from membership.models import StripeCustomer
|
||||||
|
from hosting.models import HostingOrder
|
||||||
|
|
||||||
from utils.models import BillingAddress, UserBillingAddress
|
from utils.models import BillingAddress, UserBillingAddress
|
||||||
from utils.tasks import send_plain_email_task
|
from utils.tasks import send_plain_email_task
|
||||||
|
@ -117,8 +119,35 @@ def handle_webhook(request):
|
||||||
invoice_obj = event.data.object
|
invoice_obj = event.data.object
|
||||||
logger.debug("Webhook Event: invoice.paid")
|
logger.debug("Webhook Event: invoice.paid")
|
||||||
logger.debug("invoice_obj %s " % str(invoice_obj))
|
logger.debug("invoice_obj %s " % str(invoice_obj))
|
||||||
if invoice_obj.paid and invoice_obj.billing_reason == "subscription_create":
|
logger.debug("invoice_obj.paid = %s %s" % (invoice_obj.paid, type(invoice_obj.paid)))
|
||||||
|
logger.debug("invoice_obj.billing_reason = %s %s" % (invoice_obj.billing_reason, type(invoice_obj.billing_reason)))
|
||||||
|
# We should check for billing_reason == "subscription_create" but we check for "subscription_update"
|
||||||
|
# because we are using older api. See https://stripe.com/docs/upgrades?since=2015-07-13
|
||||||
|
|
||||||
|
# The billing_reason attribute of the invoice object now can take the
|
||||||
|
# value of subscription_create, indicating that it is the first
|
||||||
|
# invoice of a subscription. For older API versions,
|
||||||
|
# billing_reason=subscription_create is represented as
|
||||||
|
# subscription_update.
|
||||||
|
|
||||||
|
if invoice_obj.paid and invoice_obj.billing_reason == "subscription_update":
|
||||||
logger.debug("Start provisioning")
|
logger.debug("Start provisioning")
|
||||||
|
# get subscription id, order_id
|
||||||
|
ho = None
|
||||||
|
try:
|
||||||
|
ho = HostingOrder.objects.get(subscription_id=invoice_obj.subscription)
|
||||||
|
except Exception as ex:
|
||||||
|
logger.error(str(ex))
|
||||||
|
if ho:
|
||||||
|
logger.debug("Create a VM for order %s" % str(ho))
|
||||||
|
|
||||||
|
# TODO: fix the error below
|
||||||
|
do_create_vm(request, user, stripe_api_cus_id,
|
||||||
|
card_details_response, stripe_subscription_obj,
|
||||||
|
stripe_onetime_charge, gp_details, specs,
|
||||||
|
vm_template_id,
|
||||||
|
template
|
||||||
|
)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
logger.error("Unhandled event : " + event.type)
|
logger.error("Unhandled event : " + event.type)
|
||||||
|
|
Loading…
Add table
Reference in a new issue