Merge pull request #663 from pcoder/bugfix/plan-with-price

Use price in stripe plan name too
This commit is contained in:
Pcoder 2018-09-06 01:04:47 +02:00 committed by GitHub
commit c6612153e8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 56 additions and 28 deletions

View file

@ -105,7 +105,8 @@ class CeleryTaskTestCase(TestCase):
disk_size=disk_size) disk_size=disk_size)
plan_name = StripeUtils.get_stripe_plan_name(cpu=cpu, plan_name = StripeUtils.get_stripe_plan_name(cpu=cpu,
memory=memory, memory=memory,
disk_size=disk_size) disk_size=disk_size,
price=amount_to_be_charged)
stripe_plan_id = StripeUtils.get_stripe_plan_id(cpu=cpu, stripe_plan_id = StripeUtils.get_stripe_plan_id(cpu=cpu,
ram=memory, ram=memory,
ssd=disk_size, ssd=disk_size,

View file

@ -508,14 +508,20 @@ class OrderConfirmationView(DetailView):
memory = specs.get('memory') memory = specs.get('memory')
disk_size = specs.get('disk_size') disk_size = specs.get('disk_size')
amount_to_be_charged = specs.get('total_price') amount_to_be_charged = specs.get('total_price')
plan_name = StripeUtils.get_stripe_plan_name(cpu=cpu, plan_name = StripeUtils.get_stripe_plan_name(
cpu=cpu,
memory=memory, memory=memory,
disk_size=disk_size) disk_size=disk_size,
stripe_plan_id = StripeUtils.get_stripe_plan_id(cpu=cpu, price=amount_to_be_charged
)
stripe_plan_id = StripeUtils.get_stripe_plan_id(
cpu=cpu,
ram=memory, ram=memory,
ssd=disk_size, ssd=disk_size,
version=1, version=1,
app='dcl') app='dcl',
price=amount_to_be_charged
)
stripe_plan = stripe_utils.get_or_create_stripe_plan( stripe_plan = stripe_utils.get_or_create_stripe_plan(
amount=amount_to_be_charged, amount=amount_to_be_charged,
name=plan_name, name=plan_name,

View file

@ -1032,14 +1032,20 @@ class OrdersHostingDetailView(LoginRequiredMixin, DetailView):
memory = specs.get('memory') memory = specs.get('memory')
disk_size = specs.get('disk_size') disk_size = specs.get('disk_size')
amount_to_be_charged = specs.get('total_price') amount_to_be_charged = specs.get('total_price')
plan_name = StripeUtils.get_stripe_plan_name(cpu=cpu, plan_name = StripeUtils.get_stripe_plan_name(
cpu=cpu,
memory=memory, memory=memory,
disk_size=disk_size) disk_size=disk_size,
stripe_plan_id = StripeUtils.get_stripe_plan_id(cpu=cpu, price=amount_to_be_charged
)
stripe_plan_id = StripeUtils.get_stripe_plan_id(
cpu=cpu,
ram=memory, ram=memory,
ssd=disk_size, ssd=disk_size,
version=1, version=1,
app='dcl') app='dcl',
price=amount_to_be_charged
)
stripe_plan = stripe_utils.get_or_create_stripe_plan( stripe_plan = stripe_utils.get_or_create_stripe_plan(
amount=amount_to_be_charged, amount=amount_to_be_charged,
name=plan_name, name=plan_name,

View file

@ -1,6 +1,7 @@
import decimal import decimal
import logging import logging
import subprocess import subprocess
from oca.pool import WrongIdError from oca.pool import WrongIdError
from datacenterlight.models import VMPricing from datacenterlight.models import VMPricing
@ -80,7 +81,7 @@ def get_vm_price(cpu, memory, disk_size, hdd_size=0, pricing_name='default'):
(decimal.Decimal(hdd_size) * pricing.hdd_unit_price)) (decimal.Decimal(hdd_size) * pricing.hdd_unit_price))
cents = decimal.Decimal('.01') cents = decimal.Decimal('.01')
price = price.quantize(cents, decimal.ROUND_HALF_UP) price = price.quantize(cents, decimal.ROUND_HALF_UP)
return float(price) return round(float(price), 2)
def get_vm_price_with_vat(cpu, memory, ssd_size, hdd_size=0, def get_vm_price_with_vat(cpu, memory, ssd_size, hdd_size=0,
@ -126,9 +127,10 @@ def get_vm_price_with_vat(cpu, memory, ssd_size, hdd_size=0,
vat = vat.quantize(cents, decimal.ROUND_HALF_UP) vat = vat.quantize(cents, decimal.ROUND_HALF_UP)
discount = { discount = {
'name': pricing.discount_name, 'name': pricing.discount_name,
'amount': float(pricing.discount_amount), 'amount': round(float(pricing.discount_amount),2)
} }
return float(price), float(vat), float(vat_percent), discount return (round(float(price), 2), round(float(vat), 2),
round(float(vat_percent)), discount)
def ping_ok(host_ipv6): def ping_ok(host_ipv6):

View file

@ -291,7 +291,8 @@ class StripeUtils(object):
return charge return charge
@staticmethod @staticmethod
def get_stripe_plan_id(cpu, ram, ssd, version, app='dcl', hdd=None): def get_stripe_plan_id(cpu, ram, ssd, version, app='dcl', hdd=None,
price=None):
""" """
Returns the Stripe plan id string of the form Returns the Stripe plan id string of the form
`dcl-v1-cpu-2-ram-5gb-ssd-10gb` based on the input parameters `dcl-v1-cpu-2-ram-5gb-ssd-10gb` based on the input parameters
@ -303,6 +304,7 @@ class StripeUtils(object):
:param version: The version of the Stripe plans :param version: The version of the Stripe plans
:param app: The application to which the stripe plan belongs :param app: The application to which the stripe plan belongs
to. By default it is 'dcl' to. By default it is 'dcl'
:param price: The price for this plan
:return: A string of the form `dcl-v1-cpu-2-ram-5gb-ssd-10gb` :return: A string of the form `dcl-v1-cpu-2-ram-5gb-ssd-10gb`
""" """
dcl_plan_string = 'cpu-{cpu}-ram-{ram}gb-ssd-{ssd}gb'.format(cpu=cpu, dcl_plan_string = 'cpu-{cpu}-ram-{ram}gb-ssd-{ssd}gb'.format(cpu=cpu,
@ -314,19 +316,30 @@ class StripeUtils(object):
stripe_plan_id_string = '{app}-v{version}-{plan}'.format( stripe_plan_id_string = '{app}-v{version}-{plan}'.format(
app=app, app=app,
version=version, version=version,
plan=dcl_plan_string) plan=dcl_plan_string
)
if price is not None:
stripe_plan_id_string_with_price = '{}-{}chf'.format(
stripe_plan_id_string,
round(price, 2)
)
return stripe_plan_id_string_with_price
else:
return stripe_plan_id_string return stripe_plan_id_string
@staticmethod @staticmethod
def get_stripe_plan_name(cpu, memory, disk_size): def get_stripe_plan_name(cpu, memory, disk_size, price):
""" """
Returns the Stripe plan name Returns the Stripe plan name
:return: :return:
""" """
return "{cpu} Cores, {memory} GB RAM, {disk_size} GB SSD".format( return "{cpu} Cores, {memory} GB RAM, {disk_size} GB SSD, " \
"{price} CHF".format(
cpu=cpu, cpu=cpu,
memory=memory, memory=memory,
disk_size=disk_size) disk_size=disk_size,
price=round(price, 2)
)
@handleStripeError @handleStripeError
def set_subscription_meta_data(self, subscription_id, meta_data): def set_subscription_meta_data(self, subscription_id, meta_data):