merge master
This commit is contained in:
commit
368fe0d08f
19 changed files with 200 additions and 101 deletions
|
@ -1,3 +1,5 @@
|
||||||
|
next
|
||||||
|
* bgfix: fix header slider interval issue
|
||||||
1.6: 2018-03-25
|
1.6: 2018-03-25
|
||||||
* #4266: [dcl cms] add promotional section plugin
|
* #4266: [dcl cms] add promotional section plugin
|
||||||
* #3842: [dcl, hosting] change number formatting for all the numbers from german to english locale
|
* #3842: [dcl, hosting] change number formatting for all the numbers from german to english locale
|
||||||
|
|
10
datacenterlight/admin.py
Normal file
10
datacenterlight/admin.py
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
from cms.admin.placeholderadmin import PlaceholderAdminMixin
|
||||||
|
from .cms_models import CMSIntegration
|
||||||
|
|
||||||
|
|
||||||
|
class CMSIntegrationAdmin(PlaceholderAdminMixin, admin.ModelAdmin):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
admin.site.register(CMSIntegration, CMSIntegrationAdmin)
|
|
@ -3,6 +3,27 @@ from django.db import models
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
from djangocms_text_ckeditor.fields import HTMLField
|
from djangocms_text_ckeditor.fields import HTMLField
|
||||||
from filer.fields.image import FilerImageField
|
from filer.fields.image import FilerImageField
|
||||||
|
from cms.models.fields import PlaceholderField
|
||||||
|
|
||||||
|
|
||||||
|
class CMSIntegration(models.Model):
|
||||||
|
name = models.CharField(
|
||||||
|
max_length=100, unique=True, default='default',
|
||||||
|
help_text=(
|
||||||
|
'A unique name for the Integration. This name will be used to '
|
||||||
|
'fetch the Integration into pages'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
footer_placeholder = PlaceholderField(
|
||||||
|
'datacenterlight_footer', related_name='dcl-footer-placeholder+'
|
||||||
|
)
|
||||||
|
navbar_placeholder = PlaceholderField(
|
||||||
|
'datacenterlight_navbar', related_name='dcl-navbar-placeholder+'
|
||||||
|
)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
# Models for CMS Plugins
|
# Models for CMS Plugins
|
||||||
|
|
||||||
|
|
13
datacenterlight/management/commands/cmsintegrate.py
Normal file
13
datacenterlight/management/commands/cmsintegrate.py
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
from datacenterlight.cms_models import CMSIntegration
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = '''Creates cms integration objects for datacenterlight'''
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
obj, created = CMSIntegration.objects.get_or_create(name='default')
|
||||||
|
if created:
|
||||||
|
print('created the default CMSIntegration object')
|
||||||
|
else:
|
||||||
|
print('default CMSIntegration object already exists')
|
31
datacenterlight/migrations/0016_cmsintegration.py
Normal file
31
datacenterlight/migrations/0016_cmsintegration.py
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.9.4 on 2018-03-27 15:31
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import cms.models.fields
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('datacenterlight', '0015_auto_20180323_0011'),
|
||||||
|
('cms', '0014_auto_20160404_1908'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='CMSIntegration',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True,
|
||||||
|
primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('navbar_placeholder', cms.models.fields.PlaceholderField(editable=False, null=True,
|
||||||
|
on_delete=django.db.models.deletion.CASCADE, slotname='datacenterlight_navbar', to='cms.Placeholder')),
|
||||||
|
('footer_placeholder', cms.models.fields.PlaceholderField(editable=False, null=True,
|
||||||
|
on_delete=django.db.models.deletion.CASCADE, slotname='datacenterlight_footer', to='cms.Placeholder')),
|
||||||
|
('name', models.CharField(default='default',
|
||||||
|
help_text='A unique name for the Integration. This name will be used to fetch the Integration into pages', max_length=100, unique=True)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
]
|
27
datacenterlight/migrations/0017_auto_20180329_0056.py
Normal file
27
datacenterlight/migrations/0017_auto_20180329_0056.py
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.9.4 on 2018-03-28 19:26
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import cms.models.fields
|
||||||
|
from django.db import migrations
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('datacenterlight', '0016_cmsintegration'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='cmsintegration',
|
||||||
|
name='footer_placeholder',
|
||||||
|
field=cms.models.fields.PlaceholderField(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='dcl-footer-placeholder+', slotname='datacenterlight_footer', to='cms.Placeholder'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='cmsintegration',
|
||||||
|
name='navbar_placeholder',
|
||||||
|
field=cms.models.fields.PlaceholderField(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='dcl-navbar-placeholder+', slotname='datacenterlight_navbar', to='cms.Placeholder'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -1,7 +1,7 @@
|
||||||
body,
|
body,
|
||||||
html {
|
html {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
min-height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
body,
|
body,
|
||||||
|
@ -84,8 +84,24 @@ a.list-group-item-danger.active:focus {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.navbar .dcl-link {
|
||||||
|
display: block;
|
||||||
|
padding: 15px;
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar .dcl-link:focus,
|
||||||
|
.navbar .dcl-link:active,
|
||||||
|
.navbar .dcl-link:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar .dropdown-menu .dcl-link {
|
||||||
|
padding: 1px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
p.copyright {
|
p.copyright {
|
||||||
margin: 15px 0 0;
|
margin: 15px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
footer {
|
footer {
|
||||||
|
@ -95,4 +111,23 @@ footer {
|
||||||
|
|
||||||
footer a {
|
footer a {
|
||||||
color: #777;
|
color: #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer .dcl-link-separator {
|
||||||
|
position: relative;
|
||||||
|
padding-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer .dcl-link-separator::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
display: inline-block;
|
||||||
|
top: 9px;
|
||||||
|
bottom: 0;
|
||||||
|
left: -2px;
|
||||||
|
right: 0;
|
||||||
|
width: 2px;
|
||||||
|
height: 2px;
|
||||||
|
border-radius: 100%;
|
||||||
|
background: #777;
|
||||||
}
|
}
|
|
@ -15,8 +15,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
@media(min-width: 768px) {
|
@media(min-width: 768px) {
|
||||||
.navbar-default .navbar-nav>li>a,
|
.navbar-default .navbar-nav>li a,
|
||||||
.navbar-right .highlights-dropdown .dropdown-menu>li>a {
|
.navbar-right .highlights-dropdown .dropdown-menu>li a {
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
}
|
}
|
||||||
.navbar-right .highlights-dropdown .dropdown-menu {
|
.navbar-right .highlights-dropdown .dropdown-menu {
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-right .highlights-dropdown .dropdown-menu>li>a {
|
.navbar-right .highlights-dropdown .dropdown-menu>li a {
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
font-family: 'Lato', sans-serif;
|
font-family: 'Lato', sans-serif;
|
||||||
padding: 1px 10px 1px 18px !important;
|
padding: 1px 10px 1px 18px !important;
|
||||||
|
@ -34,9 +34,9 @@
|
||||||
color: #333;
|
color: #333;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-right .highlights-dropdown .dropdown-menu>li>a:hover,
|
.navbar-right .highlights-dropdown .dropdown-menu>li a:hover,
|
||||||
.navbar-right .highlights-dropdown .dropdown-menu>li>a:focus,
|
.navbar-right .highlights-dropdown .dropdown-menu>li a:focus,
|
||||||
.navbar-right .highlights-dropdown .dropdown-menu>li>a:active {
|
.navbar-right .highlights-dropdown .dropdown-menu>li a:active {
|
||||||
background: transparent;
|
background: transparent;
|
||||||
text-decoration: underline !important;
|
text-decoration: underline !important;
|
||||||
}
|
}
|
||||||
|
@ -144,9 +144,9 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
.navbar-default .navbar-nav .open .dropdown-menu>.active>a,
|
.navbar-default .navbar-nav .open .dropdown-menu>.active a,
|
||||||
.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,
|
.navbar-default .navbar-nav .open .dropdown-menu>.active a:focus,
|
||||||
.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover {
|
.navbar-default .navbar-nav .open .dropdown-menu>.active a:hover {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -163,7 +163,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.content-dashboard {
|
.content-dashboard {
|
||||||
min-height: calc(100vh - 60px);
|
min-height: calc(100vh - 86px);
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
max-width: 1120px;
|
max-width: 1120px;
|
||||||
|
|
|
@ -99,15 +99,13 @@ textarea {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.navbar-transparent .navbar-nav>li a,
|
||||||
.navbar-transparent .navbar-nav>.open>a,
|
.navbar-transparent .navbar-nav>.open>a,
|
||||||
.navbar-transparent .navbar-nav>.open>a:focus,
|
.navbar-transparent .navbar-nav>.open>a:focus,
|
||||||
.navbar-transparent .navbar-nav>.open>a:hover {
|
.navbar-transparent .navbar-nav>.open>a:hover {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-transparent .navbar-nav>li a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar-transparent .navbar-nav>li a:focus,
|
.navbar-transparent .navbar-nav>li a:focus,
|
||||||
.navbar-transparent .navbar-nav>li a:active,
|
.navbar-transparent .navbar-nav>li a:active,
|
||||||
|
@ -123,22 +121,6 @@ textarea {
|
||||||
background: transparent;
|
background: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar .dcl-link {
|
|
||||||
display: block;
|
|
||||||
padding: 15px;
|
|
||||||
color: #777;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar .dcl-link:focus,
|
|
||||||
.navbar .dcl-link:active,
|
|
||||||
.navbar .dcl-link:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar .dropdown-menu .dcl-link {
|
|
||||||
padding: 1px 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar-transparent .navbar-nav>li>.on-hover-border {
|
.navbar-transparent .navbar-nav>li>.on-hover-border {
|
||||||
transition: all 0.3s linear;
|
transition: all 0.3s linear;
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
|
@ -1233,24 +1215,6 @@ footer {
|
||||||
transform: rotate(45deg);
|
transform: rotate(45deg);
|
||||||
}
|
}
|
||||||
|
|
||||||
footer .dcl-link-separator {
|
|
||||||
position: relative;
|
|
||||||
padding-left: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
footer .dcl-link-separator::before {
|
|
||||||
content: "";
|
|
||||||
position: absolute;
|
|
||||||
display: inline-block;
|
|
||||||
top: 9px;
|
|
||||||
bottom: 0;
|
|
||||||
left: -2px;
|
|
||||||
right: 0;
|
|
||||||
width: 2px;
|
|
||||||
height: 2px;
|
|
||||||
border-radius: 100%;
|
|
||||||
background: #777;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* new styles for whydcl section cms plugin (to replace older style) */
|
/* new styles for whydcl section cms plugin (to replace older style) */
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{% load staticfiles i18n %}
|
{% load staticfiles i18n cms_tags sekizai_tags %}
|
||||||
{% get_current_language as LANGUAGE_CODE %}
|
{% get_current_language as LANGUAGE_CODE %}
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
@ -23,9 +23,15 @@
|
||||||
<!-- Custom CSS -->
|
<!-- Custom CSS -->
|
||||||
<link href="{% static 'datacenterlight/css/common.css' %}" rel="stylesheet">
|
<link href="{% static 'datacenterlight/css/common.css' %}" rel="stylesheet">
|
||||||
<link href="{% static 'datacenterlight/css/hosting.css' %}" rel="stylesheet">
|
<link href="{% static 'datacenterlight/css/hosting.css' %}" rel="stylesheet">
|
||||||
|
{% if request.toolbar.edit_mode %}
|
||||||
|
<link href="{% static 'datacenterlight/css/cms.css' %}" rel="stylesheet">
|
||||||
|
{% endif %}
|
||||||
{% block css_extra %}
|
{% block css_extra %}
|
||||||
{% endblock css_extra %}
|
{% endblock css_extra %}
|
||||||
|
|
||||||
|
{% render_block "css" postprocessor "compressor.contrib.sekizai.compress" %}
|
||||||
|
{% render_block "js" postprocessor "compressor.contrib.sekizai.compress" %}
|
||||||
|
|
||||||
<!-- External Fonts -->
|
<!-- External Fonts -->
|
||||||
|
|
||||||
<link rel="shortcut icon" href="{% static 'datacenterlight/img/favicon.ico' %}" type="image/x-icon">
|
<link rel="shortcut icon" href="{% static 'datacenterlight/img/favicon.ico' %}" type="image/x-icon">
|
||||||
|
@ -43,28 +49,17 @@
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
{% cms_toolbar %}
|
||||||
|
|
||||||
{% block navbar %}
|
{% render_placeholder cms_integration.navbar_placeholder %}
|
||||||
{% include "hosting/includes/_navbar_user.html" %}
|
|
||||||
{% endblock navbar %}
|
|
||||||
|
|
||||||
<div class="{% if request.user.is_authenticated %}content-dashboard{% endif %}">
|
<div class="{% if request.user.is_authenticated %}content-dashboard{% endif %}">
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Footer -->
|
{% render_placeholder cms_integration.footer_placeholder %}
|
||||||
{% if request.user.is_authenticated %}
|
|
||||||
<footer class="footer-vm">
|
|
||||||
<div class="container">
|
|
||||||
<p class="copyright text-muted small">Copyright © ungleich glarus ag {% now "Y" %}. {% trans "All Rights Reserved" %}</p>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
{% else %}
|
|
||||||
<div class="footer-vm">
|
|
||||||
{% include "datacenterlight/includes/_footer.html" %}
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<!-- Moment -->
|
<!-- Moment -->
|
||||||
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{% extends "datacenterlight/base_hosting.html" %}
|
{% extends "datacenterlight/base_hosting.html" %}
|
||||||
{% load staticfiles bootstrap3 i18n %}
|
{% load staticfiles bootstrap3 i18n cms_tags humanize %}
|
||||||
|
|
||||||
{% block css_extra %}
|
{% block css_extra %}
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/paymentfont/1.1.2/css/paymentfont.min.css"/>
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/paymentfont/1.1.2/css/paymentfont.min.css"/>
|
||||||
|
@ -78,7 +78,7 @@
|
||||||
<hr>
|
<hr>
|
||||||
<p>{% trans "Configuration"%} <strong class="pull-right">{{request.session.template.name}}</strong></p>
|
<p>{% trans "Configuration"%} <strong class="pull-right">{{request.session.template.name}}</strong></p>
|
||||||
<hr>
|
<hr>
|
||||||
<p class="last-p"><strong>{%trans "Total" %}</strong> <small>({%trans "including VAT" %})</small> <strong class="pull-right">{{request.session.specs.price}} CHF/{% trans "Month" %}</strong></p>
|
<p class="last-p"><strong>{%trans "Total" %}</strong> <small>({%trans "including VAT" %})</small> <strong class="pull-right">{{request.session.specs.price|intcomma}} CHF/{% trans "Month" %}</strong></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{% extends "datacenterlight/base_hosting.html" %}
|
{% extends "datacenterlight/base_hosting.html" %}
|
||||||
{% load staticfiles bootstrap3 i18n custom_tags %}
|
{% load staticfiles bootstrap3 i18n custom_tags humanize %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div id="order-detail{{order.pk}}" class="order-detail-container">
|
<div id="order-detail{{order.pk}}" class="order-detail-container">
|
||||||
|
@ -59,15 +59,15 @@
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<span>{% trans "Memory" %}: </span>
|
<span>{% trans "Memory" %}: </span>
|
||||||
<span class="pull-right">{{vm.memory}} GB</span>
|
<span class="pull-right">{{vm.memory|intcomma}} GB</span>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<span>{% trans "Disk space" %}: </span>
|
<span>{% trans "Disk space" %}: </span>
|
||||||
<span class="pull-right">{{vm.disk_size}} GB</span>
|
<span class="pull-right">{{vm.disk_size|intcomma}} GB</span>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<span>{% trans "Total" %}</span>
|
<span>{% trans "Total" %}</span>
|
||||||
<span class="pull-right">{{vm.price}} CHF</span>
|
<span class="pull-right">{{vm.price|intcomma}} CHF</span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -18,14 +18,13 @@ from hosting.forms import HostingUserLoginForm
|
||||||
from hosting.models import HostingOrder
|
from hosting.models import HostingOrder
|
||||||
from membership.models import CustomUser, StripeCustomer
|
from membership.models import CustomUser, StripeCustomer
|
||||||
from opennebula_api.serializers import VMTemplateSerializer
|
from opennebula_api.serializers import VMTemplateSerializer
|
||||||
from utils.forms import (
|
from utils.forms import BillingAddressForm, BillingAddressFormSignup
|
||||||
BillingAddressForm, BillingAddressFormSignup
|
|
||||||
)
|
|
||||||
from utils.hosting_utils import get_vm_price
|
from utils.hosting_utils import get_vm_price
|
||||||
from utils.stripe_utils import StripeUtils
|
from utils.stripe_utils import StripeUtils
|
||||||
from utils.tasks import send_plain_email_task
|
from utils.tasks import send_plain_email_task
|
||||||
from .forms import ContactForm
|
from .forms import ContactForm
|
||||||
from .models import VMTemplate
|
from .models import VMTemplate
|
||||||
|
from .cms_models import CMSIntegration
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -42,9 +41,10 @@ class ContactUsView(FormView):
|
||||||
return self.render_to_response(
|
return self.render_to_response(
|
||||||
self.get_context_data(contact_form=form))
|
self.get_context_data(contact_form=form))
|
||||||
else:
|
else:
|
||||||
return render(self.request,
|
return render(
|
||||||
'datacenterlight/index.html',
|
self.request, 'datacenterlight/index.html',
|
||||||
self.get_context_data(contact_form=form))
|
self.get_context_data(contact_form=form)
|
||||||
|
)
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
form.save()
|
form.save()
|
||||||
|
@ -68,10 +68,10 @@ class ContactUsView(FormView):
|
||||||
return self.render_to_response(
|
return self.render_to_response(
|
||||||
self.get_context_data(success=True, contact_form=form))
|
self.get_context_data(success=True, contact_form=form))
|
||||||
else:
|
else:
|
||||||
return render(self.request,
|
return render(
|
||||||
'datacenterlight/index.html',
|
self.request, 'datacenterlight/index.html',
|
||||||
self.get_context_data(success=True,
|
self.get_context_data(success=True, contact_form=form)
|
||||||
contact_form=form))
|
)
|
||||||
|
|
||||||
|
|
||||||
class IndexView(CreateView):
|
class IndexView(CreateView):
|
||||||
|
@ -219,7 +219,8 @@ class PaymentOrderView(FormView):
|
||||||
'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(prefix='login_form'),
|
'login_form': HostingUserLoginForm(prefix='login_form'),
|
||||||
'billing_address_form': billing_address_form
|
'billing_address_form': billing_address_form,
|
||||||
|
'cms_integration': CMSIntegration.objects.get(name='default')
|
||||||
})
|
})
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@ -354,7 +355,10 @@ class OrderConfirmationView(DetailView):
|
||||||
'cc_brand': card_details.get('response_object').get('brand'),
|
'cc_brand': card_details.get('response_object').get('brand'),
|
||||||
'vm': request.session.get('specs'),
|
'vm': request.session.get('specs'),
|
||||||
'page_header_text': _('Confirm Order'),
|
'page_header_text': _('Confirm Order'),
|
||||||
'billing_address_data': request.session.get('billing_address_data')
|
'billing_address_data': (
|
||||||
|
request.session.get('billing_address_data')
|
||||||
|
),
|
||||||
|
'cms_integration': CMSIntegration.objects.get(name='default')
|
||||||
}
|
}
|
||||||
return render(request, self.template_name, context)
|
return render(request, self.template_name, context)
|
||||||
|
|
||||||
|
|
|
@ -82,6 +82,7 @@ INSTALLED_APPS = (
|
||||||
'django.contrib.admin',
|
'django.contrib.admin',
|
||||||
'django.contrib.auth',
|
'django.contrib.auth',
|
||||||
'django.contrib.contenttypes',
|
'django.contrib.contenttypes',
|
||||||
|
'django.contrib.humanize',
|
||||||
'django.contrib.sessions',
|
'django.contrib.sessions',
|
||||||
'django.contrib.messages',
|
'django.contrib.messages',
|
||||||
'django.contrib.staticfiles',
|
'django.contrib.staticfiles',
|
||||||
|
@ -255,8 +256,6 @@ USE_L10N = True
|
||||||
|
|
||||||
USE_TZ = True
|
USE_TZ = True
|
||||||
|
|
||||||
USE_THOUSAND_SEPARATOR = True
|
|
||||||
|
|
||||||
FORMAT_MODULE_PATH = [
|
FORMAT_MODULE_PATH = [
|
||||||
'dynamicweb.formats'
|
'dynamicweb.formats'
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
{% extends "hosting/base_short.html" %}
|
{% extends "hosting/base_short.html" %}
|
||||||
{% load staticfiles bootstrap3 %}
|
{% load staticfiles bootstrap3 humanize i18n custom_tags %}
|
||||||
{% load i18n %}
|
|
||||||
{% load custom_tags %}
|
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div id="order-detail{{order.pk}}" class="order-detail-container">
|
<div id="order-detail{{order.pk}}" class="order-detail-container">
|
||||||
|
@ -130,7 +129,7 @@
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<span>{% trans "Total" %}</span>
|
<span>{% trans "Total" %}</span>
|
||||||
<span class="pull-right">{{vm.price}} CHF</span>
|
<span class="pull-right">{{vm.price|intcomma}} CHF</span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -143,7 +142,7 @@
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<div class="dcl-place-order-text">{% blocktrans with vm_price=request.session.specs.price %}By clicking "Place order" this plan will charge your credit card account with the fee of {{ vm_price }}CHF/month{% endblocktrans %}.</div>
|
<div class="dcl-place-order-text">{% blocktrans with vm_price=request.session.specs.price %}By clicking "Place order" this plan will charge your credit card account with the fee of {{ vm_price|intcomma }}CHF/month{% endblocktrans %}.</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-4 order-confirm-btn text-right">
|
<div class="col-sm-4 order-confirm-btn text-right">
|
||||||
<button class="btn choice-btn" id="btn-create-vm" data-href="{% url 'hosting:order-confirmation' %}" data-toggle="modal" data-target="#createvm-modal">
|
<button class="btn choice-btn" id="btn-create-vm" data-href="{% url 'hosting:order-confirmation' %}" data-toggle="modal" data-target="#createvm-modal">
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
{% extends "hosting/base_short.html" %}
|
{% extends "hosting/base_short.html" %}
|
||||||
{% load staticfiles bootstrap3 %}
|
{% load staticfiles bootstrap3 humanize i18n %}
|
||||||
{% load i18n l10n %}
|
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="dashboard-container">
|
<div class="dashboard-container">
|
||||||
|
@ -30,7 +29,7 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td class="xs-td-inline" data-header="{% trans 'Order Nr.' %}">{{ order.id }}</td>
|
<td class="xs-td-inline" data-header="{% trans 'Order Nr.' %}">{{ order.id }}</td>
|
||||||
<td class="xs-td-bighalf" data-header="{% trans 'Date' %}">{{ order.created_at | date:"M d, Y H:i" }}</td>
|
<td class="xs-td-bighalf" data-header="{% trans 'Date' %}">{{ order.created_at | date:"M d, Y H:i" }}</td>
|
||||||
<td class="xs-td-smallhalf" data-header="{% trans 'Amount' %}">{{ order.price }}</td>
|
<td class="xs-td-smallhalf" data-header="{% trans 'Amount' %}">{{ order.price|intcomma }}</td>
|
||||||
<td class="text-right last-td">
|
<td class="text-right last-td">
|
||||||
<a class="btn btn-order-detail" href="{% url 'hosting:orders' order.pk %}">{% trans 'See Invoice' %}</a>
|
<a class="btn btn-order-detail" href="{% url 'hosting:orders' order.pk %}">{% trans 'See Invoice' %}</a>
|
||||||
</td>
|
</td>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{% extends "hosting/base_short.html" %}
|
{% extends "hosting/base_short.html" %}
|
||||||
{% load staticfiles bootstrap3 i18n %}
|
{% load staticfiles bootstrap3 i18n humanize %}
|
||||||
|
|
||||||
{% block css_extra %}
|
{% block css_extra %}
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/paymentfont/1.1.2/css/paymentfont.min.css"/>
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/paymentfont/1.1.2/css/paymentfont.min.css"/>
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
{{request.session.specs.memory|floatformat}} GB
|
{{request.session.specs.memory|floatformat}} GB
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-12 col-sm-3 col-md-3 col-lg-3 tbl-content">
|
<div class="col-xs-12 col-sm-3 col-md-3 col-lg-3 tbl-content">
|
||||||
{{request.session.specs.disk_size|floatformat}} GB
|
{{request.session.specs.disk_size|floatformat|intcomma}} GB
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-12 col-sm-4 col-md-4 col-lg-4 tbl-content">
|
<div class="col-xs-12 col-sm-4 col-md-4 col-lg-4 tbl-content">
|
||||||
{{request.session.template.name}}
|
{{request.session.template.name}}
|
||||||
|
@ -46,7 +46,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-6 col-sm-6 col-md-6 col-lg-6 tbl-no-padding">
|
<div class="col-xs-6 col-sm-6 col-md-6 col-lg-6 tbl-no-padding">
|
||||||
<div class="col-xs-12 col-sm-4 col-md-4 col-lg-4"></div>
|
<div class="col-xs-12 col-sm-4 col-md-4 col-lg-4"></div>
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6 tbl-total">{{request.session.specs.price}}
|
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6 tbl-total">{{request.session.specs.price|intcomma}}
|
||||||
CHF<span class="dcl-price-month">/{% trans "Month" %}</span>
|
CHF<span class="dcl-price-month">/{% trans "Month" %}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{% extends "hosting/base_short.html" %}
|
{% extends "hosting/base_short.html" %}
|
||||||
{% load staticfiles bootstrap3 %}
|
{% load staticfiles bootstrap3 humanize %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
@ -37,7 +37,7 @@
|
||||||
<div class="vm-detail-config">
|
<div class="vm-detail-config">
|
||||||
<p><span>{% trans "Cores" %}:</span><span class="value">{{virtual_machine.cores}}</span></p>
|
<p><span>{% trans "Cores" %}:</span><span class="value">{{virtual_machine.cores}}</span></p>
|
||||||
<p><span>{% trans "Memory" %}:</span><span class="value">{{virtual_machine.memory}} GB</span></p>
|
<p><span>{% trans "Memory" %}:</span><span class="value">{{virtual_machine.memory}} GB</span></p>
|
||||||
<p><span>{% trans "Disk" %}:</span><span class="value">{{virtual_machine.disk_size|floatformat:2}} GB</span></p>
|
<p><span>{% trans "Disk" %}:</span><span class="value">{{virtual_machine.disk_size|floatformat:2|intcomma}} GB</span></p>
|
||||||
<p><span>{% trans "Configuration" %}:</span><span class="value">{{virtual_machine.configuration}}</span></p>
|
<p><span>{% trans "Configuration" %}:</span><span class="value">{{virtual_machine.configuration}}</span></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -45,7 +45,7 @@
|
||||||
<h2 class="vm-detail-title">{% trans "Billing" %} <img src="{% static 'hosting/img/billing.svg' %}" class="un-icon"></h2>
|
<h2 class="vm-detail-title">{% trans "Billing" %} <img src="{% static 'hosting/img/billing.svg' %}" class="un-icon"></h2>
|
||||||
<div class="vm-vmid">
|
<div class="vm-vmid">
|
||||||
<div class="vm-item-subtitle">{% trans "Current Pricing" %}</div>
|
<div class="vm-item-subtitle">{% trans "Current Pricing" %}</div>
|
||||||
<div class="vm-item-lg">{{virtual_machine.price|floatformat}} CHF/{% trans "Month" %}</div>
|
<div class="vm-item-lg">{{virtual_machine.price|floatformat|intcomma}} CHF/{% trans "Month" %}</div>
|
||||||
<a class="btn btn-vm-invoice" href="{% url 'hosting:orders' order.pk %}">{% trans "See Invoice" %}</a>
|
<a class="btn btn-vm-invoice" href="{% url 'hosting:orders' order.pk %}">{% trans "See Invoice" %}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{% extends "hosting/base_short.html" %}
|
{% extends "hosting/base_short.html" %}
|
||||||
{% load staticfiles bootstrap3 i18n l10n %}
|
{% load staticfiles bootstrap3 i18n %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="dashboard-container">
|
<div class="dashboard-container">
|
||||||
<div class="dashboard-container-head">
|
<div class="dashboard-container-head">
|
||||||
|
@ -40,7 +40,7 @@
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for vm in vms %}
|
{% for vm in vms %}
|
||||||
<tr>
|
<tr>
|
||||||
<td data-header="ID">{{vm.vm_id|unlocalize}}</td>
|
<td data-header="ID">{{vm.vm_id}}</td>
|
||||||
<td data-header="IPv4">{% if vm.ipv4 %}{{vm.ipv4}}{% endif %}</td>
|
<td data-header="IPv4">{% if vm.ipv4 %}{{vm.ipv4}}{% endif %}</td>
|
||||||
<td data-header="IPv6">{% if vm.ipv6 %}{{vm.ipv6}}{% endif %}</td>
|
<td data-header="IPv6">{% if vm.ipv6 %}{{vm.ipv6}}{% endif %}</td>
|
||||||
<td data-header="{% trans 'Status' %}">
|
<td data-header="{% trans 'Status' %}">
|
||||||
|
|
Loading…
Reference in a new issue