merge master
This commit is contained in:
		
				commit
				
					
						c60d45c292
					
				
			
		
					 24 changed files with 561 additions and 314 deletions
				
			
		| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
Next release:
 | 
			
		||||
    * Bugfix: [dcl, hosting] Fix Stripe js error in confirm payment page
 | 
			
		||||
    * #3847: [ungleich] change text 'hosting products' -> 'our products'
 | 
			
		||||
    * #3829: [dcl] Handle landing login fail in payment page itself
 | 
			
		||||
1.2.6: 2017-10-10
 | 
			
		||||
    * Bugfix: [dcl] Refactor and optimize images, links in glasfaser page
 | 
			
		||||
    * Bugfix: [dcl] Fix email not being sent issue
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -126,56 +126,42 @@ msgstr ""
 | 
			
		|||
msgid "Thank you!"
 | 
			
		||||
msgstr "Vielen Dank!"
 | 
			
		||||
 | 
			
		||||
msgid "Account Activation"
 | 
			
		||||
msgstr "Account Aktivierung"
 | 
			
		||||
msgid "Data Center Light Account Activation"
 | 
			
		||||
msgstr "Data Center Light Account Aktivierung"
 | 
			
		||||
 | 
			
		||||
#, python-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"\n"
 | 
			
		||||
"You can activate your Data Center Light account by <a href=\"%(base_url)s"
 | 
			
		||||
"%(activation_link)s\">clicking here</a>.<br/>\n"
 | 
			
		||||
"You can activate your Data Center Light account by clicking <a href="
 | 
			
		||||
"\"%(base_url)s%(activation_link)s\" style=\"text-decoration: none; color: "
 | 
			
		||||
"#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 "
 | 
			
		||||
"browser<br/>\n"
 | 
			
		||||
"to activate your Data Center Light account.<br/>\n"
 | 
			
		||||
"%(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"
 | 
			
		||||
"browser to activate your Data Center Light account."
 | 
			
		||||
msgstr "Kopiere den folgenden Link in die Adressleiste deines Browsers."
 | 
			
		||||
 | 
			
		||||
#, python-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Your account details are as follows:<br/><br/>\n"
 | 
			
		||||
"Username : Your email address<br/>\n"
 | 
			
		||||
"Password : %(account_details)s<br/><br/>\n"
 | 
			
		||||
"You can reset your password here:\n"
 | 
			
		||||
"%(base_url)s%(reset_password_url)s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"You can copy and paste the following link into the address bar of your "
 | 
			
		||||
"browser to activate your Data Center Light account."
 | 
			
		||||
msgstr "Kopiere den folgenden Link in die Adressleiste deines Browsers."
 | 
			
		||||
 | 
			
		||||
#, python-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"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"
 | 
			
		||||
msgid "Welcome to Data Center Light!"
 | 
			
		||||
msgstr "Willkommen beim Data Center Light!"
 | 
			
		||||
 | 
			
		||||
#, python-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Your account details are as follows:\n"
 | 
			
		||||
"\n"
 | 
			
		||||
"Username : Your email address\n"
 | 
			
		||||
"Password : %(account_details)s\n"
 | 
			
		||||
"\n"
 | 
			
		||||
"You can reset your password here:\n"
 | 
			
		||||
"%(base_url)s%(reset_password_url)s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Thanks for joining us! We provide the most affordable virtual machines from "
 | 
			
		||||
"the heart of Switzerland."
 | 
			
		||||
msgstr "Bei uns findest Du die günstiges VMs aus der Schweiz."
 | 
			
		||||
 | 
			
		||||
msgid "Try now, order a VM. VM price starts from only 15CHF per month."
 | 
			
		||||
msgstr "Unser Angebot beginnt bei 15 CHF pro Monat. Probier's jetzt aus!"
 | 
			
		||||
 | 
			
		||||
msgid "ORDER VM"
 | 
			
		||||
msgstr "VM BESTELLEN"
 | 
			
		||||
 | 
			
		||||
msgid "Home"
 | 
			
		||||
msgstr "Home"
 | 
			
		||||
| 
						 | 
				
			
			@ -512,6 +498,15 @@ msgstr ""
 | 
			
		|||
"Deine VM ist gleich bereit. Wir senden Dir eine Bestätigungsemail, sobald Du "
 | 
			
		||||
"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"
 | 
			
		||||
#~ msgstr "Absenden"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -530,15 +525,6 @@ msgstr ""
 | 
			
		|||
#~ msgid "Order summary"
 | 
			
		||||
#~ 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!"
 | 
			
		||||
#~ 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 django.conf import settings
 | 
			
		||||
from django.core.mail import EmailMessage
 | 
			
		||||
from django.core.urlresolvers import reverse
 | 
			
		||||
from django.utils import translation
 | 
			
		||||
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'),
 | 
			
		||||
            'price': specs.get('price'),
 | 
			
		||||
            'template': template.get('name'),
 | 
			
		||||
            'vm.name': vm['name'],
 | 
			
		||||
            'vm.id': vm['vm_id'],
 | 
			
		||||
            'order.id': order.id
 | 
			
		||||
            'vm_name': vm.get('name'),
 | 
			
		||||
            'vm_id': vm['vm_id'],
 | 
			
		||||
            'order_id': order.id
 | 
			
		||||
        }
 | 
			
		||||
        email_data = {
 | 
			
		||||
            '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)
 | 
			
		||||
            # Send notification to the user as soon as VM has been booked
 | 
			
		||||
            context = {
 | 
			
		||||
                'vm': vm,
 | 
			
		||||
                'order': order,
 | 
			
		||||
                'base_url': "{0}://{1}".format(user.get('request_scheme'),
 | 
			
		||||
                                               user.get('request_host')),
 | 
			
		||||
                'order_url': reverse('hosting:orders',
 | 
			
		||||
                                     kwargs={'pk': order.id}),
 | 
			
		||||
                'page_header': _(
 | 
			
		||||
                    '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 = {
 | 
			
		||||
                'subject': context.get('page_header'),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,24 +1,46 @@
 | 
			
		|||
{% extends "datacenterlight/emails/base_email_datacenterlight.html" %}
 | 
			
		||||
{% load static from staticfiles %}
 | 
			
		||||
{% load i18n %}
 | 
			
		||||
{% block email_head %}
 | 
			
		||||
{{dcl_text}} {% trans 'Account Activation' %}
 | 
			
		||||
{% endblock %}
 | 
			
		||||
{% block email_body %}
 | 
			
		||||
{% blocktrans %}
 | 
			
		||||
You can activate your Data Center Light account by <a href="{{base_url}}{{activation_link}}">clicking here</a>.<br/>
 | 
			
		||||
You can also copy and paste the following link into the address bar of your browser<br/>
 | 
			
		||||
to activate your Data Center Light account.<br/>
 | 
			
		||||
{{base_url}}{{activation_link}}
 | 
			
		||||
{% endblocktrans %}
 | 
			
		||||
{% if account_details %}
 | 
			
		||||
{% url 'hosting:reset_password' as reset_password_url %}
 | 
			
		||||
<br/><br/>
 | 
			
		||||
{% blocktrans %}Your account details are as follows:<br/><br/>
 | 
			
		||||
Username : Your email address<br/>
 | 
			
		||||
Password : {{account_details}}<br/><br/>
 | 
			
		||||
You can reset your password here:
 | 
			
		||||
{{base_url}}{{reset_password_url}}
 | 
			
		||||
{% endblocktrans %}
 | 
			
		||||
{% endif %}
 | 
			
		||||
{% endblock %}
 | 
			
		||||
{% load static i18n %}
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
 | 
			
		||||
<head>
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
    <title>{% trans "Data Center Light Account Activation" %}</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 "Data Center Light Account Activation" %}</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;">
 | 
			
		||||
                    {% 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 %}
 | 
			
		||||
{% block email_head %}{{dcl_text}} {% trans 'Account Activation' %}{% endblock %}
 | 
			
		||||
{% block email_body %}
 | 
			
		||||
{% 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
 | 
			
		||||
to activate your Data Center Light account.
 | 
			
		||||
 | 
			
		||||
{% trans "Data Center Light Account Activation" %}
 | 
			
		||||
 | 
			
		||||
{% blocktrans %}You can copy and paste the following link into the address bar of your browser to activate your Data Center Light account.{% endblocktrans %}
 | 
			
		||||
 | 
			
		||||
{{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
 | 
			
		||||
Password : {{account_details}}
 | 
			
		||||
 | 
			
		||||
You can reset your password here:
 | 
			
		||||
{{base_url}}{{reset_password_url}}
 | 
			
		||||
{% endblocktrans %}
 | 
			
		||||
{% endif %}
 | 
			
		||||
{% endblock %}
 | 
			
		||||
{% trans "Your Data Center Light Team" %}
 | 
			
		||||
| 
						 | 
				
			
			@ -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>
 | 
			
		||||
                        <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>
 | 
			
		||||
                        <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 %}
 | 
			
		||||
                            {% csrf_token %}
 | 
			
		||||
                            {% bootstrap_field field show_label=False type='fields'%}
 | 
			
		||||
                            {% endfor %}
 | 
			
		||||
                            <p class="text-danger">{{login_form.non_field_errors|striptags}}</p>
 | 
			
		||||
                            <input type='hidden' name='next' value='{{request.path}}'/>
 | 
			
		||||
                            <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>
 | 
			
		||||
                        </form>
 | 
			
		||||
                        <p>
 | 
			
		||||
| 
						 | 
				
			
			@ -58,7 +59,7 @@
 | 
			
		|||
                    {% endfor %}
 | 
			
		||||
                    <form role="form" id="billing-form" method="post" action="" novalidate>
 | 
			
		||||
                        {% csrf_token %}
 | 
			
		||||
                        {% for field in form %}
 | 
			
		||||
                        {% for field in billing_address_form %}
 | 
			
		||||
                        {% bootstrap_field field show_label=False type='fields'%}
 | 
			
		||||
                        {% endfor %}
 | 
			
		||||
                    </form>
 | 
			
		||||
| 
						 | 
				
			
			@ -153,22 +154,12 @@
 | 
			
		|||
                                {% endif %}
 | 
			
		||||
                                <div id='payment_error'>
 | 
			
		||||
                                    {% 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">
 | 
			
		||||
                                                <li><p class="card-warning-content card-warning-error">{{ message|safe }}</p></li>
 | 
			
		||||
                                            </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 %}
 | 
			
		||||
                                    {% endfor %}
 | 
			
		||||
 | 
			
		||||
                                    {% for error in form.non_field_errors %}
 | 
			
		||||
                                        <p class="card-warning-content card-warning-error">
 | 
			
		||||
                                            {{ error|escape }}
 | 
			
		||||
                                        </p>
 | 
			
		||||
                                    {% endfor %}
 | 
			
		||||
                                </div>
 | 
			
		||||
                                <div class="text-right">
 | 
			
		||||
                                    <button class="btn btn-vm-contact btn-wide" type="submit">{%trans "SUBMIT" %}</button>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -345,26 +345,45 @@ class PaymentOrderView(FormView):
 | 
			
		|||
        else:
 | 
			
		||||
            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):
 | 
			
		||||
        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({
 | 
			
		||||
            'stripe_key': settings.STRIPE_API_PUBLIC_KEY,
 | 
			
		||||
            'site_url': reverse('datacenterlight:index'),
 | 
			
		||||
            'login_form': HostingUserLoginForm()
 | 
			
		||||
            'login_form': HostingUserLoginForm(prefix='login_form'),
 | 
			
		||||
            'billing_address_form': billing_address_form
 | 
			
		||||
        })
 | 
			
		||||
        return context
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -376,9 +395,32 @@ class PaymentOrderView(FormView):
 | 
			
		|||
        return self.render_to_response(self.get_context_data())
 | 
			
		||||
 | 
			
		||||
    def post(self, request, *args, **kwargs):
 | 
			
		||||
        form = self.get_form()
 | 
			
		||||
        if form.is_valid():
 | 
			
		||||
            token = form.cleaned_data.get('token')
 | 
			
		||||
        if 'login_form' in request.POST:
 | 
			
		||||
            login_form = HostingUserLoginForm(data=request.POST,
 | 
			
		||||
                                              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():
 | 
			
		||||
                this_user = {
 | 
			
		||||
                    'email': request.user.email,
 | 
			
		||||
| 
						 | 
				
			
			@ -388,8 +430,8 @@ class PaymentOrderView(FormView):
 | 
			
		|||
                    email=this_user.get('email'),
 | 
			
		||||
                    token=token)
 | 
			
		||||
            else:
 | 
			
		||||
                user_email = form.cleaned_data.get('email')
 | 
			
		||||
                user_name = form.cleaned_data.get('name')
 | 
			
		||||
                user_email = address_form.cleaned_data.get('email')
 | 
			
		||||
                user_name = address_form.cleaned_data.get('name')
 | 
			
		||||
                this_user = {
 | 
			
		||||
                    'email': user_email,
 | 
			
		||||
                    'name': user_name
 | 
			
		||||
| 
						 | 
				
			
			@ -422,13 +464,18 @@ class PaymentOrderView(FormView):
 | 
			
		|||
                        token=token,
 | 
			
		||||
                        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
 | 
			
		||||
            # Get or create stripe customer
 | 
			
		||||
            if not customer:
 | 
			
		||||
                form.add_error("__all__", "Invalid credit card")
 | 
			
		||||
                address_form.add_error(
 | 
			
		||||
                    "__all__", "Invalid credit card"
 | 
			
		||||
                )
 | 
			
		||||
                return self.render_to_response(
 | 
			
		||||
                    self.get_context_data(form=form))
 | 
			
		||||
                    self.get_context_data(
 | 
			
		||||
                        billing_address_form=address_form
 | 
			
		||||
                    )
 | 
			
		||||
                )
 | 
			
		||||
            request.session['token'] = token
 | 
			
		||||
            if type(customer) is StripeCustomer:
 | 
			
		||||
                request.session['customer'] = customer.stripe_id
 | 
			
		||||
| 
						 | 
				
			
			@ -437,7 +484,9 @@ class PaymentOrderView(FormView):
 | 
			
		|||
            return HttpResponseRedirect(
 | 
			
		||||
                reverse('datacenterlight:order_confirmation'))
 | 
			
		||||
        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):
 | 
			
		||||
| 
						 | 
				
			
			@ -548,9 +597,13 @@ class OrderConfirmationView(DetailView):
 | 
			
		|||
            try:
 | 
			
		||||
                custom_user = CustomUser.objects.get(
 | 
			
		||||
                    email=user.get('email'))
 | 
			
		||||
                customer = StripeCustomer.objects.filter(
 | 
			
		||||
                stripe_customer = StripeCustomer.objects.filter(
 | 
			
		||||
                    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:
 | 
			
		||||
                logger.debug(
 | 
			
		||||
                    "Customer {} does not exist.".format(user.get('email')))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,6 +29,8 @@ class HostingUserLoginForm(forms.Form):
 | 
			
		|||
    def clean(self):
 | 
			
		||||
        email = self.cleaned_data.get('email')
 | 
			
		||||
        password = self.cleaned_data.get('password')
 | 
			
		||||
        if self.errors:
 | 
			
		||||
            return self.cleaned_data
 | 
			
		||||
        is_auth = authenticate(email=email, password=password)
 | 
			
		||||
        if not is_auth:
 | 
			
		||||
            raise forms.ValidationError(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -192,101 +192,78 @@ msgid "Support / Contact"
 | 
			
		|||
msgstr "Support / Kontakt"
 | 
			
		||||
 | 
			
		||||
#, python-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"You have ordered a new virtual machine!\n"
 | 
			
		||||
"<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 "Your New VM %(vm_name)s"
 | 
			
		||||
msgstr "Deine Neue VM %(vm_name)s"
 | 
			
		||||
 | 
			
		||||
msgid "View Invoice"
 | 
			
		||||
msgstr "Zur Rechnung"
 | 
			
		||||
msgid "You have ordered a new virtual machine!"
 | 
			
		||||
msgstr "Du hast eine neue virtuelle Maschine bestellt!"
 | 
			
		||||
 | 
			
		||||
#, python-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"You have ordered a new virtual machine!\n"
 | 
			
		||||
"Your order of [%(vm_name)s] has been charged.\n"
 | 
			
		||||
"You can view your invoice here.\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Du hast eine neue virtuelle Maschine bestellt!\n"
 | 
			
		||||
"Deine Bestellung von [%(vm_name)s] wurde erhoben.\n"
 | 
			
		||||
"Um die Rechnung zu sehen, klicke hier.\n"
 | 
			
		||||
msgid "Your order of [ <strong>%(vm_name)s</strong> ] has been charged."
 | 
			
		||||
msgstr "Deine Bestellung von [ <strong>%(vm_name)s</strong> ] wurde erhoben."
 | 
			
		||||
 | 
			
		||||
msgid "You can view your VM detail by clicking the button below."
 | 
			
		||||
msgstr "Um die Rechnung zu sehen, klicke auf den Button unten."
 | 
			
		||||
 | 
			
		||||
msgid "View Detail"
 | 
			
		||||
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"
 | 
			
		||||
msgstr "Passwort zurücksetzen"
 | 
			
		||||
 | 
			
		||||
#, python-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"\n"
 | 
			
		||||
"You're receiving this email because you requested a password reset for your "
 | 
			
		||||
"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"
 | 
			
		||||
msgid "We received a request to reset your password."
 | 
			
		||||
msgstr "Wir haben eine Anfrage erhalten, um Dein Passwort zurückzusetzen."
 | 
			
		||||
 | 
			
		||||
msgid "If you didn't make this request you can safely ignore this email."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"\n"
 | 
			
		||||
"Du erhälst diese E-Mail da Du Dein Passwort für Deinen Account bei "
 | 
			
		||||
"%(site_name)s zurücksetzen möchtest.<br/>\n"
 | 
			
		||||
"Bitte folge diesem Link und wähle ein neues Passwort: %(base_url)s"
 | 
			
		||||
"%(password_reset_url)s Solltest Du kein neues Passwort angefordert haben, "
 | 
			
		||||
"dann ignoriere diese E-Mail.<br/>\n"
 | 
			
		||||
"Dankeschön!\n"
 | 
			
		||||
"Falls Du kein neues Passwort angefragt hast, kannst Du diese E-mail "
 | 
			
		||||
"ignorieren."
 | 
			
		||||
 | 
			
		||||
msgid "Otherwise, click here to reset your password."
 | 
			
		||||
msgstr "Andernfalls klicke hier, um Dein Passwort zurückzusetzen."
 | 
			
		||||
 | 
			
		||||
msgid "Thank you!"
 | 
			
		||||
msgstr "Dankeschön!"
 | 
			
		||||
 | 
			
		||||
msgid "Virtual Machine Cancellation"
 | 
			
		||||
msgstr "VM Kündigung"
 | 
			
		||||
 | 
			
		||||
#, python-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"You're receiving this email because you requested a password reset for your "
 | 
			
		||||
"user account at %(site_name)s.\n"
 | 
			
		||||
"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"
 | 
			
		||||
"You are receiving this email because your virutal machine [ <strong>"
 | 
			
		||||
"%(vm_name)s</strong> ] has been cancelled."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Du erhälst diese E-Mail da Du Dein Passwort für Deinen Account bei "
 | 
			
		||||
"%(site_name)s zurücksetzen möchtest.\n"
 | 
			
		||||
"Bitte folge diesem Link und wähle ein neues Passwort: %(base_url)s"
 | 
			
		||||
"%(password_reset_url)s Solltest Du kein neues Passwort angefordert haben, "
 | 
			
		||||
"dann ignoriere diese E-Mail.\n"
 | 
			
		||||
"Dankeschön!\n"
 | 
			
		||||
"Du erhälst diese E-Mail, da deine virtuelle Maschine [ <strong>%(vm_name)s</"
 | 
			
		||||
"strong> ] gekündigt wurde."
 | 
			
		||||
 | 
			
		||||
msgid "You can always order a new VM by clicking the button below."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Du kannst einfach eine neue VM bestellen, indem Du den Knopf weiter unten "
 | 
			
		||||
"drückst."
 | 
			
		||||
 | 
			
		||||
msgid "CREATE VM"
 | 
			
		||||
msgstr "NEUE VM"
 | 
			
		||||
 | 
			
		||||
#, python-format
 | 
			
		||||
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"
 | 
			
		||||
"You are receiving this email because your virutal machine [%(vm_name)s] has "
 | 
			
		||||
"been cancelled."
 | 
			
		||||
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"
 | 
			
		||||
"Du erhälst diese E-Mail, da deine virtuelle Maschine [%(vm_name)s] gekündigt "
 | 
			
		||||
"wurde."
 | 
			
		||||
 | 
			
		||||
msgid "My VM page"
 | 
			
		||||
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"
 | 
			
		||||
msgid "You can always order a new VM by following the link below."
 | 
			
		||||
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"
 | 
			
		||||
msgstr "Umschalten"
 | 
			
		||||
| 
						 | 
				
			
			@ -630,12 +607,6 @@ msgstr ""
 | 
			
		|||
"Um auf Deine VM zuzugreifen, <a href=\"%(create_ssh_url)s\">füge Deinen SSH-"
 | 
			
		||||
"Key hinzu</a>"
 | 
			
		||||
 | 
			
		||||
msgid "CREATE VM"
 | 
			
		||||
msgstr "NEUE VM"
 | 
			
		||||
 | 
			
		||||
msgid "View Detail"
 | 
			
		||||
msgstr "Details anzeigen"
 | 
			
		||||
 | 
			
		||||
msgid "login"
 | 
			
		||||
msgstr "anmelden"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -660,6 +631,9 @@ msgstr "Dein Account wurde aktiviert."
 | 
			
		|||
msgid "You can now"
 | 
			
		||||
msgstr "Du kannst dich nun"
 | 
			
		||||
 | 
			
		||||
msgid "Welcome to Data Center Light!"
 | 
			
		||||
msgstr "Willkommen beim Data Center Light!"
 | 
			
		||||
 | 
			
		||||
msgid "Sorry. Your request is invalid."
 | 
			
		||||
msgstr "Entschuldigung, deine Anfrage ist ungültig."
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -730,8 +704,9 @@ msgstr ""
 | 
			
		|||
msgid "Error terminating VM"
 | 
			
		||||
msgstr "Fehler beenden VM"
 | 
			
		||||
 | 
			
		||||
msgid "Virtual Machine Cancellation"
 | 
			
		||||
msgstr "VM Kündigung"
 | 
			
		||||
#, python-format
 | 
			
		||||
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."
 | 
			
		||||
msgstr ""
 | 
			
		||||
| 
						 | 
				
			
			@ -741,6 +716,9 @@ msgstr ""
 | 
			
		|||
#~ msgid "Reset your password"
 | 
			
		||||
#~ msgstr "Passwort zurücksetzen"
 | 
			
		||||
 | 
			
		||||
#~ msgid "My VM page"
 | 
			
		||||
#~ msgstr "Meine VM page"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Invoice Date"
 | 
			
		||||
#~ msgstr "Rechnung Datum"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -768,12 +746,27 @@ msgstr ""
 | 
			
		|||
#~ msgid "Start VM"
 | 
			
		||||
#~ 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"
 | 
			
		||||
#~ 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"
 | 
			
		||||
#~ msgstr "Meine virtuellen Maschinen"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,9 @@
 | 
			
		|||
import os
 | 
			
		||||
import logging
 | 
			
		||||
from dateutil.relativedelta import relativedelta
 | 
			
		||||
 | 
			
		||||
from django.db import models
 | 
			
		||||
from django.utils import timezone
 | 
			
		||||
from django.utils.functional import cached_property
 | 
			
		||||
from Crypto.PublicKey import RSA
 | 
			
		||||
from membership.models import StripeCustomer, CustomUser
 | 
			
		||||
| 
						 | 
				
			
			@ -172,3 +174,9 @@ class VMDetail(models.Model):
 | 
			
		|||
    ipv6 = models.TextField(default='')
 | 
			
		||||
    created_at = models.DateTimeField(auto_now_add=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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -374,3 +374,11 @@
 | 
			
		|||
  color: #999;
 | 
			
		||||
  fill: #999;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.locale_date {
 | 
			
		||||
  opacity: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.locale_date.done{
 | 
			
		||||
  opacity: 1;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,14 +1,51 @@
 | 
			
		|||
{% extends "datacenterlight/emails/base_email_datacenterlight.html" %}
 | 
			
		||||
{% load i18n %}
 | 
			
		||||
{% block email_head %}{{page_header}}{% endblock %}
 | 
			
		||||
{% block email_body %}
 | 
			
		||||
{% url 'hosting:orders' order.id as order_url %}
 | 
			
		||||
{% blocktrans with vm.name as vm_name %}You have ordered a new virtual machine!
 | 
			
		||||
<br/>
 | 
			
		||||
Your order of [{{vm_name}}] has been charged.<br/><br/>
 | 
			
		||||
You can view your invoice by clicking the button below.<br/><br/>
 | 
			
		||||
{% endblocktrans %}
 | 
			
		||||
<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">
 | 
			
		||||
    <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>
 | 
			
		||||
{% endblock %}
 | 
			
		||||
{% load static i18n %}
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
 | 
			
		||||
<head>
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
    <title>{% blocktrans %}Your New VM {{vm_name}}{% endblocktrans %}</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;">{% 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 %}
 | 
			
		||||
{% block email_head %}{{page_header}}{% endblock %}
 | 
			
		||||
{% block email_body %}
 | 
			
		||||
{% url 'hosting:orders' order.id as order_url %}
 | 
			
		||||
{% blocktrans with vm.name as vm_name %}You have ordered a new virtual machine!
 | 
			
		||||
Your order of [{{vm_name}}] has been charged.
 | 
			
		||||
You can view your invoice here.
 | 
			
		||||
{% endblocktrans %}
 | 
			
		||||
{{ base_url }}{{order_url}}
 | 
			
		||||
{% endblock %}
 | 
			
		||||
 | 
			
		||||
{% blocktrans %}Your New VM {{vm_name}}{% endblocktrans %}
 | 
			
		||||
 | 
			
		||||
{% blocktrans %}You have ordered a new virtual machine!{% endblocktrans %}
 | 
			
		||||
{% blocktrans %}Your order of {{vm_name}} has been charged.{% endblocktrans %}
 | 
			
		||||
{% blocktrans %}You can view your VM detail by following the link below.{% endblocktrans %}
 | 
			
		||||
 | 
			
		||||
{{ base_url }}{{ order_url }}
 | 
			
		||||
 | 
			
		||||
{% trans "Your Data Center Light Team" %}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,14 +1,52 @@
 | 
			
		|||
{% extends "datacenterlight/emails/base_email_datacenterlight.html" %}
 | 
			
		||||
{% load i18n %}
 | 
			
		||||
{% block email_head %}
 | 
			
		||||
{% trans 'Password Reset' %}
 | 
			
		||||
{% endblock %}
 | 
			
		||||
{% block email_body %}
 | 
			
		||||
{% 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}}.<br/>
 | 
			
		||||
Please go to the following page and choose a new password: {{base_url}}{{ password_reset_url }}<br/>
 | 
			
		||||
If you didn't request a new password, ignore this e-mail.<br/>
 | 
			
		||||
Thank you!
 | 
			
		||||
{% endblocktrans %}
 | 
			
		||||
{% endblock %}
 | 
			
		||||
{% load static i18n %}
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
 | 
			
		||||
<head>
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
    <title>{% trans "Password Reset" %}</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 "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 %}
 | 
			
		||||
{% 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 %}
 | 
			
		||||
{% blocktrans %}You're receiving this email because you requested a password reset for your user account at {{site_name}}.
 | 
			
		||||
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.
 | 
			
		||||
Thank you!
 | 
			
		||||
{% endblocktrans %}
 | 
			
		||||
{% endblock %}
 | 
			
		||||
{{base_url}}{{ password_reset_url }}
 | 
			
		||||
 | 
			
		||||
{% trans "Thank you!" %}
 | 
			
		||||
 | 
			
		||||
{% trans "Your Data Center Light Team" %}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,15 +1,49 @@
 | 
			
		|||
{% extends "datacenterlight/emails/base_email_datacenterlight.html" %}
 | 
			
		||||
{% load i18n %}
 | 
			
		||||
{% block email_head %}{{page_header}}{% endblock %}
 | 
			
		||||
{% block email_body %}
 | 
			
		||||
{% url 'hosting:virtual_machines' as my_virtual_machines_url %}
 | 
			
		||||
{% url 'hosting:orders' as vm_orders_url %}
 | 
			
		||||
{% blocktrans with vm.name as vm_name %}You're receiving this mail because your virtual machine [{{vm_name}}] has been cancelled.<br/>
 | 
			
		||||
You can see your order status by clicking [my VM page] below.<br/>
 | 
			
		||||
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/>
 | 
			
		||||
{% endblocktrans %}
 | 
			
		||||
<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">
 | 
			
		||||
    <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>
 | 
			
		||||
{% endblock %}
 | 
			
		||||
{% load static i18n %}
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
 | 
			
		||||
<head>
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
    <title>{% trans "Virtual Machine Cancellation" %}</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 "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 %}
 | 
			
		||||
{% block email_head %}{{page_header}}{% endblock %}
 | 
			
		||||
{% block email_body %}
 | 
			
		||||
{% url 'hosting:virtual_machines' as my_virtual_machines_url %}
 | 
			
		||||
{% url 'hosting:orders' order.id as vm_order_url %}
 | 
			
		||||
{% blocktrans with vm.name as vm_name %}You're receiving this mail because your virtual machine [{{vm_name}}] has been cancelled.
 | 
			
		||||
You can see your order status by clicking here
 | 
			
		||||
{{base_url}}{{vm_order_url}}
 | 
			
		||||
If you want to order a new virtual machine, you can do it by clicking this link.
 | 
			
		||||
{{base_url}}{{my_virtual_machines_url}}
 | 
			
		||||
{% endblocktrans %}
 | 
			
		||||
{% endblock %}
 | 
			
		||||
 | 
			
		||||
{% trans "Virtual Machine Cancellation" %}
 | 
			
		||||
 | 
			
		||||
{% blocktrans %}You are receiving this email because your virutal machine {{vm_name}} has been cancelled.{% endblocktrans %}
 | 
			
		||||
{% blocktrans %}You can always order a new VM by following the link below.{% endblocktrans %}
 | 
			
		||||
 | 
			
		||||
{{ base_url }}{% url 'hosting:create_virtual_machine' %}
 | 
			
		||||
 | 
			
		||||
{% trans "Your Data Center Light Team" %}
 | 
			
		||||
| 
						 | 
				
			
			@ -32,11 +32,11 @@
 | 
			
		|||
            {% endif %}
 | 
			
		||||
            <p>
 | 
			
		||||
                <strong>{% trans "Date" %}:</strong>
 | 
			
		||||
                <span id="order-created_at">
 | 
			
		||||
                <span class="locale_date">
 | 
			
		||||
                    {% if order %}
 | 
			
		||||
                        {{order.created_at|date:'Y-m-d H:i'}}
 | 
			
		||||
                        {{order.created_at|date:'Y-m-d h:i a'}}
 | 
			
		||||
                    {% else %}
 | 
			
		||||
                        {% now "Y-m-d H:i" %}
 | 
			
		||||
                        {% now "Y-m-d h:i a" %}
 | 
			
		||||
                    {% endif %}
 | 
			
		||||
                </span>
 | 
			
		||||
            </p>
 | 
			
		||||
| 
						 | 
				
			
			@ -107,7 +107,9 @@
 | 
			
		|||
                        {% if vm.created_at %}
 | 
			
		||||
                            <p>
 | 
			
		||||
                                <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>
 | 
			
		||||
                        {% endif %}
 | 
			
		||||
                        <p>
 | 
			
		||||
| 
						 | 
				
			
			@ -194,12 +196,16 @@
 | 
			
		|||
<script type="text/javascript">
 | 
			
		||||
    {% trans "Some problem encountered. Please try again later." as err_msg %}
 | 
			
		||||
    var create_vm_error_message = '{{err_msg|safe}}';
 | 
			
		||||
 | 
			
		||||
    window.onload = function () {
 | 
			
		||||
        var locale_date = moment.utc(document.getElementById("order-created_at").textContent, 'YYYY-MM-DD HH:mm').toDate();
 | 
			
		||||
        locale_date = moment(locale_date).format("YYYY-MM-DD h:mm:ss a");
 | 
			
		||||
        document.getElementById('order-created_at').innerHTML = locale_date;
 | 
			
		||||
 | 
			
		||||
        var locale_dates = document.getElementsByClassName("locale_date");
 | 
			
		||||
        var formats = ['YYYY-MM-DD hh:mm a']
 | 
			
		||||
        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>
 | 
			
		||||
{%endblock%}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -267,6 +267,8 @@ class SignupValidatedView(SignupValidateView):
 | 
			
		|||
        login_url = '<a href="' + \
 | 
			
		||||
                    reverse('hosting:login') + '">' + str(_('login')) + '</a>'
 | 
			
		||||
        section_title = _('Account activation')
 | 
			
		||||
        user = CustomUser.objects.filter(
 | 
			
		||||
            validation_slug=self.kwargs['validate_slug']).first()
 | 
			
		||||
        if validated:
 | 
			
		||||
            message = ('{account_activation_string} <br />'
 | 
			
		||||
                       ' {login_string} {lurl}.').format(
 | 
			
		||||
| 
						 | 
				
			
			@ -274,6 +276,21 @@ class SignupValidatedView(SignupValidateView):
 | 
			
		|||
                    "Your account has been activated."),
 | 
			
		||||
                login_string=_("You can now"),
 | 
			
		||||
                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:
 | 
			
		||||
            home_url = '<a href="' + \
 | 
			
		||||
                       reverse('datacenterlight:index') + \
 | 
			
		||||
| 
						 | 
				
			
			@ -686,6 +703,7 @@ class OrdersHostingDetailView(LoginRequiredMixin,
 | 
			
		|||
                    disk_size=context['vm']['disk_size'],
 | 
			
		||||
                    memory=context['vm']['memory']
 | 
			
		||||
                )
 | 
			
		||||
                context['subscription_end_date'] = vm_detail.end_date()
 | 
			
		||||
            except VMDetail.DoesNotExist:
 | 
			
		||||
                try:
 | 
			
		||||
                    manager = OpenNebulaManager(
 | 
			
		||||
| 
						 | 
				
			
			@ -1048,6 +1066,7 @@ class VirtualMachineView(LoginRequiredMixin, View):
 | 
			
		|||
 | 
			
		||||
        try:
 | 
			
		||||
            vm_data = VirtualMachineSerializer(manager.get_vm(vm.id)).data
 | 
			
		||||
            vm_name = vm_data.get('name')
 | 
			
		||||
        except WrongIdError:
 | 
			
		||||
            return redirect(reverse('hosting:virtual_machines'))
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1073,10 +1092,11 @@ class VirtualMachineView(LoginRequiredMixin, View):
 | 
			
		|||
                else:
 | 
			
		||||
                    sleep(2)
 | 
			
		||||
            context = {
 | 
			
		||||
                'vm': vm_data,
 | 
			
		||||
                'vm_name': vm_name,
 | 
			
		||||
                'base_url': "{0}://{1}".format(self.request.scheme,
 | 
			
		||||
                                               self.request.get_host()),
 | 
			
		||||
                'page_header': _('Virtual Machine Cancellation')
 | 
			
		||||
                'page_header': _('Virtual Machine %(vm_name)s Cancelled') % {
 | 
			
		||||
                    'vm_name': vm_name}
 | 
			
		||||
            }
 | 
			
		||||
            email_data = {
 | 
			
		||||
                'subject': context['page_header'],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@ msgid ""
 | 
			
		|||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PACKAGE VERSION\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"
 | 
			
		||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
			
		||||
"Language-Team: LANGUAGE <LL@li.org>\n"
 | 
			
		||||
| 
						 | 
				
			
			@ -149,10 +149,10 @@ msgid "Our Products"
 | 
			
		|||
msgstr "Unsere Produkte"
 | 
			
		||||
 | 
			
		||||
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."
 | 
			
		||||
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."
 | 
			
		||||
 | 
			
		||||
msgid "Data Center Light"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,7 +6,7 @@
 | 
			
		|||
		<div class="row">
 | 
			
		||||
		  <div class="col-lg-12 text-center wow fadeInDown">
 | 
			
		||||
		    <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 class="row">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue