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 | ||||
|     * #4266: [dcl cms] add promotional section plugin | ||||
|     * #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 djangocms_text_ckeditor.fields import HTMLField | ||||
| 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 | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										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, | ||||
| html { | ||||
|   width: 100%; | ||||
|   min-height: 100%; | ||||
|   height: 100%; | ||||
| } | ||||
| 
 | ||||
| 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 { | ||||
|   margin: 15px 0 0; | ||||
|   margin: 15px 0; | ||||
| } | ||||
| 
 | ||||
| footer { | ||||
|  | @ -96,3 +112,22 @@ footer { | |||
| footer a { | ||||
|   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) { | ||||
|   .navbar-default .navbar-nav>li>a, | ||||
|   .navbar-right .highlights-dropdown .dropdown-menu>li>a { | ||||
|   .navbar-default .navbar-nav>li a, | ||||
|   .navbar-right .highlights-dropdown .dropdown-menu>li a { | ||||
|     font-weight: 300; | ||||
|   } | ||||
|   .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-family: 'Lato', sans-serif; | ||||
|   padding: 1px 10px 1px 18px !important; | ||||
|  | @ -34,9 +34,9 @@ | |||
|   color: #333; | ||||
| } | ||||
| 
 | ||||
| .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:active { | ||||
| .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:active { | ||||
|   background: transparent; | ||||
|   text-decoration: underline !important; | ||||
| } | ||||
|  | @ -144,9 +144,9 @@ | |||
| } | ||||
| 
 | ||||
| @media (max-width: 767px) { | ||||
|   .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:hover { | ||||
|   .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:hover { | ||||
|     background-color: transparent; | ||||
|   } | ||||
| } | ||||
|  | @ -163,7 +163,7 @@ | |||
| } | ||||
| 
 | ||||
| .content-dashboard { | ||||
|   min-height: calc(100vh - 60px); | ||||
|   min-height: calc(100vh - 86px); | ||||
|   width: 100%; | ||||
|   margin: 0 auto; | ||||
|   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:focus, | ||||
| .navbar-transparent .navbar-nav>.open>a:hover { | ||||
|   color: #fff; | ||||
| } | ||||
| 
 | ||||
| .navbar-transparent .navbar-nav>li a { | ||||
|   color: #fff; | ||||
| } | ||||
| 
 | ||||
| .navbar-transparent .navbar-nav>li a:focus, | ||||
| .navbar-transparent .navbar-nav>li a:active, | ||||
|  | @ -123,22 +121,6 @@ textarea { | |||
|   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 { | ||||
|   transition: all 0.3s linear; | ||||
|   box-shadow: none; | ||||
|  | @ -1233,24 +1215,6 @@ footer { | |||
|   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) */ | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,4 +1,4 @@ | |||
| {% load staticfiles i18n %} | ||||
| {% load staticfiles i18n cms_tags sekizai_tags %} | ||||
| {% get_current_language as LANGUAGE_CODE %} | ||||
| 
 | ||||
| <!DOCTYPE html> | ||||
|  | @ -23,9 +23,15 @@ | |||
|     <!-- Custom CSS --> | ||||
|     <link href="{% static 'datacenterlight/css/common.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 %} | ||||
|     {% endblock css_extra %} | ||||
| 
 | ||||
|     {% render_block "css" postprocessor "compressor.contrib.sekizai.compress" %} | ||||
|     {% render_block "js" postprocessor "compressor.contrib.sekizai.compress" %} | ||||
| 
 | ||||
|     <!-- External Fonts --> | ||||
| 
 | ||||
|     <link rel="shortcut icon" href="{% static 'datacenterlight/img/favicon.ico' %}" type="image/x-icon"> | ||||
|  | @ -43,28 +49,17 @@ | |||
| </head> | ||||
| 
 | ||||
| <body> | ||||
|     {% cms_toolbar %} | ||||
| 
 | ||||
|     {% block navbar %} | ||||
|         {% include "hosting/includes/_navbar_user.html" %} | ||||
|     {% endblock navbar %} | ||||
|     {% render_placeholder cms_integration.navbar_placeholder %} | ||||
| 
 | ||||
|     <div class="{% if request.user.is_authenticated %}content-dashboard{% endif %}"> | ||||
|         {% block content %} | ||||
|         {% endblock %} | ||||
|     </div> | ||||
| 
 | ||||
|     <!-- Footer --> | ||||
|     {% 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 %} | ||||
|     {% render_placeholder cms_integration.footer_placeholder %} | ||||
| 
 | ||||
| 
 | ||||
|     <!-- Moment --> | ||||
|     <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" %} | ||||
| {% load staticfiles bootstrap3 i18n %} | ||||
| {% load staticfiles bootstrap3 i18n cms_tags humanize %} | ||||
| 
 | ||||
| {% block css_extra %} | ||||
|     <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/paymentfont/1.1.2/css/paymentfont.min.css"/> | ||||
|  | @ -78,7 +78,7 @@ | |||
|                         <hr> | ||||
|                         <p>{% trans "Configuration"%} <strong class="pull-right">{{request.session.template.name}}</strong></p> | ||||
|                         <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> | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| {% extends "datacenterlight/base_hosting.html" %} | ||||
| {% load staticfiles bootstrap3 i18n custom_tags %} | ||||
| {% load staticfiles bootstrap3 i18n custom_tags humanize %} | ||||
| 
 | ||||
| {% block content %} | ||||
| <div id="order-detail{{order.pk}}" class="order-detail-container"> | ||||
|  | @ -59,15 +59,15 @@ | |||
|                         </p> | ||||
|                         <p> | ||||
|                             <span>{% trans "Memory" %}: </span> | ||||
|                             <span class="pull-right">{{vm.memory}} GB</span> | ||||
|                             <span class="pull-right">{{vm.memory|intcomma}} GB</span> | ||||
|                         </p> | ||||
|                         <p> | ||||
|                             <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> | ||||
|                             <span>{% trans "Total" %}</span> | ||||
|                             <span class="pull-right">{{vm.price}} CHF</span> | ||||
|                             <span class="pull-right">{{vm.price|intcomma}} CHF</span> | ||||
|                         </p> | ||||
|                     </div> | ||||
|                 </div> | ||||
|  |  | |||
|  | @ -18,14 +18,13 @@ from hosting.forms import HostingUserLoginForm | |||
| from hosting.models import HostingOrder | ||||
| from membership.models import CustomUser, StripeCustomer | ||||
| from opennebula_api.serializers import VMTemplateSerializer | ||||
| from utils.forms import ( | ||||
|     BillingAddressForm, BillingAddressFormSignup | ||||
| ) | ||||
| from utils.forms import BillingAddressForm, BillingAddressFormSignup | ||||
| from utils.hosting_utils import get_vm_price | ||||
| from utils.stripe_utils import StripeUtils | ||||
| from utils.tasks import send_plain_email_task | ||||
| from .forms import ContactForm | ||||
| from .models import VMTemplate | ||||
| from .cms_models import CMSIntegration | ||||
| 
 | ||||
| logger = logging.getLogger(__name__) | ||||
| 
 | ||||
|  | @ -42,9 +41,10 @@ class ContactUsView(FormView): | |||
|             return self.render_to_response( | ||||
|                 self.get_context_data(contact_form=form)) | ||||
|         else: | ||||
|             return render(self.request, | ||||
|                           'datacenterlight/index.html', | ||||
|                           self.get_context_data(contact_form=form)) | ||||
|             return render( | ||||
|                 self.request, 'datacenterlight/index.html', | ||||
|                 self.get_context_data(contact_form=form) | ||||
|             ) | ||||
| 
 | ||||
|     def form_valid(self, form): | ||||
|         form.save() | ||||
|  | @ -68,10 +68,10 @@ class ContactUsView(FormView): | |||
|             return self.render_to_response( | ||||
|                 self.get_context_data(success=True, contact_form=form)) | ||||
|         else: | ||||
|             return render(self.request, | ||||
|                           'datacenterlight/index.html', | ||||
|                           self.get_context_data(success=True, | ||||
|                                                 contact_form=form)) | ||||
|             return render( | ||||
|                 self.request, 'datacenterlight/index.html', | ||||
|                 self.get_context_data(success=True, contact_form=form) | ||||
|             ) | ||||
| 
 | ||||
| 
 | ||||
| class IndexView(CreateView): | ||||
|  | @ -219,7 +219,8 @@ class PaymentOrderView(FormView): | |||
|             'stripe_key': settings.STRIPE_API_PUBLIC_KEY, | ||||
|             'site_url': reverse('datacenterlight:index'), | ||||
|             '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 | ||||
| 
 | ||||
|  | @ -354,7 +355,10 @@ class OrderConfirmationView(DetailView): | |||
|             'cc_brand': card_details.get('response_object').get('brand'), | ||||
|             'vm': request.session.get('specs'), | ||||
|             '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) | ||||
| 
 | ||||
|  |  | |||
|  | @ -82,6 +82,7 @@ INSTALLED_APPS = ( | |||
|     'django.contrib.admin', | ||||
|     'django.contrib.auth', | ||||
|     'django.contrib.contenttypes', | ||||
|     'django.contrib.humanize', | ||||
|     'django.contrib.sessions', | ||||
|     'django.contrib.messages', | ||||
|     'django.contrib.staticfiles', | ||||
|  | @ -255,8 +256,6 @@ USE_L10N = True | |||
| 
 | ||||
| USE_TZ = True | ||||
| 
 | ||||
| USE_THOUSAND_SEPARATOR = True | ||||
| 
 | ||||
| FORMAT_MODULE_PATH = [ | ||||
|     'dynamicweb.formats' | ||||
| ] | ||||
|  |  | |||
|  | @ -1,7 +1,6 @@ | |||
| {% extends "hosting/base_short.html" %} | ||||
| {% load staticfiles bootstrap3 %} | ||||
| {% load i18n %} | ||||
| {% load custom_tags %} | ||||
| {% load staticfiles bootstrap3 humanize i18n custom_tags %} | ||||
| 
 | ||||
| 
 | ||||
| {% block content %} | ||||
| <div id="order-detail{{order.pk}}" class="order-detail-container"> | ||||
|  | @ -130,7 +129,7 @@ | |||
|                         </p> | ||||
|                         <p> | ||||
|                             <span>{% trans "Total" %}</span> | ||||
|                             <span class="pull-right">{{vm.price}} CHF</span> | ||||
|                             <span class="pull-right">{{vm.price|intcomma}} CHF</span> | ||||
|                         </p> | ||||
|                     </div> | ||||
|                 </div> | ||||
|  | @ -143,7 +142,7 @@ | |||
|                     {% csrf_token %} | ||||
|                     <div class="row"> | ||||
|                         <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 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"> | ||||
|  |  | |||
|  | @ -1,6 +1,5 @@ | |||
| {% extends "hosting/base_short.html" %} | ||||
| {% load staticfiles bootstrap3 %} | ||||
| {% load i18n l10n %} | ||||
| {% load staticfiles bootstrap3 humanize i18n %} | ||||
| 
 | ||||
| {% block content %} | ||||
| <div class="dashboard-container"> | ||||
|  | @ -30,7 +29,7 @@ | |||
|                 <tr> | ||||
|                     <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-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"> | ||||
|                         <a class="btn btn-order-detail" href="{% url 'hosting:orders' order.pk %}">{% trans 'See Invoice' %}</a> | ||||
|                     </td> | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| {% extends "hosting/base_short.html" %} | ||||
| {% load staticfiles bootstrap3 i18n %} | ||||
| {% load staticfiles bootstrap3 i18n humanize %} | ||||
| 
 | ||||
| {% block css_extra %} | ||||
|     <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 | ||||
|                     </div> | ||||
|                     <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 class="col-xs-12 col-sm-4 col-md-4 col-lg-4 tbl-content"> | ||||
|                         {{request.session.template.name}} | ||||
|  | @ -46,7 +46,7 @@ | |||
|                     </div> | ||||
|                     <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-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> | ||||
|                         </div> | ||||
|                     </div> | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| {% extends "hosting/base_short.html" %} | ||||
| {% load staticfiles bootstrap3 %} | ||||
| {% load staticfiles bootstrap3 humanize %} | ||||
| {% load i18n %} | ||||
| 
 | ||||
| {% block content %} | ||||
|  | @ -37,7 +37,7 @@ | |||
| 				<div class="vm-detail-config"> | ||||
| 					<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 "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> | ||||
| 				</div> | ||||
| 			</div> | ||||
|  | @ -45,7 +45,7 @@ | |||
| 				<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-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> | ||||
| 				</div> | ||||
| 			</div> | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| {% extends "hosting/base_short.html" %} | ||||
| {% load staticfiles bootstrap3 i18n l10n %} | ||||
| {% load staticfiles bootstrap3 i18n %} | ||||
| {% block content %} | ||||
| <div class="dashboard-container"> | ||||
|     <div class="dashboard-container-head"> | ||||
|  | @ -40,7 +40,7 @@ | |||
|             <tbody> | ||||
|                 {% for vm in vms %} | ||||
|                     <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="IPv6">{% if vm.ipv6 %}{{vm.ipv6}}{% endif %}</td> | ||||
|                         <td data-header="{% trans 'Status' %}"> | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue