merge master
This commit is contained in:
commit
c60d45c292
24 changed files with 561 additions and 314 deletions
|
@ -1,6 +1,7 @@
|
||||||
Next release:
|
Next release:
|
||||||
* Bugfix: [dcl, hosting] Fix Stripe js error in confirm payment page
|
* Bugfix: [dcl, hosting] Fix Stripe js error in confirm payment page
|
||||||
* #3847: [ungleich] change text 'hosting products' -> 'our products'
|
* #3847: [ungleich] change text 'hosting products' -> 'our products'
|
||||||
|
* #3829: [dcl] Handle landing login fail in payment page itself
|
||||||
1.2.6: 2017-10-10
|
1.2.6: 2017-10-10
|
||||||
* Bugfix: [dcl] Refactor and optimize images, links in glasfaser page
|
* Bugfix: [dcl] Refactor and optimize images, links in glasfaser page
|
||||||
* Bugfix: [dcl] Fix email not being sent issue
|
* Bugfix: [dcl] Fix email not being sent issue
|
||||||
|
|
|
@ -126,56 +126,42 @@ msgstr ""
|
||||||
msgid "Thank you!"
|
msgid "Thank you!"
|
||||||
msgstr "Vielen Dank!"
|
msgstr "Vielen Dank!"
|
||||||
|
|
||||||
msgid "Account Activation"
|
msgid "Data Center Light Account Activation"
|
||||||
msgstr "Account Aktivierung"
|
msgstr "Data Center Light Account Aktivierung"
|
||||||
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"You can activate your Data Center Light account by clicking <a href="
|
||||||
"You can activate your Data Center Light account by <a href=\"%(base_url)s"
|
"\"%(base_url)s%(activation_link)s\" style=\"text-decoration: none; color: "
|
||||||
"%(activation_link)s\">clicking here</a>.<br/>\n"
|
"#4382c8; font-weight: 400;\">here</a>."
|
||||||
|
msgstr ""
|
||||||
|
"Klicke <a href=\"%(base_url)s%(activation_link)s\"style=\"text-decoration: "
|
||||||
|
"none; color: #4382c8; font-weight: 400;\">here</a> um deinen Data Center "
|
||||||
|
"Light Account zu aktivieren."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
"You can also copy and paste the following link into the address bar of your "
|
"You can also copy and paste the following link into the address bar of your "
|
||||||
"browser<br/>\n"
|
"browser to activate your Data Center Light account."
|
||||||
"to activate your Data Center Light account.<br/>\n"
|
msgstr "Kopiere den folgenden Link in die Adressleiste deines Browsers."
|
||||||
"%(base_url)s%(activation_link)s\n"
|
|
||||||
msgstr ""
|
|
||||||
"\n"
|
|
||||||
"<a href=\"%(base_url)s%(activation_link)s\">Klicke hier</a> um deinen Data "
|
|
||||||
"Center Light Account zu aktivieren oder kopiere den folgenden Link in die "
|
|
||||||
"Adressleiste deines Browsers.<br/>\n"
|
|
||||||
"%(base_url)s%(activation_link)s\n"
|
|
||||||
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your account details are as follows:<br/><br/>\n"
|
"You can copy and paste the following link into the address bar of your "
|
||||||
"Username : Your email address<br/>\n"
|
"browser to activate your Data Center Light account."
|
||||||
"Password : %(account_details)s<br/><br/>\n"
|
msgstr "Kopiere den folgenden Link in die Adressleiste deines Browsers."
|
||||||
"You can reset your password here:\n"
|
|
||||||
"%(base_url)s%(reset_password_url)s\n"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#, python-format
|
msgid "Welcome to Data Center Light!"
|
||||||
msgid ""
|
msgstr "Willkommen beim Data Center Light!"
|
||||||
"You can activate your Data Center Light account by clicking here.\n"
|
|
||||||
"You can also copy and paste the following link into the address bar of your "
|
|
||||||
"browser\n"
|
|
||||||
"to activate your Data Center Light account.\n"
|
|
||||||
"%(base_url)s%(activation_link)s\n"
|
|
||||||
msgstr ""
|
|
||||||
"Klicke hier, um deinen Data Center Light Account zu aktivieren oder kopiere "
|
|
||||||
"den folgenden Link in die Adressleiste deines Browsers.\n"
|
|
||||||
"%(base_url)s%(activation_link)s\n"
|
|
||||||
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your account details are as follows:\n"
|
"Thanks for joining us! We provide the most affordable virtual machines from "
|
||||||
"\n"
|
"the heart of Switzerland."
|
||||||
"Username : Your email address\n"
|
msgstr "Bei uns findest Du die günstiges VMs aus der Schweiz."
|
||||||
"Password : %(account_details)s\n"
|
|
||||||
"\n"
|
msgid "Try now, order a VM. VM price starts from only 15CHF per month."
|
||||||
"You can reset your password here:\n"
|
msgstr "Unser Angebot beginnt bei 15 CHF pro Monat. Probier's jetzt aus!"
|
||||||
"%(base_url)s%(reset_password_url)s\n"
|
|
||||||
msgstr ""
|
msgid "ORDER VM"
|
||||||
|
msgstr "VM BESTELLEN"
|
||||||
|
|
||||||
msgid "Home"
|
msgid "Home"
|
||||||
msgstr "Home"
|
msgstr "Home"
|
||||||
|
@ -512,6 +498,15 @@ msgstr ""
|
||||||
"Deine VM ist gleich bereit. Wir senden Dir eine Bestätigungsemail, sobald Du "
|
"Deine VM ist gleich bereit. Wir senden Dir eine Bestätigungsemail, sobald Du "
|
||||||
"auf sie zugreifen kannst."
|
"auf sie zugreifen kannst."
|
||||||
|
|
||||||
|
#~ msgid "Processing..."
|
||||||
|
#~ msgstr "Abarbeitung..."
|
||||||
|
|
||||||
|
#~ msgid "Hold tight, we are processing your request"
|
||||||
|
#~ msgstr "Bitte warten - wir verbeiten Deine Anfrage gerade"
|
||||||
|
|
||||||
|
#~ msgid "Some problem encountered. Please try again later."
|
||||||
|
#~ msgstr "Ein Problem ist aufgetreten. Bitte versuche es später noch einmal."
|
||||||
|
|
||||||
#~ msgid "Submit"
|
#~ msgid "Submit"
|
||||||
#~ msgstr "Absenden"
|
#~ msgstr "Absenden"
|
||||||
|
|
||||||
|
@ -530,15 +525,6 @@ msgstr ""
|
||||||
#~ msgid "Order summary"
|
#~ msgid "Order summary"
|
||||||
#~ msgstr "Bestellungsübersicht"
|
#~ msgstr "Bestellungsübersicht"
|
||||||
|
|
||||||
#~ msgid "Processing..."
|
|
||||||
#~ msgstr "Abarbeitung..."
|
|
||||||
|
|
||||||
#~ msgid "Hold tight, we are processing your request"
|
|
||||||
#~ msgstr "Bitte warten - wir verbeiten Deine Anfrage gerade"
|
|
||||||
|
|
||||||
#~ msgid "Some problem encountered. Please try again later."
|
|
||||||
#~ msgstr "Ein Problem ist aufgetreten. Bitte versuche es später noch einmal."
|
|
||||||
|
|
||||||
#~ msgid "We are cutting down the costs significantly!"
|
#~ msgid "We are cutting down the costs significantly!"
|
||||||
#~ msgstr "Wir sorgen dafür, dass die Kosten für Dich signifikant abnehmen"
|
#~ msgstr "Wir sorgen dafür, dass die Kosten für Dich signifikant abnehmen"
|
||||||
|
|
||||||
|
|
BIN
datacenterlight/static/datacenterlight/img/logo_black.png
Normal file
BIN
datacenterlight/static/datacenterlight/img/logo_black.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.3 KiB |
|
@ -5,6 +5,7 @@ from celery.utils.log import get_task_logger
|
||||||
from celery import current_task
|
from celery import current_task
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.mail import EmailMessage
|
from django.core.mail import EmailMessage
|
||||||
|
from django.core.urlresolvers import reverse
|
||||||
from django.utils import translation
|
from django.utils import translation
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
@ -131,9 +132,9 @@ def create_vm_task(self, vm_template_id, user, specs, template,
|
||||||
'storage': specs.get('disk_size'),
|
'storage': specs.get('disk_size'),
|
||||||
'price': specs.get('price'),
|
'price': specs.get('price'),
|
||||||
'template': template.get('name'),
|
'template': template.get('name'),
|
||||||
'vm.name': vm['name'],
|
'vm_name': vm.get('name'),
|
||||||
'vm.id': vm['vm_id'],
|
'vm_id': vm['vm_id'],
|
||||||
'order.id': order.id
|
'order_id': order.id
|
||||||
}
|
}
|
||||||
email_data = {
|
email_data = {
|
||||||
'subject': settings.DCL_TEXT + " Order from %s" % context['email'],
|
'subject': settings.DCL_TEXT + " Order from %s" % context['email'],
|
||||||
|
@ -155,13 +156,14 @@ def create_vm_task(self, vm_template_id, user, specs, template,
|
||||||
translation.activate(lang)
|
translation.activate(lang)
|
||||||
# Send notification to the user as soon as VM has been booked
|
# Send notification to the user as soon as VM has been booked
|
||||||
context = {
|
context = {
|
||||||
'vm': vm,
|
|
||||||
'order': order,
|
|
||||||
'base_url': "{0}://{1}".format(user.get('request_scheme'),
|
'base_url': "{0}://{1}".format(user.get('request_scheme'),
|
||||||
user.get('request_host')),
|
user.get('request_host')),
|
||||||
|
'order_url': reverse('hosting:orders',
|
||||||
|
kwargs={'pk': order.id}),
|
||||||
'page_header': _(
|
'page_header': _(
|
||||||
'Your New VM %(vm_name)s at Data Center Light') % {
|
'Your New VM %(vm_name)s at Data Center Light') % {
|
||||||
'vm_name': vm.get('name')}
|
'vm_name': vm.get('name')},
|
||||||
|
'vm_name': vm.get('name')
|
||||||
}
|
}
|
||||||
email_data = {
|
email_data = {
|
||||||
'subject': context.get('page_header'),
|
'subject': context.get('page_header'),
|
||||||
|
|
|
@ -1,24 +1,46 @@
|
||||||
{% extends "datacenterlight/emails/base_email_datacenterlight.html" %}
|
{% load static i18n %}
|
||||||
{% load static from staticfiles %}
|
<!DOCTYPE html>
|
||||||
{% load i18n %}
|
<html>
|
||||||
{% block email_head %}
|
|
||||||
{{dcl_text}} {% trans 'Account Activation' %}
|
<head>
|
||||||
{% endblock %}
|
<meta charset="UTF-8">
|
||||||
{% block email_body %}
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
{% blocktrans %}
|
<title>{% trans "Data Center Light Account Activation" %}</title>
|
||||||
You can activate your Data Center Light account by <a href="{{base_url}}{{activation_link}}">clicking here</a>.<br/>
|
<link rel="shortcut icon" href="{{ base_url }}{% static 'datacenterlight/img/favicon.ico' %}" type="image/x-icon">
|
||||||
You can also copy and paste the following link into the address bar of your browser<br/>
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:300,400">
|
||||||
to activate your Data Center Light account.<br/>
|
</head>
|
||||||
{{base_url}}{{activation_link}}
|
|
||||||
{% endblocktrans %}
|
<body style="margin: 0; padding: 20px 0;">
|
||||||
{% if account_details %}
|
<table style="width: 100%; border-spacing: 0; border-collapse: collapse; max-width: 560px;">
|
||||||
{% url 'hosting:reset_password' as reset_password_url %}
|
<tr>
|
||||||
<br/><br/>
|
<td>
|
||||||
{% blocktrans %}Your account details are as follows:<br/><br/>
|
<img src="{{ base_url }}{% static 'datacenterlight/img/logo_black.png' %}" style="width: 200px; height: 50px;">
|
||||||
Username : Your email address<br/>
|
</td>
|
||||||
Password : {{account_details}}<br/><br/>
|
</tr>
|
||||||
You can reset your password here:
|
<tr>
|
||||||
{{base_url}}{{reset_password_url}}
|
<td style="padding-top: 15px;">
|
||||||
{% endblocktrans %}
|
<h1 style="font-family: Lato, Arial, sans-serif; font-size: 25px; font-weight: 400; margin: 0;">{% trans "Data Center Light Account Activation" %}</h1>
|
||||||
{% endif %}
|
</td>
|
||||||
{% endblock %}
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="padding-top: 25px; font-size: 16px;">
|
||||||
|
<p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin-bottom: 10px; margin-top: 0;">
|
||||||
|
{% blocktrans %}You can activate your Data Center Light account by clicking <a href="{{base_url}}{{activation_link}}" style="text-decoration: none; color: #4382c8; font-weight: 400;">here</a>.{% endblocktrans %}
|
||||||
|
</p>
|
||||||
|
<p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin-bottom: 10px; margin-top: 0;">
|
||||||
|
{% blocktrans %}You can also copy and paste the following link into the address bar of your browser to activate your Data Center Light account.{% endblocktrans %}
|
||||||
|
</p>
|
||||||
|
<p style="color: #4382c8; line-height: 1.4; font-family: Lato, Arial, sans-serif; font-weight: 300; margin: 0;">
|
||||||
|
{{base_url}}{{activation_link}}
|
||||||
|
</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="padding-top: 40px; padding-bottom: 25px;">
|
||||||
|
<h3 style="font-family: Lato, Arial, sans-serif; margin: 0; font-weight: 400; font-size: 15px;">{% trans "Your Data Center Light Team" %}</h3>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
|
@ -1,21 +1,9 @@
|
||||||
{% extends "datacenterlight/emails/base_email_datacenterlight.txt" %}
|
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% block email_head %}{{dcl_text}} {% trans 'Account Activation' %}{% endblock %}
|
|
||||||
{% block email_body %}
|
{% trans "Data Center Light Account Activation" %}
|
||||||
{% blocktrans %}You can activate your Data Center Light account by clicking here.
|
|
||||||
You can also copy and paste the following link into the address bar of your browser
|
{% blocktrans %}You can copy and paste the following link into the address bar of your browser to activate your Data Center Light account.{% endblocktrans %}
|
||||||
to activate your Data Center Light account.
|
|
||||||
{{base_url}}{{activation_link}}
|
{{base_url}}{{activation_link}}
|
||||||
{% endblocktrans %}
|
|
||||||
{% if account_details %}
|
|
||||||
{% url 'hosting:reset_password' as reset_password_url %}
|
|
||||||
{% blocktrans %}Your account details are as follows:
|
|
||||||
|
|
||||||
Username : Your email address
|
{% trans "Your Data Center Light Team" %}
|
||||||
Password : {{account_details}}
|
|
||||||
|
|
||||||
You can reset your password here:
|
|
||||||
{{base_url}}{{reset_password_url}}
|
|
||||||
{% endblocktrans %}
|
|
||||||
{% endif %}
|
|
||||||
{% endblock %}
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
{% load static i18n %}
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>{% trans "Welcome to Data Center Light!" %}</title>
|
||||||
|
<link rel="shortcut icon" href="{{ base_url }}{% static 'datacenterlight/img/favicon.ico' %}" type="image/x-icon">
|
||||||
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:300,400">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body style="margin: 0; padding: 20px 0;">
|
||||||
|
<table style="width: 100%; border-spacing: 0; border-collapse: collapse; max-width: 560px;">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img src="{{ base_url }}{% static 'datacenterlight/img/logo_black.png' %}" style="width: 200px; height: 50px;">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="padding-top: 15px;">
|
||||||
|
<h1 style="font-family: Lato, Arial, sans-serif; font-size: 25px; font-weight: 400; margin: 0;">{% trans "Welcome to Data Center Light!" %}</h1>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="padding-top: 25px; font-size: 16px;">
|
||||||
|
<p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin: 0;">
|
||||||
|
{% blocktrans %}Thanks for joining us! We provide the most affordable virtual machines from the heart of Switzerland.{% endblocktrans %}
|
||||||
|
</p>
|
||||||
|
<p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin: 0;">
|
||||||
|
{% blocktrans %}Try now, order a VM. VM price starts from only 15CHF per month.{% endblocktrans %}
|
||||||
|
</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="padding-top: 30px;">
|
||||||
|
<a class="btn" href="{{ base_url }}{% url 'hosting:create_virtual_machine' %}" style="font-family: Lato, Arial, sans-serif; text-decoration: none; background-color: #1596da; color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 30px; padding-right: 30px; letter-spacing: 0.5px; border-radius: 3px; display: inline-block;">{% trans "ORDER VM" %}</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="padding-top: 40px; padding-bottom: 25px;">
|
||||||
|
<h3 style="font-family: Lato, Arial, sans-serif; margin: 0; font-weight: 400; font-size: 15px;">{% trans "Your Data Center Light Team" %}</h3>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,10 @@
|
||||||
|
{% load i18n %}
|
||||||
|
|
||||||
|
{% trans "Welcome to Data Center Light!" %}
|
||||||
|
|
||||||
|
{% blocktrans %}Thanks for joining us! We provide the most affordable virtual machines from the heart of Switzerland.{% endblocktrans %}
|
||||||
|
{% blocktrans %}Try now, order a VM. VM price starts from only 15CHF per month.{% endblocktrans %}
|
||||||
|
|
||||||
|
{{ base_url }}{% url 'hosting:create_virtual_machine' %}
|
||||||
|
|
||||||
|
{% trans "Your Data Center Light Team" %}
|
|
@ -25,14 +25,15 @@
|
||||||
<h3>{%trans "Log in" %}</h3>
|
<h3>{%trans "Log in" %}</h3>
|
||||||
<hr class="top-hr">
|
<hr class="top-hr">
|
||||||
<p style="margin-bottom: 20px;">{% blocktrans %}Already signed up?<br>By logging in you can retrieve saved billing information.{% endblocktrans %}</p>
|
<p style="margin-bottom: 20px;">{% blocktrans %}Already signed up?<br>By logging in you can retrieve saved billing information.{% endblocktrans %}</p>
|
||||||
<form role="form" id="login-form" method="post" action="{% url 'hosting:login' %}" novalidate>
|
<form role="form" id="login-form" method="post" action="" novalidate>
|
||||||
{% for field in login_form %}
|
{% for field in login_form %}
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% bootstrap_field field show_label=False type='fields'%}
|
{% bootstrap_field field show_label=False type='fields'%}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
<p class="text-danger">{{login_form.non_field_errors|striptags}}</p>
|
||||||
<input type='hidden' name='next' value='{{request.path}}'/>
|
<input type='hidden' name='next' value='{{request.path}}'/>
|
||||||
<div class="form-group text-right">
|
<div class="form-group text-right">
|
||||||
<button type="submit" class="btn btn-wide btn-vm-contact">{% trans "LOGIN" %}</button>
|
<button type="submit" class="btn btn-wide btn-vm-contact" name="login_form">{% trans "LOGIN" %}</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<p>
|
<p>
|
||||||
|
@ -58,7 +59,7 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<form role="form" id="billing-form" method="post" action="" novalidate>
|
<form role="form" id="billing-form" method="post" action="" novalidate>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% for field in form %}
|
{% for field in billing_address_form %}
|
||||||
{% bootstrap_field field show_label=False type='fields'%}
|
{% bootstrap_field field show_label=False type='fields'%}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</form>
|
</form>
|
||||||
|
@ -153,22 +154,12 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div id='payment_error'>
|
<div id='payment_error'>
|
||||||
{% for message in messages %}
|
{% for message in messages %}
|
||||||
{% if 'failed_payment' in message.tags or 'make_charge_error' in message.tags %}
|
{% if 'failed_payment' in message.tags or 'make_charge_error' in message.tags or 'error' in message.tags %}
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
<li><p class="card-warning-content card-warning-error">{{ message|safe }}</p></li>
|
<li><p class="card-warning-content card-warning-error">{{ message|safe }}</p></li>
|
||||||
</ul>
|
</ul>
|
||||||
{% elif not form.non_field_errors %}
|
|
||||||
<p class="card-warning-content">
|
|
||||||
{% trans "You are not making any payment yet. After placing your order, you will be taken to the Submit Payment Page." %}
|
|
||||||
</p>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% for error in form.non_field_errors %}
|
|
||||||
<p class="card-warning-content card-warning-error">
|
|
||||||
{{ error|escape }}
|
|
||||||
</p>
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
</div>
|
||||||
<div class="text-right">
|
<div class="text-right">
|
||||||
<button class="btn btn-vm-contact btn-wide" type="submit">{%trans "SUBMIT" %}</button>
|
<button class="btn btn-vm-contact btn-wide" type="submit">{%trans "SUBMIT" %}</button>
|
||||||
|
|
|
@ -345,26 +345,45 @@ class PaymentOrderView(FormView):
|
||||||
else:
|
else:
|
||||||
return BillingAddressFormSignup
|
return BillingAddressFormSignup
|
||||||
|
|
||||||
def get_form_kwargs(self):
|
|
||||||
form_kwargs = super(PaymentOrderView, self).get_form_kwargs()
|
|
||||||
# if user is signed in, get billing address
|
|
||||||
if self.request.user.is_authenticated():
|
|
||||||
form_kwargs.update({
|
|
||||||
'instance': self.request.user.billing_addresses.first()
|
|
||||||
})
|
|
||||||
if 'billing_address_data' in self.request.session:
|
|
||||||
billing_address_data = self.request.session['billing_address_data']
|
|
||||||
form_kwargs.update({
|
|
||||||
'initial': billing_address_data
|
|
||||||
})
|
|
||||||
return form_kwargs
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(PaymentOrderView, self).get_context_data(**kwargs)
|
context = super(PaymentOrderView, self).get_context_data(**kwargs)
|
||||||
|
if 'billing_address_data' in self.request.session:
|
||||||
|
billing_address_data = self.request.session['billing_address_data']
|
||||||
|
else:
|
||||||
|
billing_address_data = {}
|
||||||
|
|
||||||
|
if self.request.user.is_authenticated():
|
||||||
|
if billing_address_data:
|
||||||
|
billing_address_form = BillingAddressForm(
|
||||||
|
initial=billing_address_data
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
billing_address_form = BillingAddressForm(
|
||||||
|
instance=self.request.user.billing_addresses.first()
|
||||||
|
)
|
||||||
|
# Get user last order
|
||||||
|
last_hosting_order = HostingOrder.objects.filter(
|
||||||
|
customer__user=self.request.user
|
||||||
|
).last()
|
||||||
|
|
||||||
|
# If user has already an hosting order, get the credit card
|
||||||
|
# data from it
|
||||||
|
if last_hosting_order:
|
||||||
|
credit_card_data = last_hosting_order.get_cc_data()
|
||||||
|
if credit_card_data:
|
||||||
|
context['credit_card_data'] = credit_card_data
|
||||||
|
else:
|
||||||
|
context['credit_card_data'] = None
|
||||||
|
else:
|
||||||
|
billing_address_form = BillingAddressFormSignup(
|
||||||
|
initial=billing_address_data
|
||||||
|
)
|
||||||
|
|
||||||
context.update({
|
context.update({
|
||||||
'stripe_key': settings.STRIPE_API_PUBLIC_KEY,
|
'stripe_key': settings.STRIPE_API_PUBLIC_KEY,
|
||||||
'site_url': reverse('datacenterlight:index'),
|
'site_url': reverse('datacenterlight:index'),
|
||||||
'login_form': HostingUserLoginForm()
|
'login_form': HostingUserLoginForm(prefix='login_form'),
|
||||||
|
'billing_address_form': billing_address_form
|
||||||
})
|
})
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@ -376,9 +395,32 @@ class PaymentOrderView(FormView):
|
||||||
return self.render_to_response(self.get_context_data())
|
return self.render_to_response(self.get_context_data())
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
form = self.get_form()
|
if 'login_form' in request.POST:
|
||||||
if form.is_valid():
|
login_form = HostingUserLoginForm(data=request.POST,
|
||||||
token = form.cleaned_data.get('token')
|
prefix='login_form')
|
||||||
|
if login_form.is_valid():
|
||||||
|
email = login_form.cleaned_data.get('email')
|
||||||
|
password = login_form.cleaned_data.get('password')
|
||||||
|
auth_user = authenticate(email=email, password=password)
|
||||||
|
if auth_user:
|
||||||
|
login(self.request, auth_user)
|
||||||
|
return HttpResponseRedirect(
|
||||||
|
reverse('datacenterlight:payment')
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
context = self.get_context_data()
|
||||||
|
context['login_form'] = login_form
|
||||||
|
return self.render_to_response(context)
|
||||||
|
if request.user.is_authenticated():
|
||||||
|
address_form = BillingAddressForm(
|
||||||
|
data=request.POST,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
address_form = BillingAddressFormSignup(
|
||||||
|
data=request.POST,
|
||||||
|
)
|
||||||
|
if address_form.is_valid():
|
||||||
|
token = address_form.cleaned_data.get('token')
|
||||||
if request.user.is_authenticated():
|
if request.user.is_authenticated():
|
||||||
this_user = {
|
this_user = {
|
||||||
'email': request.user.email,
|
'email': request.user.email,
|
||||||
|
@ -388,8 +430,8 @@ class PaymentOrderView(FormView):
|
||||||
email=this_user.get('email'),
|
email=this_user.get('email'),
|
||||||
token=token)
|
token=token)
|
||||||
else:
|
else:
|
||||||
user_email = form.cleaned_data.get('email')
|
user_email = address_form.cleaned_data.get('email')
|
||||||
user_name = form.cleaned_data.get('name')
|
user_name = address_form.cleaned_data.get('name')
|
||||||
this_user = {
|
this_user = {
|
||||||
'email': user_email,
|
'email': user_email,
|
||||||
'name': user_name
|
'name': user_name
|
||||||
|
@ -422,13 +464,18 @@ class PaymentOrderView(FormView):
|
||||||
token=token,
|
token=token,
|
||||||
customer_name=user_name)
|
customer_name=user_name)
|
||||||
|
|
||||||
request.session['billing_address_data'] = form.cleaned_data
|
request.session['billing_address_data'] = address_form.cleaned_data
|
||||||
request.session['user'] = this_user
|
request.session['user'] = this_user
|
||||||
# Get or create stripe customer
|
# Get or create stripe customer
|
||||||
if not customer:
|
if not customer:
|
||||||
form.add_error("__all__", "Invalid credit card")
|
address_form.add_error(
|
||||||
|
"__all__", "Invalid credit card"
|
||||||
|
)
|
||||||
return self.render_to_response(
|
return self.render_to_response(
|
||||||
self.get_context_data(form=form))
|
self.get_context_data(
|
||||||
|
billing_address_form=address_form
|
||||||
|
)
|
||||||
|
)
|
||||||
request.session['token'] = token
|
request.session['token'] = token
|
||||||
if type(customer) is StripeCustomer:
|
if type(customer) is StripeCustomer:
|
||||||
request.session['customer'] = customer.stripe_id
|
request.session['customer'] = customer.stripe_id
|
||||||
|
@ -437,7 +484,9 @@ class PaymentOrderView(FormView):
|
||||||
return HttpResponseRedirect(
|
return HttpResponseRedirect(
|
||||||
reverse('datacenterlight:order_confirmation'))
|
reverse('datacenterlight:order_confirmation'))
|
||||||
else:
|
else:
|
||||||
return self.form_invalid(form)
|
context = self.get_context_data()
|
||||||
|
context['billing_address_form'] = address_form
|
||||||
|
return self.render_to_response(context)
|
||||||
|
|
||||||
|
|
||||||
class OrderConfirmationView(DetailView):
|
class OrderConfirmationView(DetailView):
|
||||||
|
@ -548,9 +597,13 @@ class OrderConfirmationView(DetailView):
|
||||||
try:
|
try:
|
||||||
custom_user = CustomUser.objects.get(
|
custom_user = CustomUser.objects.get(
|
||||||
email=user.get('email'))
|
email=user.get('email'))
|
||||||
customer = StripeCustomer.objects.filter(
|
stripe_customer = StripeCustomer.objects.filter(
|
||||||
user_id=custom_user.id).first()
|
user_id=custom_user.id).first()
|
||||||
stripe_customer_id = customer.id
|
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:
|
except CustomUser.DoesNotExist:
|
||||||
logger.debug(
|
logger.debug(
|
||||||
"Customer {} does not exist.".format(user.get('email')))
|
"Customer {} does not exist.".format(user.get('email')))
|
||||||
|
|
|
@ -29,6 +29,8 @@ class HostingUserLoginForm(forms.Form):
|
||||||
def clean(self):
|
def clean(self):
|
||||||
email = self.cleaned_data.get('email')
|
email = self.cleaned_data.get('email')
|
||||||
password = self.cleaned_data.get('password')
|
password = self.cleaned_data.get('password')
|
||||||
|
if self.errors:
|
||||||
|
return self.cleaned_data
|
||||||
is_auth = authenticate(email=email, password=password)
|
is_auth = authenticate(email=email, password=password)
|
||||||
if not is_auth:
|
if not is_auth:
|
||||||
raise forms.ValidationError(
|
raise forms.ValidationError(
|
||||||
|
|
|
@ -192,101 +192,78 @@ msgid "Support / Contact"
|
||||||
msgstr "Support / Kontakt"
|
msgstr "Support / Kontakt"
|
||||||
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid "Your New VM %(vm_name)s"
|
||||||
"You have ordered a new virtual machine!\n"
|
msgstr "Deine Neue VM %(vm_name)s"
|
||||||
"<br/>\n"
|
|
||||||
"Your order of [%(vm_name)s] has been charged.<br/><br/>\n"
|
|
||||||
"You can view your invoice by clicking the button below.<br/><br/>\n"
|
|
||||||
msgstr ""
|
|
||||||
"Du hast eine neue virtuelle Maschine bestellt!<br/>\n"
|
|
||||||
"Deine Bestellung von [%(vm_name)s] wurde erhoben.<br/><br/>\n"
|
|
||||||
"Um die Rechnung zu sehen, klicke auf den Button unten.<br/><br/>\n"
|
|
||||||
|
|
||||||
msgid "View Invoice"
|
msgid "You have ordered a new virtual machine!"
|
||||||
msgstr "Zur Rechnung"
|
msgstr "Du hast eine neue virtuelle Maschine bestellt!"
|
||||||
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid "Your order of [ <strong>%(vm_name)s</strong> ] has been charged."
|
||||||
"You have ordered a new virtual machine!\n"
|
msgstr "Deine Bestellung von [ <strong>%(vm_name)s</strong> ] wurde erhoben."
|
||||||
"Your order of [%(vm_name)s] has been charged.\n"
|
|
||||||
"You can view your invoice here.\n"
|
msgid "You can view your VM detail by clicking the button below."
|
||||||
msgstr ""
|
msgstr "Um die Rechnung zu sehen, klicke auf den Button unten."
|
||||||
"Du hast eine neue virtuelle Maschine bestellt!\n"
|
|
||||||
"Deine Bestellung von [%(vm_name)s] wurde erhoben.\n"
|
msgid "View Detail"
|
||||||
"Um die Rechnung zu sehen, klicke hier.\n"
|
msgstr "Details anzeigen"
|
||||||
|
|
||||||
|
msgid "Your Data Center Light Team"
|
||||||
|
msgstr "Dein Data Center Light Team"
|
||||||
|
|
||||||
|
#, python-format
|
||||||
|
msgid "Your order of [%(vm_name)s] has been charged."
|
||||||
|
msgstr "Deine Bestellung von [%(vm_name)s] wurde erhoben."
|
||||||
|
|
||||||
|
msgid "You can view your VM detail by following the link below."
|
||||||
|
msgstr "Um die Rechnung zu sehen, klicke auf den Link unten."
|
||||||
|
|
||||||
msgid "Password Reset"
|
msgid "Password Reset"
|
||||||
msgstr "Passwort zurücksetzen"
|
msgstr "Passwort zurücksetzen"
|
||||||
|
|
||||||
#, python-format
|
msgid "We received a request to reset your password."
|
||||||
msgid ""
|
msgstr "Wir haben eine Anfrage erhalten, um Dein Passwort zurückzusetzen."
|
||||||
"\n"
|
|
||||||
"You're receiving this email because you requested a password reset for your "
|
msgid "If you didn't make this request you can safely ignore this email."
|
||||||
"user account at %(site_name)s.<br/>\n"
|
|
||||||
"Please go to the following page and choose a new password: %(base_url)s"
|
|
||||||
"%(password_reset_url)s<br/>\n"
|
|
||||||
"If you didn't request a new password, ignore this e-mail.<br/>\n"
|
|
||||||
"Thank you!\n"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\n"
|
"Falls Du kein neues Passwort angefragt hast, kannst Du diese E-mail "
|
||||||
"Du erhälst diese E-Mail da Du Dein Passwort für Deinen Account bei "
|
"ignorieren."
|
||||||
"%(site_name)s zurücksetzen möchtest.<br/>\n"
|
|
||||||
"Bitte folge diesem Link und wähle ein neues Passwort: %(base_url)s"
|
msgid "Otherwise, click here to reset your password."
|
||||||
"%(password_reset_url)s Solltest Du kein neues Passwort angefordert haben, "
|
msgstr "Andernfalls klicke hier, um Dein Passwort zurückzusetzen."
|
||||||
"dann ignoriere diese E-Mail.<br/>\n"
|
|
||||||
"Dankeschön!\n"
|
msgid "Thank you!"
|
||||||
|
msgstr "Dankeschön!"
|
||||||
|
|
||||||
|
msgid "Virtual Machine Cancellation"
|
||||||
|
msgstr "VM Kündigung"
|
||||||
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"You're receiving this email because you requested a password reset for your "
|
"You are receiving this email because your virutal machine [ <strong>"
|
||||||
"user account at %(site_name)s.\n"
|
"%(vm_name)s</strong> ] has been cancelled."
|
||||||
"Please go to the following page and choose a new password: %(base_url)s"
|
|
||||||
"%(password_reset_url)s\n"
|
|
||||||
"If you didn't request a new password, ignore this e-mail.\n"
|
|
||||||
"Thank you!\n"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Du erhälst diese E-Mail da Du Dein Passwort für Deinen Account bei "
|
"Du erhälst diese E-Mail, da deine virtuelle Maschine [ <strong>%(vm_name)s</"
|
||||||
"%(site_name)s zurücksetzen möchtest.\n"
|
"strong> ] gekündigt wurde."
|
||||||
"Bitte folge diesem Link und wähle ein neues Passwort: %(base_url)s"
|
|
||||||
"%(password_reset_url)s Solltest Du kein neues Passwort angefordert haben, "
|
msgid "You can always order a new VM by clicking the button below."
|
||||||
"dann ignoriere diese E-Mail.\n"
|
msgstr ""
|
||||||
"Dankeschön!\n"
|
"Du kannst einfach eine neue VM bestellen, indem Du den Knopf weiter unten "
|
||||||
|
"drückst."
|
||||||
|
|
||||||
|
msgid "CREATE VM"
|
||||||
|
msgstr "NEUE VM"
|
||||||
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"You're receiving this mail because your virtual machine [%(vm_name)s] has "
|
"You are receiving this email because your virutal machine [%(vm_name)s] has "
|
||||||
"been cancelled.<br/>\n"
|
"been cancelled."
|
||||||
"You can see your order status by clicking [my VM page] below.<br/>\n"
|
|
||||||
"If you want to order a new virtual machine, you can do it by clicking <a "
|
|
||||||
"href=\"%(base_url)s%(my_virtual_machines_url)s\">this link</a>.<br/>\n"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Du erhälst diese E-Mail, Da Deine virtuelle Maschine [%(vm_name)s] gekündigt "
|
"Du erhälst diese E-Mail, da deine virtuelle Maschine [%(vm_name)s] gekündigt "
|
||||||
"wurde.<br/>\n"
|
"wurde."
|
||||||
"Um Deinen Auftragsstatus zu sehen, klicke auf die [my VM page] unten.<br/>\n"
|
|
||||||
"Falls Du eine neue virtuelle Maschine bestellen möchtest, kannst Du dies "
|
|
||||||
"tun, indem Du <a href=\"%(base_url)s%(my_virtual_machines_url)s\">diesen "
|
|
||||||
"Link klickst</a>.<br/>\n"
|
|
||||||
|
|
||||||
msgid "My VM page"
|
msgid "You can always order a new VM by following the link below."
|
||||||
msgstr "Meine VM page"
|
|
||||||
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You're receiving this mail because your virtual machine [%(vm_name)s] has "
|
|
||||||
"been cancelled.\n"
|
|
||||||
"You can see your order status by clicking here\n"
|
|
||||||
"%(base_url)s%(vm_order_url)s\n"
|
|
||||||
"If you want to order a new virtual machine, you can do it by clicking this "
|
|
||||||
"link.\n"
|
|
||||||
"%(base_url)s%(my_virtual_machines_url)s\n"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Du erhälst diese E-Mail, da Deine virtuelle Maschine [%(vm_name)s] gekündigt "
|
|
||||||
"wurde.\n"
|
|
||||||
"Um Deinen Auftragsstatus zu sehen, klicke hier.\n"
|
|
||||||
"%(base_url)s%(vm_order_url)s\n"
|
|
||||||
"Falls Du eine neue virtuelle Maschine bestellen möchtest, kannst Du dies "
|
|
||||||
"tun, indem Du diesen Link klickst.\n"
|
|
||||||
"%(base_url)s%(my_virtual_machines_url)s\n"
|
|
||||||
|
|
||||||
msgid "Toggle navigation"
|
msgid "Toggle navigation"
|
||||||
msgstr "Umschalten"
|
msgstr "Umschalten"
|
||||||
|
@ -630,12 +607,6 @@ msgstr ""
|
||||||
"Um auf Deine VM zuzugreifen, <a href=\"%(create_ssh_url)s\">füge Deinen SSH-"
|
"Um auf Deine VM zuzugreifen, <a href=\"%(create_ssh_url)s\">füge Deinen SSH-"
|
||||||
"Key hinzu</a>"
|
"Key hinzu</a>"
|
||||||
|
|
||||||
msgid "CREATE VM"
|
|
||||||
msgstr "NEUE VM"
|
|
||||||
|
|
||||||
msgid "View Detail"
|
|
||||||
msgstr "Details anzeigen"
|
|
||||||
|
|
||||||
msgid "login"
|
msgid "login"
|
||||||
msgstr "anmelden"
|
msgstr "anmelden"
|
||||||
|
|
||||||
|
@ -660,6 +631,9 @@ msgstr "Dein Account wurde aktiviert."
|
||||||
msgid "You can now"
|
msgid "You can now"
|
||||||
msgstr "Du kannst dich nun"
|
msgstr "Du kannst dich nun"
|
||||||
|
|
||||||
|
msgid "Welcome to Data Center Light!"
|
||||||
|
msgstr "Willkommen beim Data Center Light!"
|
||||||
|
|
||||||
msgid "Sorry. Your request is invalid."
|
msgid "Sorry. Your request is invalid."
|
||||||
msgstr "Entschuldigung, deine Anfrage ist ungültig."
|
msgstr "Entschuldigung, deine Anfrage ist ungültig."
|
||||||
|
|
||||||
|
@ -730,8 +704,9 @@ msgstr ""
|
||||||
msgid "Error terminating VM"
|
msgid "Error terminating VM"
|
||||||
msgstr "Fehler beenden VM"
|
msgstr "Fehler beenden VM"
|
||||||
|
|
||||||
msgid "Virtual Machine Cancellation"
|
#, python-format
|
||||||
msgstr "VM Kündigung"
|
msgid "Virtual Machine %(vm_name)s Cancelled"
|
||||||
|
msgstr "Virtuelle Maschine %(vm_name)s Kündigung"
|
||||||
|
|
||||||
msgid "There was an error processing your request. Please try again."
|
msgid "There was an error processing your request. Please try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -741,6 +716,9 @@ msgstr ""
|
||||||
#~ msgid "Reset your password"
|
#~ msgid "Reset your password"
|
||||||
#~ msgstr "Passwort zurücksetzen"
|
#~ msgstr "Passwort zurücksetzen"
|
||||||
|
|
||||||
|
#~ msgid "My VM page"
|
||||||
|
#~ msgstr "Meine VM page"
|
||||||
|
|
||||||
#~ msgid "Invoice Date"
|
#~ msgid "Invoice Date"
|
||||||
#~ msgstr "Rechnung Datum"
|
#~ msgstr "Rechnung Datum"
|
||||||
|
|
||||||
|
@ -768,12 +746,27 @@ msgstr ""
|
||||||
#~ msgid "Start VM"
|
#~ msgid "Start VM"
|
||||||
#~ msgstr "VM jetzt starten"
|
#~ msgstr "VM jetzt starten"
|
||||||
|
|
||||||
|
#~ msgid "View Invoice"
|
||||||
|
#~ msgstr "Zur Rechnung"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "You're receiving this mail because your virtual machine [%(vm_name)s] has "
|
||||||
|
#~ "been cancelled.<br/>\n"
|
||||||
|
#~ "You can see your order status by clicking [my VM page] below.<br/>\n"
|
||||||
|
#~ "If you want to order a new virtual machine, you can do it by clicking <a "
|
||||||
|
#~ "href=\"%(base_url)s%(my_virtual_machines_url)s\">this link</a>.<br/>\n"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Du erhälst diese E-Mail, da deine virtuelle Maschine [%(vm_name)s] "
|
||||||
|
#~ "gekündigt wurde.<br/>\n"
|
||||||
|
#~ "Um deinen Auftragsstatus zu sehen, klicke auf die [my VM page] unten.<br/"
|
||||||
|
#~ ">\n"
|
||||||
|
#~ "Falls du eine neue virtuelle Maschine bestellen möchtest, kannst du dies "
|
||||||
|
#~ "tun, indem du <a href=\"%(base_url)s%(my_virtual_machines_url)s\">diesen "
|
||||||
|
#~ "Link klickst</a>.<br/>\n"
|
||||||
|
|
||||||
#~ msgid "Finish Configuration"
|
#~ msgid "Finish Configuration"
|
||||||
#~ msgstr "Konfiguration beenden"
|
#~ msgstr "Konfiguration beenden"
|
||||||
|
|
||||||
#~ msgid "Your New VM %(vm_name)s at Data Center Light"
|
|
||||||
#~ msgstr "Deine neue VM %(vm_name)s bei Data Center Light"
|
|
||||||
|
|
||||||
#~ msgid "My Virtual Machines"
|
#~ msgid "My Virtual Machines"
|
||||||
#~ msgstr "Meine virtuellen Maschinen"
|
#~ msgstr "Meine virtuellen Maschinen"
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
import os
|
import os
|
||||||
import logging
|
import logging
|
||||||
|
from dateutil.relativedelta import relativedelta
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.utils import timezone
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from Crypto.PublicKey import RSA
|
from Crypto.PublicKey import RSA
|
||||||
from membership.models import StripeCustomer, CustomUser
|
from membership.models import StripeCustomer, CustomUser
|
||||||
|
@ -172,3 +174,9 @@ class VMDetail(models.Model):
|
||||||
ipv6 = models.TextField(default='')
|
ipv6 = models.TextField(default='')
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
terminated_at = models.DateTimeField(null=True)
|
terminated_at = models.DateTimeField(null=True)
|
||||||
|
|
||||||
|
def end_date(self):
|
||||||
|
end_date = self.terminated_at if self.terminated_at else timezone.now()
|
||||||
|
months = relativedelta(end_date, self.created_at).months or 1
|
||||||
|
end_date = self.created_at + relativedelta(months=months, days=-1)
|
||||||
|
return end_date
|
||||||
|
|
|
@ -373,4 +373,12 @@
|
||||||
outline: none;
|
outline: none;
|
||||||
color: #999;
|
color: #999;
|
||||||
fill: #999;
|
fill: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.locale_date {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.locale_date.done{
|
||||||
|
opacity: 1;
|
||||||
}
|
}
|
|
@ -1,14 +1,51 @@
|
||||||
{% extends "datacenterlight/emails/base_email_datacenterlight.html" %}
|
{% load static i18n %}
|
||||||
{% load i18n %}
|
<!DOCTYPE html>
|
||||||
{% block email_head %}{{page_header}}{% endblock %}
|
<html>
|
||||||
{% block email_body %}
|
|
||||||
{% url 'hosting:orders' order.id as order_url %}
|
<head>
|
||||||
{% blocktrans with vm.name as vm_name %}You have ordered a new virtual machine!
|
<meta charset="UTF-8">
|
||||||
<br/>
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
Your order of [{{vm_name}}] has been charged.<br/><br/>
|
<title>{% blocktrans %}Your New VM {{vm_name}}{% endblocktrans %}</title>
|
||||||
You can view your invoice by clicking the button below.<br/><br/>
|
<link rel="shortcut icon" href="{{ base_url }}{% static 'datacenterlight/img/favicon.ico' %}" type="image/x-icon">
|
||||||
{% endblocktrans %}
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:300,400">
|
||||||
<div class="button" style="border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 30px 0;" align="center">
|
</head>
|
||||||
<a href="{{ base_url }}{{order_url}}" style="border-radius: 5px; color: #ffffff; display: inline-block; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: regular; line-height: 45px; text-align: center; text-decoration: none !important; width: 155px; -webkit-text-size-adjust: none; mso-hide: all; background: #ff6f6f;">{% trans 'View Invoice' %}</a>
|
|
||||||
</div>
|
<body style="margin: 0; padding: 20px 0;">
|
||||||
{% endblock %}
|
<table style="width: 100%; border-spacing: 0; border-collapse: collapse; max-width: 560px;">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img src="{{ base_url }}{% static 'datacenterlight/img/logo_black.png' %}" style="width: 200px; height: 50px;">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="padding-top: 15px;">
|
||||||
|
<h1 style="font-family: Lato, Arial, sans-serif; font-size: 25px; font-weight: 400; margin: 0;">{% blocktrans %}Your New VM {{ vm_name }}{% endblocktrans %}</h1>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="padding-top: 25px; font-size: 16px;">
|
||||||
|
<p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin: 0;">
|
||||||
|
{% blocktrans %}You have ordered a new virtual machine!{% endblocktrans %}
|
||||||
|
</p>
|
||||||
|
<p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin: 0;">
|
||||||
|
{% blocktrans %}Your order of <strong>{{ vm_name }}</strong> has been charged.{% endblocktrans %}
|
||||||
|
</p>
|
||||||
|
<p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin: 0;">
|
||||||
|
{% blocktrans %}You can view your VM detail by clicking the button below.{% endblocktrans %}
|
||||||
|
</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="padding-top: 30px;">
|
||||||
|
<a class="btn" href="{{ base_url }}{{ order_url }}" style="font-family: Lato, Arial, sans-serif; text-decoration: none; background-color: #1596da; color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 30px; padding-right: 30px; letter-spacing: 0.5px; border-radius: 3px; display: inline-block; position: relative;">{% trans "View Detail" %}</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="padding-top: 40px; padding-bottom: 25px;">
|
||||||
|
<h3 style="font-family: Lato, Arial, sans-serif; margin: 0; font-weight: 400; font-size: 15px;">{% trans "Your Data Center Light Team" %}</h3>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -1,11 +1,11 @@
|
||||||
{% extends "datacenterlight/emails/base_email_datacenterlight.txt" %}
|
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% block email_head %}{{page_header}}{% endblock %}
|
|
||||||
{% block email_body %}
|
{% blocktrans %}Your New VM {{vm_name}}{% endblocktrans %}
|
||||||
{% url 'hosting:orders' order.id as order_url %}
|
|
||||||
{% blocktrans with vm.name as vm_name %}You have ordered a new virtual machine!
|
{% blocktrans %}You have ordered a new virtual machine!{% endblocktrans %}
|
||||||
Your order of [{{vm_name}}] has been charged.
|
{% blocktrans %}Your order of {{vm_name}} has been charged.{% endblocktrans %}
|
||||||
You can view your invoice here.
|
{% blocktrans %}You can view your VM detail by following the link below.{% endblocktrans %}
|
||||||
{% endblocktrans %}
|
|
||||||
{{ base_url }}{{order_url}}
|
{{ base_url }}{{ order_url }}
|
||||||
{% endblock %}
|
|
||||||
|
{% trans "Your Data Center Light Team" %}
|
|
@ -1,14 +1,52 @@
|
||||||
{% extends "datacenterlight/emails/base_email_datacenterlight.html" %}
|
{% load static i18n %}
|
||||||
{% load i18n %}
|
<!DOCTYPE html>
|
||||||
{% block email_head %}
|
<html>
|
||||||
{% trans 'Password Reset' %}
|
|
||||||
{% endblock %}
|
<head>
|
||||||
{% block email_body %}
|
<meta charset="UTF-8">
|
||||||
{% url 'hosting:reset_password_confirm' uidb64=uid token=token as password_reset_url %}
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
{% blocktrans %}
|
<title>{% trans "Password Reset" %}</title>
|
||||||
You're receiving this email because you requested a password reset for your user account at {{site_name}}.<br/>
|
<link rel="shortcut icon" href="{{ base_url }}{% static 'datacenterlight/img/favicon.ico' %}" type="image/x-icon">
|
||||||
Please go to the following page and choose a new password: {{base_url}}{{ password_reset_url }}<br/>
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:300,400">
|
||||||
If you didn't request a new password, ignore this e-mail.<br/>
|
</head>
|
||||||
Thank you!
|
|
||||||
{% endblocktrans %}
|
<body style="margin: 0; padding: 20px 0;">
|
||||||
{% endblock %}
|
<table style="width: 100%; border-spacing: 0; border-collapse: collapse; max-width: 560px;">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img src="{{base_url}}{% static 'datacenterlight/img/logo_black.png' %}" style="width: 200px; height: 50px;">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="padding-top: 15px;">
|
||||||
|
<h1 style="font-family: Lato, Arial, sans-serif; font-size: 25px; font-weight: 400; margin: 0;">{% trans "Password Reset" %}</h1>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="padding-top: 25px; font-size: 16px;">
|
||||||
|
<p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin-bottom: 10px; margin-top: 0;">
|
||||||
|
{% trans "We received a request to reset your password." %}
|
||||||
|
</p>
|
||||||
|
<p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin-bottom: 10px; margin-top: 0;">
|
||||||
|
{% trans "If you didn't make this request you can safely ignore this email." %}
|
||||||
|
<p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin-bottom: 10px; margin-top: 0;">
|
||||||
|
{% trans "Otherwise, click here to reset your password." %}
|
||||||
|
</p>
|
||||||
|
<p style="color: #4382c8; line-height: 1.4; font-family: Lato, Arial, sans-serif; font-weight: 300; margin: 0;">
|
||||||
|
{% url 'hosting:reset_password_confirm' uidb64=uid token=token as password_reset_url %}
|
||||||
|
{{base_url}}{{ password_reset_url }}
|
||||||
|
</p>
|
||||||
|
<p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin-bottom: 0; margin-top: 10px;">
|
||||||
|
{% trans "Thank you!" %}
|
||||||
|
</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="padding-top: 40px; padding-bottom: 25px;">
|
||||||
|
<h3 style="font-family: Lato, Arial, sans-serif; margin: 0; font-weight: 400; font-size: 15px;">{% trans "Your Data Center Light Team" %}</h3>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -1,11 +1,14 @@
|
||||||
{% extends "datacenterlight/emails/base_email_datacenterlight.txt" %}
|
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% block email_head %}{% trans 'Password Reset' %}{% endblock %}
|
|
||||||
{% block email_body %}
|
{% trans "Password Reset" %}
|
||||||
|
|
||||||
|
{% trans "We received a request to reset your password." %}
|
||||||
|
{% trans "If you didn't make this request you can safely ignore this email." %}
|
||||||
|
{% trans "Otherwise, click here to reset your password." %}
|
||||||
|
|
||||||
{% url 'hosting:reset_password_confirm' uidb64=uid token=token as password_reset_url %}
|
{% url 'hosting:reset_password_confirm' uidb64=uid token=token as password_reset_url %}
|
||||||
{% blocktrans %}You're receiving this email because you requested a password reset for your user account at {{site_name}}.
|
{{base_url}}{{ password_reset_url }}
|
||||||
Please go to the following page and choose a new password: {{base_url}}{{ password_reset_url }}
|
|
||||||
If you didn't request a new password, ignore this e-mail.
|
{% trans "Thank you!" %}
|
||||||
Thank you!
|
|
||||||
{% endblocktrans %}
|
{% trans "Your Data Center Light Team" %}
|
||||||
{% endblock %}
|
|
||||||
|
|
|
@ -1,15 +1,49 @@
|
||||||
{% extends "datacenterlight/emails/base_email_datacenterlight.html" %}
|
{% load static i18n %}
|
||||||
{% load i18n %}
|
<!DOCTYPE html>
|
||||||
{% block email_head %}{{page_header}}{% endblock %}
|
<html>
|
||||||
{% block email_body %}
|
|
||||||
{% url 'hosting:virtual_machines' as my_virtual_machines_url %}
|
<head>
|
||||||
{% url 'hosting:orders' as vm_orders_url %}
|
<meta charset="UTF-8">
|
||||||
{% blocktrans with vm.name as vm_name %}You're receiving this mail because your virtual machine [{{vm_name}}] has been cancelled.<br/>
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
You can see your order status by clicking [my VM page] below.<br/>
|
<title>{% trans "Virtual Machine Cancellation" %}</title>
|
||||||
If you want to order a new virtual machine, you can do it by clicking <a href="{{base_url}}{{my_virtual_machines_url}}">this link</a>.<br/>
|
<link rel="shortcut icon" href="{{ base_url }}{% static 'datacenterlight/img/favicon.ico' %}" type="image/x-icon">
|
||||||
{% endblocktrans %}
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:300,400">
|
||||||
<div class="button" style="border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 30px 0;" align="center">
|
</head>
|
||||||
<a href="{{ base_url }}{{vm_orders_url}}" style="border-radius: 5px; color: #ffffff; display: inline-block; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: regular; line-height: 45px; text-align: center; text-decoration: none !important; width: 155px; -webkit-text-size-adjust: none; mso-hide: all; background: #ff6f6f;">{% trans 'My VM page' %}</a>
|
|
||||||
</div>
|
<body style="margin: 0; padding: 20px 0;">
|
||||||
{% endblock %}
|
<table style="width: 100%; border-spacing: 0; border-collapse: collapse; max-width: 560px;">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img src="{{ base_url }}{% static 'datacenterlight/img/logo_black.png' %}" style="width: 200px; height: 50px;">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="padding-top: 15px;">
|
||||||
|
<h1 style="font-family: Lato, Arial, sans-serif; font-size: 25px; font-weight: 400; margin: 0;">{% trans "Virtual Machine Cancellation" %}</h1>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="padding-top: 25px; font-size: 16px;">
|
||||||
|
<p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin: 0;">
|
||||||
|
{% blocktrans %}You are receiving this email because your virutal machine <strong>{{ vm_name }}</strong> has been cancelled.{% endblocktrans %}
|
||||||
|
</p>
|
||||||
|
<p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin: 0;">
|
||||||
|
{% blocktrans %}You can always order a new VM by clicking the button below.{% endblocktrans %}
|
||||||
|
</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="padding-top: 30px;">
|
||||||
|
<a class="btn" href="{{ base_url }}{% url 'hosting:create_virtual_machine' %}" style="font-family: Lato, Arial, sans-serif; text-decoration: none; background-color: #1596da; color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 30px; padding-right: 30px; letter-spacing: 0.5px; border-radius: 3px; display: inline-block; position: relative;">{% trans "CREATE VM" %}</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="padding-top: 40px; padding-bottom: 25px;">
|
||||||
|
<h3 style="font-family: Lato, Arial, sans-serif; margin: 0; font-weight: 400; font-size: 15px;">{% trans "Your Data Center Light Team" %}</h3>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,10 @@
|
||||||
{% extends "datacenterlight/emails/base_email_datacenterlight.txt" %}
|
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% block email_head %}{{page_header}}{% endblock %}
|
|
||||||
{% block email_body %}
|
{% trans "Virtual Machine Cancellation" %}
|
||||||
{% url 'hosting:virtual_machines' as my_virtual_machines_url %}
|
|
||||||
{% url 'hosting:orders' order.id as vm_order_url %}
|
{% blocktrans %}You are receiving this email because your virutal machine {{vm_name}} has been cancelled.{% endblocktrans %}
|
||||||
{% blocktrans with vm.name as vm_name %}You're receiving this mail because your virtual machine [{{vm_name}}] has been cancelled.
|
{% blocktrans %}You can always order a new VM by following the link below.{% endblocktrans %}
|
||||||
You can see your order status by clicking here
|
|
||||||
{{base_url}}{{vm_order_url}}
|
{{ base_url }}{% url 'hosting:create_virtual_machine' %}
|
||||||
If you want to order a new virtual machine, you can do it by clicking this link.
|
|
||||||
{{base_url}}{{my_virtual_machines_url}}
|
{% trans "Your Data Center Light Team" %}
|
||||||
{% endblocktrans %}
|
|
||||||
{% endblock %}
|
|
|
@ -32,11 +32,11 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<p>
|
<p>
|
||||||
<strong>{% trans "Date" %}:</strong>
|
<strong>{% trans "Date" %}:</strong>
|
||||||
<span id="order-created_at">
|
<span class="locale_date">
|
||||||
{% if order %}
|
{% if order %}
|
||||||
{{order.created_at|date:'Y-m-d H:i'}}
|
{{order.created_at|date:'Y-m-d h:i a'}}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% now "Y-m-d H:i" %}
|
{% now "Y-m-d h:i a" %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</p>
|
||||||
|
@ -107,7 +107,9 @@
|
||||||
{% if vm.created_at %}
|
{% if vm.created_at %}
|
||||||
<p>
|
<p>
|
||||||
<span>{% trans "Period" %}: </span>
|
<span>{% trans "Period" %}: </span>
|
||||||
<span>{{ vm.created_at|date:'Y/m/d' }} - {% if vm.terminated_at %}{{ vm.terminated_at|date:'Y/m/d' }}{% else %}{% now 'Y/m/d' %}{% endif %}</span>
|
<span>
|
||||||
|
<span class="locale_date" data-format="YYYY/MM/DD">{{ vm.created_at|date:'Y-m-d h:i a' }}</span> - <span class="locale_date" data-format="YYYY/MM/DD">{{ subscription_end_date|date:'Y-m-d h:i a' }}</span>
|
||||||
|
</span>
|
||||||
</p>
|
</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<p>
|
<p>
|
||||||
|
@ -194,12 +196,16 @@
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
{% trans "Some problem encountered. Please try again later." as err_msg %}
|
{% trans "Some problem encountered. Please try again later." as err_msg %}
|
||||||
var create_vm_error_message = '{{err_msg|safe}}';
|
var create_vm_error_message = '{{err_msg|safe}}';
|
||||||
|
|
||||||
window.onload = function () {
|
window.onload = function () {
|
||||||
var locale_date = moment.utc(document.getElementById("order-created_at").textContent, 'YYYY-MM-DD HH:mm').toDate();
|
var locale_dates = document.getElementsByClassName("locale_date");
|
||||||
locale_date = moment(locale_date).format("YYYY-MM-DD h:mm:ss a");
|
var formats = ['YYYY-MM-DD hh:mm a']
|
||||||
document.getElementById('order-created_at').innerHTML = locale_date;
|
var i;
|
||||||
|
for (i = 0; i < locale_dates.length; i++) {
|
||||||
|
var oldDate = moment.utc(locale_dates[i].textContent, formats);
|
||||||
|
var outputFormat = locale_dates[i].getAttribute('data-format') || oldDate._f;
|
||||||
|
locale_dates[i].innerHTML = oldDate.local().format(outputFormat);
|
||||||
|
locale_dates[i].className += ' done';
|
||||||
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
{%endblock%}
|
{%endblock%}
|
||||||
|
|
|
@ -267,6 +267,8 @@ class SignupValidatedView(SignupValidateView):
|
||||||
login_url = '<a href="' + \
|
login_url = '<a href="' + \
|
||||||
reverse('hosting:login') + '">' + str(_('login')) + '</a>'
|
reverse('hosting:login') + '">' + str(_('login')) + '</a>'
|
||||||
section_title = _('Account activation')
|
section_title = _('Account activation')
|
||||||
|
user = CustomUser.objects.filter(
|
||||||
|
validation_slug=self.kwargs['validate_slug']).first()
|
||||||
if validated:
|
if validated:
|
||||||
message = ('{account_activation_string} <br />'
|
message = ('{account_activation_string} <br />'
|
||||||
' {login_string} {lurl}.').format(
|
' {login_string} {lurl}.').format(
|
||||||
|
@ -274,6 +276,21 @@ class SignupValidatedView(SignupValidateView):
|
||||||
"Your account has been activated."),
|
"Your account has been activated."),
|
||||||
login_string=_("You can now"),
|
login_string=_("You can now"),
|
||||||
lurl=login_url)
|
lurl=login_url)
|
||||||
|
email_data = {
|
||||||
|
'subject': _('Welcome to Data Center Light!'),
|
||||||
|
'to': user.email,
|
||||||
|
'context': {
|
||||||
|
'base_url': "{0}://{1}".format(
|
||||||
|
self.request.scheme,
|
||||||
|
self.request.get_host()
|
||||||
|
)
|
||||||
|
},
|
||||||
|
'template_name': 'welcome_user',
|
||||||
|
'template_path': 'datacenterlight/emails/',
|
||||||
|
'from_address': settings.DCL_SUPPORT_FROM_ADDRESS,
|
||||||
|
}
|
||||||
|
email = BaseEmail(**email_data)
|
||||||
|
email.send()
|
||||||
else:
|
else:
|
||||||
home_url = '<a href="' + \
|
home_url = '<a href="' + \
|
||||||
reverse('datacenterlight:index') + \
|
reverse('datacenterlight:index') + \
|
||||||
|
@ -686,6 +703,7 @@ class OrdersHostingDetailView(LoginRequiredMixin,
|
||||||
disk_size=context['vm']['disk_size'],
|
disk_size=context['vm']['disk_size'],
|
||||||
memory=context['vm']['memory']
|
memory=context['vm']['memory']
|
||||||
)
|
)
|
||||||
|
context['subscription_end_date'] = vm_detail.end_date()
|
||||||
except VMDetail.DoesNotExist:
|
except VMDetail.DoesNotExist:
|
||||||
try:
|
try:
|
||||||
manager = OpenNebulaManager(
|
manager = OpenNebulaManager(
|
||||||
|
@ -1048,6 +1066,7 @@ class VirtualMachineView(LoginRequiredMixin, View):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
vm_data = VirtualMachineSerializer(manager.get_vm(vm.id)).data
|
vm_data = VirtualMachineSerializer(manager.get_vm(vm.id)).data
|
||||||
|
vm_name = vm_data.get('name')
|
||||||
except WrongIdError:
|
except WrongIdError:
|
||||||
return redirect(reverse('hosting:virtual_machines'))
|
return redirect(reverse('hosting:virtual_machines'))
|
||||||
|
|
||||||
|
@ -1073,10 +1092,11 @@ class VirtualMachineView(LoginRequiredMixin, View):
|
||||||
else:
|
else:
|
||||||
sleep(2)
|
sleep(2)
|
||||||
context = {
|
context = {
|
||||||
'vm': vm_data,
|
'vm_name': vm_name,
|
||||||
'base_url': "{0}://{1}".format(self.request.scheme,
|
'base_url': "{0}://{1}".format(self.request.scheme,
|
||||||
self.request.get_host()),
|
self.request.get_host()),
|
||||||
'page_header': _('Virtual Machine Cancellation')
|
'page_header': _('Virtual Machine %(vm_name)s Cancelled') % {
|
||||||
|
'vm_name': vm_name}
|
||||||
}
|
}
|
||||||
email_data = {
|
email_data = {
|
||||||
'subject': context['page_header'],
|
'subject': context['page_header'],
|
||||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2017-10-13 01:56+0530\n"
|
"POT-Creation-Date: 2017-10-13 02:21+0530\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -149,10 +149,10 @@ msgid "Our Products"
|
||||||
msgstr "Unsere Produkte"
|
msgstr "Unsere Produkte"
|
||||||
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"Our products include an innovative datacenter, affordable VM hosting, and "
|
"Our products include an innovative datacenter,<br>affordable VM hosting, and "
|
||||||
"high speed fiber internet for canton Glarus."
|
"high speed fiber internet for canton Glarus."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Zu unseren Produkten gehört ein innovatives Rechenzentrum, modernes VM-"
|
"Zu unseren Produkten gehört ein innovatives Rechenzentrum,<br>modernes VM-"
|
||||||
"Hosting und Glasfaser-Internet für den Kanton Glarus."
|
"Hosting und Glasfaser-Internet für den Kanton Glarus."
|
||||||
|
|
||||||
msgid "Data Center Light"
|
msgid "Data Center Light"
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-12 text-center wow fadeInDown">
|
<div class="col-lg-12 text-center wow fadeInDown">
|
||||||
<h2 class="section-heading">{% trans "Our Products" %}</h2>
|
<h2 class="section-heading">{% trans "Our Products" %}</h2>
|
||||||
<h3 class="section-subheading text-muted">{% trans "Our products include an innovative datacenter, affordable VM hosting, and high speed fiber internet for canton Glarus." %}</h3>
|
<h3 class="section-subheading text-muted" style="line-height: 1.8;">{% blocktrans %}Our products include an innovative datacenter,<br>affordable VM hosting, and high speed fiber internet for canton Glarus.{% endblocktrans %}</h3>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
Loading…
Reference in a new issue