forked from GithubBackups/healthchecks
Adding "Standard (3 years)" plan.
This commit is contained in:
parent
9689dcc113
commit
3efd70e50c
@ -22,6 +22,19 @@ class SubscriptionManager(models.Manager):
|
|||||||
sub, created = Subscription.objects.get_or_create(user_id=user.id)
|
sub, created = Subscription.objects.get_or_create(user_id=user.id)
|
||||||
return sub
|
return sub
|
||||||
|
|
||||||
|
def by_transaction(self, transaction_id):
|
||||||
|
try:
|
||||||
|
tx = braintree.Transaction.find(transaction_id)
|
||||||
|
except braintree.exceptions.NotFoundError:
|
||||||
|
return None, None
|
||||||
|
|
||||||
|
try:
|
||||||
|
sub = self.get(customer_id=tx.customer_details.id)
|
||||||
|
except Subscription.DoesNotExist:
|
||||||
|
return None, None
|
||||||
|
|
||||||
|
return sub, tx
|
||||||
|
|
||||||
|
|
||||||
class Subscription(models.Model):
|
class Subscription(models.Model):
|
||||||
user = models.OneToOneField(User, models.CASCADE, blank=True, null=True)
|
user = models.OneToOneField(User, models.CASCADE, blank=True, null=True)
|
||||||
@ -43,6 +56,8 @@ class Subscription(models.Model):
|
|||||||
return 48
|
return 48
|
||||||
elif self.plan_id == "Y480":
|
elif self.plan_id == "Y480":
|
||||||
return 480
|
return 480
|
||||||
|
elif self.plan_id == "T144":
|
||||||
|
return 144
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
@ -51,6 +66,8 @@ class Subscription(models.Model):
|
|||||||
return "month"
|
return "month"
|
||||||
elif self.plan_id.startswith("Y"):
|
elif self.plan_id.startswith("Y"):
|
||||||
return "year"
|
return "year"
|
||||||
|
elif self.plan_id.startswith("T"):
|
||||||
|
return "3 years"
|
||||||
|
|
||||||
raise NotImplementedError("Unexpected plan: %s" % self.plan_id)
|
raise NotImplementedError("Unexpected plan: %s" % self.plan_id)
|
||||||
|
|
||||||
@ -194,10 +211,3 @@ class Subscription(models.Model):
|
|||||||
self._tx = list(braintree.Transaction.search(braintree.TransactionSearch.customer_id == self.customer_id))
|
self._tx = list(braintree.Transaction.search(braintree.TransactionSearch.customer_id == self.customer_id))
|
||||||
|
|
||||||
return self._tx
|
return self._tx
|
||||||
|
|
||||||
def get_transaction(self, transaction_id):
|
|
||||||
tx = braintree.Transaction.find(transaction_id)
|
|
||||||
if tx.customer_details.id != self.customer_id:
|
|
||||||
return None
|
|
||||||
|
|
||||||
return tx
|
|
||||||
|
@ -93,7 +93,7 @@ def log_and_bail(request, result):
|
|||||||
@require_POST
|
@require_POST
|
||||||
def set_plan(request):
|
def set_plan(request):
|
||||||
plan_id = request.POST["plan_id"]
|
plan_id = request.POST["plan_id"]
|
||||||
if plan_id not in ("", "P5", "P50", "Y48", "Y480"):
|
if plan_id not in ("", "P5", "P50", "Y48", "Y480", "T144"):
|
||||||
return HttpResponseBadRequest()
|
return HttpResponseBadRequest()
|
||||||
|
|
||||||
sub = Subscription.objects.for_user(request.user)
|
sub = Subscription.objects.for_user(request.user)
|
||||||
@ -117,7 +117,7 @@ def set_plan(request):
|
|||||||
|
|
||||||
# Update user's profile
|
# Update user's profile
|
||||||
profile = request.user.profile
|
profile = request.user.profile
|
||||||
if plan_id in ("P5", "Y48"):
|
if plan_id in ("P5", "Y48", "T144"):
|
||||||
profile.ping_log_limit = 1000
|
profile.ping_log_limit = 1000
|
||||||
profile.check_limit = 500
|
profile.check_limit = 500
|
||||||
profile.team_limit = 9
|
profile.team_limit = 9
|
||||||
@ -188,15 +188,20 @@ def billing_history(request):
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def pdf_invoice(request, transaction_id):
|
def pdf_invoice(request, transaction_id):
|
||||||
sub = Subscription.objects.get(user=request.user)
|
sub, tx = Subscription.objects.by_transaction(transaction_id)
|
||||||
transaction = sub.get_transaction(transaction_id)
|
|
||||||
if transaction is None:
|
# Does this transaction belong to a customer we know about?
|
||||||
|
if sub is None or tx is None:
|
||||||
|
return HttpResponseForbidden()
|
||||||
|
|
||||||
|
# Does the transaction's customer match the currently logged in user?
|
||||||
|
if sub.user != request.user and not request.user.is_superuser:
|
||||||
return HttpResponseForbidden()
|
return HttpResponseForbidden()
|
||||||
|
|
||||||
response = HttpResponse(content_type='application/pdf')
|
response = HttpResponse(content_type='application/pdf')
|
||||||
filename = "MS-HC-%s.pdf" % transaction.id.upper()
|
filename = "MS-HC-%s.pdf" % tx.id.upper()
|
||||||
response['Content-Disposition'] = 'attachment; filename="%s"' % filename
|
response['Content-Disposition'] = 'attachment; filename="%s"' % filename
|
||||||
PdfInvoice(response).render(transaction, sub.flattened_address())
|
PdfInvoice(response).render(tx, sub.flattened_address())
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
@ -46,14 +46,13 @@
|
|||||||
{% if sub is None or sub.plan_id == "" %}
|
{% if sub is None or sub.plan_id == "" %}
|
||||||
Free
|
Free
|
||||||
{% else %}
|
{% else %}
|
||||||
{% if sub.plan_id == "P5" or sub.plan_id == "Y48" %}
|
{% if sub.plan_id == "P5" or sub.plan_id == "Y48" or sub.plan_id == "T144" %}
|
||||||
Standard
|
Standard
|
||||||
{% endif %}
|
{% elif sub.plan_id == "P50" or sub.plan_id == "Y480" %}
|
||||||
{% if sub.plan_id == "P50" or sub.plan_id == "Y480" %}
|
|
||||||
Plus
|
Plus
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
(${{ sub.price }}/{{ sub.period }})
|
(${{ sub.price }} per {{ sub.period }})
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -241,6 +240,17 @@
|
|||||||
Annual, $48/year (20% off monthly)
|
Annual, $48/year (20% off monthly)
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
|
<label class="radio-container">
|
||||||
|
<input
|
||||||
|
type="radio"
|
||||||
|
name="plan_id"
|
||||||
|
value="T144"
|
||||||
|
{% if sub.plan_id == "T144" %} checked {% endif %}>
|
||||||
|
<span class="radiomark"></span>
|
||||||
|
3-year, $144 per 3 years (20% off monthly)
|
||||||
|
</label>
|
||||||
|
|
||||||
|
|
||||||
<h2>Plus <small>Unlimited checks, unlimited team members</small></h2>
|
<h2>Plus <small>Unlimited checks, unlimited team members</small></h2>
|
||||||
<label class="radio-container">
|
<label class="radio-container">
|
||||||
<input
|
<input
|
||||||
|
@ -16,12 +16,14 @@
|
|||||||
Your account is currently on the
|
Your account is currently on the
|
||||||
{% if sub.plan_id == "P5" %}
|
{% if sub.plan_id == "P5" %}
|
||||||
<strong>Standard (monthly)</strong>
|
<strong>Standard (monthly)</strong>
|
||||||
{% elif sub.plan_id == "P50" %}
|
|
||||||
<strong>Plus (monthly)</strong>
|
|
||||||
{% elif sub.plan_id == "Y48" %}
|
{% elif sub.plan_id == "Y48" %}
|
||||||
<strong>Standard (annual)</strong>
|
<strong>Standard (annual)</strong>
|
||||||
|
{% elif sub.plan_id == "T144" %}
|
||||||
|
<strong>Standard (3 years)</strong>
|
||||||
{% elif sub.plan_id == "Y480" %}
|
{% elif sub.plan_id == "Y480" %}
|
||||||
<strong>Plus (annual)</strong>
|
<strong>Plus (annual)</strong>
|
||||||
|
{% elif sub.plan_id == "P50" %}
|
||||||
|
<strong>Plus (monthly)</strong>
|
||||||
{% else %}
|
{% else %}
|
||||||
<strong>Free</strong>
|
<strong>Free</strong>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user