Attempt to merge master into task/3747/multiple_cards_support
							
								
								
									
										6
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						| 
						 | 
				
			
			@ -37,3 +37,9 @@ secret-key
 | 
			
		|||
*.mo
 | 
			
		||||
*.log
 | 
			
		||||
*.sql
 | 
			
		||||
 | 
			
		||||
/utils/optimize/
 | 
			
		||||
 | 
			
		||||
# to keep empty dirs
 | 
			
		||||
!.gitkeep
 | 
			
		||||
*.orig
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,11 +4,12 @@ python:
 | 
			
		|||
#   - "3.6"
 | 
			
		||||
 | 
			
		||||
env:
 | 
			
		||||
    - DJANGO_SECRET_KEY=0 OPENNEBULA_USERNAME='test' OPENNEBULA_PASSWORD='test' OPENNEBULA_PROTOCOL='http' OPENNEBULA_DOMAIN='test_domain' OPENNEBULA_PORT='2633' OPENNEBULA_ENDPOINT='/RPC2' DCL_TEXT='Data Center Light' CELERY_MAX_RETRIES=0
 | 
			
		||||
    - DJANGO_SECRET_KEY=0 OPENNEBULA_USERNAME='test' OPENNEBULA_PASSWORD='test' OPENNEBULA_PROTOCOL='http' OPENNEBULA_DOMAIN='test_domain' OPENNEBULA_PORT='2633' OPENNEBULA_ENDPOINT='/RPC2' DCL_TEXT='Data Center Light' CELERY_MAX_RETRIES=0 UNGLEICH_SITE_CONFIGS='{"localhost":{"MULTISITE_CMS_URL":"dynamicweb.urls"}}'
 | 
			
		||||
# install dependencies
 | 
			
		||||
install: "pip install -r requirements.txt"
 | 
			
		||||
script:
 | 
			
		||||
- flake8
 | 
			
		||||
- python manage.py compilemessages
 | 
			
		||||
- python manage.py test -v 3
 | 
			
		||||
# - coverage run --source='.' manage.py test dynamicweb -v 3
 | 
			
		||||
# - coverage report
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										108
									
								
								Changelog
									
										
									
									
									
								
							
							
						
						| 
						 | 
				
			
			@ -1,10 +1,112 @@
 | 
			
		|||
Next release:
 | 
			
		||||
1.9: 2018-05-16
 | 
			
		||||
    * #4559: [cms] enable discount on cms calculator
 | 
			
		||||
1.8: 2018-05-01
 | 
			
		||||
    * #4527: [hosting] cms calculator on non-cms pages for the hosting app
 | 
			
		||||
    * bgfix: [dcl] navbar dropdown target fix
 | 
			
		||||
    * bgfix: [hosting] login/signup pages footer link fix
 | 
			
		||||
1.7.2: 2018-04-30
 | 
			
		||||
    * bgfix: [cms] add favicon extension to ungleich cms pages
 | 
			
		||||
    * #4474: [cms] reduce heading slider side padding
 | 
			
		||||
1.7.1: 2018-04-21
 | 
			
		||||
    * #4481: [blog] fix de blog pages 500 error
 | 
			
		||||
    * #4370: [comic] new url /comic to show only comic blogs
 | 
			
		||||
1.7: 2018-04-20
 | 
			
		||||
    * bgfix: [all] Make /blog available on all domains
 | 
			
		||||
    * #4367: [dcl] email logo resolution fix
 | 
			
		||||
    * #4376: [cms] dcl promo section plugin link color changed to brighter shade
 | 
			
		||||
    * #4379: [dcl] pricing without VAT
 | 
			
		||||
    * bgfix: [blog] fix top menu items to show only one item
 | 
			
		||||
    * #4297: [cms] favicon as a page attribute for dcl template
 | 
			
		||||
1.6.5: 2018-04-08
 | 
			
		||||
    * #4396: [ungleich] add favicon to ungleich blog
 | 
			
		||||
    * #4327: [dcl] fix navbar logo repeat
 | 
			
		||||
    * bgfix: [hosting] fix broken footer links
 | 
			
		||||
    * bgfix: [dcl] remove ghost migrations from squashed migration
 | 
			
		||||
    * bgfix: [cms] redirect multi-tenant urls to /cms also
 | 
			
		||||
1.6.4: 2018-04-06
 | 
			
		||||
    * #4362: [cms] Fix the need of dummy home page for different CMS-based sites
 | 
			
		||||
1.6.3: 2018-04-05
 | 
			
		||||
    * #4377: [cms] header btn external link fix
 | 
			
		||||
    * #4378: [dcl cms] update CMS Integration to have different content for different domains
 | 
			
		||||
1.6.2: 2018-04-01
 | 
			
		||||
    * bgfix: [dcl] Fix user activation email style; add/correct some DE text
 | 
			
		||||
    * #4373: [dcl] update footer menu for pw reset/login/signup/activation request pages
 | 
			
		||||
1.6.1: 2018-03-28
 | 
			
		||||
    * bgfix: fix header slider interval issue
 | 
			
		||||
    * #4315: [cms] navbar consistency from cms page to static page
 | 
			
		||||
    * #4313: [hosting] footer style fix
 | 
			
		||||
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
 | 
			
		||||
1.5.5: 2018-03-22
 | 
			
		||||
    * #4278: [dcl cms] edit options for cms navbar and header plugins
 | 
			
		||||
    * bgfix: [dcl cms] fix link plugin issues and section image alignment
 | 
			
		||||
1.5.4: 2018-03-17
 | 
			
		||||
    * bgfix: [dcl cms] update DCLNavbarPlugin to allow change of brand logo and url
 | 
			
		||||
1.5.3: 2018-03-16
 | 
			
		||||
    * #4262: [dcl] Bugfix for incorrect template name
 | 
			
		||||
1.5.2: 2018-03-14
 | 
			
		||||
    *        [devuan, ipv6] Add google analytics code for devuanhosting.com, ipv6onlyhosting.{com,net}
 | 
			
		||||
    * #4246: [dcl cms] Enable full width options for DCL plugins
 | 
			
		||||
    * #4247: [dcl cms] Fix alignment issues with the "plain heading" option
 | 
			
		||||
1.5.1: 2018-03-11
 | 
			
		||||
    * bgfix: [dcl cms] Remove datacenterlight_content placeholder conf so that we can create a cms page without calculator
 | 
			
		||||
1.5: 2018-03-09
 | 
			
		||||
    * #3554: [dcl] Remove some more beta access resources (some were left in the earlier release)
 | 
			
		||||
    * #3452: [hosting] Back button management and cache control for hosting views
 | 
			
		||||
    * #3718: [dcl] downtime page
 | 
			
		||||
    * #4119: [dcl] CMS plugins for dcl pages
 | 
			
		||||
    * #4231: [hosting] add company fiscal number to invoice footer
 | 
			
		||||
1.4.1: 2018-02-23
 | 
			
		||||
    * bgfix: [dcl] fix header style for tos page
 | 
			
		||||
    * #3798: [dg] Redirect user to digital glarus on clicking logo in the email
 | 
			
		||||
    * #3554: [dcl] Remove beta access resources
 | 
			
		||||
    * #4166: [glasfaser] heading text not to be blocked by topnav on mobile after navbar menu click
 | 
			
		||||
    * bgfix: [hosting] Change sdd_size to ssd_size in VirtualMachineSerializer
 | 
			
		||||
    * bgfix: [dg] fix error on /digitalglarus/supporters/
 | 
			
		||||
    * #4166: [dcl] Fix scroll on top menu click
 | 
			
		||||
    * #4150: [ungleich] mobile font alignment
 | 
			
		||||
    * #3713: [dcl] clean up css
 | 
			
		||||
    * bgfix: [glasfaser] mobile top navigation toggle button fixed
 | 
			
		||||
1.4: 2018-02-22
 | 
			
		||||
    * #4104: [cms, nuglarus] Multisite and access control of cms pages per user
 | 
			
		||||
1.3.3: 2018-02-21
 | 
			
		||||
    * Add ALLOWED_HOST nüglarus.ch IDN
 | 
			
		||||
    * #4105: [cms] Add cms footer plugin
 | 
			
		||||
    * #4049: [blog] Replace header background image
 | 
			
		||||
    * #3670: [hosting] Shorten ssh key name
 | 
			
		||||
    * #4046: [hosting] Add sdd_size, hdd_size to VirtualMachineSerializer (No visual change)
 | 
			
		||||
    * bgfix: [hosting] increase invoice pdf resolution
 | 
			
		||||
1.3.2: 2018-01-16
 | 
			
		||||
    * #4000: [all] Replace all ungleich.com with ungleich.ch
 | 
			
		||||
    * #4067: [ungleich] mobile navbar toggle fix
 | 
			
		||||
    * #4103: [dcl] Add "Terms of Service" item to the footer
 | 
			
		||||
1.3.1: 2017-12-31
 | 
			
		||||
    * feature: [all] Load email configurations host, port and use_tls from env
 | 
			
		||||
    * bugfix:  [all] Use ungleich's smtp as relayhost for sending emails
 | 
			
		||||
1.3: 2017-12-27
 | 
			
		||||
    * #3911: [dcl] Integrate resend activation link into dcl landing payment page
 | 
			
		||||
    * #3972: [hosting] Add ungleich company info to invoice footer
 | 
			
		||||
    * #3974: [hosting] Improve invoice number: Show 404 for invoice resources that do not belong to the user
 | 
			
		||||
    * #3961: [ungleich] Add video cover to the header on ungleich.ch landing page and add corresponding cms plugin
 | 
			
		||||
    * #3774: [hosting] Update Stripe subscription on vm delete
 | 
			
		||||
    *        [ungleich] Update text on landing page
 | 
			
		||||
    * #3601: [dcl, hosting] Change minimum required RAM from 2GB to 1GB
 | 
			
		||||
    * #3973: [dcl] Update datacenterlight and glasfaser contact address to Linthal and company name to "ungleich glarus ag"
 | 
			
		||||
    * #3993: [dg] Fix new user membership payment by setting cardholder_name field for UserBillingAddressForm
 | 
			
		||||
    * #3799: [dg] Make digital glarus billing work as monthly subscription
 | 
			
		||||
    * #3994: [dg] Add a line on signup for clarifying dcl users can login without new signup
 | 
			
		||||
1.2.13: 2017-12-09
 | 
			
		||||
    * [cms] Introduce UngleichHeaderBackgroundImageAndTextSliderPlugin that allows to have scrolling images and texts
 | 
			
		||||
    * [cms] Remove <p> tag for ungleich cms customer item template
 | 
			
		||||
1.2.12: 2017-12-09
 | 
			
		||||
    * #3594: [digitalglarus] Remove white scroll bar on the right in mobile
 | 
			
		||||
    * #3905: [ungleich] Update ungleich.ch header into a slider
 | 
			
		||||
    * #3968: [ungleich] Fix navbar logo alignment
 | 
			
		||||
    *        [all] Enable logging custom modules
 | 
			
		||||
1.2.11: 2017-11-30
 | 
			
		||||
    * [all] TravisCI: Test against python 3.4.2 only
 | 
			
		||||
    * [ungleich] Remove data-replaced image in ungleich CMS services item
 | 
			
		||||
    plugin template
 | 
			
		||||
    * [ungleich] Remove data-replaced image in ungleich CMS services item plugin template
 | 
			
		||||
1.2.10: 2017-11-26
 | 
			
		||||
    * #3843: [ungleich] Add generic ungleich CMS template
 | 
			
		||||
    * #3672: [all] Clean existing automated tests
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,19 @@
 | 
			
		|||
from django.contrib import admin
 | 
			
		||||
 | 
			
		||||
from .models import BetaAccess, BetaAccessVMType, BetaAccessVM
 | 
			
		||||
# Register your models here.
 | 
			
		||||
from cms.admin.placeholderadmin import PlaceholderAdminMixin
 | 
			
		||||
from cms.extensions import PageExtensionAdmin
 | 
			
		||||
from .cms_models import CMSIntegration, CMSFaviconExtension
 | 
			
		||||
from .models import VMPricing, VMTemplate
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
admin.site.register(BetaAccess)
 | 
			
		||||
admin.site.register(BetaAccessVMType)
 | 
			
		||||
admin.site.register(BetaAccessVM)
 | 
			
		||||
class CMSIntegrationAdmin(PlaceholderAdminMixin, admin.ModelAdmin):
 | 
			
		||||
    list_display = ('name', 'domain')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CMSFaviconExtensionAdmin(PageExtensionAdmin):
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
admin.site.register(CMSIntegration, CMSIntegrationAdmin)
 | 
			
		||||
admin.site.register(CMSFaviconExtension, CMSFaviconExtensionAdmin)
 | 
			
		||||
admin.site.register(VMPricing)
 | 
			
		||||
admin.site.register(VMTemplate)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										305
									
								
								datacenterlight/cms_models.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,305 @@
 | 
			
		|||
from cms.extensions import PageExtension
 | 
			
		||||
from cms.extensions.extension_pool import extension_pool
 | 
			
		||||
from cms.models.fields import PlaceholderField
 | 
			
		||||
from cms.models.pluginmodel import CMSPlugin
 | 
			
		||||
from django.contrib.sites.models import Site
 | 
			
		||||
from django.db import models
 | 
			
		||||
from django.utils.safestring import mark_safe
 | 
			
		||||
from djangocms_text_ckeditor.fields import HTMLField
 | 
			
		||||
from filer.fields.file import FilerFileField
 | 
			
		||||
from filer.fields.image import FilerImageField
 | 
			
		||||
 | 
			
		||||
from datacenterlight.models import VMPricing, VMTemplate
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CMSIntegration(models.Model):
 | 
			
		||||
    name = models.CharField(
 | 
			
		||||
        max_length=100, 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+'
 | 
			
		||||
    )
 | 
			
		||||
    calculator_placeholder = PlaceholderField(
 | 
			
		||||
        'datacenterlight_calculator',
 | 
			
		||||
        related_name='dcl-calculator-placeholder+'
 | 
			
		||||
    )
 | 
			
		||||
    domain = models.ForeignKey(Site, null=True, blank=True)
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        unique_together = ('name', 'domain')
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return self.name
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CMSFaviconExtension(PageExtension):
 | 
			
		||||
    favicon = FilerFileField(related_name="cms_favicon_image")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extension_pool.register(CMSFaviconExtension)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Models for CMS Plugins
 | 
			
		||||
 | 
			
		||||
class DCLSectionPluginModel(CMSPlugin):
 | 
			
		||||
    heading = models.CharField(
 | 
			
		||||
        blank=True, null=True, max_length=100,
 | 
			
		||||
        help_text='An optional heading for the Section',
 | 
			
		||||
    )
 | 
			
		||||
    content = HTMLField()
 | 
			
		||||
    TEXT_DIRECTIONS = (
 | 
			
		||||
        ('left', 'Left'),
 | 
			
		||||
        ('right', 'Right')
 | 
			
		||||
    )
 | 
			
		||||
    text_direction = models.CharField(
 | 
			
		||||
        choices=TEXT_DIRECTIONS, max_length=10, default=True,
 | 
			
		||||
        help_text='The alignment of text in the section'
 | 
			
		||||
    )
 | 
			
		||||
    html_id = models.SlugField(
 | 
			
		||||
        blank=True, null=True,
 | 
			
		||||
        help_text=(
 | 
			
		||||
            'An optional html id for the Section. Required to set as target '
 | 
			
		||||
            'of a link on page'
 | 
			
		||||
        )
 | 
			
		||||
    )
 | 
			
		||||
    plain_heading = models.BooleanField(
 | 
			
		||||
        default=False,
 | 
			
		||||
        help_text='Select to keep the heading style simpler.'
 | 
			
		||||
    )
 | 
			
		||||
    center_on_mobile = models.BooleanField(
 | 
			
		||||
        default=False,
 | 
			
		||||
        help_text='Select to center align content on small screens.'
 | 
			
		||||
    )
 | 
			
		||||
    background_gradient = models.BooleanField(
 | 
			
		||||
        default=False,
 | 
			
		||||
        help_text='Select to add a gradient background to the section.'
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    def get_extra_classes(self):
 | 
			
		||||
        extra_classes = self.text_direction
 | 
			
		||||
        if self.center_on_mobile:
 | 
			
		||||
            extra_classes += ' section-sm-center'
 | 
			
		||||
        if self.background_gradient:
 | 
			
		||||
            extra_classes += ' section-gradient'
 | 
			
		||||
        if self.plain_heading:
 | 
			
		||||
            extra_classes += ' split-section-plain'
 | 
			
		||||
        return extra_classes
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return '#' + self.html_id if self.html_id else str(self.pk)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DCLBannerListPluginModel(CMSPlugin):
 | 
			
		||||
    heading = models.CharField(
 | 
			
		||||
        blank=True, null=True, max_length=100,
 | 
			
		||||
        help_text='An optional heading for the Section',
 | 
			
		||||
    )
 | 
			
		||||
    html_id = models.SlugField(
 | 
			
		||||
        blank=True, null=True,
 | 
			
		||||
        help_text=(
 | 
			
		||||
            'An optional html id for the Section. Required to set as target '
 | 
			
		||||
            'of a link on page'
 | 
			
		||||
        )
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return '#' + self.html_id if self.html_id else str(self.pk)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DCLBannerItemPluginModel(CMSPlugin):
 | 
			
		||||
    content = HTMLField()
 | 
			
		||||
    banner_text = HTMLField(
 | 
			
		||||
        blank=True, null=True, max_length=100,
 | 
			
		||||
        help_text='Optional text to be shown as banner in other half.',
 | 
			
		||||
    )
 | 
			
		||||
    banner_image = FilerImageField(
 | 
			
		||||
        on_delete=models.CASCADE, null=True, blank=True,
 | 
			
		||||
        help_text='Optional image to be used in the banner in other half.'
 | 
			
		||||
    )
 | 
			
		||||
    TEXT_DIRECTIONS = (
 | 
			
		||||
        ('left', 'Left'),
 | 
			
		||||
        ('right', 'Right')
 | 
			
		||||
    )
 | 
			
		||||
    text_direction = models.CharField(
 | 
			
		||||
        choices=TEXT_DIRECTIONS, max_length=10, default=True,
 | 
			
		||||
        help_text='The alignment of text in the section'
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    def get_extra_classes(self):
 | 
			
		||||
        extra_classes = ''
 | 
			
		||||
        if self.text_direction == 'left':
 | 
			
		||||
            extra_classes = 'flex-row-rev'
 | 
			
		||||
        return extra_classes
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DCLLinkPluginModel(CMSPlugin):
 | 
			
		||||
    target = models.CharField(
 | 
			
		||||
        max_length=100,
 | 
			
		||||
        help_text='Url or #id to navigate to'
 | 
			
		||||
    )
 | 
			
		||||
    text = models.CharField(
 | 
			
		||||
        max_length=50,
 | 
			
		||||
        help_text='Text for the menu item'
 | 
			
		||||
    )
 | 
			
		||||
    title = models.CharField(
 | 
			
		||||
        blank=True, null=True, max_length=100,
 | 
			
		||||
        help_text=(
 | 
			
		||||
            'Optional title text, that will be shown when a user '
 | 
			
		||||
            'hovers over the link'
 | 
			
		||||
        )
 | 
			
		||||
    )
 | 
			
		||||
    separator = models.BooleanField(
 | 
			
		||||
        default=False,
 | 
			
		||||
        help_text='Select to include a separator after the previous link'
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DCLNavbarPluginModel(CMSPlugin):
 | 
			
		||||
    logo_light = FilerImageField(
 | 
			
		||||
        on_delete=models.CASCADE, null=True, blank=True,
 | 
			
		||||
        help_text='Logo to be used on transparent navbar',
 | 
			
		||||
        related_name="dcl_navbar_logo_light",
 | 
			
		||||
    )
 | 
			
		||||
    logo_dark = FilerImageField(
 | 
			
		||||
        on_delete=models.CASCADE, null=True, blank=True,
 | 
			
		||||
        help_text='Logo to be used on white navbar',
 | 
			
		||||
        related_name="dcl_navbar_logo_dark",
 | 
			
		||||
    )
 | 
			
		||||
    logo_url = models.URLField(max_length=300, null=True, blank=True)
 | 
			
		||||
    language_dropdown = models.BooleanField(
 | 
			
		||||
        default=True,
 | 
			
		||||
        help_text='Select to include the language selection dropdown.'
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    def get_logo_dark(self):
 | 
			
		||||
        # used only if atleast one logo exists
 | 
			
		||||
        return self.logo_dark.url if self.logo_dark else self.logo_light.url
 | 
			
		||||
 | 
			
		||||
    def get_logo_light(self):
 | 
			
		||||
        # used only if atleast one logo exists
 | 
			
		||||
        return self.logo_light.url if self.logo_light else self.logo_dark.url
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DCLNavbarDropdownPluginModel(CMSPlugin):
 | 
			
		||||
    target = models.CharField(
 | 
			
		||||
        max_length=100, null=True, blank=True,
 | 
			
		||||
        help_text='Optional Url or #id to navigate on click'
 | 
			
		||||
    )
 | 
			
		||||
    text = models.CharField(
 | 
			
		||||
        max_length=50,
 | 
			
		||||
        help_text='Text for the dropdown toggle'
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DCLContactPluginModel(CMSPlugin):
 | 
			
		||||
    heading = models.CharField(max_length=100, default="Contact", blank=True)
 | 
			
		||||
    organization_name = models.CharField(
 | 
			
		||||
        max_length=100, default="ungleich glarus ag", blank=True
 | 
			
		||||
    )
 | 
			
		||||
    email = models.EmailField(max_length=200, default="info@ungleich.ch")
 | 
			
		||||
    address = models.CharField(
 | 
			
		||||
        max_length=100, default="In der Au 7, Schwanden 8762", blank=True
 | 
			
		||||
    )
 | 
			
		||||
    country = models.CharField(
 | 
			
		||||
        max_length=100, default="Switzerland", blank=True
 | 
			
		||||
    )
 | 
			
		||||
    form_header = models.CharField(
 | 
			
		||||
        max_length=100, default="Send us a message.", blank=True
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DCLFooterPluginModel(CMSPlugin):
 | 
			
		||||
    copyright_label = models.CharField(
 | 
			
		||||
        max_length=100, default='ungleich glarus ag', blank=True,
 | 
			
		||||
        help_text='Name of the company alongside the copyright year'
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DCLSectionIconPluginModel(CMSPlugin):
 | 
			
		||||
    fontawesome_icon_name = models.CharField(
 | 
			
		||||
        max_length=30,
 | 
			
		||||
        help_text=mark_safe(
 | 
			
		||||
            'Name of the fontawesome icon to use. '
 | 
			
		||||
            '<a href="https://fontawesome.com/v4.7.0/icons/" target="_blank">'
 | 
			
		||||
            'Refer docs.</a>'
 | 
			
		||||
        )
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DCLSectionImagePluginModel(CMSPlugin):
 | 
			
		||||
    image = FilerImageField(
 | 
			
		||||
        on_delete=models.CASCADE,
 | 
			
		||||
        help_text=(
 | 
			
		||||
            'Image file to be used in section. Add multiple plugins '
 | 
			
		||||
            'to add more than one image'
 | 
			
		||||
        )
 | 
			
		||||
    )
 | 
			
		||||
    caption = models.CharField(
 | 
			
		||||
        max_length=100, null=True, blank=True,
 | 
			
		||||
        help_text='Optional caption for the image.'
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DCLSectionPromoPluginModel(CMSPlugin):
 | 
			
		||||
    background_image = FilerImageField(
 | 
			
		||||
        on_delete=models.CASCADE, null=True, blank=True,
 | 
			
		||||
        help_text=('Optional background image for the Promo Section'),
 | 
			
		||||
        related_name="dcl_section_promo_promo",
 | 
			
		||||
    )
 | 
			
		||||
    heading = models.CharField(
 | 
			
		||||
        blank=True, null=True, max_length=100,
 | 
			
		||||
        help_text='An optional heading for the Promo Section',
 | 
			
		||||
    )
 | 
			
		||||
    subheading = models.CharField(
 | 
			
		||||
        blank=True, null=True, max_length=200,
 | 
			
		||||
        help_text='An optional subheading for the Promo Section',
 | 
			
		||||
    )
 | 
			
		||||
    content = HTMLField()
 | 
			
		||||
    html_id = models.SlugField(
 | 
			
		||||
        blank=True, null=True,
 | 
			
		||||
        help_text=(
 | 
			
		||||
            'An optional html id for the Section. Required to set as target '
 | 
			
		||||
            'of a link on page'
 | 
			
		||||
        )
 | 
			
		||||
    )
 | 
			
		||||
    plain_heading = models.BooleanField(
 | 
			
		||||
        default=False,
 | 
			
		||||
        help_text='Select to keep the heading style simpler.'
 | 
			
		||||
    )
 | 
			
		||||
    text_center = models.BooleanField(
 | 
			
		||||
        default=False,
 | 
			
		||||
        help_text='Select to center align content on small screens.'
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return '#' + self.html_id if self.html_id else str(self.pk)
 | 
			
		||||
 | 
			
		||||
    def get_extra_classes(self):
 | 
			
		||||
        extra_classes = ''
 | 
			
		||||
        if self.text_center:
 | 
			
		||||
            extra_classes += ' text-center'
 | 
			
		||||
        if self.plain_heading:
 | 
			
		||||
            extra_classes += ' promo-section-plain'
 | 
			
		||||
        if self.background_image:
 | 
			
		||||
            extra_classes += ' promo-with-bg'
 | 
			
		||||
        return extra_classes
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DCLCalculatorPluginModel(CMSPlugin):
 | 
			
		||||
    pricing = models.ForeignKey(
 | 
			
		||||
        VMPricing,
 | 
			
		||||
        related_name="dcl_custom_pricing_vm_pricing",
 | 
			
		||||
        help_text='Choose a pricing that will be associated with this '
 | 
			
		||||
                  'Calculator'
 | 
			
		||||
    )
 | 
			
		||||
    vm_type = models.CharField(
 | 
			
		||||
        max_length=50, choices=VMTemplate.VM_TYPE_CHOICES,
 | 
			
		||||
        default=VMTemplate.PUBLIC
 | 
			
		||||
    )
 | 
			
		||||
							
								
								
									
										170
									
								
								datacenterlight/cms_plugins.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,170 @@
 | 
			
		|||
from cms.plugin_base import CMSPluginBase
 | 
			
		||||
from cms.plugin_pool import plugin_pool
 | 
			
		||||
 | 
			
		||||
from .cms_models import (
 | 
			
		||||
    DCLBannerItemPluginModel, DCLBannerListPluginModel, DCLContactPluginModel,
 | 
			
		||||
    DCLFooterPluginModel, DCLLinkPluginModel, DCLNavbarDropdownPluginModel,
 | 
			
		||||
    DCLSectionIconPluginModel, DCLSectionImagePluginModel,
 | 
			
		||||
    DCLSectionPluginModel, DCLNavbarPluginModel,
 | 
			
		||||
    DCLSectionPromoPluginModel, DCLCalculatorPluginModel
 | 
			
		||||
)
 | 
			
		||||
from .models import VMTemplate
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@plugin_pool.register_plugin
 | 
			
		||||
class DCLSectionPlugin(CMSPluginBase):
 | 
			
		||||
    module = "Datacenterlight"
 | 
			
		||||
    name = "DCL Section Plugin"
 | 
			
		||||
    model = DCLSectionPluginModel
 | 
			
		||||
    render_template = "datacenterlight/cms/section.html"
 | 
			
		||||
    cache = False
 | 
			
		||||
    allow_children = True
 | 
			
		||||
    child_classes = [
 | 
			
		||||
        'DCLSectionIconPlugin', 'DCLSectionImagePlugin',
 | 
			
		||||
        'DCLSectionPromoPlugin', 'UngleichHTMLPlugin', 'DCLCalculatorPlugin'
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    def render(self, context, instance, placeholder):
 | 
			
		||||
        context = super(DCLSectionPlugin, self).render(
 | 
			
		||||
            context, instance, placeholder
 | 
			
		||||
        )
 | 
			
		||||
        context['children_to_side'] = []
 | 
			
		||||
        context['children_to_content'] = []
 | 
			
		||||
        context['children_calculator'] = []
 | 
			
		||||
        if instance.child_plugin_instances is not None:
 | 
			
		||||
            right_children = [
 | 
			
		||||
                'DCLSectionImagePluginModel',
 | 
			
		||||
                'DCLSectionIconPluginModel',
 | 
			
		||||
            ]
 | 
			
		||||
            for child in instance.child_plugin_instances:
 | 
			
		||||
                if child.__class__.__name__ in right_children:
 | 
			
		||||
                    context['children_to_side'].append(child)
 | 
			
		||||
                elif child.plugin_type == 'DCLCalculatorPlugin':
 | 
			
		||||
                    context['children_calculator'].append(child)
 | 
			
		||||
                else:
 | 
			
		||||
                    context['children_to_content'].append(child)
 | 
			
		||||
        return context
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@plugin_pool.register_plugin
 | 
			
		||||
class DCLSectionIconPlugin(CMSPluginBase):
 | 
			
		||||
    module = "Datacenterlight"
 | 
			
		||||
    name = "DCL Section Icon Plugin"
 | 
			
		||||
    model = DCLSectionIconPluginModel
 | 
			
		||||
    render_template = "datacenterlight/cms/section_icon.html"
 | 
			
		||||
    cache = False
 | 
			
		||||
    require_parent = True
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@plugin_pool.register_plugin
 | 
			
		||||
class DCLSectionImagePlugin(CMSPluginBase):
 | 
			
		||||
    module = "Datacenterlight"
 | 
			
		||||
    name = "DCL Section Image Plugin"
 | 
			
		||||
    model = DCLSectionImagePluginModel
 | 
			
		||||
    render_template = "datacenterlight/cms/section_image.html"
 | 
			
		||||
    cache = False
 | 
			
		||||
    require_parent = True
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@plugin_pool.register_plugin
 | 
			
		||||
class DCLSectionPromoPlugin(CMSPluginBase):
 | 
			
		||||
    module = "Datacenterlight"
 | 
			
		||||
    name = "DCL Section Promo Plugin"
 | 
			
		||||
    model = DCLSectionPromoPluginModel
 | 
			
		||||
    render_template = "datacenterlight/cms/section_promo.html"
 | 
			
		||||
    cache = False
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@plugin_pool.register_plugin
 | 
			
		||||
class DCLCalculatorPlugin(CMSPluginBase):
 | 
			
		||||
    module = "Datacenterlight"
 | 
			
		||||
    name = "DCL Calculator Plugin"
 | 
			
		||||
    model = DCLCalculatorPluginModel
 | 
			
		||||
    render_template = "datacenterlight/cms/calculator.html"
 | 
			
		||||
    cache = False
 | 
			
		||||
    require_parent = True
 | 
			
		||||
 | 
			
		||||
    def render(self, context, instance, placeholder):
 | 
			
		||||
        context = super(DCLCalculatorPlugin, self).render(
 | 
			
		||||
            context, instance, placeholder
 | 
			
		||||
        )
 | 
			
		||||
        context['templates'] = VMTemplate.objects.filter(
 | 
			
		||||
            vm_type=instance.vm_type
 | 
			
		||||
        )
 | 
			
		||||
        return context
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@plugin_pool.register_plugin
 | 
			
		||||
class DCLBannerListPlugin(CMSPluginBase):
 | 
			
		||||
    module = "Datacenterlight"
 | 
			
		||||
    name = "DCL Banner List Plugin"
 | 
			
		||||
    model = DCLBannerListPluginModel
 | 
			
		||||
    render_template = "datacenterlight/cms/banner_list.html"
 | 
			
		||||
    cache = False
 | 
			
		||||
    allow_children = True
 | 
			
		||||
    child_classes = ['DCLBannerItemPlugin']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@plugin_pool.register_plugin
 | 
			
		||||
class DCLBannerItemPlugin(CMSPluginBase):
 | 
			
		||||
    module = "Datacenterlight"
 | 
			
		||||
    name = "DCL Banner Item Plugin"
 | 
			
		||||
    model = DCLBannerItemPluginModel
 | 
			
		||||
    render_template = "datacenterlight/cms/banner_item.html"
 | 
			
		||||
    cache = False
 | 
			
		||||
    require_parent = True
 | 
			
		||||
    parent_classes = ['DCLBannerListPlugin']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@plugin_pool.register_plugin
 | 
			
		||||
class DCLNavbarPlugin(CMSPluginBase):
 | 
			
		||||
    module = "Datacenterlight"
 | 
			
		||||
    name = "DCL Navbar Plugin"
 | 
			
		||||
    model = DCLNavbarPluginModel
 | 
			
		||||
    render_template = "datacenterlight/cms/navbar.html"
 | 
			
		||||
    cache = False
 | 
			
		||||
    allow_children = True
 | 
			
		||||
    child_classes = ['DCLLinkPlugin', 'DCLNavbarDropdownPlugin']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@plugin_pool.register_plugin
 | 
			
		||||
class DCLNavbarDropdownPlugin(CMSPluginBase):
 | 
			
		||||
    module = "Datacenterlight"
 | 
			
		||||
    name = "DCL Navbar Dropdown Plugin"
 | 
			
		||||
    model = DCLNavbarDropdownPluginModel
 | 
			
		||||
    render_template = "datacenterlight/cms/navbar_dropdown.html"
 | 
			
		||||
    cache = False
 | 
			
		||||
    allow_children = True
 | 
			
		||||
    child_classes = ['DCLLinkPlugin']
 | 
			
		||||
    require_parent = True
 | 
			
		||||
    parent_classes = ['DCLNavbarPlugin']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@plugin_pool.register_plugin
 | 
			
		||||
class DCLLinkPlugin(CMSPluginBase):
 | 
			
		||||
    module = "Datacenterlight"
 | 
			
		||||
    name = "DCL Link Plugin"
 | 
			
		||||
    model = DCLLinkPluginModel
 | 
			
		||||
    render_template = "datacenterlight/cms/link.html"
 | 
			
		||||
    cache = False
 | 
			
		||||
    require_parent = True
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@plugin_pool.register_plugin
 | 
			
		||||
class DCLContactPlugin(CMSPluginBase):
 | 
			
		||||
    module = "Datacenterlight"
 | 
			
		||||
    name = "DCL Contact Plugin"
 | 
			
		||||
    model = DCLContactPluginModel
 | 
			
		||||
    render_template = "datacenterlight/cms/contact.html"
 | 
			
		||||
    cache = False
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@plugin_pool.register_plugin
 | 
			
		||||
class DCLFooterPlugin(CMSPluginBase):
 | 
			
		||||
    module = "Datacenterlight"
 | 
			
		||||
    name = "DCL Footer Plugin"
 | 
			
		||||
    model = DCLFooterPluginModel
 | 
			
		||||
    render_template = "datacenterlight/cms/footer.html"
 | 
			
		||||
    cache = False
 | 
			
		||||
    allow_children = True
 | 
			
		||||
    child_classes = ['DCLLinkPlugin']
 | 
			
		||||
							
								
								
									
										24
									
								
								datacenterlight/cms_toolbar.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,24 @@
 | 
			
		|||
from cms.extensions.toolbar import ExtensionToolbar
 | 
			
		||||
from cms.toolbar_pool import toolbar_pool
 | 
			
		||||
from django.utils.translation import ugettext_lazy as _
 | 
			
		||||
 | 
			
		||||
from .cms_models import CMSFaviconExtension
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@toolbar_pool.register
 | 
			
		||||
class CMSFaviconExtensionToolbar(ExtensionToolbar):
 | 
			
		||||
    # defineds the model for the current toolbar
 | 
			
		||||
    model = CMSFaviconExtension
 | 
			
		||||
 | 
			
		||||
    def populate(self):
 | 
			
		||||
        # setup the extension toolbar with permissions and sanity checks
 | 
			
		||||
        current_page_menu = self._setup_extension_toolbar()
 | 
			
		||||
        # if it's all ok
 | 
			
		||||
        if current_page_menu:
 | 
			
		||||
            # retrieves the instance of the current extension (if any) and the toolbar item url
 | 
			
		||||
            page_extension, url = self.get_page_extension_admin()
 | 
			
		||||
            if url:
 | 
			
		||||
                # adds a toolbar item
 | 
			
		||||
                current_page_menu.add_modal_item(
 | 
			
		||||
                    _('CMS Favicon'), url=url, disabled=not self.toolbar.edit_mode
 | 
			
		||||
                )
 | 
			
		||||
| 
						 | 
				
			
			@ -1,26 +1,9 @@
 | 
			
		|||
from django import forms
 | 
			
		||||
 | 
			
		||||
from .models import BetaAccess, ContactUs
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class BetaAccessForm(forms.ModelForm):
 | 
			
		||||
    email = forms.CharField(widget=forms.EmailInput())
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        fields = ['name', 'email']
 | 
			
		||||
        model = BetaAccess
 | 
			
		||||
from .models import ContactUs
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ContactForm(forms.ModelForm):
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        fields = ['name', 'email', 'message']
 | 
			
		||||
        model = ContactUs
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# class BetaAccessVMForm(forms.ModelForm):
 | 
			
		||||
#     type = forms.CharField(widget=forms.EmailInput())
 | 
			
		||||
 | 
			
		||||
#     class Meta:
 | 
			
		||||
#         fields = ['email']
 | 
			
		||||
#         model = BetaAccessVM
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,65 +8,35 @@ msgid ""
 | 
			
		|||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PACKAGE VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2017-11-27 07:36+0000\n"
 | 
			
		||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 | 
			
		||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
			
		||||
"POT-Creation-Date: 2018-05-12 21:43+0530\n"
 | 
			
		||||
"PO-Revision-Date: 2018-03-30 23:22+0000\n"
 | 
			
		||||
"Last-Translator: b'Anonymous User <coder.purple+25@gmail.com>'\n"
 | 
			
		||||
"Language-Team: LANGUAGE <LL@li.org>\n"
 | 
			
		||||
"Language: \n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 | 
			
		||||
"X-Translated-Using: django-rosetta 0.8.1\n"
 | 
			
		||||
 | 
			
		||||
msgid "CMS Favicon"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, python-format
 | 
			
		||||
msgid "Your New VM %(vm_name)s at Data Center Light"
 | 
			
		||||
msgstr "Deine neue VM %(vm_name)s bei Data Center Light"
 | 
			
		||||
 | 
			
		||||
msgid "Enter name"
 | 
			
		||||
msgstr "Name"
 | 
			
		||||
msgid "All Rights Reserved"
 | 
			
		||||
msgstr "Alle Rechte vorbehalten"
 | 
			
		||||
 | 
			
		||||
msgid "Enter email"
 | 
			
		||||
msgstr "E-Mail-Adresse"
 | 
			
		||||
msgid "Toggle navigation"
 | 
			
		||||
msgstr "Umschalten"
 | 
			
		||||
 | 
			
		||||
msgid "Request Beta Access"
 | 
			
		||||
msgstr "Beantrage Beta-Zugang"
 | 
			
		||||
msgid "Login"
 | 
			
		||||
msgstr "Anmelden"
 | 
			
		||||
 | 
			
		||||
msgid "Request Sent"
 | 
			
		||||
msgstr "Anfrage verschickt"
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"Thank you for your subscription! You will receive a confirmation mail from "
 | 
			
		||||
"our team"
 | 
			
		||||
msgid "Dashboard"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Vielen dank für Ihre Anmeldung. Sie erhalten in kürze eine Bestätigungsmail "
 | 
			
		||||
"von unserem Team"
 | 
			
		||||
 | 
			
		||||
msgid "VM hosting"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
msgid "month"
 | 
			
		||||
msgstr "Monat"
 | 
			
		||||
 | 
			
		||||
msgid "VAT included"
 | 
			
		||||
msgstr "MwSt. inklusive"
 | 
			
		||||
 | 
			
		||||
msgid "Hosted in Switzerland"
 | 
			
		||||
msgstr "Standort: Schweiz"
 | 
			
		||||
 | 
			
		||||
msgid "Please enter a value in range 1 - 48."
 | 
			
		||||
msgstr "Bitte gib einen Wert von 1 bis 48 ein."
 | 
			
		||||
 | 
			
		||||
msgid "Please enter a value in range 2 - 200."
 | 
			
		||||
msgstr "Bitte gib einen Wert von 2 bis 200 ein."
 | 
			
		||||
 | 
			
		||||
msgid "Please enter a value in range 10 - 2000."
 | 
			
		||||
msgstr "Bitte gib einen Wert von 10 bis 200 ein."
 | 
			
		||||
 | 
			
		||||
msgid "GB Storage (SSD)"
 | 
			
		||||
msgstr "GB Storage (SSD)"
 | 
			
		||||
 | 
			
		||||
msgid "Continue"
 | 
			
		||||
msgstr "Weiter"
 | 
			
		||||
 | 
			
		||||
msgid "Thank you for contacting us."
 | 
			
		||||
msgstr "Nachricht gesendet."
 | 
			
		||||
| 
						 | 
				
			
			@ -100,32 +70,6 @@ msgstr ""
 | 
			
		|||
msgid "SUBMIT"
 | 
			
		||||
msgstr "ABSENDEN"
 | 
			
		||||
 | 
			
		||||
msgid "Your Data Center Light Team"
 | 
			
		||||
msgstr "Dein Data Center Light Team"
 | 
			
		||||
 | 
			
		||||
msgid "Thank you for your request."
 | 
			
		||||
msgstr "Vielen Dank für Deine Anfrage."
 | 
			
		||||
 | 
			
		||||
msgid "You are one step away from being our beta tester!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Sie sind nur noch einen Schritt davon entfernt, unser Beta-Tester zu werden!"
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"Currently we are running our tests to make sure everything runs perfectly."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Momentan testen wir die Beta-Umgebung um sie für Ihren Gebrauch "
 | 
			
		||||
"sicherzustellen."
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"In the meantime, we would like to ask you a little patience<br/> until our "
 | 
			
		||||
"team contacts you with beta access."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Wir werden dann sobald als möglich Ihren Beta-Zugang erstellen und Sie "
 | 
			
		||||
"daraufhin kontaktieren.Bis dahin bitten wir Sie um etwas Geduld."
 | 
			
		||||
 | 
			
		||||
msgid "Thank you!"
 | 
			
		||||
msgstr "Vielen Dank!"
 | 
			
		||||
 | 
			
		||||
msgid "Data Center Light Account Activation"
 | 
			
		||||
msgstr "Data Center Light Account Aktivierung"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -136,7 +80,7 @@ msgid ""
 | 
			
		|||
"#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 "
 | 
			
		||||
"none; color: #4382c8; font-weight: 400;\">hier</a> um deinen Data Center "
 | 
			
		||||
"Light Account zu aktivieren."
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
| 
						 | 
				
			
			@ -156,14 +100,26 @@ msgstr "Deine E-Mail-Adresse"
 | 
			
		|||
msgid "Password"
 | 
			
		||||
msgstr "Passwort"
 | 
			
		||||
 | 
			
		||||
msgid "You can reset your password here"
 | 
			
		||||
msgstr "Du kannst dein Passwort hier zurück setzen"
 | 
			
		||||
#, python-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"You can reset your password <a href=\"%(base_url)s%(reset_password_url)s\" "
 | 
			
		||||
"style=\"text-decoration: none; color: #4382c8; font-weight: 400;\">here</a>."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Du kannst dein Passwort <a href=\"%(base_url)s%(reset_password_url)s\" style="
 | 
			
		||||
"\"text-decoration: none; color: #4382c8; font-weight: 400;\">hier</a> "
 | 
			
		||||
"zurücksetzen."
 | 
			
		||||
 | 
			
		||||
msgid "Your Data Center Light Team"
 | 
			
		||||
msgstr "Dein Data Center Light Team"
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"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."
 | 
			
		||||
 | 
			
		||||
msgid "You can reset your password here"
 | 
			
		||||
msgstr "Du kannst dein Passwort hier zurücksetzen"
 | 
			
		||||
 | 
			
		||||
msgid "Welcome to Data Center Light!"
 | 
			
		||||
msgstr "Willkommen beim Data Center Light!"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -178,45 +134,51 @@ msgstr "Unser Angebot beginnt bei 15 CHF pro Monat. Probier's jetzt aus!"
 | 
			
		|||
msgid "ORDER VM"
 | 
			
		||||
msgstr "VM BESTELLEN"
 | 
			
		||||
 | 
			
		||||
msgid "Home"
 | 
			
		||||
msgstr "Home"
 | 
			
		||||
 | 
			
		||||
msgid "Highlights"
 | 
			
		||||
msgid "VM hosting"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
msgid "Scale out"
 | 
			
		||||
msgstr "Skalierung"
 | 
			
		||||
msgid "month"
 | 
			
		||||
msgstr "Monat"
 | 
			
		||||
 | 
			
		||||
msgid "Reliable and light"
 | 
			
		||||
msgstr "Zuverlässig und leicht"
 | 
			
		||||
msgid "VAT included"
 | 
			
		||||
msgstr "MwSt. inklusive"
 | 
			
		||||
 | 
			
		||||
msgid "Pricing"
 | 
			
		||||
msgstr "Preise"
 | 
			
		||||
msgid "You save"
 | 
			
		||||
msgstr "Du sparst"
 | 
			
		||||
 | 
			
		||||
msgid "Order VM"
 | 
			
		||||
msgstr "VM bestellen"
 | 
			
		||||
msgid "Hosted in Switzerland"
 | 
			
		||||
msgstr "Standort: Schweiz"
 | 
			
		||||
 | 
			
		||||
msgid "Please enter a value in range 1 - 48."
 | 
			
		||||
msgstr "Bitte gib einen Wert von 1 bis 48 ein."
 | 
			
		||||
 | 
			
		||||
msgid "Please enter a value in range 1 - 200."
 | 
			
		||||
msgstr "Bitte gib einen Wert von 1 bis 200 ein."
 | 
			
		||||
 | 
			
		||||
msgid "Please enter a value in range 10 - 2000."
 | 
			
		||||
msgstr "Bitte gib einen Wert von 10 bis 2000 ein."
 | 
			
		||||
 | 
			
		||||
msgid "GB Storage (SSD)"
 | 
			
		||||
msgstr "GB Storage (SSD)"
 | 
			
		||||
 | 
			
		||||
msgid "Continue"
 | 
			
		||||
msgstr "Weiter"
 | 
			
		||||
 | 
			
		||||
msgid "Home"
 | 
			
		||||
msgstr "Home"
 | 
			
		||||
 | 
			
		||||
msgid "Contact"
 | 
			
		||||
msgstr "Kontakt"
 | 
			
		||||
 | 
			
		||||
msgid "All Rights Reserved"
 | 
			
		||||
msgstr "Alle Rechte vorbehalten"
 | 
			
		||||
 | 
			
		||||
msgid "Toggle navigation"
 | 
			
		||||
msgstr "Umschalten"
 | 
			
		||||
 | 
			
		||||
msgid "Why Data Center Light?"
 | 
			
		||||
msgstr "Warum Data Center Light?"
 | 
			
		||||
 | 
			
		||||
msgid "Login"
 | 
			
		||||
msgstr "Anmelden"
 | 
			
		||||
 | 
			
		||||
msgid "Dashboard"
 | 
			
		||||
msgstr ""
 | 
			
		||||
msgid "Terms of Service"
 | 
			
		||||
msgstr "Nutzungsbedingungen"
 | 
			
		||||
 | 
			
		||||
msgid "Finally, an affordable VM hosting in Switzerland!"
 | 
			
		||||
msgstr "Endlich: bezahlbares VM Hosting in der Schweiz"
 | 
			
		||||
 | 
			
		||||
msgid "Highlights"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
msgid "I want it!"
 | 
			
		||||
msgstr "Das will ich haben!"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -247,6 +209,9 @@ msgstr ""
 | 
			
		|||
"mit FOSS (Free Open Source Software) arbeitet und wir daher auf "
 | 
			
		||||
"Lizenzgebühren verzichten können.
"
 | 
			
		||||
 | 
			
		||||
msgid "Scale out"
 | 
			
		||||
msgstr "Skalierung"
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"We don't use special hardware. We use commodity hardware: we buy computers "
 | 
			
		||||
"that you buy. Just many more and put them in a cozy home for computers "
 | 
			
		||||
| 
						 | 
				
			
			@ -256,6 +221,9 @@ msgstr ""
 | 
			
		|||
"erschwingliche Systeme. Bei grösserer Auslastung werden mehr "
 | 
			
		||||
"Standardkomponenten hinzugekauft und skalieren so das Datencenter."
 | 
			
		||||
 | 
			
		||||
msgid "Reliable and light"
 | 
			
		||||
msgstr "Zuverlässig und leicht"
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"Our VMs are located in Switzerland, with reliable power supply and fast "
 | 
			
		||||
"internet connection. Our VM costs less thanks to our featherlight "
 | 
			
		||||
| 
						 | 
				
			
			@ -316,6 +284,9 @@ msgstr ""
 | 
			
		|||
msgid "Forgot password?"
 | 
			
		||||
msgstr "Passwort vergessen?"
 | 
			
		||||
 | 
			
		||||
msgid "Resend activation link"
 | 
			
		||||
msgstr "Aktivierungslink noch einmal senden"
 | 
			
		||||
 | 
			
		||||
msgid "Sign up"
 | 
			
		||||
msgstr "Registrieren"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -343,23 +314,21 @@ msgstr "Gesamt"
 | 
			
		|||
msgid "including VAT"
 | 
			
		||||
msgstr "inkl. Mehrwertsteuer"
 | 
			
		||||
 | 
			
		||||
msgid "excluding VAT"
 | 
			
		||||
msgstr "exkl. Mehrwertsteuer"
 | 
			
		||||
 | 
			
		||||
msgid "Month"
 | 
			
		||||
msgstr "Monat"
 | 
			
		||||
 | 
			
		||||
msgid "Discount"
 | 
			
		||||
msgstr "Rabatt"
 | 
			
		||||
 | 
			
		||||
msgid "Will be applied at checkout"
 | 
			
		||||
msgstr "wird an der Kasse angewendet"
 | 
			
		||||
 | 
			
		||||
msgid "Credit Card"
 | 
			
		||||
msgstr "Kreditkarte"
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"Please select one of the cards that you used before or fill in your credit "
 | 
			
		||||
"card information below. We are using <a href=\"https://stripe.com\" target="
 | 
			
		||||
"\"_blank\">Stripe</a> for payment and do not store your information in our "
 | 
			
		||||
"database."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Bitte wähle Seine der Karten aus, die du zuvor verwendet hast, oder gib "
 | 
			
		||||
"deine Kreditkartendaten unten ein. Wir verwenden <a href=\"https://stripe.com"
 | 
			
		||||
"\" target=\"_blank\">Stripe</a> als Zahlungdiensleister und speichern deine "
 | 
			
		||||
"Daten nicht in unserer Datenbank."
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"Please fill in your credit card information below. We are using <a href="
 | 
			
		||||
"\"https://stripe.com\" target=\"_blank\">Stripe</a> for payment and do not "
 | 
			
		||||
| 
						 | 
				
			
			@ -369,17 +338,31 @@ msgstr ""
 | 
			
		|||
"\"https://stripe.com\" target=\"_blank\">Stripe</a> für die Bezahlung und "
 | 
			
		||||
"speichern keine Informationen in unserer Datenbank."
 | 
			
		||||
 | 
			
		||||
msgid "Last"
 | 
			
		||||
msgstr "Vor"
 | 
			
		||||
msgid ""
 | 
			
		||||
"You are not making any payment yet. After submitting your card information, "
 | 
			
		||||
"you will be taken to the Confirm Order Page."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Es wird noch keine Bezahlung vorgenommen. Die Bezahlung wird erst ausgelöst, "
 | 
			
		||||
"nachdem Du die Bestellung auf der nächsten Seite bestätigt hast."
 | 
			
		||||
 | 
			
		||||
msgid "Type"
 | 
			
		||||
msgid "Card Number"
 | 
			
		||||
msgstr "Kreditkartennummer"
 | 
			
		||||
 | 
			
		||||
msgid "Expiry Date"
 | 
			
		||||
msgstr "Ablaufdatum"
 | 
			
		||||
 | 
			
		||||
msgid "CVC"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
msgid "Card Type"
 | 
			
		||||
msgstr "Kartentyp"
 | 
			
		||||
 | 
			
		||||
msgid "SELECT"
 | 
			
		||||
msgstr "Auswählen"
 | 
			
		||||
 | 
			
		||||
msgid "Use another card"
 | 
			
		||||
msgstr "Benutze eine andere Kreditkarte"
 | 
			
		||||
msgid ""
 | 
			
		||||
"You are not making any payment yet. After placing your order, you will be "
 | 
			
		||||
"taken to the Submit Payment Page."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Es wird noch keine Bezahlung vorgenommen. Die Bezahlung wird erst ausgelöst, "
 | 
			
		||||
"nachdem Du die Bestellung auf der nächsten Seite bestätigt hast."
 | 
			
		||||
 | 
			
		||||
msgid "Processing"
 | 
			
		||||
msgstr "Weiter"
 | 
			
		||||
| 
						 | 
				
			
			@ -387,25 +370,63 @@ msgstr "Weiter"
 | 
			
		|||
msgid "Enter your credit card number"
 | 
			
		||||
msgstr "Deine Kreditkartennummer"
 | 
			
		||||
 | 
			
		||||
#, python-format
 | 
			
		||||
msgid "%(page_header_text)s"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
msgid "Date"
 | 
			
		||||
msgstr "Datum"
 | 
			
		||||
 | 
			
		||||
msgid "Billed to"
 | 
			
		||||
msgstr "Rechnungsadresse"
 | 
			
		||||
 | 
			
		||||
msgid "Payment method"
 | 
			
		||||
msgstr "Bezahlmethode"
 | 
			
		||||
 | 
			
		||||
msgid "ending in"
 | 
			
		||||
msgstr "endend in"
 | 
			
		||||
 | 
			
		||||
msgid "Order summary"
 | 
			
		||||
msgstr "Bestellungsübersicht"
 | 
			
		||||
 | 
			
		||||
msgid "Product"
 | 
			
		||||
msgstr "Produkt"
 | 
			
		||||
 | 
			
		||||
msgid "Subtotal"
 | 
			
		||||
msgstr "Zwischensumme"
 | 
			
		||||
 | 
			
		||||
msgid "VAT"
 | 
			
		||||
msgstr "Mehrwertsteuer"
 | 
			
		||||
 | 
			
		||||
#, python-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"By clicking \"Place order\" this plan will charge your credit card account "
 | 
			
		||||
"with the fee of %(vm_price)sCHF/month"
 | 
			
		||||
"with %(vm_total_price)s CHF/month"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Wenn Du \"bestellen\" auswählst, wird Deine Kreditkarte mit %(vm_price)sCHF "
 | 
			
		||||
"pro Monat belastet"
 | 
			
		||||
"Wenn Du \"bestellen\" auswählst, wird Deine Kreditkarte mit "
 | 
			
		||||
"%(vm_total_price)s CHF pro Monat belastet"
 | 
			
		||||
 | 
			
		||||
msgid "Place order"
 | 
			
		||||
msgstr "Bestellen"
 | 
			
		||||
 | 
			
		||||
msgid "Thank you for order! Our team will contact you via email"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Vielen Dank für die Bestellung. Unser Team setzt sich sobald wie möglich mit "
 | 
			
		||||
"Dir via E-Mail in Verbindung."
 | 
			
		||||
msgid "Processing..."
 | 
			
		||||
msgstr "Abarbeitung..."
 | 
			
		||||
 | 
			
		||||
msgid "as soon as possible!"
 | 
			
		||||
msgid "Hold tight, we are processing your request"
 | 
			
		||||
msgstr "Bitte warten - wir verarbeiten Deine Anfrage gerade"
 | 
			
		||||
 | 
			
		||||
msgid "OK"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
msgid "Some problem encountered. Please try again later."
 | 
			
		||||
msgstr "Ein Problem ist aufgetreten. Bitte versuche es später noch einmal."
 | 
			
		||||
 | 
			
		||||
msgid "Why Data Center Light?"
 | 
			
		||||
msgstr "Warum Data Center Light?"
 | 
			
		||||
 | 
			
		||||
msgid "Tech Stack"
 | 
			
		||||
msgstr "Tech Stack"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -420,7 +441,7 @@ msgstr ""
 | 
			
		|||
"nicht Open-Source ist.<br/>Yep, so cool sind wir."
 | 
			
		||||
 | 
			
		||||
msgid "Our services run on"
 | 
			
		||||
msgstr "Unsere Dienste läuft auf"
 | 
			
		||||
msgstr "Unsere Dienste läufen auf"
 | 
			
		||||
 | 
			
		||||
msgid "Our monitoring"
 | 
			
		||||
msgstr "Unser Monitoring"
 | 
			
		||||
| 
						 | 
				
			
			@ -492,10 +513,7 @@ msgid "Invalid storage size"
 | 
			
		|||
msgstr "Ungültige Speicher-Grösse"
 | 
			
		||||
 | 
			
		||||
#, python-brace-format
 | 
			
		||||
msgid "{user} does not have permission to access the card"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
msgid "An error occurred. Details: {}"
 | 
			
		||||
msgid "Incorrect pricing name. Please contact support{support_email}"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
msgid "Confirm Order"
 | 
			
		||||
| 
						 | 
				
			
			@ -521,61 +539,66 @@ msgstr ""
 | 
			
		|||
"Deine VM ist gleich bereit. Wir senden Dir eine Bestätigungsemail, sobald Du "
 | 
			
		||||
"auf sie zugreifen kannst."
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "You are not making any payment yet. After submitting your card "
 | 
			
		||||
#~ "information, you will be taken to the Confirm Order Page."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Es wird noch keine Bezahlung vorgenommen. Die Bezahlung wird erst "
 | 
			
		||||
#~ "ausgelöst, nachdem Du die Bestellung auf der nächsten Seite bestätigt "
 | 
			
		||||
#~ "hast."
 | 
			
		||||
#~ msgid "Pricing"
 | 
			
		||||
#~ msgstr "Preise"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Card Number"
 | 
			
		||||
#~ msgstr "Kreditkartennummer"
 | 
			
		||||
#~ msgid "Order VM"
 | 
			
		||||
#~ msgstr "VM bestellen"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Expiry Date"
 | 
			
		||||
#~ msgstr "Ablaufdatum"
 | 
			
		||||
#~ msgid "Enter name"
 | 
			
		||||
#~ msgstr "Name"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Card Type"
 | 
			
		||||
#~ msgstr "Kartentyp"
 | 
			
		||||
#~ msgid "Enter email"
 | 
			
		||||
#~ msgstr "E-Mail-Adresse"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Request Beta Access"
 | 
			
		||||
#~ msgstr "Beantrage Beta-Zugang"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Request Sent"
 | 
			
		||||
#~ msgstr "Anfrage verschickt"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "You are not making any payment yet. After placing your order, you will be "
 | 
			
		||||
#~ "taken to the Submit Payment Page."
 | 
			
		||||
#~ "Thank you for your subscription! You will receive a confirmation mail "
 | 
			
		||||
#~ "from our team"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Es wird noch keine Bezahlung vorgenommen. Die Bezahlung wird erst "
 | 
			
		||||
#~ "ausgelöst, nachdem Du die Bestellung auf der nächsten Seite bestätigt "
 | 
			
		||||
#~ "hast."
 | 
			
		||||
#~ "Vielen dank für Ihre Anmeldung. Sie erhalten in kürze eine "
 | 
			
		||||
#~ "Bestätigungsmail von unserem Team"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Thank you for your request."
 | 
			
		||||
#~ msgstr "Vielen Dank für Deine Anfrage."
 | 
			
		||||
 | 
			
		||||
#~ msgid "You are one step away from being our beta tester!"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Sie sind nur noch einen Schritt davon entfernt, unser Beta-Tester zu "
 | 
			
		||||
#~ "werden!"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Currently we are running our tests to make sure everything runs perfectly."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Momentan testen wir die Beta-Umgebung um sie für Ihren Gebrauch "
 | 
			
		||||
#~ "sicherzustellen."
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "In the meantime, we would like to ask you a little patience<br/> until "
 | 
			
		||||
#~ "our team contacts you with beta access."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Wir werden dann sobald als möglich Ihren Beta-Zugang erstellen und Sie "
 | 
			
		||||
#~ "daraufhin kontaktieren.Bis dahin bitten wir Sie um etwas Geduld."
 | 
			
		||||
 | 
			
		||||
#~ msgid "Thank you!"
 | 
			
		||||
#~ msgstr "Vielen Dank!"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Thank you for order! Our team will contact you via email"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Vielen Dank für die Bestellung. Unser Team setzt sich sobald wie möglich "
 | 
			
		||||
#~ "mit Dir via E-Mail in Verbindung."
 | 
			
		||||
 | 
			
		||||
#~ msgid "Affordable VM hosting based in Switzerland"
 | 
			
		||||
#~ msgstr "Bezahlbares VM Hosting in der Schweiz"
 | 
			
		||||
 | 
			
		||||
#~ 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"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Date"
 | 
			
		||||
#~ msgstr "Datum"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Billed To:"
 | 
			
		||||
#~ msgstr "Rechnungsadresse"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Payment Method:"
 | 
			
		||||
#~ msgstr "Bezahlmethode"
 | 
			
		||||
 | 
			
		||||
#~ msgid "ending in"
 | 
			
		||||
#~ msgstr "endend in"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Order summary"
 | 
			
		||||
#~ msgstr "Bestellungsübersicht"
 | 
			
		||||
 | 
			
		||||
#~ msgid "We are cutting down the costs significantly!"
 | 
			
		||||
#~ msgstr "Wir sorgen dafür, dass die Kosten für Dich signifikant abnehmen"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										21
									
								
								datacenterlight/management/commands/cmsintegrate.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
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):
 | 
			
		||||
        self.create_cms_integration()
 | 
			
		||||
 | 
			
		||||
    def create_cms_integration(self, site=None):
 | 
			
		||||
        obj, created = CMSIntegration.objects.get_or_create(
 | 
			
		||||
            name='default', domain=site
 | 
			
		||||
        )
 | 
			
		||||
        domain_name = site.domain if site else 'All Sites'
 | 
			
		||||
        if created:
 | 
			
		||||
            print('created the default CMSIntegration object for', domain_name)
 | 
			
		||||
        else:
 | 
			
		||||
            print(
 | 
			
		||||
                'default CMSIntegration object already exists for', domain_name
 | 
			
		||||
            )
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,36 @@
 | 
			
		|||
from django.core.management.base import BaseCommand
 | 
			
		||||
 | 
			
		||||
from datacenterlight.models import VMPricing
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Command(BaseCommand):
 | 
			
		||||
    help = '''Creates default VMPricing object'''
 | 
			
		||||
    DEFAULT_VMPRICING_NAME = 'default'
 | 
			
		||||
 | 
			
		||||
    def handle(self, *args, **options):
 | 
			
		||||
        self.create_default_vm_pricing()
 | 
			
		||||
 | 
			
		||||
    def create_default_vm_pricing(self):
 | 
			
		||||
        obj, created = VMPricing.objects.get_or_create(
 | 
			
		||||
            name=self.DEFAULT_VMPRICING_NAME,
 | 
			
		||||
            defaults={
 | 
			
		||||
                "vat_inclusive": True,
 | 
			
		||||
                "cores_unit_price": 5,
 | 
			
		||||
                "ram_unit_price": 2,
 | 
			
		||||
                "ssd_unit_price": 0.6,
 | 
			
		||||
                "hdd_unit_price": 0.01
 | 
			
		||||
            }
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        if created:
 | 
			
		||||
            print(
 | 
			
		||||
                'Successfully created {} VMPricing object'.format(
 | 
			
		||||
                    self.DEFAULT_VMPRICING_NAME
 | 
			
		||||
                )
 | 
			
		||||
            )
 | 
			
		||||
        else:
 | 
			
		||||
            print(
 | 
			
		||||
                '{} VMPricing exists already.'.format(
 | 
			
		||||
                    self.DEFAULT_VMPRICING_NAME
 | 
			
		||||
                )
 | 
			
		||||
            )
 | 
			
		||||
| 
						 | 
				
			
			@ -7,18 +7,31 @@ logger = logging.getLogger(__name__)
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
class Command(BaseCommand):
 | 
			
		||||
    help = 'Fetches the VM templates from OpenNebula and populates the dcl VMTemplate model'
 | 
			
		||||
    help = '''Fetches the VM templates from OpenNebula and populates the dcl
 | 
			
		||||
            VMTemplate model'''
 | 
			
		||||
 | 
			
		||||
    def get_templates(self, manager, prefix):
 | 
			
		||||
        templates = manager.get_templates('%s-' % prefix)
 | 
			
		||||
        dcl_vm_templates = []
 | 
			
		||||
        for template in templates:
 | 
			
		||||
            template_name = template.name.lstrip('%s-' % prefix)
 | 
			
		||||
            template_id = template.id
 | 
			
		||||
            dcl_vm_template = VMTemplate.create(
 | 
			
		||||
                template_name, template_id, prefix
 | 
			
		||||
            )
 | 
			
		||||
            dcl_vm_templates.append(dcl_vm_template)
 | 
			
		||||
        return dcl_vm_templates
 | 
			
		||||
 | 
			
		||||
    def handle(self, *args, **options):
 | 
			
		||||
        try:
 | 
			
		||||
            manager = OpenNebulaManager()
 | 
			
		||||
            templates = manager.get_templates()
 | 
			
		||||
            dcl_vm_templates = []
 | 
			
		||||
            for template in templates:
 | 
			
		||||
                template_name = template.name.strip('public-')
 | 
			
		||||
                template_id = template.id
 | 
			
		||||
                dcl_vm_template = VMTemplate.create(template_name, template_id)
 | 
			
		||||
                dcl_vm_templates.append(dcl_vm_template)
 | 
			
		||||
            dcl_vm_templates.extend(
 | 
			
		||||
                self.get_templates(manager, VMTemplate.PUBLIC)
 | 
			
		||||
            )
 | 
			
		||||
            dcl_vm_templates.extend(
 | 
			
		||||
                self.get_templates(manager, VMTemplate.IPV6)
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
            old_vm_templates = VMTemplate.objects.all()
 | 
			
		||||
            old_vm_templates.delete()
 | 
			
		||||
| 
						 | 
				
			
			@ -26,4 +39,5 @@ class Command(BaseCommand):
 | 
			
		|||
            for dcl_vm_template in dcl_vm_templates:
 | 
			
		||||
                dcl_vm_template.save()
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            logger.error('Error connecting to OpenNebula. Error Details: {err}'.format(err=str(e)))
 | 
			
		||||
            logger.error('Error connecting to OpenNebula. Error Details: '
 | 
			
		||||
                         '{err}'.format(err=str(e)))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										32
									
								
								datacenterlight/migrations/0011_auto_20180220_1423.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,32 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
# Generated by Django 1.9.4 on 2018-02-20 14:23
 | 
			
		||||
from __future__ import unicode_literals
 | 
			
		||||
 | 
			
		||||
from django.db import migrations
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ('datacenterlight', '0010_merge'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.RemoveField(
 | 
			
		||||
            model_name='betaaccessvm',
 | 
			
		||||
            name='access',
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.RemoveField(
 | 
			
		||||
            model_name='betaaccessvm',
 | 
			
		||||
            name='type',
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.DeleteModel(
 | 
			
		||||
            name='BetaAccess',
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.DeleteModel(
 | 
			
		||||
            name='BetaAccessVM',
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.DeleteModel(
 | 
			
		||||
            name='BetaAccessVMType',
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
							
								
								
									
										138
									
								
								datacenterlight/migrations/0012_dclcalculatorpluginmodel.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,138 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
# Generated by Django 1.9.4 on 2018-03-01 20:41
 | 
			
		||||
from __future__ import unicode_literals
 | 
			
		||||
 | 
			
		||||
from django.db import migrations, models
 | 
			
		||||
import django.db.models.deletion
 | 
			
		||||
import djangocms_text_ckeditor.fields
 | 
			
		||||
import filer.fields.image
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ('cms', '0014_auto_20160404_1908'),
 | 
			
		||||
        ('datacenterlight', '0011_auto_20180220_1423'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.CreateModel(
 | 
			
		||||
            name='DCLSectionPluginModel',
 | 
			
		||||
            fields=[
 | 
			
		||||
                ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
 | 
			
		||||
                ('heading', models.CharField(blank=True, help_text='An optional heading for the Section', max_length=100, null=True)),
 | 
			
		||||
                ('content', djangocms_text_ckeditor.fields.HTMLField()),
 | 
			
		||||
                ('text_direction', models.CharField(choices=[('left', 'Left'), ('right', 'Right')], default=True, help_text='The alignment of text in the section', max_length=10)),
 | 
			
		||||
                ('html_id', models.SlugField(blank=True, help_text='An optional html id for the Section. Required to set as target of a link on page', null=True)),
 | 
			
		||||
                ('center_on_mobile', models.BooleanField(default=False, help_text='Select to center align content on small screens.')),
 | 
			
		||||
                ('background_gradient', models.BooleanField(default=False, help_text='Select to add a gradient background to the section.')),
 | 
			
		||||
                ('plain_heading', models.BooleanField(default=False, help_text='Select to keep the heading style simpler.')),
 | 
			
		||||
            ],
 | 
			
		||||
            options={
 | 
			
		||||
                'abstract': False,
 | 
			
		||||
            },
 | 
			
		||||
            bases=('cms.cmsplugin',),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.CreateModel(
 | 
			
		||||
            name='DCLNavbarDropdownPluginModel',
 | 
			
		||||
            fields=[
 | 
			
		||||
                ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
 | 
			
		||||
                ('text', models.CharField(help_text='Text for the dropdown toggle', max_length=50)),
 | 
			
		||||
                ('target', models.CharField(blank=True, help_text='Optional Url or #id to navigate on click', max_length=100, null=True)),
 | 
			
		||||
            ],
 | 
			
		||||
            options={
 | 
			
		||||
                'abstract': False,
 | 
			
		||||
            },
 | 
			
		||||
            bases=('cms.cmsplugin',),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.CreateModel(
 | 
			
		||||
            name='DCLContactPluginModel',
 | 
			
		||||
            fields=[
 | 
			
		||||
                ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
 | 
			
		||||
                ('heading', models.CharField(blank=True, default='Contact', max_length=100)),
 | 
			
		||||
                ('organization_name', models.CharField(blank=True, default='ungleich GmbH', max_length=100)),
 | 
			
		||||
                ('email', models.EmailField(default='info@ungleich.ch', max_length=200)),
 | 
			
		||||
                ('address', models.CharField(blank=True, default='In der Au 7, Schwanden 8762', max_length=100)),
 | 
			
		||||
                ('country', models.CharField(blank=True, default='Switzerland', max_length=100)),
 | 
			
		||||
                ('form_header', models.CharField(blank=True, default='Send us a message.', max_length=100)),
 | 
			
		||||
            ],
 | 
			
		||||
            options={
 | 
			
		||||
                'abstract': False,
 | 
			
		||||
            },
 | 
			
		||||
            bases=('cms.cmsplugin',),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.CreateModel(
 | 
			
		||||
            name='DCLFooterPluginModel',
 | 
			
		||||
            fields=[
 | 
			
		||||
                ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
 | 
			
		||||
                ('copyright_label', models.CharField(blank=True, default='ungleich GmbH', help_text='Name of the company alongside the copyright year', max_length=100)),
 | 
			
		||||
            ],
 | 
			
		||||
            options={
 | 
			
		||||
                'abstract': False,
 | 
			
		||||
            },
 | 
			
		||||
            bases=('cms.cmsplugin',),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.CreateModel(
 | 
			
		||||
            name='DCLLinkPluginModel',
 | 
			
		||||
            fields=[
 | 
			
		||||
                ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
 | 
			
		||||
                ('target', models.CharField(help_text='Url or #id to navigate to', max_length=100)),
 | 
			
		||||
                ('text', models.CharField(help_text='Text for the menu item', max_length=50)),
 | 
			
		||||
                ('title', models.CharField(blank=True, help_text='Optional title text, that will be shown when a user hovers over the link', max_length=100, null=True)),
 | 
			
		||||
                ('separator', models.BooleanField(default=False, help_text='Select to include a separator after the previous link')),
 | 
			
		||||
            ],
 | 
			
		||||
            options={
 | 
			
		||||
                'abstract': False,
 | 
			
		||||
            },
 | 
			
		||||
            bases=('cms.cmsplugin',),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.CreateModel(
 | 
			
		||||
            name='DCLSectionIconPluginModel',
 | 
			
		||||
            fields=[
 | 
			
		||||
                ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
 | 
			
		||||
                ('fontawesome_icon_name', models.CharField(help_text='Name of the fontawesome icon to use. <a href="https://fontawesome.com/v4.7.0/icons/" target="_blank">Refer docs.</a>', max_length=30)),
 | 
			
		||||
            ],
 | 
			
		||||
            options={
 | 
			
		||||
                'abstract': False,
 | 
			
		||||
            },
 | 
			
		||||
            bases=('cms.cmsplugin',),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.CreateModel(
 | 
			
		||||
            name='DCLSectionImagePluginModel',
 | 
			
		||||
            fields=[
 | 
			
		||||
                ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
 | 
			
		||||
                ('caption', models.CharField(blank=True, help_text='Optional caption for the image.', max_length=100, null=True)),
 | 
			
		||||
                ('image', filer.fields.image.FilerImageField(help_text='Image file to be used in section. Add multiple plugins to add more than one image', on_delete=django.db.models.deletion.CASCADE, to='filer.Image')),
 | 
			
		||||
            ],
 | 
			
		||||
            options={
 | 
			
		||||
                'abstract': False,
 | 
			
		||||
            },
 | 
			
		||||
            bases=('cms.cmsplugin',),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.CreateModel(
 | 
			
		||||
            name='DCLBannerListPluginModel',
 | 
			
		||||
            fields=[
 | 
			
		||||
                ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
 | 
			
		||||
                ('heading', models.CharField(blank=True, help_text='An optional heading for the Section', max_length=100, null=True)),
 | 
			
		||||
                ('html_id', models.SlugField(blank=True, help_text='An optional html id for the Section. Required to set as target of a link on page', null=True)),
 | 
			
		||||
            ],
 | 
			
		||||
            options={
 | 
			
		||||
                'abstract': False,
 | 
			
		||||
            },
 | 
			
		||||
            bases=('cms.cmsplugin',),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.CreateModel(
 | 
			
		||||
            name='DCLBannerItemPluginModel',
 | 
			
		||||
            fields=[
 | 
			
		||||
                ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
 | 
			
		||||
                ('content', djangocms_text_ckeditor.fields.HTMLField()),
 | 
			
		||||
                ('banner_text', djangocms_text_ckeditor.fields.HTMLField(blank=True, help_text='Optional text to be shown as banner in other half.', max_length=100, null=True)),
 | 
			
		||||
                ('text_direction', models.CharField(choices=[('left', 'Left'), ('right', 'Right')], default=True, help_text='The alignment of text in the section', max_length=10)),
 | 
			
		||||
                ('banner_image', filer.fields.image.FilerImageField(blank=True, help_text='Optional image to be used in the banner in other half.', null=True, on_delete=django.db.models.deletion.CASCADE, to='filer.Image')),
 | 
			
		||||
            ],
 | 
			
		||||
            options={
 | 
			
		||||
                'abstract': False,
 | 
			
		||||
            },
 | 
			
		||||
            bases=('cms.cmsplugin',),
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
							
								
								
									
										31
									
								
								datacenterlight/migrations/0013_dclnavbarpluginmodel.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,31 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
# Generated by Django 1.9.4 on 2018-03-17 07:19
 | 
			
		||||
from __future__ import unicode_literals
 | 
			
		||||
 | 
			
		||||
from django.db import migrations, models
 | 
			
		||||
import django.db.models.deletion
 | 
			
		||||
import filer.fields.image
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ('datacenterlight', '0012_dclcalculatorpluginmodel'),
 | 
			
		||||
        ('cms', '0014_auto_20160404_1908'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.CreateModel(
 | 
			
		||||
            name='DCLNavbarPluginModel',
 | 
			
		||||
            fields=[
 | 
			
		||||
                ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
 | 
			
		||||
                ('logo_url', models.URLField(blank=True, max_length=300, null=True)),
 | 
			
		||||
                ('logo_dark', filer.fields.image.FilerImageField(blank=True, help_text='Logo to be used on white navbar', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='dcl_navbar_logo_dark', to='filer.Image')),
 | 
			
		||||
                ('logo_light', filer.fields.image.FilerImageField(blank=True, help_text='Logo to be used on transparent navbar', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='dcl_navbar_logo_light', to='filer.Image')),
 | 
			
		||||
            ],
 | 
			
		||||
            options={
 | 
			
		||||
                'abstract': False,
 | 
			
		||||
            },
 | 
			
		||||
            bases=('cms.cmsplugin',),
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
# Generated by Django 1.9.4 on 2018-03-19 20:46
 | 
			
		||||
from __future__ import unicode_literals
 | 
			
		||||
 | 
			
		||||
from django.db import migrations, models
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ('datacenterlight', '0013_dclnavbarpluginmodel'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='dclnavbarpluginmodel',
 | 
			
		||||
            name='language_dropdown',
 | 
			
		||||
            field=models.BooleanField(
 | 
			
		||||
                default=True, help_text='Select to include the language selection dropdown.'),
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,43 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
# Generated by Django 1.9.4 on 2018-03-21 19:09
 | 
			
		||||
from __future__ import unicode_literals
 | 
			
		||||
 | 
			
		||||
from django.db import migrations, models
 | 
			
		||||
import django.db.models.deletion
 | 
			
		||||
import djangocms_text_ckeditor.fields
 | 
			
		||||
import filer.fields.image
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ('cms', '0014_auto_20160404_1908'),
 | 
			
		||||
        ('datacenterlight', '0013_dclnavbarpluginmodel'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.CreateModel(
 | 
			
		||||
            name='DCLSectionPromoPluginModel',
 | 
			
		||||
            fields=[
 | 
			
		||||
                ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE,
 | 
			
		||||
                                                       parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
 | 
			
		||||
                ('heading', models.CharField(
 | 
			
		||||
                    blank=True, help_text='An optional heading for the Promo Section', max_length=100, null=True)),
 | 
			
		||||
                ('subheading', models.CharField(
 | 
			
		||||
                    blank=True, help_text='An optional subheading for the Promo Section', max_length=200, null=True)),
 | 
			
		||||
                ('content', djangocms_text_ckeditor.fields.HTMLField()),
 | 
			
		||||
                ('html_id', models.SlugField(
 | 
			
		||||
                    blank=True, help_text='An optional html id for the Section. Required to set as target of a link on page', null=True)),
 | 
			
		||||
                ('plain_heading', models.BooleanField(default=False,
 | 
			
		||||
                                                      help_text='Select to keep the heading style simpler.')),
 | 
			
		||||
                ('center_on_mobile', models.BooleanField(default=False,
 | 
			
		||||
                                                         help_text='Select to center align content on small screens.')),
 | 
			
		||||
                ('background_image', filer.fields.image.FilerImageField(blank=True, help_text='Optional background image for the Promo Section',
 | 
			
		||||
                                                                        null=True, on_delete=django.db.models.deletion.CASCADE, related_name='dcl_section_promo_promo', to='filer.Image')),
 | 
			
		||||
            ],
 | 
			
		||||
            options={
 | 
			
		||||
                'abstract': False,
 | 
			
		||||
            },
 | 
			
		||||
            bases=('cms.cmsplugin',),
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
							
								
								
									
										21
									
								
								datacenterlight/migrations/0015_auto_20180323_0011.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
# Generated by Django 1.9.4 on 2018-03-22 19:22
 | 
			
		||||
from __future__ import unicode_literals
 | 
			
		||||
 | 
			
		||||
from django.db import migrations
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ('datacenterlight', '0014_dclsectionpromopluginmodel'),
 | 
			
		||||
        ('datacenterlight', '0014_dclnavbarpluginmodel_language_dropdown'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.RenameField(
 | 
			
		||||
            model_name='dclsectionpromopluginmodel',
 | 
			
		||||
            old_name='center_on_mobile',
 | 
			
		||||
            new_name='text_center',
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
							
								
								
									
										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
									
								
							
							
						
						| 
						 | 
				
			
			@ -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'),
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
							
								
								
									
										41
									
								
								datacenterlight/migrations/0018_auto_20180403_1930.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
# Generated by Django 1.9.4 on 2018-04-03 17:08
 | 
			
		||||
from __future__ import unicode_literals
 | 
			
		||||
 | 
			
		||||
from django.db import migrations, models
 | 
			
		||||
import django.db.models.deletion
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ('datacenterlight', '0017_auto_20180329_0056'),
 | 
			
		||||
        ('sites', '0002_alter_domain_unique'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.AlterField(
 | 
			
		||||
            model_name='dclcontactpluginmodel',
 | 
			
		||||
            name='organization_name',
 | 
			
		||||
            field=models.CharField(blank=True, default='ungleich glarus ag', max_length=100),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AlterField(
 | 
			
		||||
            model_name='dclfooterpluginmodel',
 | 
			
		||||
            name='copyright_label',
 | 
			
		||||
            field=models.CharField(blank=True, default='ungleich glarus ag', help_text='Name of the company alongside the copyright year', max_length=100),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='cmsintegration',
 | 
			
		||||
            name='domain',
 | 
			
		||||
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sites.Site'),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AlterField(
 | 
			
		||||
            model_name='cmsintegration',
 | 
			
		||||
            name='name',
 | 
			
		||||
            field=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),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AlterUniqueTogether(
 | 
			
		||||
            name='cmsintegration',
 | 
			
		||||
            unique_together=set([('name', 'domain')]),
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
							
								
								
									
										45
									
								
								datacenterlight/migrations/0019_auto_20180415_2236.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,45 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
# Generated by Django 1.9.4 on 2018-04-15 22:36
 | 
			
		||||
from __future__ import unicode_literals
 | 
			
		||||
 | 
			
		||||
from django.db import migrations, models
 | 
			
		||||
import django.db.models.deletion
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ('cms', '0014_auto_20160404_1908'),
 | 
			
		||||
        ('datacenterlight', '0018_auto_20180403_1930'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.CreateModel(
 | 
			
		||||
            name='DCLCustomPricingModel',
 | 
			
		||||
            fields=[
 | 
			
		||||
                ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
 | 
			
		||||
            ],
 | 
			
		||||
            options={
 | 
			
		||||
                'abstract': False,
 | 
			
		||||
            },
 | 
			
		||||
            bases=('cms.cmsplugin',),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.CreateModel(
 | 
			
		||||
            name='VMPricing',
 | 
			
		||||
            fields=[
 | 
			
		||||
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 | 
			
		||||
                ('name', models.CharField(max_length=255, unique=True)),
 | 
			
		||||
                ('vat_inclusive', models.BooleanField(default=True)),
 | 
			
		||||
                ('vat_percentage', models.DecimalField(blank=True, decimal_places=5, default=0, max_digits=7)),
 | 
			
		||||
                ('cores_unit_price', models.DecimalField(decimal_places=5, default=0, max_digits=7)),
 | 
			
		||||
                ('ram_unit_price', models.DecimalField(decimal_places=5, default=0, max_digits=7)),
 | 
			
		||||
                ('ssd_unit_price', models.DecimalField(decimal_places=5, default=0, max_digits=7)),
 | 
			
		||||
                ('hdd_unit_price', models.DecimalField(decimal_places=6, default=0, max_digits=7)),
 | 
			
		||||
            ],
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='dclcustompricingmodel',
 | 
			
		||||
            name='pricing',
 | 
			
		||||
            field=models.ForeignKey(help_text='Choose a pricing that will be associated with this Calculator', on_delete=django.db.models.deletion.CASCADE, related_name='dcl_custom_pricing_vm_pricing', to='datacenterlight.VMPricing'),
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
							
								
								
									
										29
									
								
								datacenterlight/migrations/0019_cmsfaviconextension.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
# Generated by Django 1.9.4 on 2018-04-12 03:16
 | 
			
		||||
from __future__ import unicode_literals
 | 
			
		||||
 | 
			
		||||
from django.db import migrations, models
 | 
			
		||||
import django.db.models.deletion
 | 
			
		||||
import filer.fields.file
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ('datacenterlight', '0018_auto_20180403_1930'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.CreateModel(
 | 
			
		||||
            name='CMSFaviconExtension',
 | 
			
		||||
            fields=[
 | 
			
		||||
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 | 
			
		||||
                ('extended_object', models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, to='cms.Page')),
 | 
			
		||||
                ('favicon', filer.fields.file.FilerFileField(on_delete=django.db.models.deletion.CASCADE, related_name='cms_favicon_image', to='filer.File')),
 | 
			
		||||
                ('public_extension', models.OneToOneField(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='draft_extension', to='datacenterlight.CMSFaviconExtension')),
 | 
			
		||||
            ],
 | 
			
		||||
            options={
 | 
			
		||||
                'abstract': False,
 | 
			
		||||
            },
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
							
								
								
									
										16
									
								
								datacenterlight/migrations/0020_merge.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,16 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
# Generated by Django 1.9.4 on 2018-04-20 15:04
 | 
			
		||||
from __future__ import unicode_literals
 | 
			
		||||
 | 
			
		||||
from django.db import migrations
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ('datacenterlight', '0019_auto_20180415_2236'),
 | 
			
		||||
        ('datacenterlight', '0019_cmsfaviconextension'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
    ]
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,28 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
# Generated by Django 1.9.4 on 2018-04-25 09:20
 | 
			
		||||
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', '0020_merge'),
 | 
			
		||||
        ('cms', '0014_auto_20160404_1908'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='cmsintegration',
 | 
			
		||||
            name='calculator_placeholder',
 | 
			
		||||
            field=cms.models.fields.PlaceholderField(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE,
 | 
			
		||||
                                                     related_name='dcl-calculator-placeholder+', slotname='datacenterlight_calculator', to='cms.Placeholder'),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.RenameModel(
 | 
			
		||||
            old_name='DCLCustomPricingModel',
 | 
			
		||||
            new_name='DCLCalculatorPluginModel',
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
							
								
								
									
										26
									
								
								datacenterlight/migrations/0022_auto_20180506_1950.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,26 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
# Generated by Django 1.9.4 on 2018-05-07 02:19
 | 
			
		||||
from __future__ import unicode_literals
 | 
			
		||||
 | 
			
		||||
from django.db import migrations, models
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ('datacenterlight', '0021_cmsintegration_calculator_placeholder'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='vmpricing',
 | 
			
		||||
            name='discount_amount',
 | 
			
		||||
            field=models.DecimalField(
 | 
			
		||||
                decimal_places=2, default=0, max_digits=6),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='vmpricing',
 | 
			
		||||
            name='discount_name',
 | 
			
		||||
            field=models.CharField(blank=True, max_length=255, null=True),
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
							
								
								
									
										25
									
								
								datacenterlight/migrations/0023_auto_20180524_0349.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,25 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
# Generated by Django 1.9.4 on 2018-05-23 22:19
 | 
			
		||||
from __future__ import unicode_literals
 | 
			
		||||
 | 
			
		||||
from django.db import migrations, models
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ('datacenterlight', '0022_auto_20180506_1950'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='dclcalculatorpluginmodel',
 | 
			
		||||
            name='vm_type',
 | 
			
		||||
            field=models.CharField(choices=[('public', 'Public'), ('ipv6only', 'Ipv6Only')], default='public', max_length=50),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='vmtemplate',
 | 
			
		||||
            name='vm_type',
 | 
			
		||||
            field=models.CharField(choices=[('public', 'Public'), ('ipv6only', 'Ipv6Only')], default='public', max_length=50),
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
| 
						 | 
				
			
			@ -1,67 +1,103 @@
 | 
			
		|||
import logging
 | 
			
		||||
 | 
			
		||||
from django.db import models
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class BetaAccessVMType(models.Model):
 | 
			
		||||
    ssd = models.IntegerField()
 | 
			
		||||
    ram = models.IntegerField()
 | 
			
		||||
    cpu = models.IntegerField()
 | 
			
		||||
    price = models.FloatField()
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return "ID: %s - SSD %s - RAM %s - CPU %s - Price %s " % \
 | 
			
		||||
               (self.id, str(self.ssd), self.ram, self.cpu, self.price)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class BetaAccess(models.Model):
 | 
			
		||||
    email = models.CharField(max_length=250)
 | 
			
		||||
    name = models.CharField(max_length=250)
 | 
			
		||||
 | 
			
		||||
    # vm = models.ForeignKey(BetaAccessVM)
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        vms = self.betaaccessvm_set.all()
 | 
			
		||||
        rep = "Email: %s " % self.email
 | 
			
		||||
        for vm in vms:
 | 
			
		||||
            rep += "(vm:%s - amount:%s) - " % (vm.type.id, vm.amount)
 | 
			
		||||
        return rep
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class BetaAccessVM(models.Model):
 | 
			
		||||
    type = models.ForeignKey(BetaAccessVMType)
 | 
			
		||||
    access = models.ForeignKey(BetaAccess)
 | 
			
		||||
    amount = models.IntegerField()
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def create(cls, data):
 | 
			
		||||
        VM_KEY_ID = 0
 | 
			
		||||
        VM_AMOUNT = 1
 | 
			
		||||
        ZERO = 0
 | 
			
		||||
        email = data.get('email')
 | 
			
		||||
        beta_access = BetaAccess.objects.create(email=email)
 | 
			
		||||
        vm_data = [(key, value) for key, value in data.items() if 'vm' in key]
 | 
			
		||||
        created_vms = []
 | 
			
		||||
        for vm in vm_data:
 | 
			
		||||
            if int(vm[VM_AMOUNT]) == ZERO:
 | 
			
		||||
                continue
 | 
			
		||||
            vm_id = vm[VM_KEY_ID].split('-').pop()
 | 
			
		||||
            vm_type = BetaAccessVMType.objects.get(id=vm_id)
 | 
			
		||||
            created_vms.append(cls.objects.create(access=beta_access,
 | 
			
		||||
                                                  amount=vm[VM_AMOUNT], type=vm_type))
 | 
			
		||||
 | 
			
		||||
        return created_vms
 | 
			
		||||
logger = logging.getLogger(__name__)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class VMTemplate(models.Model):
 | 
			
		||||
    PUBLIC = 'public'
 | 
			
		||||
    IPV6 = 'ipv6only'
 | 
			
		||||
    VM_TYPE_CHOICES = (
 | 
			
		||||
        (PUBLIC, PUBLIC.title()),
 | 
			
		||||
        (IPV6, IPV6.title()),
 | 
			
		||||
    )
 | 
			
		||||
    name = models.CharField(max_length=50)
 | 
			
		||||
    opennebula_vm_template_id = models.IntegerField()
 | 
			
		||||
    vm_type = models.CharField(
 | 
			
		||||
        max_length=50, choices=VM_TYPE_CHOICES, default=PUBLIC
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return '%s - %s - %s' % (
 | 
			
		||||
            self.opennebula_vm_template_id, self.vm_type, self.name
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def create(cls, name, opennebula_vm_template_id):
 | 
			
		||||
    def create(cls, name, opennebula_vm_template_id, vm_type):
 | 
			
		||||
        vm_template = cls(
 | 
			
		||||
            name=name, opennebula_vm_template_id=opennebula_vm_template_id)
 | 
			
		||||
            name=name, opennebula_vm_template_id=opennebula_vm_template_id,
 | 
			
		||||
            vm_type=vm_type
 | 
			
		||||
        )
 | 
			
		||||
        return vm_template
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class VMPricing(models.Model):
 | 
			
		||||
    name = models.CharField(max_length=255, unique=True)
 | 
			
		||||
    vat_inclusive = models.BooleanField(default=True)
 | 
			
		||||
    vat_percentage = models.DecimalField(
 | 
			
		||||
        max_digits=7, decimal_places=5, blank=True, default=0
 | 
			
		||||
    )
 | 
			
		||||
    cores_unit_price = models.DecimalField(
 | 
			
		||||
        max_digits=7, decimal_places=5, default=0
 | 
			
		||||
    )
 | 
			
		||||
    ram_unit_price = models.DecimalField(
 | 
			
		||||
        max_digits=7, decimal_places=5, default=0
 | 
			
		||||
    )
 | 
			
		||||
    ssd_unit_price = models.DecimalField(
 | 
			
		||||
        max_digits=7, decimal_places=5, default=0
 | 
			
		||||
    )
 | 
			
		||||
    hdd_unit_price = models.DecimalField(
 | 
			
		||||
        max_digits=7, decimal_places=6, default=0
 | 
			
		||||
    )
 | 
			
		||||
    discount_name = models.CharField(max_length=255, null=True, blank=True)
 | 
			
		||||
    discount_amount = models.DecimalField(
 | 
			
		||||
        max_digits=6, decimal_places=2, default=0
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        display_str = self.name + ' => ' + ' - '.join([
 | 
			
		||||
            '{}/Core'.format(self.cores_unit_price.normalize()),
 | 
			
		||||
            '{}/GB RAM'.format(self.ram_unit_price.normalize()),
 | 
			
		||||
            '{}/GB SSD'.format(self.ssd_unit_price.normalize()),
 | 
			
		||||
            '{}/GB HDD'.format(self.hdd_unit_price.normalize()),
 | 
			
		||||
            '{}% VAT'.format(self.vat_percentage.normalize())
 | 
			
		||||
            if not self.vat_inclusive else 'VAT-Incl',
 | 
			
		||||
        ])
 | 
			
		||||
        if self.discount_amount:
 | 
			
		||||
            display_str = ' - '.join([
 | 
			
		||||
                display_str,
 | 
			
		||||
                '{} {}'.format(
 | 
			
		||||
                    self.discount_amount,
 | 
			
		||||
                    self.discount_name if self.discount_name else 'Discount'
 | 
			
		||||
                )
 | 
			
		||||
            ])
 | 
			
		||||
        return display_str
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def get_vm_pricing_by_name(cls, name):
 | 
			
		||||
        try:
 | 
			
		||||
            pricing = VMPricing.objects.get(name=name)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            logger.error(
 | 
			
		||||
                "Error getting VMPricing with name {name}. "
 | 
			
		||||
                "Details: {details}. Attempting to return default"
 | 
			
		||||
                "pricing.".format(name=name, details=str(e))
 | 
			
		||||
            )
 | 
			
		||||
            pricing = VMPricing.get_default_pricing()
 | 
			
		||||
        return pricing
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def get_default_pricing(cls):
 | 
			
		||||
        """ Returns the default pricing or None """
 | 
			
		||||
        try:
 | 
			
		||||
            default_pricing = VMPricing.objects.get(name='default')
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            logger.error(str(e))
 | 
			
		||||
            default_pricing = None
 | 
			
		||||
        return default_pricing
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class StripePlan(models.Model):
 | 
			
		||||
    """
 | 
			
		||||
    A model to store Data Center Light's created Stripe plans
 | 
			
		||||
| 
						 | 
				
			
			@ -79,3 +115,6 @@ class ContactUs(models.Model):
 | 
			
		|||
    email = models.CharField(max_length=250)
 | 
			
		||||
    message = models.TextField()
 | 
			
		||||
    field = models.DateTimeField(auto_now_add=True)
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return self.name
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										6
									
								
								datacenterlight/static/datacenterlight/css/bootstrap-3.3.7.min.css
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										6584
									
								
								datacenterlight/static/datacenterlight/css/bootstrap.css
									
										
									
									
										vendored
									
									
								
							
							
						
						| 
						 | 
				
			
			@ -1,47 +1,15 @@
 | 
			
		|||
.dcl-cms_page-full-width {
 | 
			
		||||
    color: #fff;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    background-image: -ms-linear-gradient(right, #29427A 50%, #4F6699 100%);
 | 
			
		||||
    background-image: -moz-linear-gradient(right, #29427A 50%, #4F6699 100%);
 | 
			
		||||
    background-image: -o-linear-gradient(right, #29427A 50%, #4F6699 100%);
 | 
			
		||||
    background-image: -webkit-gradient(linear, right top, left top, color-stop(50, #29427A), color-stop(100, #4F6699));
 | 
			
		||||
    background-image: -webkit-linear-gradient(right, #29427A 50%, #4F6699 100%);
 | 
			
		||||
    background-image: linear-gradient(to left, #29427A 50%, #4F6699 100%);
 | 
			
		||||
/* only for cms editing mode */
 | 
			
		||||
.section-figure  .cms-plugin {
 | 
			
		||||
    flex-basis: 50%;
 | 
			
		||||
    flex-grow: 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dcl-cms_page-header {
 | 
			
		||||
    padding: 150px 0 150px 0;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    color: #f8f8f8;
 | 
			
		||||
    background: url(../img/pattern.jpg) no-repeat center center;
 | 
			
		||||
    background-size: cover;
 | 
			
		||||
    position: relative;
 | 
			
		||||
    background-attachment: fixed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dcl-cms_page-header::before {
 | 
			
		||||
    content: "";
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    right: 0;
 | 
			
		||||
    background: rgba(90, 116, 175, 0.85);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#dcl-cms_page-text {
 | 
			
		||||
    background: #fff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#dcl-cms_page-text h3 {
 | 
			
		||||
    font-size: 42px;
 | 
			
		||||
    width: 70%;
 | 
			
		||||
.split-section-plain .section-figure  .cms-plugin {
 | 
			
		||||
  flex-grow: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media (max-width: 767px) {
 | 
			
		||||
    #dcl-cms_page-text h3 {
 | 
			
		||||
        font-size: 30px;
 | 
			
		||||
        line-height: 40px;
 | 
			
		||||
        width: 100%;
 | 
			
		||||
  .section-figure  .cms-plugin {
 | 
			
		||||
    flex-basis: 100%;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										161
									
								
								datacenterlight/static/datacenterlight/css/common.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,161 @@
 | 
			
		|||
body,
 | 
			
		||||
html {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
body,
 | 
			
		||||
h1,
 | 
			
		||||
h2,
 | 
			
		||||
h3,
 | 
			
		||||
h4,
 | 
			
		||||
h5,
 | 
			
		||||
h6 {
 | 
			
		||||
  font-family: 'Lato', sans-serif;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* bootstrap danger color override from #a94442 */
 | 
			
		||||
 | 
			
		||||
.text-danger,
 | 
			
		||||
.has-error .help-block,
 | 
			
		||||
.has-error .control-label,
 | 
			
		||||
.has-error .radio,
 | 
			
		||||
.has-error .checkbox,
 | 
			
		||||
.has-error .radio-inline,
 | 
			
		||||
.has-error .checkbox-inline,
 | 
			
		||||
.has-error.radio label,
 | 
			
		||||
.has-error.checkbox label,
 | 
			
		||||
.has-error.radio-inline label,
 | 
			
		||||
.has-error.checkbox-inline label,
 | 
			
		||||
.has-error .form-control-feedback,
 | 
			
		||||
.alert-danger,
 | 
			
		||||
.list-group-item-danger,
 | 
			
		||||
a.list-group-item-danger,
 | 
			
		||||
a.list-group-item-danger:hover,
 | 
			
		||||
a.list-group-item-danger:focus,
 | 
			
		||||
.panel-danger>.panel-heading {
 | 
			
		||||
  color: #eb4d5c;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.alert-danger {
 | 
			
		||||
  background: rgba(235, 204, 209, 0.2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.has-error .form-control,
 | 
			
		||||
.has-error .form-control:focus,
 | 
			
		||||
.has-error .form-control:active,
 | 
			
		||||
.has-error .input-group-addon {
 | 
			
		||||
  color: #eb4d5c;
 | 
			
		||||
  border-color: #eb4d5c;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
a.list-group-item-danger.active,
 | 
			
		||||
a.list-group-item-danger.active:hover,
 | 
			
		||||
a.list-group-item-danger.active:focus {
 | 
			
		||||
  background-color: #eb4d5c;
 | 
			
		||||
  border-color: #eb4d5c;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.panel-danger>.panel-heading .badge {
 | 
			
		||||
  background-color: #eb4d5c;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.topnav {
 | 
			
		||||
  font-size: 14px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.navbar-default {
 | 
			
		||||
  background: #fff;
 | 
			
		||||
  padding: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.navbar-brand {
 | 
			
		||||
  padding: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.navbar-brand > img {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#logoWhite,
 | 
			
		||||
.navbar-transparent #logoBlack {
 | 
			
		||||
  display: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#logoBlack,
 | 
			
		||||
.navbar-transparent #logoWhite {
 | 
			
		||||
  display: block;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media (min-width: 768px) {
 | 
			
		||||
  .navbar-right {
 | 
			
		||||
    margin-right: 10px;
 | 
			
		||||
  }
 | 
			
		||||
  .navbar-brand {
 | 
			
		||||
    padding-right: 15px;
 | 
			
		||||
    padding-left: 15px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.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: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
footer {
 | 
			
		||||
  font-weight: 300;
 | 
			
		||||
  padding: 25px 0;
 | 
			
		||||
  background-color: #f8f8f8;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
footer .list-inline {
 | 
			
		||||
  margin-bottom: 15px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.mb-0 {
 | 
			
		||||
  margin-bottom: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.thin-hr {
 | 
			
		||||
  margin-top: 10px;
 | 
			
		||||
  margin-bottom: 10px;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										186
									
								
								datacenterlight/static/datacenterlight/css/header-slider.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,186 @@
 | 
			
		|||
.btn-trans {
 | 
			
		||||
    color: #fff;
 | 
			
		||||
    border: 2px solid #fff;
 | 
			
		||||
    padding: 4px 18px;
 | 
			
		||||
    letter-spacing: 0.6px;
 | 
			
		||||
    background: rgba(0,0,0,0.35);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.btn-trans:focus,
 | 
			
		||||
.btn-trans:active,
 | 
			
		||||
.btn-trans:hover {
 | 
			
		||||
    background: #fff;
 | 
			
		||||
    color: #333;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.header_slider > .carousel .carousel-inner {
 | 
			
		||||
    min-height: 95vh;
 | 
			
		||||
    display: flex;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.header_slider > .carousel .carousel-inner > .next,
 | 
			
		||||
.header_slider > .carousel .carousel-inner > .prev {
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.header_slider .carousel-indicators {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    margin-left: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.header_slider .carousel-indicators li {
 | 
			
		||||
    margin-right: 25px;
 | 
			
		||||
    width: 16px;
 | 
			
		||||
    height: 16px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.header_slider .carousel-indicators li.active {
 | 
			
		||||
    background-color: #ffffff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.header_slider .carousel-control {
 | 
			
		||||
    display: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.header_slider .carousel-control .fa {
 | 
			
		||||
    font-size: 2em;
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    top: 50%;
 | 
			
		||||
    margin-top: -50px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.header_slider > .carousel .item {
 | 
			
		||||
    background: rgba(0,0,0,0.5);
 | 
			
		||||
    flex: 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.header_slider > .carousel .item .container-fluid {
 | 
			
		||||
    overflow: auto;
 | 
			
		||||
    padding: 50px 20px 60px;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: column;
 | 
			
		||||
    justify-content: flex-end;
 | 
			
		||||
    /* background: rgba(0,0,0,0.5); */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.header_slider .intro-cap {
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    text-align: right;
 | 
			
		||||
    line-height: 1.1;
 | 
			
		||||
    font-size: 23px;
 | 
			
		||||
    padding-bottom: 10px;
 | 
			
		||||
    color: #fff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.header_slider .btn-trans {
 | 
			
		||||
    align-self: flex-end;
 | 
			
		||||
    z-index: 2;
 | 
			
		||||
    position: relative;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media (max-width: 767px) {
 | 
			
		||||
    .header_slider .intro-cap,
 | 
			
		||||
    .header_slider .intro_lead {
 | 
			
		||||
        font-weight: 400;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media (min-width: 768px) {
 | 
			
		||||
    .header_slider .intro-cap {
 | 
			
		||||
        font-size: 2.5em;
 | 
			
		||||
    }
 | 
			
		||||
    .header_slider .carousel-control {
 | 
			
		||||
        width: 50px;
 | 
			
		||||
        display: block;
 | 
			
		||||
    }
 | 
			
		||||
    .header_slider .carousel-control .fa-angle-left {
 | 
			
		||||
        left: 25px;
 | 
			
		||||
    }
 | 
			
		||||
    .header_slider .carousel-control .fa-angle-right {
 | 
			
		||||
        right: 25px;
 | 
			
		||||
    }
 | 
			
		||||
    .header_slider .carousel-control .fa {
 | 
			
		||||
        font-size: 4em;
 | 
			
		||||
    }
 | 
			
		||||
    .header_slider > .carousel .item .container-fluid {
 | 
			
		||||
        overflow: auto;
 | 
			
		||||
        padding: 75px;
 | 
			
		||||
    }
 | 
			
		||||
    .header_slider .btn-trans {
 | 
			
		||||
        padding: 8px 15px;
 | 
			
		||||
        min-width: 175px;
 | 
			
		||||
        letter-spacing: 1px;
 | 
			
		||||
        font-size: 1.25em;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media (min-width: 992px) {
 | 
			
		||||
    .header_slider .intro-cap {
 | 
			
		||||
        font-size: 3.25em;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.header_slider .intro_lead {
 | 
			
		||||
    color: #fff;
 | 
			
		||||
    font-size: 1.55em;
 | 
			
		||||
    text-align: right;
 | 
			
		||||
    line-height: 1.4;
 | 
			
		||||
    margin-bottom: 0;
 | 
			
		||||
    padding-bottom: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media (max-width: 768px) {
 | 
			
		||||
    .header_slider .intro_lead {
 | 
			
		||||
        font-size: 1.1em;
 | 
			
		||||
        margin-bottom: 15px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .header_slider .carousel-indicators li {
 | 
			
		||||
        margin: 1px 25px;
 | 
			
		||||
        width: 16px;
 | 
			
		||||
        height: 16px;
 | 
			
		||||
    }
 | 
			
		||||
    .header_slider .carousel-indicators li.active {
 | 
			
		||||
        margin: 0 25px;
 | 
			
		||||
        width: 18px;
 | 
			
		||||
        height: 18px;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.bg_img {
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    z-index: -1;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    background-size: cover;
 | 
			
		||||
    background-position: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.bg_vid {
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    z-index: -1;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    background-size: cover;
 | 
			
		||||
    background-position: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media (min-aspect-ratio: 16/9) {
 | 
			
		||||
  .bg_vid > video {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: auto;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media (max-aspect-ratio: 16/9) {
 | 
			
		||||
  .bg_vid > video {
 | 
			
		||||
    /* width: auto; */
 | 
			
		||||
    height: 100%;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										616
									
								
								datacenterlight/static/datacenterlight/css/hosting.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,616 @@
 | 
			
		|||
.navbar-transparent #logoWhite {
 | 
			
		||||
  display: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.navbar-transparent #logoBlack {
 | 
			
		||||
  display: block;
 | 
			
		||||
  width: 220px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.topnav .navbar-fixed-top .navbar-collapse {
 | 
			
		||||
  max-height: 740px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.navbar-default .navbar-header {
 | 
			
		||||
  position: relative;
 | 
			
		||||
  z-index: 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.navbar-right .highlights-dropdown .dropdown-menu {
 | 
			
		||||
  left: 0 !important;
 | 
			
		||||
  min-width: 155px;
 | 
			
		||||
  margin-left: 15px;
 | 
			
		||||
  padding: 0 5px 8px !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media(min-width: 768px) {
 | 
			
		||||
  .navbar-default .navbar-nav>li a,
 | 
			
		||||
  .navbar-right .highlights-dropdown .dropdown-menu>li a {
 | 
			
		||||
    font-weight: 300;
 | 
			
		||||
  }
 | 
			
		||||
  .navbar-right .highlights-dropdown .dropdown-menu {
 | 
			
		||||
    border-width: 0 0 1px 0;
 | 
			
		||||
    border-color: #e7e7e7;
 | 
			
		||||
    box-shadow: -8px 14px 20px -5px rgba(77, 77, 77, 0.5);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.navbar-right .highlights-dropdown .dropdown-menu>li a {
 | 
			
		||||
  font-size: 13px;
 | 
			
		||||
  font-family: 'Lato', sans-serif;
 | 
			
		||||
  padding: 1px 10px 1px 18px !important;
 | 
			
		||||
  background: transparent;
 | 
			
		||||
  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 {
 | 
			
		||||
  background: transparent;
 | 
			
		||||
  text-decoration: underline !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.un-icon {
 | 
			
		||||
  width: 15px;
 | 
			
		||||
  height: 15px;
 | 
			
		||||
  opacity: 0.5;
 | 
			
		||||
  margin-top: -1px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/***** DCL payment page **********/
 | 
			
		||||
 | 
			
		||||
.dcl-order-container {
 | 
			
		||||
  font-weight: 300;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dcl-place-order-text {
 | 
			
		||||
  color: #808080;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.card-warning-content {
 | 
			
		||||
  font-weight: 300;
 | 
			
		||||
  border: 1px solid #a1a1a1;
 | 
			
		||||
  border-radius: 3px;
 | 
			
		||||
  padding: 5px;
 | 
			
		||||
  margin-bottom: 15px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.card-warning-error {
 | 
			
		||||
  border: 1px solid #EB4D5C;
 | 
			
		||||
  color: #EB4D5C;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.card-warning-addtional-margin {
 | 
			
		||||
  margin-top: 15px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.card-cvc-element label {
 | 
			
		||||
  padding-left: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.card-element {
 | 
			
		||||
  margin-bottom: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.card-element label {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  margin-bottom: 0px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.my-input {
 | 
			
		||||
  border-bottom: 1px solid #ccc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.card-cvc-element .my-input {
 | 
			
		||||
  padding-left: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#card-errors {
 | 
			
		||||
  clear: both;
 | 
			
		||||
  padding: 0 0 10px;
 | 
			
		||||
  color: #eb4d5c;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.credit-card-goup {
 | 
			
		||||
  padding: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media (max-width: 767px) {
 | 
			
		||||
  .card-expiry-element {
 | 
			
		||||
    padding-right: 10px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .card-cvc-element {
 | 
			
		||||
    padding-left: 10px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #billing-form .form-control {
 | 
			
		||||
    box-shadow: none !important;
 | 
			
		||||
    font-weight: 400;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media (min-width: 1200px) {
 | 
			
		||||
  .dcl-order-container {
 | 
			
		||||
    width: 990px;
 | 
			
		||||
    padding: 0 15px;
 | 
			
		||||
    margin: 0 auto;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.footer-vm p.copyright {
 | 
			
		||||
  margin-top: 4px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.navbar-default .navbar-nav>.open>a,
 | 
			
		||||
.navbar-default .navbar-nav>.open>a:focus,
 | 
			
		||||
.navbar-default .navbar-nav>.open>a:hover,
 | 
			
		||||
.navbar-default .navbar-nav>.active>a,
 | 
			
		||||
.navbar-default .navbar-nav>.active>a:focus,
 | 
			
		||||
.navbar-default .navbar-nav>.active>a:hover {
 | 
			
		||||
  background-color: transparent;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@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 {
 | 
			
		||||
    background-color: transparent;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* bootstrap input box-shadow disable */
 | 
			
		||||
 | 
			
		||||
.has-error .form-control:focus,
 | 
			
		||||
.has-error .form-control:active,
 | 
			
		||||
.has-success .form-control:focus,
 | 
			
		||||
.has-success .form-control:active {
 | 
			
		||||
  box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.25);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.content-dashboard {
 | 
			
		||||
  min-height: calc(100vh - 96px);
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  margin: 0 auto;
 | 
			
		||||
  max-width: 1120px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media (max-width: 767px) {
 | 
			
		||||
  .content-dashboard {
 | 
			
		||||
    padding: 0 15px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media (max-width: 575px) {
 | 
			
		||||
  select {
 | 
			
		||||
    width: 280px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.btn:focus,
 | 
			
		||||
.btn:active:focus {
 | 
			
		||||
  outline: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/***********Styles for Model********************/
 | 
			
		||||
 | 
			
		||||
.modal-content {
 | 
			
		||||
  border-radius: 0px;
 | 
			
		||||
  font-family: Lato, "Helvetica Neue", Helvetica, Arial, sans-serif;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  float: left;
 | 
			
		||||
  border-radius: 0;
 | 
			
		||||
  font-weight: 300;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.modal-header {
 | 
			
		||||
  min-height: 30px;
 | 
			
		||||
  border-bottom: 0px solid #e5e5e5;
 | 
			
		||||
  padding: 0px 15px;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.modal-header .close {
 | 
			
		||||
  font-size: 75px;
 | 
			
		||||
  font-weight: 300;
 | 
			
		||||
  margin-top: 0;
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  top: 0;
 | 
			
		||||
  right: 11px;
 | 
			
		||||
  z-index: 10;
 | 
			
		||||
  line-height: 60px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.modal-header .close span {
 | 
			
		||||
  display: block;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.modal-header .close:focus {
 | 
			
		||||
  outline: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.modal-body {
 | 
			
		||||
  text-align: center;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  float: left;
 | 
			
		||||
  padding: 0px 30px 15px 30px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.modal-body .modal-icon i {
 | 
			
		||||
  font-size: 80px;
 | 
			
		||||
  font-weight: 100;
 | 
			
		||||
  color: #999;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.modal-body .modal-icon {
 | 
			
		||||
  margin-bottom: 15px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.modal-title {
 | 
			
		||||
  margin: 0;
 | 
			
		||||
  line-height: 1.42857143;
 | 
			
		||||
  font-size: 25px;
 | 
			
		||||
  padding: 0;
 | 
			
		||||
  font-weight: 300;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.modal-text {
 | 
			
		||||
  padding-top: 5px;
 | 
			
		||||
  font-size: 16px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.modal-text p:not(:last-of-type) {
 | 
			
		||||
  margin-bottom: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.modal-title+.modal-footer {
 | 
			
		||||
  margin-top: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.modal-footer {
 | 
			
		||||
  border-top: 0px solid #e5e5e5;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  float: left;
 | 
			
		||||
  text-align: center;
 | 
			
		||||
  padding: 15px 15px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.modal {
 | 
			
		||||
  text-align: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.modal-dialog {
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  text-align: left;
 | 
			
		||||
  vertical-align: middle;
 | 
			
		||||
  width: 40%;
 | 
			
		||||
  margin: 15px auto;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media (min-width: 768px) and (max-width: 991px) {
 | 
			
		||||
  .modal-dialog {
 | 
			
		||||
    width: 50%;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media (max-width: 767px) {
 | 
			
		||||
  .modal-dialog {
 | 
			
		||||
    width: 95%;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media(min-width: 576px) {
 | 
			
		||||
  .modal:before {
 | 
			
		||||
    content: '';
 | 
			
		||||
    display: inline-block;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    vertical-align: middle;
 | 
			
		||||
    margin-right: -4px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ========= */
 | 
			
		||||
 | 
			
		||||
.btn-wide {
 | 
			
		||||
  min-width: 100px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.choice-btn {
 | 
			
		||||
  min-width: 110px;
 | 
			
		||||
  background-color: #3C5480;
 | 
			
		||||
  color: #fff;
 | 
			
		||||
  border: 2px solid #3C5480;
 | 
			
		||||
  padding: 4px 10px;
 | 
			
		||||
  transition: 0.3s all ease-out;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.choice-btn:focus,
 | 
			
		||||
.choice-btn:hover,
 | 
			
		||||
.choice-btn:active {
 | 
			
		||||
  color: #3C5480;
 | 
			
		||||
  background-color: #fff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media (max-width: 767px) {
 | 
			
		||||
  .choice-btn {
 | 
			
		||||
    margin-top: 15px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.payment-container {
 | 
			
		||||
  padding-top: 70px;
 | 
			
		||||
  padding-bottom: 11%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.last-p {
 | 
			
		||||
  margin-bottom: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dcl-payment-section {
 | 
			
		||||
  max-width: 391px;
 | 
			
		||||
  margin: 0 auto 30px;
 | 
			
		||||
  padding: 0 10px 30px;
 | 
			
		||||
  border-bottom: 1px solid #edebeb;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dcl-payment-section hr {
 | 
			
		||||
  margin-top: 15px;
 | 
			
		||||
  margin-bottom: 15px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dcl-payment-section .top-hr {
 | 
			
		||||
  margin-left: -10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dcl-payment-section h3 {
 | 
			
		||||
  font-weight: 600;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dcl-payment-section p {
 | 
			
		||||
  font-weight: 400;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dcl-payment-section .card-warning-content {
 | 
			
		||||
  padding: 8px 10px;
 | 
			
		||||
  font-weight: 300;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dcl-payment-order strong {
 | 
			
		||||
  font-size: 17px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dcl-payment-order p {
 | 
			
		||||
  font-weight: 300;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dcl-payment-section .form-group {
 | 
			
		||||
  margin-bottom: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dcl-payment-section .form-control {
 | 
			
		||||
  box-shadow: none;
 | 
			
		||||
  padding: 6px 12px;
 | 
			
		||||
  height: 32px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dcl-payment-user {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  display: flex;
 | 
			
		||||
  flex-direction: column;
 | 
			
		||||
  justify-content: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dcl-payment-user h4 {
 | 
			
		||||
  font-weight: 600;
 | 
			
		||||
  font-size: 17px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media (min-width: 768px) {
 | 
			
		||||
  .dcl-payment-grid {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    align-items: stretch;
 | 
			
		||||
    flex-wrap: wrap;
 | 
			
		||||
  }
 | 
			
		||||
  .dcl-payment-box {
 | 
			
		||||
    width: 50%;
 | 
			
		||||
    position: relative;
 | 
			
		||||
    padding: 0 30px;
 | 
			
		||||
  }
 | 
			
		||||
  .dcl-payment-box:nth-child(2) {
 | 
			
		||||
    order: 1;
 | 
			
		||||
  }
 | 
			
		||||
  .dcl-payment-box:nth-child(4) {
 | 
			
		||||
    order: 2;
 | 
			
		||||
  }
 | 
			
		||||
  .dcl-payment-section {
 | 
			
		||||
    padding-top: 15px;
 | 
			
		||||
    padding-bottom: 15px;
 | 
			
		||||
    margin-bottom: 0;
 | 
			
		||||
    border-bottom-width: 5px;
 | 
			
		||||
  }
 | 
			
		||||
  .dcl-payment-box:nth-child(2n) .dcl-payment-section {
 | 
			
		||||
    border-bottom: none;
 | 
			
		||||
  }
 | 
			
		||||
  .dcl-payment-box:nth-child(1):after,
 | 
			
		||||
  .dcl-payment-box:nth-child(2):after {
 | 
			
		||||
    content: ' ';
 | 
			
		||||
    display: block;
 | 
			
		||||
    background: #eee;
 | 
			
		||||
    width: 1px;
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    right: 0;
 | 
			
		||||
    z-index: 2;
 | 
			
		||||
    top: 20px;
 | 
			
		||||
    bottom: 20px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#virtual_machine_create_form {
 | 
			
		||||
  padding: 15px 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.btn-vm-contact {
 | 
			
		||||
  color: #fff;
 | 
			
		||||
  background: #A3C0E2;
 | 
			
		||||
  border: 2px solid #A3C0E2;
 | 
			
		||||
  padding: 5px 25px;
 | 
			
		||||
  font-size: 12px;
 | 
			
		||||
  letter-spacing: 1.3px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.btn-vm-contact:hover,
 | 
			
		||||
.btn-vm-contact:focus {
 | 
			
		||||
  background: #fff;
 | 
			
		||||
  color: #a3c0e2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* hosting-order */
 | 
			
		||||
 | 
			
		||||
.order-detail-container {
 | 
			
		||||
  max-width: 600px;
 | 
			
		||||
  margin: 100px auto 40px;
 | 
			
		||||
  border: 1px solid #ccc;
 | 
			
		||||
  padding: 30px 30px 20px;
 | 
			
		||||
  color: #595959;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-detail-container .dashboard-title-thin {
 | 
			
		||||
  margin-top: 0;
 | 
			
		||||
  margin-left: -3px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-detail-container .dashboard-title-thin .un-icon {
 | 
			
		||||
  margin-top: -6px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-detail-container .dashboard-container-head {
 | 
			
		||||
  position: relative;
 | 
			
		||||
  padding: 0;
 | 
			
		||||
  margin-bottom: 38px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-detail-container .order-details {
 | 
			
		||||
  margin-bottom: 15px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-detail-container h4 {
 | 
			
		||||
  font-size: 16px;
 | 
			
		||||
  font-weight: bold;
 | 
			
		||||
  margin-bottom: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-detail-container p {
 | 
			
		||||
  margin-bottom: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-detail-container hr {
 | 
			
		||||
  margin: 15px 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-detail-container .thin-hr {
 | 
			
		||||
  margin: 10px 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-detail-container .subtotal-price {
 | 
			
		||||
  font-size: 16px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-detail-container .subtotal-price .text-primary {
 | 
			
		||||
  font-size: 17px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-detail-container .total-price {
 | 
			
		||||
  font-size: 18px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media (max-width: 767px) {
 | 
			
		||||
  .order-detail-container {
 | 
			
		||||
    padding: 15px;
 | 
			
		||||
  }
 | 
			
		||||
  .order-confirm-btn {
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    margin-top: 10px;
 | 
			
		||||
  }
 | 
			
		||||
  .order-detail-container .dashboard-container-options {
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    top: 4px;
 | 
			
		||||
    right: -4px;
 | 
			
		||||
  }
 | 
			
		||||
  .order-detail-container .dashboard-container-options .svg-img {
 | 
			
		||||
    height: 16px;
 | 
			
		||||
    width: 16px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order_detail_footer {
 | 
			
		||||
  font-size: 9px;
 | 
			
		||||
  letter-spacing: 1px;
 | 
			
		||||
  color: #333333;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order_detail_footer strong {
 | 
			
		||||
  font-size: 11px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order_detail_footer small {
 | 
			
		||||
  font-size: 8px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dashboard-title-thin {
 | 
			
		||||
  font-weight: 300;
 | 
			
		||||
  font-size: 32px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dashboard-title-thin .un-icon {
 | 
			
		||||
  height: 34px;
 | 
			
		||||
  margin-right: 5px;
 | 
			
		||||
  margin-top: -2px;
 | 
			
		||||
  width: 34px;
 | 
			
		||||
  vertical-align: middle;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media (max-width:767px) {
 | 
			
		||||
  .dashboard-title-thin {
 | 
			
		||||
    font-size: 22px;
 | 
			
		||||
  }
 | 
			
		||||
  .dashboard-title-thin .un-icon {
 | 
			
		||||
    height: 22px;
 | 
			
		||||
    width: 22px;
 | 
			
		||||
    margin-top: -3px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.locale_date {
 | 
			
		||||
  opacity: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.locale_date.done {
 | 
			
		||||
  opacity: 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.btn-vm-back {
 | 
			
		||||
  color: #fff;
 | 
			
		||||
  background: #C4CEDA;
 | 
			
		||||
  border: 2px solid #C4CEDA;
 | 
			
		||||
  padding: 5px 25px;
 | 
			
		||||
  font-size: 12px;
 | 
			
		||||
  letter-spacing: 1.3px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.btn-vm-back:hover,
 | 
			
		||||
.btn-vm-back:focus {
 | 
			
		||||
  color: #fff;
 | 
			
		||||
  background: #8da4c0;
 | 
			
		||||
  border-color: #8da4c0;
 | 
			
		||||
}
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 9 KiB  | 
| 
		 Before Width: | Height: | Size: 5 KiB After Width: | Height: | Size: 5.8 KiB  | 
| 
						 | 
				
			
			@ -2,32 +2,32 @@
 | 
			
		|||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 | 
			
		||||
	 width="156.5px" height="40px" viewBox="0 0 156.5 40" enable-background="new 0 0 156.5 40" xml:space="preserve">
 | 
			
		||||
	 width="156.5px" height="30.5px" viewBox="0 0 156.5 30.5" enable-background="new 0 0 156.5 30.5" xml:space="preserve">
 | 
			
		||||
<g display="none">
 | 
			
		||||
	<g display="inline">
 | 
			
		||||
		<path fill="#231916" d="M32.599,25.896c0-0.429,0.15-0.845,0.453-1.25c0.303-0.408,0.734-0.773,1.296-1.097v-0.092
 | 
			
		||||
			c-0.294-0.16-0.554-0.388-0.777-0.674c-0.22-0.289-0.332-0.662-0.332-1.119c0-0.354,0.115-0.712,0.345-1.076
 | 
			
		||||
		<path fill="#231916" d="M32.599,25.896c0-0.43,0.15-0.846,0.453-1.25c0.303-0.408,0.734-0.773,1.296-1.098v-0.092
 | 
			
		||||
			c-0.294-0.16-0.554-0.389-0.777-0.674c-0.22-0.289-0.332-0.662-0.332-1.119c0-0.354,0.115-0.712,0.345-1.076
 | 
			
		||||
			c0.227-0.36,0.55-0.683,0.964-0.962v-0.09c-0.386-0.28-0.711-0.654-0.978-1.12c-0.263-0.464-0.397-1.021-0.397-1.67
 | 
			
		||||
			c0-0.606,0.118-1.149,0.354-1.63c0.236-0.48,0.555-0.889,0.954-1.229c0.398-0.34,0.86-0.598,1.385-0.775
 | 
			
		||||
			c0.523-0.178,1.081-0.266,1.672-0.266c0.605,0,1.152,0.088,1.64,0.266h4.452v1.662h-2.702c0.222,0.237,0.42,0.528,0.598,0.875
 | 
			
		||||
			c0.178,0.348,0.267,0.735,0.267,1.165c0,0.59-0.111,1.117-0.332,1.572c-0.222,0.459-0.525,0.846-0.91,1.163
 | 
			
		||||
			c-0.384,0.318-0.834,0.558-1.351,0.72c-0.517,0.162-1.071,0.246-1.663,0.246c-0.265,0-0.55-0.031-0.854-0.091
 | 
			
		||||
			c-0.302-0.058-0.601-0.147-0.896-0.267c-0.503,0.326-0.753,0.701-0.753,1.131c0,0.398,0.185,0.686,0.553,0.865
 | 
			
		||||
			c0.369,0.176,0.901,0.266,1.596,0.266h2.303c1.42,0,2.47,0.203,3.159,0.607c0.687,0.406,1.029,1.076,1.029,2.006
 | 
			
		||||
			c0,0.518-0.145,1.004-0.431,1.461c-0.29,0.459-0.699,0.861-1.23,1.209c-0.531,0.348-1.174,0.621-1.929,0.82
 | 
			
		||||
			c-0.751,0.199-1.594,0.299-2.525,0.299c-1.537,0-2.747-0.25-3.633-0.744C33.042,27.586,32.599,26.857,32.599,25.896z
 | 
			
		||||
			c-0.384,0.318-0.834,0.558-1.351,0.72c-0.517,0.162-1.071,0.247-1.663,0.247c-0.265,0-0.55-0.032-0.854-0.092
 | 
			
		||||
			c-0.302-0.058-0.601-0.147-0.896-0.267c-0.503,0.326-0.753,0.7-0.753,1.131c0,0.397,0.185,0.687,0.553,0.864
 | 
			
		||||
			c0.369,0.177,0.901,0.267,1.596,0.267h2.303c1.42,0,2.47,0.203,3.159,0.606c0.687,0.406,1.029,1.076,1.029,2.007
 | 
			
		||||
			c0,0.518-0.145,1.004-0.431,1.461c-0.29,0.459-0.699,0.86-1.23,1.209c-0.531,0.348-1.174,0.621-1.929,0.819
 | 
			
		||||
			c-0.751,0.199-1.594,0.299-2.525,0.299c-1.537,0-2.747-0.25-3.633-0.743C33.042,27.586,32.599,26.857,32.599,25.896z
 | 
			
		||||
			 M34.458,25.633c0,0.516,0.285,0.932,0.854,1.25s1.393,0.477,2.47,0.477c0.577,0,1.097-0.055,1.562-0.166
 | 
			
		||||
			c0.465-0.11,0.864-0.258,1.197-0.442s0.585-0.396,0.764-0.631c0.177-0.234,0.266-0.486,0.266-0.754
 | 
			
		||||
			c0-0.474-0.196-0.785-0.587-0.941c-0.392-0.153-0.979-0.231-1.762-0.231h-1.905c-0.34,0-0.641-0.012-0.907-0.033
 | 
			
		||||
			c-0.268-0.021-0.519-0.07-0.754-0.145c-0.444,0.25-0.753,0.51-0.932,0.776C34.549,25.057,34.458,25.334,34.458,25.633z
 | 
			
		||||
			c0.465-0.109,0.864-0.258,1.197-0.441s0.585-0.396,0.764-0.631c0.177-0.234,0.266-0.486,0.266-0.754
 | 
			
		||||
			c0-0.475-0.196-0.785-0.587-0.941c-0.392-0.152-0.979-0.23-1.762-0.23h-1.905c-0.34,0-0.641-0.012-0.907-0.033
 | 
			
		||||
			c-0.268-0.021-0.519-0.07-0.754-0.145c-0.444,0.25-0.753,0.51-0.932,0.775C34.549,25.057,34.458,25.334,34.458,25.633z
 | 
			
		||||
			 M37.539,19.095c0.621,0,1.152-0.206,1.597-0.62c0.442-0.414,0.665-0.989,0.665-1.727c0-0.71-0.223-1.279-0.665-1.707
 | 
			
		||||
			c-0.445-0.428-0.976-0.643-1.597-0.643s-1.152,0.215-1.595,0.643c-0.442,0.428-0.665,0.997-0.665,1.707
 | 
			
		||||
			c0,0.738,0.223,1.313,0.665,1.727C36.386,18.889,36.918,19.095,37.539,19.095z"/>
 | 
			
		||||
	</g>
 | 
			
		||||
	<path display="inline" fill="#231916" d="M15.983,24.24h-1.857l-0.183-1.854h-0.092c-0.551,0.642-1.151,1.154-1.8,1.548
 | 
			
		||||
		c-0.649,0.387-1.401,0.582-2.258,0.582c-1.329,0-2.3-0.384-2.91-1.156c-0.612-0.771-0.917-1.898-0.917-3.381V14.35L3,14.293
 | 
			
		||||
		c-0.649,0.387-1.401,0.582-2.258,0.582c-1.329,0-2.3-0.384-2.91-1.156c-0.612-0.771-0.917-1.897-0.917-3.38V14.35L3,14.293
 | 
			
		||||
		l5.258-2.023l-0.023,1.529v5.882c0,0.994,0.176,1.724,0.528,2.189c0.351,0.467,0.954,0.7,1.811,0.7
 | 
			
		||||
		c0.581,0,1.111-0.143,1.593-0.426c0.48-0.283,0.998-0.762,1.547-1.433v-7.678h2.269V24.24z"/>
 | 
			
		||||
		c0.581,0,1.111-0.144,1.593-0.426c0.48-0.283,0.998-0.763,1.547-1.434v-7.678h2.269V24.24z"/>
 | 
			
		||||
	<path display="inline" fill="#231916" d="M19.742,13.033h1.856l0.184,1.812h0.091c0.565-0.582,1.176-1.075,1.834-1.479
 | 
			
		||||
		c0.655-0.405,1.42-0.607,2.292-0.607c1.313,0,2.278,0.39,2.888,1.168c0.611,0.778,0.917,1.903,0.917,3.37v6.942h-2.271v-6.646
 | 
			
		||||
		c0-0.976-0.174-1.7-0.525-2.165c-0.352-0.467-0.955-0.701-1.811-0.701c-0.597,0-1.131,0.151-1.605,0.447
 | 
			
		||||
| 
						 | 
				
			
			@ -36,28 +36,28 @@
 | 
			
		|||
		c0.533-0.511,1.146-0.902,1.834-1.17c0.687-0.267,1.398-0.4,2.13-0.4c0.826,0,1.555,0.13,2.19,0.39
 | 
			
		||||
		c0.633,0.26,1.172,0.621,1.615,1.086c0.443,0.468,0.779,1.025,1.01,1.676c0.229,0.648,0.344,1.362,0.344,2.142
 | 
			
		||||
		c0,0.229-0.012,0.447-0.035,0.652c-0.022,0.208-0.049,0.38-0.08,0.516h-8.436c0.077,1.1,0.485,1.96,1.229,2.58
 | 
			
		||||
		c0.739,0.619,1.675,0.928,2.807,0.928c0.611,0,1.18-0.084,1.708-0.252c0.527-0.166,1.042-0.403,1.546-0.709l0.802,1.443
 | 
			
		||||
		c-0.578,0.367-1.23,0.676-1.959,0.928c-0.726,0.252-1.525,0.377-2.396,0.377c-0.842,0-1.631-0.131-2.371-0.399
 | 
			
		||||
		c-0.742-0.267-1.387-0.65-1.938-1.156c-0.551-0.504-0.982-1.119-1.296-1.846C55.286,20.386,55.129,19.566,55.129,18.65z
 | 
			
		||||
		c0.739,0.619,1.675,0.928,2.807,0.928c0.611,0,1.18-0.084,1.708-0.252c0.527-0.166,1.042-0.402,1.546-0.709l0.802,1.443
 | 
			
		||||
		c-0.578,0.367-1.23,0.676-1.959,0.928c-0.726,0.252-1.525,0.377-2.396,0.377c-0.842,0-1.631-0.131-2.371-0.398
 | 
			
		||||
		c-0.742-0.268-1.387-0.65-1.938-1.156c-0.551-0.504-0.982-1.119-1.296-1.846C55.286,20.386,55.129,19.566,55.129,18.65z
 | 
			
		||||
		 M63.909,17.665c0-1.01-0.263-1.781-0.779-2.317c-0.521-0.534-1.262-0.8-2.225-0.8c-0.84,0-1.587,0.266-2.245,0.8
 | 
			
		||||
		c-0.658,0.536-1.062,1.307-1.214,2.317H63.909z"/>
 | 
			
		||||
	<path display="inline" fill="#231916" d="M73.475,12.679l0.008,11.793h-2.27v-8.611h-4.256L73.475,12.679z M72.152,10.368
 | 
			
		||||
	<path display="inline" fill="#231916" d="M73.475,12.679l0.008,11.793h-2.27v-8.612h-4.256L73.475,12.679z M72.152,10.368
 | 
			
		||||
		c-0.488,0-0.894-0.146-1.215-0.435c-0.32-0.291-0.48-0.681-0.48-1.17c0-0.489,0.16-0.882,0.48-1.18
 | 
			
		||||
		c0.321-0.298,0.727-0.446,1.215-0.446s0.896,0.148,1.215,0.446c0.32,0.298,0.482,0.691,0.482,1.18c0,0.489-0.162,0.879-0.482,1.17
 | 
			
		||||
		C73.049,10.221,72.641,10.368,72.152,10.368z"/>
 | 
			
		||||
		c0.321-0.298,0.727-0.446,1.215-0.446c0.488,0,0.896,0.148,1.215,0.446c0.32,0.298,0.482,0.691,0.482,1.18
 | 
			
		||||
		c0,0.489-0.162,0.879-0.482,1.17C73.049,10.221,72.641,10.368,72.152,10.368z"/>
 | 
			
		||||
	<path display="inline" fill="#231916" d="M76.629,18.878c0-0.932,0.168-1.766,0.504-2.497c0.336-0.735,0.795-1.353,1.375-1.859
 | 
			
		||||
		c0.582-0.503,1.25-0.884,2.008-1.145c0.756-0.26,1.562-0.389,2.416-0.389c0.918,0,1.719,0.156,2.406,0.469
 | 
			
		||||
		c0.689,0.312,1.262,0.693,1.721,1.135l-1.1,1.443c-0.443-0.367-0.904-0.653-1.379-0.86c-0.471-0.206-0.984-0.309-1.535-0.309
 | 
			
		||||
		c-0.594,0-1.143,0.095-1.65,0.287c-0.502,0.19-0.936,0.462-1.293,0.813c-0.358,0.352-0.639,0.776-0.838,1.272
 | 
			
		||||
		c-0.594,0-1.143,0.095-1.65,0.287c-0.502,0.19-0.936,0.462-1.293,0.813c-0.357,0.352-0.639,0.776-0.838,1.272
 | 
			
		||||
		c-0.197,0.495-0.297,1.042-0.297,1.638c0,0.595,0.096,1.144,0.287,1.64c0.189,0.496,0.465,0.92,0.824,1.273
 | 
			
		||||
		c0.359,0.35,0.785,0.623,1.273,0.812c0.487,0.188,1.028,0.284,1.627,0.284c0.686,0,1.307-0.129,1.856-0.387
 | 
			
		||||
		c0.549-0.263,1.043-0.574,1.488-0.94l0.965,1.467c-0.644,0.551-1.347,0.975-2.111,1.272c-0.764,0.298-1.559,0.445-2.383,0.445
 | 
			
		||||
		c-0.871,0-1.687-0.129-2.44-0.39c-0.756-0.26-1.41-0.643-1.961-1.146c-0.55-0.506-0.98-1.121-1.293-1.847
 | 
			
		||||
		c0.359,0.35,0.785,0.623,1.273,0.812c0.486,0.188,1.027,0.283,1.627,0.283c0.686,0,1.307-0.129,1.855-0.387
 | 
			
		||||
		c0.549-0.264,1.043-0.574,1.488-0.939l0.965,1.467c-0.645,0.551-1.348,0.975-2.111,1.271c-0.764,0.298-1.559,0.445-2.383,0.445
 | 
			
		||||
		c-0.871,0-1.688-0.129-2.439-0.391c-0.756-0.26-1.41-0.643-1.961-1.146c-0.55-0.506-0.98-1.121-1.293-1.847
 | 
			
		||||
		C76.785,20.641,76.629,19.811,76.629,18.878z"/>
 | 
			
		||||
	<path display="inline" fill="#231916" d="M87.4,8.285l4.752-2.356v6.601l-0.139,2.521c0.565-0.58,1.178-1.07,1.836-1.467
 | 
			
		||||
		c0.655-0.396,1.42-0.595,2.293-0.595c1.312,0,2.274,0.389,2.885,1.168c0.611,0.78,0.918,1.903,0.918,3.371v6.945h-2.271v-6.648
 | 
			
		||||
		c0-0.978-0.176-1.7-0.526-2.165c-0.353-0.466-0.953-0.7-1.812-0.7c-0.596,0-1.131,0.149-1.604,0.448
 | 
			
		||||
		c-0.475,0.298-1.002,0.745-1.582,1.342v7.726h-2.27L89.836,8.189L87.4,8.285z"/>
 | 
			
		||||
	<path display="inline" fill="#231916" d="M87.4,8.285l4.752-2.356v6.601l-0.139,2.521c0.564-0.58,1.178-1.07,1.836-1.467
 | 
			
		||||
		c0.654-0.396,1.42-0.595,2.293-0.595c1.312,0,2.273,0.389,2.885,1.168c0.611,0.78,0.918,1.903,0.918,3.371v6.945h-2.271v-6.647
 | 
			
		||||
		c0-0.978-0.176-1.7-0.525-2.165c-0.354-0.466-0.953-0.7-1.812-0.7c-0.596,0-1.131,0.149-1.604,0.448
 | 
			
		||||
		c-0.476,0.298-1.002,0.745-1.582,1.342v7.727H89.88L89.836,8.189L87.4,8.285z"/>
 | 
			
		||||
	<g display="inline">
 | 
			
		||||
		<polygon fill="#010000" points="100.371,3.218 99.607,4.815 109.109,4.855 109.873,3.228 		"/>
 | 
			
		||||
		<polygon fill="#010000" points="99.619,6.703 98.83,8.378 108.346,8.397 109.109,6.74 		"/>
 | 
			
		||||
| 
						 | 
				
			
			@ -65,117 +65,120 @@
 | 
			
		|||
	</g>
 | 
			
		||||
	<g display="inline">
 | 
			
		||||
		<path fill="#231916" d="M49.446,20.596c0,0.754,0.188,1.297,0.566,1.631c0.376,0.33,0.866,0.498,1.472,0.498
 | 
			
		||||
			c0.295,0,0.599-0.037,0.909-0.111s0.658-0.193,1.042-0.355l0.532,1.643c-0.252,0.086-0.492,0.166-0.721,0.242
 | 
			
		||||
			c-0.231,0.074-0.461,0.135-0.698,0.187c-0.237,0.055-0.483,0.098-0.741,0.135c-0.26,0.035-0.543,0.058-0.853,0.058
 | 
			
		||||
			c-1.212,0-2.131-0.349-2.76-1.043c-0.627-0.693-0.941-1.697-0.941-3.014V5.711h-3.544l5.737-4.043"/>
 | 
			
		||||
			c0.295,0,0.599-0.037,0.909-0.11c0.31-0.074,0.658-0.193,1.042-0.355l0.532,1.644c-0.252,0.086-0.492,0.166-0.721,0.242
 | 
			
		||||
			c-0.231,0.073-0.461,0.135-0.698,0.187c-0.237,0.055-0.483,0.099-0.741,0.135c-0.26,0.035-0.543,0.058-0.853,0.058
 | 
			
		||||
			c-1.212,0-2.131-0.349-2.76-1.043c-0.627-0.692-0.941-1.696-0.941-3.014V5.711h-3.544l5.737-4.043"/>
 | 
			
		||||
	</g>
 | 
			
		||||
</g>
 | 
			
		||||
<path fill="#29427A" d="M12.927,23.013v-1.46h-0.045c-0.359,0.569-0.873,1.007-1.539,1.313s-1.374,0.461-2.122,0.461
 | 
			
		||||
	c-0.839,0-1.587-0.165-2.246-0.494c-0.659-0.329-1.216-0.768-1.673-1.313c-0.457-0.547-0.805-1.18-1.044-1.898
 | 
			
		||||
	c-0.24-0.718-0.359-1.467-0.359-2.245s0.124-1.523,0.371-2.234s0.599-1.337,1.055-1.875c0.457-0.539,1.011-0.966,1.662-1.28
 | 
			
		||||
<path fill="#29427A" d="M12.927,23.014v-1.461h-0.045c-0.359,0.569-0.873,1.008-1.539,1.313s-1.374,0.461-2.122,0.461
 | 
			
		||||
	c-0.839,0-1.587-0.165-2.246-0.494c-0.659-0.329-1.216-0.769-1.673-1.313c-0.457-0.547-0.805-1.18-1.044-1.897
 | 
			
		||||
	c-0.24-0.718-0.359-1.467-0.359-2.245c0-0.778,0.124-1.523,0.371-2.234s0.599-1.337,1.055-1.875c0.457-0.539,1.011-0.966,1.662-1.28
 | 
			
		||||
	c0.651-0.314,1.381-0.472,2.189-0.472c0.823,0,1.52,0.157,2.089,0.472c0.568,0.314,1.011,0.659,1.325,1.033h0.045V6.035h3.683
 | 
			
		||||
	v16.978H12.927z M12.792,17.398c0-0.359-0.064-0.711-0.191-1.056c-0.128-0.345-0.307-0.651-0.54-0.921
 | 
			
		||||
	v16.979H12.927z M12.792,17.398c0-0.359-0.064-0.711-0.191-1.056c-0.128-0.345-0.307-0.651-0.54-0.921
 | 
			
		||||
	c-0.232-0.27-0.513-0.486-0.842-0.651c-0.329-0.164-0.704-0.247-1.123-0.247c-0.434,0-0.816,0.083-1.145,0.247
 | 
			
		||||
	c-0.33,0.165-0.606,0.379-0.831,0.64c-0.225,0.263-0.393,0.565-0.505,0.91s-0.168,0.696-0.168,1.056
 | 
			
		||||
	c0,0.358,0.056,0.715,0.168,1.066s0.281,0.663,0.505,0.932c0.225,0.27,0.501,0.487,0.831,0.651c0.329,0.165,0.711,0.247,1.145,0.247
 | 
			
		||||
	c0.419,0,0.793-0.082,1.123-0.247c0.33-0.164,0.61-0.382,0.842-0.651c0.232-0.269,0.412-0.575,0.54-0.921
 | 
			
		||||
	c-0.33,0.165-0.606,0.379-0.831,0.64c-0.225,0.263-0.393,0.565-0.505,0.91c-0.112,0.345-0.168,0.696-0.168,1.056
 | 
			
		||||
	c0,0.358,0.056,0.715,0.168,1.066c0.112,0.351,0.281,0.663,0.505,0.932c0.225,0.27,0.501,0.487,0.831,0.651
 | 
			
		||||
	c0.329,0.165,0.711,0.247,1.145,0.247c0.419,0,0.793-0.082,1.123-0.247c0.33-0.164,0.61-0.382,0.842-0.651s0.412-0.575,0.54-0.921
 | 
			
		||||
	C12.728,18.109,12.792,17.758,12.792,17.398z"/>
 | 
			
		||||
<path fill="#29427A" d="M19.08,13.355c0.659-0.628,1.426-1.1,2.302-1.415s1.771-0.472,2.684-0.472c0.944,0,1.741,0.116,2.392,0.348
 | 
			
		||||
	c0.651,0.232,1.179,0.591,1.583,1.078c0.404,0.486,0.7,1.101,0.887,1.842c0.187,0.74,0.281,1.62,0.281,2.639v5.637H25.84v-1.19
 | 
			
		||||
	h-0.067c-0.285,0.464-0.715,0.823-1.291,1.078c-0.577,0.254-1.202,0.382-1.875,0.382c-0.449,0-0.913-0.061-1.393-0.18
 | 
			
		||||
	c-0.479-0.12-0.917-0.314-1.313-0.584c-0.397-0.27-0.723-0.629-0.977-1.078c-0.255-0.449-0.382-1.003-0.382-1.662
 | 
			
		||||
	c0-0.809,0.221-1.459,0.663-1.953s1.011-0.876,1.707-1.146c0.696-0.27,1.471-0.449,2.324-0.539s1.685-0.135,2.493-0.135v-0.18
 | 
			
		||||
	c0-0.554-0.195-0.962-0.584-1.225c-0.389-0.262-0.868-0.393-1.437-0.393c-0.524,0-1.03,0.112-1.516,0.337
 | 
			
		||||
	c-0.487,0.225-0.902,0.494-1.247,0.809L19.08,13.355z M25.84,18.139h-0.472c-0.404,0-0.812,0.02-1.224,0.057
 | 
			
		||||
	c-0.412,0.037-0.779,0.108-1.101,0.213c-0.322,0.105-0.588,0.259-0.797,0.461c-0.21,0.202-0.314,0.468-0.314,0.797
 | 
			
		||||
	c0,0.21,0.049,0.39,0.146,0.539c0.097,0.15,0.221,0.27,0.371,0.359c0.149,0.09,0.322,0.153,0.517,0.191
 | 
			
		||||
	c0.194,0.037,0.382,0.056,0.562,0.056c0.749,0,1.321-0.205,1.718-0.617c0.396-0.412,0.595-0.97,0.595-1.673V18.139z"/>
 | 
			
		||||
	s1.179,0.591,1.583,1.078c0.404,0.486,0.7,1.101,0.887,1.842c0.187,0.74,0.281,1.62,0.281,2.639v5.637H25.84v-1.189h-0.067
 | 
			
		||||
	c-0.285,0.464-0.715,0.822-1.291,1.078c-0.577,0.254-1.202,0.382-1.875,0.382c-0.449,0-0.913-0.062-1.393-0.181
 | 
			
		||||
	c-0.479-0.119-0.917-0.313-1.313-0.584c-0.397-0.27-0.723-0.629-0.977-1.078c-0.255-0.448-0.382-1.002-0.382-1.662
 | 
			
		||||
	c0-0.809,0.221-1.459,0.663-1.953c0.442-0.494,1.011-0.876,1.707-1.146c0.696-0.27,1.471-0.449,2.324-0.539
 | 
			
		||||
	c0.853-0.09,1.685-0.135,2.493-0.135v-0.18c0-0.554-0.195-0.962-0.584-1.225c-0.389-0.262-0.868-0.393-1.437-0.393
 | 
			
		||||
	c-0.524,0-1.03,0.112-1.516,0.337c-0.487,0.225-0.902,0.494-1.247,0.809L19.08,13.355z M25.84,18.139h-0.472
 | 
			
		||||
	c-0.404,0-0.812,0.02-1.224,0.057c-0.412,0.037-0.779,0.108-1.101,0.213c-0.322,0.105-0.588,0.259-0.797,0.461
 | 
			
		||||
	c-0.21,0.202-0.314,0.468-0.314,0.797c0,0.21,0.049,0.39,0.146,0.539c0.097,0.15,0.221,0.27,0.371,0.358
 | 
			
		||||
	c0.149,0.091,0.322,0.153,0.517,0.191c0.194,0.037,0.382,0.057,0.562,0.057c0.749,0,1.321-0.205,1.718-0.618
 | 
			
		||||
	c0.396-0.412,0.595-0.97,0.595-1.673L25.84,18.139L25.84,18.139z"/>
 | 
			
		||||
<path fill="#29427A" d="M36.067,14.568v4.283c0,0.526,0.101,0.921,0.303,1.184c0.202,0.264,0.565,0.395,1.089,0.395
 | 
			
		||||
	c0.18,0,0.371-0.015,0.573-0.045c0.202-0.029,0.371-0.074,0.505-0.135l0.045,2.695c-0.255,0.09-0.577,0.169-0.966,0.235
 | 
			
		||||
	c-0.389,0.067-0.779,0.102-1.168,0.102c-0.749,0-1.377-0.094-1.886-0.281c-0.509-0.188-0.917-0.458-1.224-0.811
 | 
			
		||||
	c-0.307-0.354-0.528-0.773-0.662-1.261c-0.135-0.488-0.202-1.032-0.202-1.633v-4.729h-1.797v-2.74h1.774V8.887h3.616v2.942h2.627
 | 
			
		||||
	v2.74H36.067z"/>
 | 
			
		||||
	c0.18,0,0.371-0.015,0.573-0.045c0.202-0.029,0.371-0.074,0.505-0.135l0.045,2.695c-0.255,0.09-0.577,0.169-0.966,0.234
 | 
			
		||||
	c-0.389,0.067-0.779,0.103-1.168,0.103c-0.749,0-1.377-0.095-1.886-0.281c-0.509-0.188-0.917-0.458-1.224-0.812
 | 
			
		||||
	s-0.528-0.772-0.662-1.26c-0.135-0.489-0.202-1.033-0.202-1.634v-4.729h-1.797v-2.74h1.774v-2.94h3.616v2.942h2.627v2.74
 | 
			
		||||
	L36.067,14.568L36.067,14.568z"/>
 | 
			
		||||
<path fill="#29427A" d="M40.957,13.355c0.659-0.628,1.426-1.1,2.302-1.415s1.771-0.472,2.684-0.472c0.943,0,1.741,0.116,2.392,0.348
 | 
			
		||||
	c0.651,0.232,1.179,0.591,1.583,1.078c0.404,0.486,0.7,1.101,0.887,1.842c0.188,0.74,0.281,1.62,0.281,2.639v5.637h-3.369v-1.19
 | 
			
		||||
	h-0.067c-0.285,0.464-0.715,0.823-1.291,1.078c-0.577,0.254-1.202,0.382-1.875,0.382c-0.449,0-0.913-0.061-1.392-0.18
 | 
			
		||||
	c-0.479-0.12-0.917-0.314-1.314-0.584c-0.397-0.27-0.723-0.629-0.977-1.078s-0.382-1.003-0.382-1.662
 | 
			
		||||
	c0-0.809,0.221-1.459,0.663-1.953s1.011-0.876,1.707-1.146s1.471-0.449,2.324-0.539s1.685-0.135,2.493-0.135v-0.18
 | 
			
		||||
	c0-0.554-0.195-0.962-0.584-1.225c-0.389-0.262-0.868-0.393-1.437-0.393c-0.524,0-1.03,0.112-1.516,0.337s-0.902,0.494-1.247,0.809
 | 
			
		||||
	L40.957,13.355z M47.717,18.139h-0.471c-0.404,0-0.812,0.02-1.224,0.057c-0.412,0.037-0.779,0.108-1.101,0.213
 | 
			
		||||
	c-0.322,0.105-0.587,0.259-0.797,0.461c-0.209,0.202-0.314,0.468-0.314,0.797c0,0.21,0.049,0.39,0.146,0.539
 | 
			
		||||
	c0.097,0.15,0.22,0.27,0.37,0.359c0.149,0.09,0.322,0.153,0.517,0.191c0.194,0.037,0.382,0.056,0.562,0.056
 | 
			
		||||
	c0.749,0,1.321-0.205,1.718-0.617c0.396-0.412,0.595-0.97,0.595-1.673V18.139z"/>
 | 
			
		||||
	s1.179,0.591,1.583,1.078c0.404,0.486,0.7,1.101,0.887,1.842c0.188,0.74,0.281,1.62,0.281,2.639v5.637h-3.369v-1.189H47.65
 | 
			
		||||
	c-0.285,0.464-0.715,0.822-1.291,1.078c-0.577,0.254-1.202,0.382-1.875,0.382c-0.449,0-0.913-0.062-1.392-0.181
 | 
			
		||||
	s-0.917-0.313-1.314-0.584c-0.397-0.27-0.723-0.629-0.977-1.078c-0.254-0.448-0.382-1.002-0.382-1.662
 | 
			
		||||
	c0-0.809,0.221-1.459,0.663-1.953c0.442-0.494,1.011-0.876,1.707-1.146c0.696-0.27,1.471-0.449,2.324-0.539
 | 
			
		||||
	c0.853-0.09,1.685-0.135,2.493-0.135v-0.18c0-0.554-0.195-0.962-0.584-1.225c-0.389-0.262-0.868-0.393-1.437-0.393
 | 
			
		||||
	c-0.524,0-1.03,0.112-1.516,0.337c-0.486,0.225-0.902,0.494-1.247,0.809L40.957,13.355z M47.717,18.139h-0.471
 | 
			
		||||
	c-0.404,0-0.812,0.02-1.224,0.057c-0.412,0.037-0.779,0.108-1.101,0.213c-0.322,0.105-0.587,0.259-0.797,0.461
 | 
			
		||||
	c-0.209,0.202-0.314,0.468-0.314,0.797c0,0.21,0.049,0.39,0.146,0.539c0.097,0.15,0.22,0.27,0.37,0.358
 | 
			
		||||
	c0.149,0.091,0.322,0.153,0.517,0.191c0.194,0.037,0.382,0.057,0.562,0.057c0.749,0,1.321-0.205,1.718-0.618
 | 
			
		||||
	c0.396-0.412,0.595-0.97,0.595-1.673L47.717,18.139L47.717,18.139z"/>
 | 
			
		||||
<path fill="#5A74AF" d="M61.874,15.197c-0.375-0.389-0.768-0.685-1.179-0.887c-0.412-0.202-0.902-0.304-1.471-0.304
 | 
			
		||||
	c-0.554,0-1.037,0.102-1.449,0.304c-0.412,0.202-0.756,0.479-1.033,0.831s-0.487,0.756-0.629,1.212
 | 
			
		||||
	c-0.142,0.457-0.213,0.933-0.213,1.427s0.082,0.962,0.247,1.403c0.165,0.441,0.396,0.827,0.696,1.156
 | 
			
		||||
	c0.3,0.33,0.659,0.588,1.078,0.775c0.419,0.188,0.891,0.28,1.415,0.28c0.568,0,1.055-0.101,1.459-0.303s0.778-0.498,1.123-0.888
 | 
			
		||||
	l1.438,1.438c-0.524,0.584-1.134,1.003-1.831,1.258c-0.696,0.254-1.434,0.382-2.212,0.382c-0.823,0-1.576-0.135-2.257-0.404
 | 
			
		||||
	s-1.269-0.647-1.763-1.135c-0.494-0.485-0.876-1.07-1.146-1.751c-0.27-0.682-0.404-1.434-0.404-2.258
 | 
			
		||||
	c0-0.822,0.135-1.579,0.404-2.268s0.647-1.28,1.134-1.774c0.486-0.494,1.07-0.879,1.751-1.156s1.441-0.416,2.279-0.416
 | 
			
		||||
	c-0.554,0-1.037,0.102-1.449,0.304s-0.756,0.479-1.033,0.831c-0.277,0.352-0.487,0.756-0.629,1.212
 | 
			
		||||
	C55.971,16.81,55.9,17.286,55.9,17.78c0,0.494,0.082,0.962,0.247,1.403s0.396,0.827,0.696,1.156c0.3,0.33,0.659,0.588,1.078,0.775
 | 
			
		||||
	s0.891,0.28,1.415,0.28c0.568,0,1.055-0.102,1.459-0.304c0.404-0.202,0.778-0.498,1.123-0.888l1.438,1.438
 | 
			
		||||
	c-0.524,0.584-1.134,1.004-1.831,1.258c-0.696,0.254-1.434,0.383-2.212,0.383c-0.823,0-1.576-0.135-2.257-0.404
 | 
			
		||||
	c-0.681-0.27-1.269-0.646-1.763-1.135c-0.494-0.485-0.876-1.07-1.146-1.751c-0.27-0.682-0.404-1.434-0.404-2.258
 | 
			
		||||
	c0-0.822,0.135-1.579,0.404-2.268s0.647-1.28,1.134-1.774c0.486-0.494,1.07-0.879,1.751-1.156c0.681-0.277,1.441-0.416,2.279-0.416
 | 
			
		||||
	c0.779,0,1.523,0.139,2.235,0.416c0.711,0.277,1.329,0.7,1.853,1.269L61.874,15.197z"/>
 | 
			
		||||
<path fill="#5A74AF" d="M66.612,18.432c0,0.464,0.101,0.887,0.304,1.269c0.201,0.382,0.467,0.707,0.797,0.977
 | 
			
		||||
	c0.329,0.27,0.711,0.479,1.145,0.629c0.435,0.15,0.884,0.225,1.348,0.225c0.629,0,1.176-0.146,1.64-0.438
 | 
			
		||||
	c0.464-0.292,0.891-0.678,1.28-1.157l1.527,1.168c-1.123,1.452-2.695,2.179-4.717,2.179c-0.838,0-1.598-0.143-2.279-0.427
 | 
			
		||||
	s-1.258-0.678-1.729-1.179c-0.473-0.502-0.836-1.093-1.09-1.774s-0.382-1.418-0.382-2.212s0.139-1.531,0.416-2.213
 | 
			
		||||
	c0.276-0.681,0.658-1.271,1.146-1.773c0.486-0.501,1.066-0.895,1.74-1.18c0.674-0.284,1.406-0.426,2.201-0.426
 | 
			
		||||
	c0.942,0,1.74,0.165,2.391,0.494c0.652,0.33,1.187,0.76,1.605,1.292c0.42,0.531,0.723,1.13,0.91,1.796
 | 
			
		||||
	c0.188,0.667,0.281,1.345,0.281,2.033v0.719H66.612z M72.99,16.814c-0.016-0.449-0.086-0.861-0.213-1.235
 | 
			
		||||
	c-0.128-0.374-0.318-0.7-0.573-0.978c-0.255-0.276-0.573-0.493-0.954-0.65c-0.383-0.157-0.828-0.236-1.337-0.236
 | 
			
		||||
	c-0.493,0-0.946,0.094-1.358,0.281s-0.76,0.43-1.044,0.729s-0.505,0.633-0.663,0.999c-0.156,0.367-0.235,0.73-0.235,1.09H72.99z"/>
 | 
			
		||||
	c0.329,0.271,0.711,0.479,1.145,0.629c0.435,0.15,0.884,0.226,1.348,0.226c0.629,0,1.176-0.146,1.64-0.438
 | 
			
		||||
	c0.464-0.292,0.891-0.678,1.28-1.157l1.527,1.168c-1.123,1.451-2.695,2.179-4.717,2.179c-0.838,0-1.598-0.144-2.279-0.427
 | 
			
		||||
	c-0.681-0.284-1.258-0.678-1.729-1.18c-0.473-0.502-0.836-1.093-1.09-1.774c-0.254-0.681-0.382-1.418-0.382-2.212
 | 
			
		||||
	s0.139-1.531,0.416-2.213c0.276-0.681,0.658-1.271,1.146-1.773c0.486-0.501,1.066-0.895,1.74-1.18
 | 
			
		||||
	c0.674-0.284,1.406-0.426,2.201-0.426c0.942,0,1.74,0.165,2.391,0.494c0.652,0.33,1.187,0.76,1.605,1.292
 | 
			
		||||
	c0.42,0.531,0.723,1.13,0.91,1.796c0.188,0.667,0.281,1.345,0.281,2.033v0.719h-8.534V18.432z M72.99,16.814
 | 
			
		||||
	c-0.016-0.449-0.086-0.861-0.213-1.235c-0.128-0.374-0.318-0.7-0.573-0.978c-0.255-0.276-0.573-0.493-0.954-0.65
 | 
			
		||||
	c-0.383-0.157-0.828-0.236-1.337-0.236c-0.493,0-0.946,0.094-1.358,0.281c-0.412,0.187-0.76,0.43-1.044,0.729
 | 
			
		||||
	c-0.284,0.299-0.505,0.633-0.663,0.999c-0.156,0.367-0.235,0.73-0.235,1.09H72.99z"/>
 | 
			
		||||
<path fill="#5A74AF" d="M77.572,12.368h2.021v1.639h0.046c0.254-0.568,0.695-1.029,1.324-1.381s1.355-0.528,2.178-0.528
 | 
			
		||||
	c0.51,0,1,0.079,1.472,0.236s0.883,0.4,1.235,0.73c0.352,0.329,0.633,0.752,0.842,1.269c0.209,0.516,0.314,1.126,0.314,1.83v6.85
 | 
			
		||||
	h-2.021v-6.288c0-0.494-0.066-0.917-0.201-1.269c-0.135-0.353-0.314-0.637-0.539-0.854c-0.225-0.216-0.483-0.373-0.775-0.471
 | 
			
		||||
	s-0.596-0.146-0.91-0.146c-0.418,0-0.808,0.067-1.167,0.202s-0.674,0.349-0.943,0.641c-0.27,0.291-0.479,0.662-0.629,1.111
 | 
			
		||||
	s-0.225,0.98-0.225,1.595v5.479h-2.021V12.368z"/>
 | 
			
		||||
<path fill="#5A74AF" d="M95.762,14.119h-2.896v4.829c0,0.299,0.008,0.595,0.022,0.887s0.071,0.554,0.169,0.786
 | 
			
		||||
	c0.097,0.232,0.246,0.419,0.449,0.561c0.201,0.144,0.497,0.214,0.887,0.214c0.239,0,0.486-0.022,0.741-0.067
 | 
			
		||||
	s0.486-0.127,0.696-0.247v1.842c-0.24,0.135-0.551,0.229-0.932,0.28c-0.383,0.053-0.678,0.079-0.888,0.079
 | 
			
		||||
	c-0.778,0-1.382-0.109-1.808-0.325c-0.427-0.218-0.741-0.498-0.943-0.843s-0.322-0.73-0.359-1.156
 | 
			
		||||
	c-0.037-0.427-0.057-0.857-0.057-1.292v-5.547h-2.336v-1.751h2.336V9.381h2.021v2.987h2.896V14.119z"/>
 | 
			
		||||
<path fill="#5A74AF" d="M99.895,18.432c0,0.464,0.102,0.887,0.304,1.269s0.467,0.707,0.797,0.977
 | 
			
		||||
	c0.329,0.27,0.711,0.479,1.146,0.629c0.434,0.15,0.883,0.225,1.348,0.225c0.628,0,1.175-0.146,1.639-0.438
 | 
			
		||||
	c0.464-0.292,0.891-0.678,1.28-1.157l1.527,1.168c-1.123,1.452-2.695,2.179-4.716,2.179c-0.839,0-1.599-0.143-2.28-0.427
 | 
			
		||||
	c-0.681-0.284-1.257-0.678-1.729-1.179c-0.471-0.502-0.834-1.093-1.088-1.774c-0.256-0.682-0.383-1.418-0.383-2.212
 | 
			
		||||
	s0.139-1.531,0.416-2.213c0.276-0.681,0.658-1.271,1.145-1.773c0.487-0.501,1.067-0.895,1.741-1.18
 | 
			
		||||
	c0.674-0.284,1.407-0.426,2.201-0.426c0.942,0,1.74,0.165,2.392,0.494c0.65,0.33,1.186,0.76,1.605,1.292
 | 
			
		||||
	c0.419,0.531,0.723,1.13,0.909,1.796c0.188,0.667,0.281,1.345,0.281,2.033v0.719H99.895z M106.272,16.814
 | 
			
		||||
	c-0.016-0.449-0.086-0.861-0.213-1.235c-0.128-0.374-0.318-0.7-0.573-0.978c-0.255-0.276-0.572-0.493-0.954-0.65
 | 
			
		||||
	s-0.828-0.236-1.337-0.236c-0.493,0-0.946,0.094-1.358,0.281c-0.411,0.188-0.76,0.43-1.044,0.729
 | 
			
		||||
	c-0.285,0.3-0.506,0.633-0.663,0.999c-0.157,0.367-0.235,0.73-0.235,1.09H106.272z"/>
 | 
			
		||||
<path fill="#5A74AF" d="M110.854,12.368h2.021v1.639h0.045c0.135-0.284,0.314-0.542,0.539-0.774
 | 
			
		||||
	c0.225-0.232,0.475-0.431,0.752-0.595s0.58-0.295,0.909-0.393c0.33-0.097,0.659-0.146,0.988-0.146c0.33,0,0.629,0.045,0.899,0.135
 | 
			
		||||
	l-0.091,2.178c-0.165-0.045-0.329-0.082-0.494-0.112c-0.165-0.029-0.329-0.045-0.493-0.045c-0.988,0-1.745,0.277-2.269,0.831
 | 
			
		||||
	c-0.524,0.554-0.786,1.415-0.786,2.583v5.345h-2.021V12.368z"/>
 | 
			
		||||
<path fill="#5E6060" d="M120.156,5.513h1.368v11.493h-1.368V5.513z"/>
 | 
			
		||||
<path fill="#5E6060" d="M123.485,7.215c0-0.274,0.099-0.509,0.297-0.707c0.197-0.198,0.433-0.296,0.707-0.296
 | 
			
		||||
	c0.273,0,0.509,0.099,0.707,0.296c0.197,0.198,0.296,0.433,0.296,0.707c0,0.273-0.099,0.509-0.296,0.707
 | 
			
		||||
	c-0.198,0.198-0.434,0.297-0.707,0.297c-0.274,0-0.51-0.099-0.707-0.297C123.584,7.725,123.485,7.489,123.485,7.215z M123.805,9.799
 | 
			
		||||
	h1.368v7.207h-1.368V9.799z"/>
 | 
			
		||||
<path fill="#5E6060" d="M134.567,16.944c0,0.548-0.094,1.047-0.281,1.498c-0.188,0.45-0.453,0.841-0.798,1.17
 | 
			
		||||
	s-0.76,0.586-1.246,0.768c-0.487,0.183-1.024,0.273-1.611,0.273c-0.689,0-1.32-0.096-1.894-0.288
 | 
			
		||||
	c-0.572-0.193-1.117-0.527-1.634-1.003l0.927-1.156c0.355,0.386,0.74,0.677,1.156,0.874c0.415,0.198,0.887,0.297,1.413,0.297
 | 
			
		||||
	c0.507,0,0.928-0.074,1.262-0.221c0.335-0.146,0.601-0.337,0.799-0.569c0.197-0.234,0.337-0.5,0.418-0.799s0.121-0.601,0.121-0.904
 | 
			
		||||
	v-1.064h-0.045c-0.264,0.436-0.621,0.758-1.072,0.966s-0.925,0.312-1.421,0.312c-0.527,0-1.017-0.094-1.468-0.281
 | 
			
		||||
	s-0.838-0.446-1.163-0.775c-0.324-0.329-0.577-0.72-0.76-1.171c-0.183-0.45-0.273-0.939-0.273-1.467
 | 
			
		||||
	c0-0.527,0.086-1.021,0.259-1.482c0.172-0.461,0.418-0.864,0.737-1.208c0.319-0.345,0.704-0.613,1.155-0.806
 | 
			
		||||
	c0.45-0.192,0.955-0.289,1.513-0.289c0.486,0,0.96,0.106,1.421,0.319s0.823,0.512,1.087,0.896h0.03V9.799h1.368V16.944z
 | 
			
		||||
	 M130.828,10.894c-0.365,0-0.694,0.063-0.988,0.19c-0.294,0.126-0.542,0.299-0.745,0.517c-0.202,0.218-0.359,0.481-0.471,0.791
 | 
			
		||||
	c-0.112,0.309-0.167,0.646-0.167,1.011c0,0.729,0.213,1.315,0.638,1.756c0.426,0.44,1.004,0.661,1.733,0.661
 | 
			
		||||
	s1.307-0.221,1.733-0.661c0.426-0.44,0.638-1.026,0.638-1.756c0-0.365-0.056-0.702-0.167-1.011s-0.269-0.572-0.471-0.791
 | 
			
		||||
	c-0.203-0.218-0.451-0.39-0.745-0.517C131.522,10.958,131.193,10.894,130.828,10.894z"/>
 | 
			
		||||
<path fill="#5E6060" d="M136.29,5.513h1.368v5.397h0.03c0.172-0.385,0.471-0.697,0.896-0.935s0.917-0.357,1.475-0.357
 | 
			
		||||
	c0.345,0,0.677,0.053,0.996,0.16s0.598,0.271,0.836,0.494c0.238,0.223,0.429,0.509,0.57,0.859s0.213,0.763,0.213,1.239v4.637h-1.368
 | 
			
		||||
	v-4.257c0-0.334-0.046-0.62-0.137-0.858c-0.092-0.238-0.213-0.431-0.365-0.578c-0.152-0.147-0.327-0.253-0.524-0.32
 | 
			
		||||
	c-0.198-0.065-0.403-0.099-0.616-0.099c-0.283,0-0.547,0.046-0.79,0.137c-0.243,0.091-0.456,0.236-0.639,0.434
 | 
			
		||||
	s-0.324,0.448-0.426,0.752c-0.101,0.304-0.151,0.664-0.151,1.079v3.71h-1.368V5.513z"/>
 | 
			
		||||
<path fill="#5E6060" d="M148.604,10.985h-1.961v3.269c0,0.203,0.005,0.402,0.015,0.601c0.01,0.197,0.048,0.375,0.114,0.532
 | 
			
		||||
	c0.065,0.157,0.167,0.283,0.304,0.38s0.337,0.145,0.601,0.145c0.162,0,0.329-0.016,0.502-0.046c0.172-0.03,0.329-0.086,0.471-0.167
 | 
			
		||||
	v1.246c-0.162,0.092-0.372,0.154-0.631,0.19c-0.258,0.035-0.458,0.053-0.6,0.053c-0.527,0-0.936-0.073-1.224-0.221
 | 
			
		||||
	c-0.289-0.146-0.502-0.336-0.639-0.569s-0.219-0.494-0.244-0.783c-0.024-0.289-0.037-0.58-0.037-0.874v-3.755h-1.581V9.799h1.581
 | 
			
		||||
	V7.778h1.368v2.021h1.961V10.985z"/>
 | 
			
		||||
<path fill="#95BDE5" d="M142.227,20.314c-0.039,0.215-0.129,0.432-0.129,0.432c-0.024,0.059-0.107,0.25-0.125,0.288
 | 
			
		||||
	c-0.064,0.138-0.097,0.224-0.17,0.38c-0.084,0.178,0,0-0.136,0.268c-1.126,2.234-4.158,4.755-8.376,4.658
 | 
			
		||||
	c-3.922-0.09-6.719-1.806-8.072-4.173c-0.103-0.18-0.262-0.42-0.383-0.684c-0.034-0.074-0.242-0.511-0.265-0.575
 | 
			
		||||
	c-0.116-0.333-0.2-0.368-0.216-0.594c0,0,0.259,0.528,0.779,1.091c1.227,1.325,3.915,3.426,8.156,3.477
 | 
			
		||||
	c4.143,0.049,6.907-2.123,8.163-3.477C141.972,20.849,142.227,20.314,142.227,20.314z"/>
 | 
			
		||||
	c0.51,0,1,0.079,1.473,0.236c0.472,0.157,0.883,0.4,1.234,0.73c0.353,0.329,0.633,0.752,0.842,1.269
 | 
			
		||||
	c0.209,0.516,0.314,1.126,0.314,1.83v6.851h-2.021v-6.289c0-0.494-0.065-0.917-0.2-1.269c-0.136-0.353-0.314-0.637-0.539-0.854
 | 
			
		||||
	c-0.226-0.216-0.483-0.373-0.775-0.471c-0.292-0.098-0.596-0.146-0.909-0.146c-0.418,0-0.809,0.067-1.168,0.202
 | 
			
		||||
	c-0.358,0.135-0.674,0.349-0.943,0.641c-0.27,0.291-0.479,0.662-0.629,1.111c-0.149,0.449-0.225,0.98-0.225,1.595v5.479h-2.021
 | 
			
		||||
	L77.572,12.368L77.572,12.368z"/>
 | 
			
		||||
<path fill="#5A74AF" d="M95.762,14.119h-2.896v4.829c0,0.299,0.008,0.595,0.022,0.887c0.014,0.292,0.07,0.554,0.168,0.786
 | 
			
		||||
	c0.098,0.232,0.246,0.419,0.449,0.561c0.201,0.145,0.497,0.215,0.887,0.215c0.239,0,0.486-0.022,0.741-0.067
 | 
			
		||||
	s0.486-0.127,0.696-0.247v1.842c-0.24,0.135-0.551,0.229-0.932,0.28c-0.383,0.053-0.678,0.079-0.889,0.079
 | 
			
		||||
	c-0.777,0-1.382-0.109-1.808-0.325c-0.427-0.218-0.741-0.498-0.943-0.843c-0.202-0.346-0.321-0.73-0.358-1.156
 | 
			
		||||
	c-0.037-0.427-0.058-0.857-0.058-1.292V14.12h-2.336v-1.751h2.336V9.381h2.021v2.987h2.896v1.751H95.762z"/>
 | 
			
		||||
<path fill="#5A74AF" d="M99.895,18.432c0,0.464,0.103,0.887,0.305,1.269c0.201,0.382,0.467,0.707,0.797,0.977
 | 
			
		||||
	c0.329,0.271,0.711,0.479,1.146,0.629c0.434,0.15,0.883,0.226,1.348,0.226c0.628,0,1.175-0.146,1.639-0.438s0.891-0.678,1.28-1.157
 | 
			
		||||
	l1.526,1.168c-1.123,1.451-2.694,2.179-4.715,2.179c-0.84,0-1.6-0.144-2.281-0.427c-0.681-0.284-1.256-0.678-1.729-1.18
 | 
			
		||||
	c-0.471-0.502-0.834-1.093-1.088-1.774c-0.256-0.682-0.383-1.418-0.383-2.212s0.139-1.531,0.416-2.213
 | 
			
		||||
	c0.275-0.681,0.658-1.271,1.145-1.773c0.487-0.501,1.067-0.895,1.741-1.18c0.674-0.284,1.407-0.426,2.201-0.426
 | 
			
		||||
	c0.942,0,1.739,0.165,2.392,0.494c0.65,0.33,1.186,0.76,1.605,1.292c0.419,0.531,0.723,1.13,0.908,1.796
 | 
			
		||||
	c0.188,0.667,0.281,1.345,0.281,2.033v0.719h-8.535V18.432z M106.271,16.814c-0.016-0.449-0.086-0.861-0.213-1.235
 | 
			
		||||
	s-0.317-0.7-0.572-0.978c-0.256-0.276-0.572-0.493-0.954-0.65c-0.382-0.157-0.828-0.236-1.337-0.236
 | 
			
		||||
	c-0.493,0-0.946,0.094-1.358,0.281c-0.411,0.188-0.76,0.43-1.044,0.729c-0.285,0.3-0.506,0.633-0.663,0.999
 | 
			
		||||
	c-0.157,0.367-0.235,0.73-0.235,1.09H106.271z"/>
 | 
			
		||||
<path fill="#5A74AF" d="M110.854,12.368h2.021v1.639h0.045c0.135-0.284,0.314-0.542,0.539-0.774s0.475-0.431,0.752-0.595
 | 
			
		||||
	c0.277-0.164,0.58-0.295,0.909-0.393c0.33-0.097,0.659-0.146,0.987-0.146c0.33,0,0.629,0.045,0.899,0.135l-0.091,2.178
 | 
			
		||||
	c-0.165-0.045-0.329-0.082-0.494-0.112c-0.165-0.029-0.329-0.045-0.492-0.045c-0.988,0-1.746,0.277-2.27,0.831
 | 
			
		||||
	c-0.523,0.554-0.786,1.415-0.786,2.583v5.345h-2.021V12.368L110.854,12.368z"/>
 | 
			
		||||
<path fill="#5E6060" d="M120.156,5.513h1.367v11.493h-1.367V5.513z"/>
 | 
			
		||||
<path fill="#5E6060" d="M123.484,7.215c0-0.274,0.1-0.509,0.298-0.707c0.196-0.198,0.433-0.296,0.706-0.296s0.51,0.099,0.707,0.296
 | 
			
		||||
	c0.197,0.198,0.297,0.433,0.297,0.707c0,0.273-0.1,0.509-0.297,0.707c-0.197,0.198-0.434,0.297-0.707,0.297s-0.51-0.099-0.706-0.297
 | 
			
		||||
	C123.584,7.725,123.484,7.489,123.484,7.215z M123.805,9.799h1.368v7.207h-1.368V9.799z"/>
 | 
			
		||||
<path fill="#5E6060" d="M134.566,16.944c0,0.548-0.094,1.047-0.28,1.498c-0.188,0.45-0.453,0.841-0.798,1.17
 | 
			
		||||
	c-0.346,0.329-0.76,0.586-1.246,0.768c-0.487,0.183-1.024,0.272-1.611,0.272c-0.689,0-1.32-0.096-1.895-0.287
 | 
			
		||||
	c-0.571-0.193-1.116-0.527-1.633-1.003l0.926-1.156c0.355,0.386,0.74,0.677,1.156,0.874c0.416,0.198,0.887,0.297,1.414,0.297
 | 
			
		||||
	c0.506,0,0.928-0.074,1.262-0.221s0.601-0.337,0.799-0.569c0.197-0.234,0.337-0.5,0.418-0.799s0.121-0.601,0.121-0.904V15.82h-0.045
 | 
			
		||||
	c-0.264,0.436-0.621,0.758-1.072,0.966s-0.926,0.312-1.421,0.312c-0.527,0-1.017-0.094-1.468-0.281s-0.838-0.446-1.164-0.775
 | 
			
		||||
	c-0.323-0.329-0.576-0.72-0.76-1.171c-0.183-0.45-0.272-0.939-0.272-1.467c0-0.527,0.086-1.021,0.259-1.482
 | 
			
		||||
	c0.172-0.461,0.418-0.864,0.737-1.208c0.319-0.345,0.704-0.613,1.155-0.806c0.449-0.192,0.955-0.289,1.513-0.289
 | 
			
		||||
	c0.485,0,0.96,0.106,1.421,0.319s0.822,0.512,1.087,0.896h0.03V9.799h1.367V16.944L134.566,16.944z M130.828,10.894
 | 
			
		||||
	c-0.365,0-0.694,0.063-0.988,0.19c-0.294,0.126-0.542,0.299-0.744,0.517c-0.203,0.218-0.359,0.481-0.472,0.791
 | 
			
		||||
	c-0.112,0.309-0.167,0.646-0.167,1.011c0,0.729,0.213,1.315,0.639,1.756c0.426,0.44,1.004,0.661,1.732,0.661
 | 
			
		||||
	s1.307-0.221,1.732-0.661c0.426-0.44,0.639-1.026,0.639-1.756c0-0.365-0.057-0.702-0.167-1.011
 | 
			
		||||
	c-0.111-0.309-0.269-0.572-0.472-0.791c-0.203-0.218-0.451-0.39-0.744-0.517C131.521,10.958,131.193,10.894,130.828,10.894z"/>
 | 
			
		||||
<path fill="#5E6060" d="M136.29,5.513h1.368v5.397h0.029c0.172-0.385,0.472-0.697,0.896-0.935c0.425-0.238,0.917-0.357,1.475-0.357
 | 
			
		||||
	c0.346,0,0.678,0.053,0.996,0.16c0.319,0.107,0.598,0.271,0.836,0.494s0.43,0.509,0.57,0.859c0.141,0.35,0.213,0.763,0.213,1.239
 | 
			
		||||
	v4.637h-1.367V12.75c0-0.334-0.047-0.62-0.138-0.858c-0.092-0.238-0.213-0.431-0.364-0.578c-0.152-0.147-0.328-0.253-0.525-0.32
 | 
			
		||||
	c-0.197-0.065-0.402-0.099-0.615-0.099c-0.283,0-0.547,0.046-0.79,0.137c-0.243,0.091-0.456,0.236-0.64,0.434
 | 
			
		||||
	c-0.183,0.198-0.323,0.448-0.426,0.752c-0.101,0.304-0.15,0.664-0.15,1.079v3.71h-1.368V5.513L136.29,5.513z"/>
 | 
			
		||||
<path fill="#5E6060" d="M148.604,10.985h-1.961v3.269c0,0.203,0.006,0.402,0.016,0.601c0.01,0.197,0.048,0.375,0.113,0.532
 | 
			
		||||
	c0.065,0.157,0.168,0.283,0.305,0.38s0.337,0.145,0.602,0.145c0.161,0,0.328-0.016,0.502-0.046c0.172-0.03,0.328-0.086,0.471-0.167
 | 
			
		||||
	v1.246c-0.162,0.092-0.373,0.154-0.631,0.19c-0.258,0.035-0.459,0.053-0.601,0.053c-0.526,0-0.937-0.073-1.224-0.221
 | 
			
		||||
	c-0.289-0.146-0.502-0.336-0.639-0.569c-0.138-0.233-0.22-0.494-0.244-0.783c-0.024-0.289-0.037-0.58-0.037-0.874v-3.755h-1.582
 | 
			
		||||
	V9.799h1.582V7.778h1.367v2.021h1.961V10.985L148.604,10.985z"/>
 | 
			
		||||
<path fill="#95BDE5" d="M142.227,20.314c-0.039,0.215-0.129,0.432-0.129,0.432c-0.023,0.059-0.106,0.25-0.125,0.288
 | 
			
		||||
	c-0.063,0.138-0.097,0.224-0.17,0.38c-0.084,0.178,0,0-0.136,0.268c-1.126,2.234-4.158,4.756-8.376,4.658
 | 
			
		||||
	c-3.922-0.09-6.719-1.806-8.072-4.173c-0.103-0.181-0.262-0.42-0.383-0.685c-0.033-0.073-0.242-0.51-0.266-0.574
 | 
			
		||||
	c-0.115-0.333-0.199-0.368-0.215-0.594c0,0,0.258,0.528,0.778,1.09c1.228,1.326,3.915,3.427,8.156,3.478
 | 
			
		||||
	c4.144,0.05,6.907-2.123,8.163-3.478C141.973,20.85,142.227,20.314,142.227,20.314z"/>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
		 Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB  | 
| 
						 | 
				
			
			@ -1,55 +0,0 @@
 | 
			
		|||
(function($){
 | 
			
		||||
    'use strict'; // Start of use strict
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
    $(document).ready(function(){
 | 
			
		||||
        verifiedUrl();
 | 
			
		||||
        init_options_interested();
 | 
			
		||||
        init_nav();
 | 
			
		||||
        change_values();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    function verifiedUrl(){
 | 
			
		||||
        if(window.location.href.indexOf('#success') > -1){
 | 
			
		||||
            form_success();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function init_options_interested(){
 | 
			
		||||
        $('.row-vms').click(function(){
 | 
			
		||||
            $('.row-vms').removeClass('row-vms__active');
 | 
			
		||||
            $(this).addClass('row-vms__active');
 | 
			
		||||
            var number = $('.row-vms__active input').val();
 | 
			
		||||
            var price = $('.row-vms__active input').data('price');
 | 
			
		||||
            _calculate(number, price);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function init_nav(){
 | 
			
		||||
 | 
			
		||||
        $('.nav-local').click(function(){
 | 
			
		||||
            $('html, body').animate({
 | 
			
		||||
                 scrollTop: $('#'+$(this).data('href')).offset().top
 | 
			
		||||
             });
 | 
			
		||||
        });
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function change_values(){
 | 
			
		||||
        $('.number-vms').keyup(function () {
 | 
			
		||||
            var number = $(this).val();
 | 
			
		||||
            var price =  $(this).data('price');
 | 
			
		||||
            _calculate(number, price);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    function form_success(){
 | 
			
		||||
        $('#sucessModal').modal('show');
 | 
			
		||||
    }
 | 
			
		||||
    function _calculate(numbers, price){
 | 
			
		||||
        $('#valueTotal').text(numbers*price*31);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
})(jQuery); // End of use strict
 | 
			
		||||
							
								
								
									
										7
									
								
								datacenterlight/static/datacenterlight/js/bootstrap-3.3.7.min.js
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										2317
									
								
								datacenterlight/static/datacenterlight/js/bootstrap.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
							
								
								
									
										4
									
								
								datacenterlight/static/datacenterlight/js/jquery-2.2.4.min.js
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -16,7 +16,7 @@
 | 
			
		|||
        'ram': {
 | 
			
		||||
            'id': 'ramValue',
 | 
			
		||||
            'value': 2,
 | 
			
		||||
            'min': 2,
 | 
			
		||||
            'min': 1,
 | 
			
		||||
            'max': 200,
 | 
			
		||||
            'interval': 1
 | 
			
		||||
        },
 | 
			
		||||
| 
						 | 
				
			
			@ -54,7 +54,7 @@
 | 
			
		|||
     Nav panel classic
 | 
			
		||||
     --------------------------------------------- */
 | 
			
		||||
    if (window.matchMedia("(min-width: 767px)").matches) {
 | 
			
		||||
        $('ul.nav li.dropdown').hover(function() {
 | 
			
		||||
        $('ul.nav .dropdown').hover(function() {
 | 
			
		||||
            $(this).find('.dropdown-menu').stop(true, true).delay(200).fadeIn(500);
 | 
			
		||||
        }, function() {
 | 
			
		||||
            $(this).find('.dropdown-menu').stop(true, true).delay(200).fadeOut(500);
 | 
			
		||||
| 
						 | 
				
			
			@ -85,6 +85,8 @@
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    _navScroll();
 | 
			
		||||
 | 
			
		||||
    function _initNavUrl() {
 | 
			
		||||
        $('.url-init').each(function(idx, el) {
 | 
			
		||||
            var $this = $(el);
 | 
			
		||||
| 
						 | 
				
			
			@ -102,17 +104,33 @@
 | 
			
		|||
        });
 | 
			
		||||
        $('.url').click(function(event) {
 | 
			
		||||
            event.preventDefault();
 | 
			
		||||
            var href = $(this).attr('href');
 | 
			
		||||
            var $this = $(this);
 | 
			
		||||
            var href = $this.attr('href');
 | 
			
		||||
            $('.navbar-collapse').removeClass('in');
 | 
			
		||||
            $('.navbar-collapse').addClass('collapsing');
 | 
			
		||||
            if ($(href).length) {
 | 
			
		||||
                $('html, body').animate({
 | 
			
		||||
                    scrollTop: $(href).offset().top
 | 
			
		||||
                }, 1000);
 | 
			
		||||
            if (href[0] === "#") {
 | 
			
		||||
                scrollToElement(href);
 | 
			
		||||
            } else if (href) {
 | 
			
		||||
                var path = $(this).prop('href').split('#');
 | 
			
		||||
                var currentPath = window.location.origin + window.location.pathname;
 | 
			
		||||
                if (currentPath == path[0] && path[1]) {
 | 
			
		||||
                    scrollToElement('#' + path[1]);
 | 
			
		||||
                } else {
 | 
			
		||||
                    window.location = href;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function scrollToElement(el) {
 | 
			
		||||
        var $el = $(el);
 | 
			
		||||
        if ($el.length) {
 | 
			
		||||
            $('html, body').animate({
 | 
			
		||||
                scrollTop: $el.offset().top - 50
 | 
			
		||||
            }, 1000);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function verifiedUrl() {
 | 
			
		||||
        if (window.location.href.indexOf('#success') > -1) {
 | 
			
		||||
            form_success();
 | 
			
		||||
| 
						 | 
				
			
			@ -153,7 +171,22 @@
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    function _calcPricing() {
 | 
			
		||||
        var total = (cardPricing['cpu'].value * 5) + (2 * cardPricing['ram'].value) + (0.6 * cardPricing['storage'].value);
 | 
			
		||||
        if(typeof window.coresUnitPrice === 'undefined'){
 | 
			
		||||
            window.coresUnitPrice = 5;
 | 
			
		||||
        }
 | 
			
		||||
        if(typeof window.ramUnitPrice === 'undefined'){
 | 
			
		||||
            window.ramUnitPrice = 2;
 | 
			
		||||
        }
 | 
			
		||||
        if(typeof window.ssdUnitPrice === 'undefined'){
 | 
			
		||||
            window.ssdUnitPrice = 0.6;
 | 
			
		||||
        }
 | 
			
		||||
        if(typeof window.discountAmount === 'undefined'){
 | 
			
		||||
            window.discountAmount = 0;
 | 
			
		||||
        }
 | 
			
		||||
        var total = (cardPricing['cpu'].value * window.coresUnitPrice) +
 | 
			
		||||
                    (cardPricing['ram'].value * window.ramUnitPrice) +
 | 
			
		||||
                    (cardPricing['storage'].value * window.ssdUnitPrice) -
 | 
			
		||||
                    window.discountAmount;
 | 
			
		||||
        total = parseFloat(total.toFixed(2));
 | 
			
		||||
        $("#total").text(total);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,181 +0,0 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 | 
			
		||||
	 width="156.5px" height="40px" viewBox="0 0 156.5 40" enable-background="new 0 0 156.5 40" xml:space="preserve">
 | 
			
		||||
<g display="none">
 | 
			
		||||
	<g display="inline">
 | 
			
		||||
		<path fill="#231916" d="M32.599,25.896c0-0.429,0.15-0.845,0.453-1.25c0.303-0.408,0.734-0.773,1.296-1.097v-0.092
 | 
			
		||||
			c-0.294-0.16-0.554-0.388-0.777-0.674c-0.22-0.289-0.332-0.662-0.332-1.119c0-0.354,0.115-0.712,0.345-1.076
 | 
			
		||||
			c0.227-0.36,0.55-0.683,0.964-0.962v-0.09c-0.386-0.28-0.711-0.654-0.978-1.12c-0.263-0.464-0.397-1.021-0.397-1.67
 | 
			
		||||
			c0-0.606,0.118-1.149,0.354-1.63c0.236-0.48,0.555-0.889,0.954-1.229c0.398-0.34,0.86-0.598,1.385-0.775
 | 
			
		||||
			c0.523-0.178,1.081-0.266,1.672-0.266c0.605,0,1.152,0.088,1.64,0.266h4.452v1.662h-2.702c0.222,0.237,0.42,0.528,0.598,0.875
 | 
			
		||||
			c0.178,0.348,0.267,0.735,0.267,1.165c0,0.59-0.111,1.117-0.332,1.572c-0.222,0.459-0.525,0.846-0.91,1.163
 | 
			
		||||
			c-0.384,0.318-0.834,0.558-1.351,0.72c-0.517,0.162-1.071,0.246-1.663,0.246c-0.265,0-0.55-0.031-0.854-0.091
 | 
			
		||||
			c-0.302-0.058-0.601-0.147-0.896-0.267c-0.503,0.326-0.753,0.701-0.753,1.131c0,0.398,0.185,0.686,0.553,0.865
 | 
			
		||||
			c0.369,0.176,0.901,0.266,1.596,0.266h2.303c1.42,0,2.47,0.203,3.159,0.607c0.687,0.406,1.029,1.076,1.029,2.006
 | 
			
		||||
			c0,0.518-0.145,1.004-0.431,1.461c-0.29,0.459-0.699,0.861-1.23,1.209c-0.531,0.348-1.174,0.621-1.929,0.82
 | 
			
		||||
			c-0.751,0.199-1.594,0.299-2.525,0.299c-1.537,0-2.747-0.25-3.633-0.744C33.042,27.586,32.599,26.857,32.599,25.896z
 | 
			
		||||
			 M34.458,25.633c0,0.516,0.285,0.932,0.854,1.25s1.393,0.477,2.47,0.477c0.577,0,1.097-0.055,1.562-0.166
 | 
			
		||||
			c0.465-0.11,0.864-0.258,1.197-0.442s0.585-0.396,0.764-0.631c0.177-0.234,0.266-0.486,0.266-0.754
 | 
			
		||||
			c0-0.474-0.196-0.785-0.587-0.941c-0.392-0.153-0.979-0.231-1.762-0.231h-1.905c-0.34,0-0.641-0.012-0.907-0.033
 | 
			
		||||
			c-0.268-0.021-0.519-0.07-0.754-0.145c-0.444,0.25-0.753,0.51-0.932,0.776C34.549,25.057,34.458,25.334,34.458,25.633z
 | 
			
		||||
			 M37.539,19.095c0.621,0,1.152-0.206,1.597-0.62c0.442-0.414,0.665-0.989,0.665-1.727c0-0.71-0.223-1.279-0.665-1.707
 | 
			
		||||
			c-0.445-0.428-0.976-0.643-1.597-0.643s-1.152,0.215-1.595,0.643c-0.442,0.428-0.665,0.997-0.665,1.707
 | 
			
		||||
			c0,0.738,0.223,1.313,0.665,1.727C36.386,18.889,36.918,19.095,37.539,19.095z"/>
 | 
			
		||||
	</g>
 | 
			
		||||
	<path display="inline" fill="#231916" d="M15.983,24.24h-1.857l-0.183-1.854h-0.092c-0.551,0.642-1.151,1.154-1.8,1.548
 | 
			
		||||
		c-0.649,0.387-1.401,0.582-2.258,0.582c-1.329,0-2.3-0.384-2.91-1.156c-0.612-0.771-0.917-1.898-0.917-3.381V14.35L3,14.293
 | 
			
		||||
		l5.258-2.023l-0.023,1.529v5.882c0,0.994,0.176,1.724,0.528,2.189c0.351,0.467,0.954,0.7,1.811,0.7
 | 
			
		||||
		c0.581,0,1.111-0.143,1.593-0.426c0.48-0.283,0.998-0.762,1.547-1.433v-7.678h2.269V24.24z"/>
 | 
			
		||||
	<path display="inline" fill="#231916" d="M19.742,13.033h1.856l0.184,1.812h0.091c0.565-0.582,1.176-1.075,1.834-1.479
 | 
			
		||||
		c0.655-0.405,1.42-0.607,2.292-0.607c1.313,0,2.278,0.39,2.888,1.168c0.611,0.778,0.917,1.903,0.917,3.37v6.942h-2.271v-6.646
 | 
			
		||||
		c0-0.976-0.174-1.7-0.525-2.165c-0.352-0.467-0.955-0.701-1.811-0.701c-0.597,0-1.131,0.151-1.605,0.447
 | 
			
		||||
		c-0.473,0.299-1.002,0.744-1.582,1.343v7.721h-2.268V13.033z"/>
 | 
			
		||||
	<path display="inline" fill="#231916" d="M55.129,18.65c0-0.917,0.162-1.74,0.482-2.465c0.321-0.725,0.748-1.345,1.284-1.856
 | 
			
		||||
		c0.533-0.511,1.146-0.902,1.834-1.17c0.687-0.267,1.398-0.4,2.13-0.4c0.826,0,1.555,0.13,2.19,0.39
 | 
			
		||||
		c0.633,0.26,1.172,0.621,1.615,1.086c0.443,0.468,0.779,1.025,1.01,1.676c0.229,0.648,0.344,1.362,0.344,2.142
 | 
			
		||||
		c0,0.229-0.012,0.447-0.035,0.652c-0.022,0.208-0.049,0.38-0.08,0.516h-8.436c0.077,1.1,0.485,1.96,1.229,2.58
 | 
			
		||||
		c0.739,0.619,1.675,0.928,2.807,0.928c0.611,0,1.18-0.084,1.708-0.252c0.527-0.166,1.042-0.403,1.546-0.709l0.802,1.443
 | 
			
		||||
		c-0.578,0.367-1.23,0.676-1.959,0.928c-0.726,0.252-1.525,0.377-2.396,0.377c-0.842,0-1.631-0.131-2.371-0.399
 | 
			
		||||
		c-0.742-0.267-1.387-0.65-1.938-1.156c-0.551-0.504-0.982-1.119-1.296-1.846C55.286,20.386,55.129,19.566,55.129,18.65z
 | 
			
		||||
		 M63.909,17.665c0-1.01-0.263-1.781-0.779-2.317c-0.521-0.534-1.262-0.8-2.225-0.8c-0.84,0-1.587,0.266-2.245,0.8
 | 
			
		||||
		c-0.658,0.536-1.062,1.307-1.214,2.317H63.909z"/>
 | 
			
		||||
	<path display="inline" fill="#231916" d="M73.475,12.679l0.008,11.793h-2.27v-8.611h-4.256L73.475,12.679z M72.152,10.368
 | 
			
		||||
		c-0.488,0-0.894-0.146-1.215-0.435c-0.32-0.291-0.48-0.681-0.48-1.17c0-0.489,0.16-0.882,0.48-1.18
 | 
			
		||||
		c0.321-0.298,0.727-0.446,1.215-0.446s0.896,0.148,1.215,0.446c0.32,0.298,0.482,0.691,0.482,1.18c0,0.489-0.162,0.879-0.482,1.17
 | 
			
		||||
		C73.049,10.221,72.641,10.368,72.152,10.368z"/>
 | 
			
		||||
	<path display="inline" fill="#231916" d="M76.629,18.878c0-0.932,0.168-1.766,0.504-2.497c0.336-0.735,0.795-1.353,1.375-1.859
 | 
			
		||||
		c0.582-0.503,1.25-0.884,2.008-1.145c0.756-0.26,1.562-0.389,2.416-0.389c0.918,0,1.719,0.156,2.406,0.469
 | 
			
		||||
		c0.689,0.312,1.262,0.693,1.721,1.135l-1.1,1.443c-0.443-0.367-0.904-0.653-1.379-0.86c-0.471-0.206-0.984-0.309-1.535-0.309
 | 
			
		||||
		c-0.594,0-1.143,0.095-1.65,0.287c-0.502,0.19-0.936,0.462-1.293,0.813c-0.358,0.352-0.639,0.776-0.838,1.272
 | 
			
		||||
		c-0.197,0.495-0.297,1.042-0.297,1.638c0,0.595,0.096,1.144,0.287,1.64c0.189,0.496,0.465,0.92,0.824,1.273
 | 
			
		||||
		c0.359,0.35,0.785,0.623,1.273,0.812c0.487,0.188,1.028,0.284,1.627,0.284c0.686,0,1.307-0.129,1.856-0.387
 | 
			
		||||
		c0.549-0.263,1.043-0.574,1.488-0.94l0.965,1.467c-0.644,0.551-1.347,0.975-2.111,1.272c-0.764,0.298-1.559,0.445-2.383,0.445
 | 
			
		||||
		c-0.871,0-1.687-0.129-2.44-0.39c-0.756-0.26-1.41-0.643-1.961-1.146c-0.55-0.506-0.98-1.121-1.293-1.847
 | 
			
		||||
		C76.785,20.641,76.629,19.811,76.629,18.878z"/>
 | 
			
		||||
	<path display="inline" fill="#231916" d="M87.4,8.285l4.752-2.356v6.601l-0.139,2.521c0.565-0.58,1.178-1.07,1.836-1.467
 | 
			
		||||
		c0.655-0.396,1.42-0.595,2.293-0.595c1.312,0,2.274,0.389,2.885,1.168c0.611,0.78,0.918,1.903,0.918,3.371v6.945h-2.271v-6.648
 | 
			
		||||
		c0-0.978-0.176-1.7-0.526-2.165c-0.353-0.466-0.953-0.7-1.812-0.7c-0.596,0-1.131,0.149-1.604,0.448
 | 
			
		||||
		c-0.475,0.298-1.002,0.745-1.582,1.342v7.726h-2.27L89.836,8.189L87.4,8.285z"/>
 | 
			
		||||
	<g display="inline">
 | 
			
		||||
		<polygon fill="#010000" points="100.371,3.218 99.607,4.815 109.109,4.855 109.873,3.228 		"/>
 | 
			
		||||
		<polygon fill="#010000" points="99.619,6.703 98.83,8.378 108.346,8.397 109.109,6.74 		"/>
 | 
			
		||||
		<polygon fill="#010000" points="101.475,10.278 105.832,1 107.512,1.024 103.203,10.281 		"/>
 | 
			
		||||
	</g>
 | 
			
		||||
	<g display="inline">
 | 
			
		||||
		<path fill="#231916" d="M49.446,20.596c0,0.754,0.188,1.297,0.566,1.631c0.376,0.33,0.866,0.498,1.472,0.498
 | 
			
		||||
			c0.295,0,0.599-0.037,0.909-0.111s0.658-0.193,1.042-0.355l0.532,1.643c-0.252,0.086-0.492,0.166-0.721,0.242
 | 
			
		||||
			c-0.231,0.074-0.461,0.135-0.698,0.187c-0.237,0.055-0.483,0.098-0.741,0.135c-0.26,0.035-0.543,0.058-0.853,0.058
 | 
			
		||||
			c-1.212,0-2.131-0.349-2.76-1.043c-0.627-0.693-0.941-1.697-0.941-3.014V5.711h-3.544l5.737-4.043"/>
 | 
			
		||||
	</g>
 | 
			
		||||
</g>
 | 
			
		||||
<path fill="#29427A" d="M12.927,23.013v-1.46h-0.045c-0.359,0.569-0.873,1.007-1.539,1.313s-1.374,0.461-2.122,0.461
 | 
			
		||||
	c-0.839,0-1.587-0.165-2.246-0.494c-0.659-0.329-1.216-0.768-1.673-1.313c-0.457-0.547-0.805-1.18-1.044-1.898
 | 
			
		||||
	c-0.24-0.718-0.359-1.467-0.359-2.245s0.124-1.523,0.371-2.234s0.599-1.337,1.055-1.875c0.457-0.539,1.011-0.966,1.662-1.28
 | 
			
		||||
	c0.651-0.314,1.381-0.472,2.189-0.472c0.823,0,1.52,0.157,2.089,0.472c0.568,0.314,1.011,0.659,1.325,1.033h0.045V6.035h3.683
 | 
			
		||||
	v16.978H12.927z M12.792,17.398c0-0.359-0.064-0.711-0.191-1.056c-0.128-0.345-0.307-0.651-0.54-0.921
 | 
			
		||||
	c-0.232-0.27-0.513-0.486-0.842-0.651c-0.329-0.164-0.704-0.247-1.123-0.247c-0.434,0-0.816,0.083-1.145,0.247
 | 
			
		||||
	c-0.33,0.165-0.606,0.379-0.831,0.64c-0.225,0.263-0.393,0.565-0.505,0.91s-0.168,0.696-0.168,1.056
 | 
			
		||||
	c0,0.358,0.056,0.715,0.168,1.066s0.281,0.663,0.505,0.932c0.225,0.27,0.501,0.487,0.831,0.651c0.329,0.165,0.711,0.247,1.145,0.247
 | 
			
		||||
	c0.419,0,0.793-0.082,1.123-0.247c0.33-0.164,0.61-0.382,0.842-0.651c0.232-0.269,0.412-0.575,0.54-0.921
 | 
			
		||||
	C12.728,18.109,12.792,17.758,12.792,17.398z"/>
 | 
			
		||||
<path fill="#29427A" d="M19.08,13.355c0.659-0.628,1.426-1.1,2.302-1.415s1.771-0.472,2.684-0.472c0.944,0,1.741,0.116,2.392,0.348
 | 
			
		||||
	c0.651,0.232,1.179,0.591,1.583,1.078c0.404,0.486,0.7,1.101,0.887,1.842c0.187,0.74,0.281,1.62,0.281,2.639v5.637H25.84v-1.19
 | 
			
		||||
	h-0.067c-0.285,0.464-0.715,0.823-1.291,1.078c-0.577,0.254-1.202,0.382-1.875,0.382c-0.449,0-0.913-0.061-1.393-0.18
 | 
			
		||||
	c-0.479-0.12-0.917-0.314-1.313-0.584c-0.397-0.27-0.723-0.629-0.977-1.078c-0.255-0.449-0.382-1.003-0.382-1.662
 | 
			
		||||
	c0-0.809,0.221-1.459,0.663-1.953s1.011-0.876,1.707-1.146c0.696-0.27,1.471-0.449,2.324-0.539s1.685-0.135,2.493-0.135v-0.18
 | 
			
		||||
	c0-0.554-0.195-0.962-0.584-1.225c-0.389-0.262-0.868-0.393-1.437-0.393c-0.524,0-1.03,0.112-1.516,0.337
 | 
			
		||||
	c-0.487,0.225-0.902,0.494-1.247,0.809L19.08,13.355z M25.84,18.139h-0.472c-0.404,0-0.812,0.02-1.224,0.057
 | 
			
		||||
	c-0.412,0.037-0.779,0.108-1.101,0.213c-0.322,0.105-0.588,0.259-0.797,0.461c-0.21,0.202-0.314,0.468-0.314,0.797
 | 
			
		||||
	c0,0.21,0.049,0.39,0.146,0.539c0.097,0.15,0.221,0.27,0.371,0.359c0.149,0.09,0.322,0.153,0.517,0.191
 | 
			
		||||
	c0.194,0.037,0.382,0.056,0.562,0.056c0.749,0,1.321-0.205,1.718-0.617c0.396-0.412,0.595-0.97,0.595-1.673V18.139z"/>
 | 
			
		||||
<path fill="#29427A" d="M36.067,14.568v4.283c0,0.526,0.101,0.921,0.303,1.184c0.202,0.264,0.565,0.395,1.089,0.395
 | 
			
		||||
	c0.18,0,0.371-0.015,0.573-0.045c0.202-0.029,0.371-0.074,0.505-0.135l0.045,2.695c-0.255,0.09-0.577,0.169-0.966,0.235
 | 
			
		||||
	c-0.389,0.067-0.779,0.102-1.168,0.102c-0.749,0-1.377-0.094-1.886-0.281c-0.509-0.188-0.917-0.458-1.224-0.811
 | 
			
		||||
	c-0.307-0.354-0.528-0.773-0.662-1.261c-0.135-0.488-0.202-1.032-0.202-1.633v-4.729h-1.797v-2.74h1.774V8.887h3.616v2.942h2.627
 | 
			
		||||
	v2.74H36.067z"/>
 | 
			
		||||
<path fill="#29427A" d="M40.957,13.355c0.659-0.628,1.426-1.1,2.302-1.415s1.771-0.472,2.684-0.472c0.943,0,1.741,0.116,2.392,0.348
 | 
			
		||||
	c0.651,0.232,1.179,0.591,1.583,1.078c0.404,0.486,0.7,1.101,0.887,1.842c0.188,0.74,0.281,1.62,0.281,2.639v5.637h-3.369v-1.19
 | 
			
		||||
	h-0.067c-0.285,0.464-0.715,0.823-1.291,1.078c-0.577,0.254-1.202,0.382-1.875,0.382c-0.449,0-0.913-0.061-1.392-0.18
 | 
			
		||||
	c-0.479-0.12-0.917-0.314-1.314-0.584c-0.397-0.27-0.723-0.629-0.977-1.078s-0.382-1.003-0.382-1.662
 | 
			
		||||
	c0-0.809,0.221-1.459,0.663-1.953s1.011-0.876,1.707-1.146s1.471-0.449,2.324-0.539s1.685-0.135,2.493-0.135v-0.18
 | 
			
		||||
	c0-0.554-0.195-0.962-0.584-1.225c-0.389-0.262-0.868-0.393-1.437-0.393c-0.524,0-1.03,0.112-1.516,0.337s-0.902,0.494-1.247,0.809
 | 
			
		||||
	L40.957,13.355z M47.717,18.139h-0.471c-0.404,0-0.812,0.02-1.224,0.057c-0.412,0.037-0.779,0.108-1.101,0.213
 | 
			
		||||
	c-0.322,0.105-0.587,0.259-0.797,0.461c-0.209,0.202-0.314,0.468-0.314,0.797c0,0.21,0.049,0.39,0.146,0.539
 | 
			
		||||
	c0.097,0.15,0.22,0.27,0.37,0.359c0.149,0.09,0.322,0.153,0.517,0.191c0.194,0.037,0.382,0.056,0.562,0.056
 | 
			
		||||
	c0.749,0,1.321-0.205,1.718-0.617c0.396-0.412,0.595-0.97,0.595-1.673V18.139z"/>
 | 
			
		||||
<path fill="#5A74AF" d="M61.874,15.197c-0.375-0.389-0.768-0.685-1.179-0.887c-0.412-0.202-0.902-0.304-1.471-0.304
 | 
			
		||||
	c-0.554,0-1.037,0.102-1.449,0.304c-0.412,0.202-0.756,0.479-1.033,0.831s-0.487,0.756-0.629,1.212
 | 
			
		||||
	c-0.142,0.457-0.213,0.933-0.213,1.427s0.082,0.962,0.247,1.403c0.165,0.441,0.396,0.827,0.696,1.156
 | 
			
		||||
	c0.3,0.33,0.659,0.588,1.078,0.775c0.419,0.188,0.891,0.28,1.415,0.28c0.568,0,1.055-0.101,1.459-0.303s0.778-0.498,1.123-0.888
 | 
			
		||||
	l1.438,1.438c-0.524,0.584-1.134,1.003-1.831,1.258c-0.696,0.254-1.434,0.382-2.212,0.382c-0.823,0-1.576-0.135-2.257-0.404
 | 
			
		||||
	s-1.269-0.647-1.763-1.135c-0.494-0.485-0.876-1.07-1.146-1.751c-0.27-0.682-0.404-1.434-0.404-2.258
 | 
			
		||||
	c0-0.822,0.135-1.579,0.404-2.268s0.647-1.28,1.134-1.774c0.486-0.494,1.07-0.879,1.751-1.156s1.441-0.416,2.279-0.416
 | 
			
		||||
	c0.779,0,1.523,0.139,2.235,0.416c0.711,0.277,1.329,0.7,1.853,1.269L61.874,15.197z"/>
 | 
			
		||||
<path fill="#5A74AF" d="M66.612,18.432c0,0.464,0.101,0.887,0.304,1.269c0.201,0.382,0.467,0.707,0.797,0.977
 | 
			
		||||
	c0.329,0.27,0.711,0.479,1.145,0.629c0.435,0.15,0.884,0.225,1.348,0.225c0.629,0,1.176-0.146,1.64-0.438
 | 
			
		||||
	c0.464-0.292,0.891-0.678,1.28-1.157l1.527,1.168c-1.123,1.452-2.695,2.179-4.717,2.179c-0.838,0-1.598-0.143-2.279-0.427
 | 
			
		||||
	s-1.258-0.678-1.729-1.179c-0.473-0.502-0.836-1.093-1.09-1.774s-0.382-1.418-0.382-2.212s0.139-1.531,0.416-2.213
 | 
			
		||||
	c0.276-0.681,0.658-1.271,1.146-1.773c0.486-0.501,1.066-0.895,1.74-1.18c0.674-0.284,1.406-0.426,2.201-0.426
 | 
			
		||||
	c0.942,0,1.74,0.165,2.391,0.494c0.652,0.33,1.187,0.76,1.605,1.292c0.42,0.531,0.723,1.13,0.91,1.796
 | 
			
		||||
	c0.188,0.667,0.281,1.345,0.281,2.033v0.719H66.612z M72.99,16.814c-0.016-0.449-0.086-0.861-0.213-1.235
 | 
			
		||||
	c-0.128-0.374-0.318-0.7-0.573-0.978c-0.255-0.276-0.573-0.493-0.954-0.65c-0.383-0.157-0.828-0.236-1.337-0.236
 | 
			
		||||
	c-0.493,0-0.946,0.094-1.358,0.281s-0.76,0.43-1.044,0.729s-0.505,0.633-0.663,0.999c-0.156,0.367-0.235,0.73-0.235,1.09H72.99z"/>
 | 
			
		||||
<path fill="#5A74AF" d="M77.572,12.368h2.021v1.639h0.046c0.254-0.568,0.695-1.029,1.324-1.381s1.355-0.528,2.178-0.528
 | 
			
		||||
	c0.51,0,1,0.079,1.472,0.236s0.883,0.4,1.235,0.73c0.352,0.329,0.633,0.752,0.842,1.269c0.209,0.516,0.314,1.126,0.314,1.83v6.85
 | 
			
		||||
	h-2.021v-6.288c0-0.494-0.066-0.917-0.201-1.269c-0.135-0.353-0.314-0.637-0.539-0.854c-0.225-0.216-0.483-0.373-0.775-0.471
 | 
			
		||||
	s-0.596-0.146-0.91-0.146c-0.418,0-0.808,0.067-1.167,0.202s-0.674,0.349-0.943,0.641c-0.27,0.291-0.479,0.662-0.629,1.111
 | 
			
		||||
	s-0.225,0.98-0.225,1.595v5.479h-2.021V12.368z"/>
 | 
			
		||||
<path fill="#5A74AF" d="M95.762,14.119h-2.896v4.829c0,0.299,0.008,0.595,0.022,0.887s0.071,0.554,0.169,0.786
 | 
			
		||||
	c0.097,0.232,0.246,0.419,0.449,0.561c0.201,0.144,0.497,0.214,0.887,0.214c0.239,0,0.486-0.022,0.741-0.067
 | 
			
		||||
	s0.486-0.127,0.696-0.247v1.842c-0.24,0.135-0.551,0.229-0.932,0.28c-0.383,0.053-0.678,0.079-0.888,0.079
 | 
			
		||||
	c-0.778,0-1.382-0.109-1.808-0.325c-0.427-0.218-0.741-0.498-0.943-0.843s-0.322-0.73-0.359-1.156
 | 
			
		||||
	c-0.037-0.427-0.057-0.857-0.057-1.292v-5.547h-2.336v-1.751h2.336V9.381h2.021v2.987h2.896V14.119z"/>
 | 
			
		||||
<path fill="#5A74AF" d="M99.895,18.432c0,0.464,0.102,0.887,0.304,1.269s0.467,0.707,0.797,0.977
 | 
			
		||||
	c0.329,0.27,0.711,0.479,1.146,0.629c0.434,0.15,0.883,0.225,1.348,0.225c0.628,0,1.175-0.146,1.639-0.438
 | 
			
		||||
	c0.464-0.292,0.891-0.678,1.28-1.157l1.527,1.168c-1.123,1.452-2.695,2.179-4.716,2.179c-0.839,0-1.599-0.143-2.28-0.427
 | 
			
		||||
	c-0.681-0.284-1.257-0.678-1.729-1.179c-0.471-0.502-0.834-1.093-1.088-1.774c-0.256-0.682-0.383-1.418-0.383-2.212
 | 
			
		||||
	s0.139-1.531,0.416-2.213c0.276-0.681,0.658-1.271,1.145-1.773c0.487-0.501,1.067-0.895,1.741-1.18
 | 
			
		||||
	c0.674-0.284,1.407-0.426,2.201-0.426c0.942,0,1.74,0.165,2.392,0.494c0.65,0.33,1.186,0.76,1.605,1.292
 | 
			
		||||
	c0.419,0.531,0.723,1.13,0.909,1.796c0.188,0.667,0.281,1.345,0.281,2.033v0.719H99.895z M106.272,16.814
 | 
			
		||||
	c-0.016-0.449-0.086-0.861-0.213-1.235c-0.128-0.374-0.318-0.7-0.573-0.978c-0.255-0.276-0.572-0.493-0.954-0.65
 | 
			
		||||
	s-0.828-0.236-1.337-0.236c-0.493,0-0.946,0.094-1.358,0.281c-0.411,0.188-0.76,0.43-1.044,0.729
 | 
			
		||||
	c-0.285,0.3-0.506,0.633-0.663,0.999c-0.157,0.367-0.235,0.73-0.235,1.09H106.272z"/>
 | 
			
		||||
<path fill="#5A74AF" d="M110.854,12.368h2.021v1.639h0.045c0.135-0.284,0.314-0.542,0.539-0.774
 | 
			
		||||
	c0.225-0.232,0.475-0.431,0.752-0.595s0.58-0.295,0.909-0.393c0.33-0.097,0.659-0.146,0.988-0.146c0.33,0,0.629,0.045,0.899,0.135
 | 
			
		||||
	l-0.091,2.178c-0.165-0.045-0.329-0.082-0.494-0.112c-0.165-0.029-0.329-0.045-0.493-0.045c-0.988,0-1.745,0.277-2.269,0.831
 | 
			
		||||
	c-0.524,0.554-0.786,1.415-0.786,2.583v5.345h-2.021V12.368z"/>
 | 
			
		||||
<path fill="#5E6060" d="M120.156,5.513h1.368v11.493h-1.368V5.513z"/>
 | 
			
		||||
<path fill="#5E6060" d="M123.485,7.215c0-0.274,0.099-0.509,0.297-0.707c0.197-0.198,0.433-0.296,0.707-0.296
 | 
			
		||||
	c0.273,0,0.509,0.099,0.707,0.296c0.197,0.198,0.296,0.433,0.296,0.707c0,0.273-0.099,0.509-0.296,0.707
 | 
			
		||||
	c-0.198,0.198-0.434,0.297-0.707,0.297c-0.274,0-0.51-0.099-0.707-0.297C123.584,7.725,123.485,7.489,123.485,7.215z M123.805,9.799
 | 
			
		||||
	h1.368v7.207h-1.368V9.799z"/>
 | 
			
		||||
<path fill="#5E6060" d="M134.567,16.944c0,0.548-0.094,1.047-0.281,1.498c-0.188,0.45-0.453,0.841-0.798,1.17
 | 
			
		||||
	s-0.76,0.586-1.246,0.768c-0.487,0.183-1.024,0.273-1.611,0.273c-0.689,0-1.32-0.096-1.894-0.288
 | 
			
		||||
	c-0.572-0.193-1.117-0.527-1.634-1.003l0.927-1.156c0.355,0.386,0.74,0.677,1.156,0.874c0.415,0.198,0.887,0.297,1.413,0.297
 | 
			
		||||
	c0.507,0,0.928-0.074,1.262-0.221c0.335-0.146,0.601-0.337,0.799-0.569c0.197-0.234,0.337-0.5,0.418-0.799s0.121-0.601,0.121-0.904
 | 
			
		||||
	v-1.064h-0.045c-0.264,0.436-0.621,0.758-1.072,0.966s-0.925,0.312-1.421,0.312c-0.527,0-1.017-0.094-1.468-0.281
 | 
			
		||||
	s-0.838-0.446-1.163-0.775c-0.324-0.329-0.577-0.72-0.76-1.171c-0.183-0.45-0.273-0.939-0.273-1.467
 | 
			
		||||
	c0-0.527,0.086-1.021,0.259-1.482c0.172-0.461,0.418-0.864,0.737-1.208c0.319-0.345,0.704-0.613,1.155-0.806
 | 
			
		||||
	c0.45-0.192,0.955-0.289,1.513-0.289c0.486,0,0.96,0.106,1.421,0.319s0.823,0.512,1.087,0.896h0.03V9.799h1.368V16.944z
 | 
			
		||||
	 M130.828,10.894c-0.365,0-0.694,0.063-0.988,0.19c-0.294,0.126-0.542,0.299-0.745,0.517c-0.202,0.218-0.359,0.481-0.471,0.791
 | 
			
		||||
	c-0.112,0.309-0.167,0.646-0.167,1.011c0,0.729,0.213,1.315,0.638,1.756c0.426,0.44,1.004,0.661,1.733,0.661
 | 
			
		||||
	s1.307-0.221,1.733-0.661c0.426-0.44,0.638-1.026,0.638-1.756c0-0.365-0.056-0.702-0.167-1.011s-0.269-0.572-0.471-0.791
 | 
			
		||||
	c-0.203-0.218-0.451-0.39-0.745-0.517C131.522,10.958,131.193,10.894,130.828,10.894z"/>
 | 
			
		||||
<path fill="#5E6060" d="M136.29,5.513h1.368v5.397h0.03c0.172-0.385,0.471-0.697,0.896-0.935s0.917-0.357,1.475-0.357
 | 
			
		||||
	c0.345,0,0.677,0.053,0.996,0.16s0.598,0.271,0.836,0.494c0.238,0.223,0.429,0.509,0.57,0.859s0.213,0.763,0.213,1.239v4.637h-1.368
 | 
			
		||||
	v-4.257c0-0.334-0.046-0.62-0.137-0.858c-0.092-0.238-0.213-0.431-0.365-0.578c-0.152-0.147-0.327-0.253-0.524-0.32
 | 
			
		||||
	c-0.198-0.065-0.403-0.099-0.616-0.099c-0.283,0-0.547,0.046-0.79,0.137c-0.243,0.091-0.456,0.236-0.639,0.434
 | 
			
		||||
	s-0.324,0.448-0.426,0.752c-0.101,0.304-0.151,0.664-0.151,1.079v3.71h-1.368V5.513z"/>
 | 
			
		||||
<path fill="#5E6060" d="M148.604,10.985h-1.961v3.269c0,0.203,0.005,0.402,0.015,0.601c0.01,0.197,0.048,0.375,0.114,0.532
 | 
			
		||||
	c0.065,0.157,0.167,0.283,0.304,0.38s0.337,0.145,0.601,0.145c0.162,0,0.329-0.016,0.502-0.046c0.172-0.03,0.329-0.086,0.471-0.167
 | 
			
		||||
	v1.246c-0.162,0.092-0.372,0.154-0.631,0.19c-0.258,0.035-0.458,0.053-0.6,0.053c-0.527,0-0.936-0.073-1.224-0.221
 | 
			
		||||
	c-0.289-0.146-0.502-0.336-0.639-0.569s-0.219-0.494-0.244-0.783c-0.024-0.289-0.037-0.58-0.037-0.874v-3.755h-1.581V9.799h1.581
 | 
			
		||||
	V7.778h1.368v2.021h1.961V10.985z"/>
 | 
			
		||||
<path fill="#95BDE5" d="M142.227,20.314c-0.039,0.215-0.129,0.432-0.129,0.432c-0.024,0.059-0.107,0.25-0.125,0.288
 | 
			
		||||
	c-0.064,0.138-0.097,0.224-0.17,0.38c-0.084,0.178,0,0-0.136,0.268c-1.126,2.234-4.158,4.755-8.376,4.658
 | 
			
		||||
	c-3.922-0.09-6.719-1.806-8.072-4.173c-0.103-0.18-0.262-0.42-0.383-0.684c-0.034-0.074-0.242-0.511-0.265-0.575
 | 
			
		||||
	c-0.116-0.333-0.2-0.368-0.216-0.594c0,0,0.259,0.528,0.779,1.091c1.227,1.325,3.915,3.426,8.156,3.477
 | 
			
		||||
	c4.143,0.049,6.907-2.123,8.163-3.477C141.972,20.849,142.227,20.314,142.227,20.314z"/>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 18 KiB  | 
| 
						 | 
				
			
			@ -20,6 +20,8 @@ from utils.mailer import BaseEmail
 | 
			
		|||
from utils.models import BillingAddress
 | 
			
		||||
from utils.stripe_utils import StripeUtils
 | 
			
		||||
 | 
			
		||||
from .models import VMPricing
 | 
			
		||||
 | 
			
		||||
logger = get_task_logger(__name__)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +59,8 @@ def create_vm_task(self, vm_template_id, user, specs, template,
 | 
			
		|||
        "Running create_vm_task on {}".format(current_task.request.hostname))
 | 
			
		||||
    vm_id = None
 | 
			
		||||
    try:
 | 
			
		||||
        final_price = specs.get('price')
 | 
			
		||||
        final_price = (specs.get('total_price') if 'total_price' in specs
 | 
			
		||||
                       else specs.get('price'))
 | 
			
		||||
        billing_address = BillingAddress(
 | 
			
		||||
            cardholder_name=billing_address_data['cardholder_name'],
 | 
			
		||||
            street_address=billing_address_data['street_address'],
 | 
			
		||||
| 
						 | 
				
			
			@ -95,17 +98,22 @@ def create_vm_task(self, vm_template_id, user, specs, template,
 | 
			
		|||
        if vm_id is None:
 | 
			
		||||
            raise Exception("Could not create VM")
 | 
			
		||||
 | 
			
		||||
        vm_pricing = VMPricing.get_vm_pricing_by_name(
 | 
			
		||||
            name=specs['pricing_name']
 | 
			
		||||
        ) if 'pricing_name' in specs else VMPricing.get_default_pricing()
 | 
			
		||||
        # Create a Hosting Order
 | 
			
		||||
        order = HostingOrder.create(
 | 
			
		||||
            price=final_price,
 | 
			
		||||
            vm_id=vm_id,
 | 
			
		||||
            customer=customer,
 | 
			
		||||
            billing_address=billing_address
 | 
			
		||||
            billing_address=billing_address,
 | 
			
		||||
            vm_pricing=vm_pricing
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        # Create a Hosting Bill
 | 
			
		||||
        HostingBill.create(
 | 
			
		||||
            customer=customer, billing_address=billing_address)
 | 
			
		||||
            customer=customer, billing_address=billing_address
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        # Create Billing Address for User if he does not have one
 | 
			
		||||
        if not customer.user.billing_addresses.count():
 | 
			
		||||
| 
						 | 
				
			
			@ -135,12 +143,16 @@ def create_vm_task(self, vm_template_id, user, specs, template,
 | 
			
		|||
            'cores': specs.get('cpu'),
 | 
			
		||||
            'memory': specs.get('memory'),
 | 
			
		||||
            'storage': specs.get('disk_size'),
 | 
			
		||||
            'price': specs.get('price'),
 | 
			
		||||
            'price': final_price,
 | 
			
		||||
            'template': template.get('name'),
 | 
			
		||||
            'vm_name': vm.get('name'),
 | 
			
		||||
            'vm_id': vm['vm_id'],
 | 
			
		||||
            'order_id': order.id
 | 
			
		||||
        }
 | 
			
		||||
        if 'pricing_name' in specs:
 | 
			
		||||
            context['pricing'] = str(VMPricing.get_vm_pricing_by_name(
 | 
			
		||||
                name=specs['pricing_name']
 | 
			
		||||
            ))
 | 
			
		||||
        email_data = {
 | 
			
		||||
            'subject': settings.DCL_TEXT + " Order from %s" % context['email'],
 | 
			
		||||
            'from_email': settings.DCL_SUPPORT_FROM_ADDRESS,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,33 +1,34 @@
 | 
			
		|||
{% load staticfiles i18n cms_tags sekizai_tags %}
 | 
			
		||||
{% load static i18n cms_tags sekizai_tags %}
 | 
			
		||||
{% get_current_language as LANGUAGE_CODE %}
 | 
			
		||||
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="{{LANGUAGE_CODE}}">
 | 
			
		||||
 | 
			
		||||
    <head>
 | 
			
		||||
<head>
 | 
			
		||||
 | 
			
		||||
    <meta charset="utf-8">
 | 
			
		||||
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
    <meta name="description" content="Data Center Light by ungleich">
 | 
			
		||||
        <meta name="author" content="ungleich GmbH">
 | 
			
		||||
        {% cms_toolbar %}
 | 
			
		||||
        <title>Data Center Light -
 | 
			
		||||
        {% block title %}VM hosting made in Switzerland{% endblock %}</title>
 | 
			
		||||
    <meta name="author" content="ungleich glarus ag">
 | 
			
		||||
    <title>Data Center Light - {% block title %}VM hosting made in Switzerland{% endblock %}</title>
 | 
			
		||||
 | 
			
		||||
    <!-- Vendor CSS -->
 | 
			
		||||
    <!-- Bootstrap Core CSS -->
 | 
			
		||||
        <link href="{% static 'datacenterlight/css/bootstrap.min.css' %}" rel="stylesheet">
 | 
			
		||||
 | 
			
		||||
        <!-- Custom Fonts -->
 | 
			
		||||
        <!--Import Google Icon Font-->
 | 
			
		||||
        <link href="//fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
 | 
			
		||||
    <link href="{% static 'datacenterlight/css/bootstrap-3.3.7.min.css' %}" rel="stylesheet">
 | 
			
		||||
    <!-- Icon Fonts -->
 | 
			
		||||
    <link href="{% static 'datacenterlight/font-awesome/css/font-awesome.min.css' %}" rel="stylesheet" type="text/css">
 | 
			
		||||
        <link href="//fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css">
 | 
			
		||||
        <link rel="shortcut icon" href="{% static 'datacenterlight/img/favicon.ico' %}" type="image/x-icon" />
 | 
			
		||||
        <link href="//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.5.4/bootstrap-select.min.css" rel="stylesheet">
 | 
			
		||||
 | 
			
		||||
    <!-- Custom CSS -->
 | 
			
		||||
    <link href="{% static 'datacenterlight/css/common.css' %}" rel="stylesheet">
 | 
			
		||||
    <link href="{% static 'datacenterlight/css/landing-page.css' %}" rel="stylesheet">
 | 
			
		||||
    {% 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 href="//fonts.googleapis.com/css?family=Lato:300,400,600,700" rel="stylesheet" type="text/css">
 | 
			
		||||
 | 
			
		||||
    <link rel="shortcut icon" href="{% static 'datacenterlight/img/favicon.ico' %}" type="image/x-icon">
 | 
			
		||||
 | 
			
		||||
    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
 | 
			
		||||
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
 | 
			
		||||
| 
						 | 
				
			
			@ -35,39 +36,32 @@
 | 
			
		|||
        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
 | 
			
		||||
        <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
 | 
			
		||||
    <![endif]-->
 | 
			
		||||
        {% render_block "css" postprocessor "compressor.contrib.sekizai.compress" %}
 | 
			
		||||
        {% render_block "js" postprocessor "compressor.contrib.sekizai.compress" %}
 | 
			
		||||
 | 
			
		||||
    <!-- Google analytics -->
 | 
			
		||||
    {% include "google_analytics.html" %}
 | 
			
		||||
    <!-- End Google Analytics -->
 | 
			
		||||
    </head>
 | 
			
		||||
</head>
 | 
			
		||||
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
    <body>
 | 
			
		||||
        <!-- Navigation -->
 | 
			
		||||
    {% block navbar %}
 | 
			
		||||
        {% include "datacenterlight/includes/_navbar.html" %}
 | 
			
		||||
    {% endblock navbar %}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    {% block content %}
 | 
			
		||||
    {% endblock %}
 | 
			
		||||
 | 
			
		||||
    {% include "datacenterlight/includes/_footer.html" %}
 | 
			
		||||
        <!-- Footer -->
 | 
			
		||||
 | 
			
		||||
    <!-- jQuery -->
 | 
			
		||||
        <script src="{% static 'datacenterlight/js/jquery.js' %}"></script>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        <script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.5.4/bootstrap-select.js"></script>
 | 
			
		||||
 | 
			
		||||
    <script src="{% static 'datacenterlight/js/jquery-2.2.4.min.js' %}"></script>
 | 
			
		||||
    <!-- Bootstrap Core JavaScript -->
 | 
			
		||||
        <script src="{% static 'datacenterlight/js/bootstrap.min.js' %}"></script>
 | 
			
		||||
        <script src="{% static 'datacenterlight/js/main.js' %}"></script>
 | 
			
		||||
        <!-- Load form js -->
 | 
			
		||||
        <script src="{% static 'datacenterlight/js/form.js' %}"></script>
 | 
			
		||||
        <script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.5.4/bootstrap-select.js"></script>
 | 
			
		||||
        <script src="//cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.16.0/jquery.validate.min.js"></script>
 | 
			
		||||
    <script src="{% static 'datacenterlight/js/bootstrap-3.3.7.min.js' %}"></script>
 | 
			
		||||
    <!-- Bootstrap Validator -->
 | 
			
		||||
    <script src="//cdnjs.cloudflare.com/ajax/libs/1000hz-bootstrap-validator/0.11.9/validator.min.js"></script>
 | 
			
		||||
    </body>
 | 
			
		||||
 | 
			
		||||
    <!-- Custom JS -->
 | 
			
		||||
    <script src="{% static 'datacenterlight/js/main.js' %}"></script>
 | 
			
		||||
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										94
									
								
								datacenterlight/templates/datacenterlight/base_hosting.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,94 @@
 | 
			
		|||
{% load staticfiles i18n cms_tags sekizai_tags %}
 | 
			
		||||
{% get_current_language as LANGUAGE_CODE %}
 | 
			
		||||
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="{{LANGUAGE_CODE}}">
 | 
			
		||||
<head>
 | 
			
		||||
 | 
			
		||||
    <meta charset="utf-8">
 | 
			
		||||
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
    <meta name="description" content="Data Center Light by ungleich">
 | 
			
		||||
    <meta name="author" content="ungleich glarus ag">
 | 
			
		||||
 | 
			
		||||
    <title>Data Center Light - {% block title %}VM hosting made in Switzerland{% endblock %}</title>
 | 
			
		||||
 | 
			
		||||
    <!-- Vendor CSS -->
 | 
			
		||||
    <!-- Bootstrap Core CSS -->
 | 
			
		||||
    <link href="{% static 'datacenterlight/css/bootstrap-3.3.7.min.css' %}" rel="stylesheet">
 | 
			
		||||
    <!-- Icon Fonts -->
 | 
			
		||||
    <link href="{% static 'datacenterlight/font-awesome/css/font-awesome.min.css' %}" rel="stylesheet" type="text/css">
 | 
			
		||||
    <link href="//fonts.googleapis.com/css?family=Lato:300,400,600,700" rel="stylesheet" type="text/css">
 | 
			
		||||
 | 
			
		||||
    <!-- 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">
 | 
			
		||||
 | 
			
		||||
    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
 | 
			
		||||
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
 | 
			
		||||
    <!--[if lt IE 9]>
 | 
			
		||||
        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
 | 
			
		||||
        <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
 | 
			
		||||
    <![endif]-->
 | 
			
		||||
 | 
			
		||||
    <!-- Google analytics -->
 | 
			
		||||
    {% include "google_analytics.html" %}
 | 
			
		||||
    <!-- End Google Analytics -->
 | 
			
		||||
</head>
 | 
			
		||||
 | 
			
		||||
<body>
 | 
			
		||||
    {% cms_toolbar %}
 | 
			
		||||
 | 
			
		||||
    {% render_placeholder cms_integration.navbar_placeholder %}
 | 
			
		||||
 | 
			
		||||
    <div class="{% if request.user.is_authenticated %}content-dashboard{% endif %}">
 | 
			
		||||
        {% block content %}
 | 
			
		||||
        {% endblock %}
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    {% 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>
 | 
			
		||||
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment-with-locales.js"></script>
 | 
			
		||||
    <!-- jQuery -->
 | 
			
		||||
    <script src="{% static 'datacenterlight/js/jquery-2.2.4.min.js' %}"></script>
 | 
			
		||||
    <!-- Bootstrap Core JavaScript -->
 | 
			
		||||
    <script src="{% static 'datacenterlight/js/bootstrap-3.3.7.min.js' %}"></script>
 | 
			
		||||
    <script src="//cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.16.0/jquery.validate.min.js"></script>
 | 
			
		||||
    <script src="//cdnjs.cloudflare.com/ajax/libs/1000hz-bootstrap-validator/0.11.9/validator.min.js"></script>
 | 
			
		||||
    <!-- Copy Clipboard (not required for dcl, but dependency in virtual_machine_detail.js) -->
 | 
			
		||||
    <script src="//cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.5.10/clipboard.min.js"></script>
 | 
			
		||||
 | 
			
		||||
    <!-- Custom JS -->
 | 
			
		||||
    <script src="{% static 'hosting/js/virtual_machine_detail.js' %}"></script>
 | 
			
		||||
    <script src="{% static 'hosting/js/createvm.js' %}"></script>
 | 
			
		||||
    <script src="{% static 'hosting/js/initial.js' %}"></script>
 | 
			
		||||
    {% block js_extra %}
 | 
			
		||||
        {% comment %}
 | 
			
		||||
            this block is above some files, because on stripe error scripts below the stripe
 | 
			
		||||
            script are not properly executed.
 | 
			
		||||
        {% endcomment %}
 | 
			
		||||
    {% endblock js_extra %}
 | 
			
		||||
 | 
			
		||||
    <!-- Stripe Lib -->
 | 
			
		||||
    <script src="https://js.stripe.com/v3/"></script>
 | 
			
		||||
    <script src="https://js.stripe.com/v2/"></script>
 | 
			
		||||
 | 
			
		||||
    <!-- Proccess payment lib -->
 | 
			
		||||
    <script type="text/javascript" src="{% static 'hosting/js/payment.js' %}"></script>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,27 +0,0 @@
 | 
			
		|||
{% load i18n %}
 | 
			
		||||
 | 
			
		||||
<form novalidate id ="beta_access" class="form-beta" method="POST" action="{% url 'datacenterlight:beta_access'%}">
 | 
			
		||||
  {% csrf_token %}
 | 
			
		||||
  {{ form.non_field_errors }}
 | 
			
		||||
  <div>
 | 
			
		||||
	{% for message in messages %}
 | 
			
		||||
		<strong>{{ message }}</strong>
 | 
			
		||||
	{% endfor %}
 | 
			
		||||
  </div>
 | 
			
		||||
 <div class="inputs">
 | 
			
		||||
	 <div class="form-group">
 | 
			
		||||
		<input type="text" name="name" class="form-control" id="name" placeholder="{% trans 'Enter name' %}">
 | 
			
		||||
		<span style="color: white">{{ form.name.errors|striptags}}</span>
 | 
			
		||||
	  </div>
 | 
			
		||||
	  <div class="form-group">
 | 
			
		||||
		<input type="email" name="email" class="form-control" id="email" placeholder="{% trans 'Enter email' %}">
 | 
			
		||||
		<span style="color: white">{{ form.email.errors|striptags}}</span>
 | 
			
		||||
	  </div>
 | 
			
		||||
 </div>
 | 
			
		||||
  <button type="submit" class="btn btn-default btn-transparent btn-lg">{% trans "Request Beta Access" %}</button>
 | 
			
		||||
</form>
 | 
			
		||||
<script>
 | 
			
		||||
	$('#beta_access').ajaxForm({
 | 
			
		||||
		target: '#beta_access_form', success: function(response) { }
 | 
			
		||||
	});
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,47 +0,0 @@
 | 
			
		|||
 | 
			
		||||
{% load i18n %}
 | 
			
		||||
 | 
			
		||||
<div class="modal fade bs-example-modal-sm" style="color:black;"  id="successModal" tabindex="-1" role="dialog">
 | 
			
		||||
    <div class="modal-dialog">
 | 
			
		||||
        <div class="modal-content">
 | 
			
		||||
            <div class="modal-header">
 | 
			
		||||
              <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="modal-body">
 | 
			
		||||
              <div class="modal-icon"><i class="checkmark" aria-hidden="true"></i></div>
 | 
			
		||||
              <h4 class="modal-title">{% trans "Request Sent" %}</h4>
 | 
			
		||||
              <p class="modal-text">{% trans "Thank you for your subscription! You will receive a confirmation mail from our team" %}</p>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div><!-- /.modal-content -->
 | 
			
		||||
    </div>
 | 
			
		||||
</div><!-- /.modal -->
 | 
			
		||||
<script>
 | 
			
		||||
	// Show modal
 | 
			
		||||
	$('#successModal').modal('show');
 | 
			
		||||
	// close the modal after 3 seconds
 | 
			
		||||
	setTimeout(function() {
 | 
			
		||||
	    $('#successModal').modal('hide');
 | 
			
		||||
	}, 5000);
 | 
			
		||||
</script>
 | 
			
		||||
<style>
 | 
			
		||||
.vertical-alignment-helper {
 | 
			
		||||
    display:table;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    pointer-events:none; /* This makes sure that we can still click outside of the modal to close it */
 | 
			
		||||
}
 | 
			
		||||
.vertical-align-center {
 | 
			
		||||
    /* To center vertically */
 | 
			
		||||
    display: table-cell;
 | 
			
		||||
    vertical-align: middle;
 | 
			
		||||
    pointer-events:none;
 | 
			
		||||
}
 | 
			
		||||
.modal-content {
 | 
			
		||||
    /* Bootstrap sets the size of the modal in the modal-dialog class, we need to inherit it */
 | 
			
		||||
    width:inherit;
 | 
			
		||||
    height:inherit;
 | 
			
		||||
    /* To center horizontally */
 | 
			
		||||
    margin: 0 auto;
 | 
			
		||||
    pointer-events: all;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
<div class="flex-row {{ instance.get_extra_classes }}">
 | 
			
		||||
  <div class="percent-text">
 | 
			
		||||
    {% if instance.banner_text %}
 | 
			
		||||
      <div class="text">{{ instance.banner_text }}</div>
 | 
			
		||||
    {% endif %}
 | 
			
		||||
    {% if instance.banner_image %}
 | 
			
		||||
      <div class="ssdimg">
 | 
			
		||||
        <img class="img-responsive" src="{{ instance.banner_image.url }}" alt="image">
 | 
			
		||||
      </div>
 | 
			
		||||
    {% endif %}
 | 
			
		||||
  </div>
 | 
			
		||||
  <div class="desc-text padding-vertical">
 | 
			
		||||
    <div class="lead">
 | 
			
		||||
      {{ instance.content }}
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
{% load cms_tags %}
 | 
			
		||||
 | 
			
		||||
<div class="banner-list" id="{{ instance.html_id }}">
 | 
			
		||||
  <div class="container">
 | 
			
		||||
    {% if instance.heading %}
 | 
			
		||||
      <div class="banner-list-heading">
 | 
			
		||||
        <h2>{{ instance.heading }}</h2>
 | 
			
		||||
      </div>
 | 
			
		||||
    {% endif %}
 | 
			
		||||
    {% for plugin in instance.child_plugin_instances %}
 | 
			
		||||
      {% render_plugin plugin %}
 | 
			
		||||
    {% endfor %}
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
							
								
								
									
										80
									
								
								datacenterlight/templates/datacenterlight/cms/base.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,80 @@
 | 
			
		|||
{% load static i18n cms_tags sekizai_tags %}
 | 
			
		||||
{% get_current_language as LANGUAGE_CODE %}
 | 
			
		||||
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="{{LANGUAGE_CODE}}">
 | 
			
		||||
<head>
 | 
			
		||||
 | 
			
		||||
    <meta charset="utf-8">
 | 
			
		||||
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
    <meta name="description" content="{% page_attribute 'meta_description' %}">
 | 
			
		||||
    <meta name="author" content="ungleich glarus ag">
 | 
			
		||||
    <title>{% page_attribute "page_title" %}</title>
 | 
			
		||||
 | 
			
		||||
    <!-- Vendor CSS -->
 | 
			
		||||
    <!-- Bootstrap Core CSS -->
 | 
			
		||||
    <link href="{% static 'datacenterlight/css/bootstrap-3.3.7.min.css' %}" rel="stylesheet">
 | 
			
		||||
    <!-- Icon Fonts -->
 | 
			
		||||
    <link href="{% static 'datacenterlight/font-awesome/css/font-awesome.min.css' %}" rel="stylesheet" type="text/css">
 | 
			
		||||
    <!-- Custom CSS -->
 | 
			
		||||
    <link href="{% static 'datacenterlight/css/common.css' %}" rel="stylesheet">
 | 
			
		||||
    <link href="{% static 'datacenterlight/css/landing-page.css' %}" rel="stylesheet">
 | 
			
		||||
    <link href="{% static 'datacenterlight/css/header-slider.css' %}" rel="stylesheet">
 | 
			
		||||
    {% if request.toolbar.edit_mode %}
 | 
			
		||||
        <link href="{% static 'datacenterlight/css/cms.css' %}" rel="stylesheet">
 | 
			
		||||
    {% endif %}
 | 
			
		||||
    {% render_block "css" postprocessor "compressor.contrib.sekizai.compress" %}
 | 
			
		||||
    {% render_block "js" postprocessor "compressor.contrib.sekizai.compress" %}
 | 
			
		||||
 | 
			
		||||
    <!-- External Fonts -->
 | 
			
		||||
    <link href="//fonts.googleapis.com/css?family=Lato:300,400,600,700" rel="stylesheet" type="text/css">
 | 
			
		||||
 | 
			
		||||
    {% if request.current_page.cmsfaviconextension %}
 | 
			
		||||
        <link rel="shortcut icon" href="{% static request.current_page.cmsfaviconextension.favicon.url %}" type="image/x-icon">
 | 
			
		||||
    {% else %}
 | 
			
		||||
        <link rel="shortcut icon" href="{% static 'datacenterlight/img/favicon.ico' %}" type="image/x-icon">
 | 
			
		||||
    {% endif %}
 | 
			
		||||
 | 
			
		||||
    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
 | 
			
		||||
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
 | 
			
		||||
    <!--[if lt IE 9]>
 | 
			
		||||
        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
 | 
			
		||||
        <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
 | 
			
		||||
    <![endif]-->
 | 
			
		||||
 | 
			
		||||
    <!-- Google analytics -->
 | 
			
		||||
    {% include "google_analytics.html" %}
 | 
			
		||||
    <!-- End Google Analytics -->
 | 
			
		||||
</head>
 | 
			
		||||
 | 
			
		||||
<body>
 | 
			
		||||
    {% cms_toolbar %}
 | 
			
		||||
 | 
			
		||||
    {% placeholder 'datacenterlight_navbar' %}
 | 
			
		||||
 | 
			
		||||
    {% placeholder 'Datacenterlight Header' or %}
 | 
			
		||||
        <div class="dcl-header">
 | 
			
		||||
            <div class="container">
 | 
			
		||||
                <h1>{% page_attribute "page_title" %}</h1>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    {% endplaceholder %}
 | 
			
		||||
 | 
			
		||||
    {% url 'datacenterlight:index' as calculator_form_url %}
 | 
			
		||||
    {% placeholder 'Datacenterlight Content' %}
 | 
			
		||||
 | 
			
		||||
    {% placeholder 'datacenterlight_footer'%}
 | 
			
		||||
 | 
			
		||||
    <!-- jQuery -->
 | 
			
		||||
    <script src="{% static 'datacenterlight/js/jquery-2.2.4.min.js' %}"></script>
 | 
			
		||||
    <!-- Bootstrap Core JavaScript -->
 | 
			
		||||
    <script src="{% static 'datacenterlight/js/bootstrap-3.3.7.min.js' %}"></script>
 | 
			
		||||
    <!-- Bootstrap Validator -->
 | 
			
		||||
    <script src="//cdnjs.cloudflare.com/ajax/libs/1000hz-bootstrap-validator/0.11.9/validator.min.js"></script>
 | 
			
		||||
 | 
			
		||||
    <!-- Custom JS -->
 | 
			
		||||
    <script src="{% static 'datacenterlight/js/main.js' %}"></script>
 | 
			
		||||
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
<div class="price-calc-section">
 | 
			
		||||
  <div class="card">
 | 
			
		||||
    {% include "datacenterlight/includes/_calculator_form.html" with vm_pricing=instance.pricing %}
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
							
								
								
									
										43
									
								
								datacenterlight/templates/datacenterlight/cms/contact.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,43 @@
 | 
			
		|||
<div id="contact" class="full-contact-section">
 | 
			
		||||
  <div class="intro-header-2 contact-section">
 | 
			
		||||
    <div class="container">
 | 
			
		||||
      <div class="row">
 | 
			
		||||
        <div class="col-sm-6">
 | 
			
		||||
          {% if instance.heading%}
 | 
			
		||||
            <div class="title">
 | 
			
		||||
              <h2>{{ instance.heading}}</h2>
 | 
			
		||||
            </div>
 | 
			
		||||
          {% endif %}
 | 
			
		||||
          <div class="contact-details">
 | 
			
		||||
            {% if instance.organization_name %}
 | 
			
		||||
              <div class="subtitle">
 | 
			
		||||
                <h3>{{ instance.organization_name }}</h3>
 | 
			
		||||
              </div>
 | 
			
		||||
            {% endif %}
 | 
			
		||||
            <div class="description">
 | 
			
		||||
              {% if instance.email %}
 | 
			
		||||
                <p>{{ instance.email }}</p>
 | 
			
		||||
              {% endif %}
 | 
			
		||||
              {% if instance.address %}
 | 
			
		||||
                <p>{{ instance.address }}</p>
 | 
			
		||||
              {% endif %}
 | 
			
		||||
              {% if instance.country %}
 | 
			
		||||
                <p>{{ instance.country }}</p>
 | 
			
		||||
              {% endif %}
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="social">
 | 
			
		||||
            <a target="_blank" href="https://twitter.com/datacenterlight"><i class="fa fa-twitter fa-fw"></i></a>
 | 
			
		||||
            <a target="_blank" href="https://github.com/ungleich"><i class="fa fa-github fa-fw"></i></a>
 | 
			
		||||
            <a target="_blank" href="https://www.facebook.com/ungleich.ch/"><i class="fa fa-facebook"></i></a>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="col-sm-6">
 | 
			
		||||
          <div id="contact-form" class="contact-form">
 | 
			
		||||
            {% include "datacenterlight/contact_form.html" with form_header=instance.form_header  %}
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
							
								
								
									
										15
									
								
								datacenterlight/templates/datacenterlight/cms/footer.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
{% load i18n cms_tags %}
 | 
			
		||||
<footer>
 | 
			
		||||
  <div class="container">
 | 
			
		||||
    <ul class="list-inline">
 | 
			
		||||
      {% for plugin in instance.child_plugin_instances %}
 | 
			
		||||
        <li>
 | 
			
		||||
          {% render_plugin plugin %}
 | 
			
		||||
        </li>
 | 
			
		||||
      {% endfor %}
 | 
			
		||||
    </ul>
 | 
			
		||||
    <p class="copyright text-muted small">
 | 
			
		||||
      Copyright © {{ instance.copyright_label }} {% now "Y" %}. {% trans "All Rights Reserved" %}
 | 
			
		||||
    </p>
 | 
			
		||||
  </div>
 | 
			
		||||
</footer>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
{% load cms_tags %}
 | 
			
		||||
 | 
			
		||||
{% if instance.heading %}
 | 
			
		||||
  <div class="{% if not instance.plain_heading %}split-title{% else %}split-title-plain{% endif %}">
 | 
			
		||||
    <h2>{{ instance.heading }}</h2>
 | 
			
		||||
  </div>
 | 
			
		||||
{% endif %}
 | 
			
		||||
{% if instance.content %}
 | 
			
		||||
  <div class="split-description">
 | 
			
		||||
    <div class="lead">
 | 
			
		||||
      {{ instance.content }}
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
{% endif %}
 | 
			
		||||
{% if children_to_content|length %}
 | 
			
		||||
  <div class="split-subsection">
 | 
			
		||||
    {% for plugin in children_to_content %}
 | 
			
		||||
      {% render_plugin plugin %}
 | 
			
		||||
    {% endfor %}
 | 
			
		||||
  </div>
 | 
			
		||||
{% endif %}
 | 
			
		||||
							
								
								
									
										3
									
								
								datacenterlight/templates/datacenterlight/cms/link.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
<a class="dcl-link url {% if instance.separator %}dcl-link-separator{% endif %}" href="{{ instance.target }}" {% if instance.title %}title="{{ instance.title }}"{% endif %}>
 | 
			
		||||
  {{ instance.text }}
 | 
			
		||||
</a>
 | 
			
		||||
							
								
								
									
										71
									
								
								datacenterlight/templates/datacenterlight/cms/navbar.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,71 @@
 | 
			
		|||
{% load static i18n custom_tags cms_tags %}
 | 
			
		||||
{% get_current_language as LANGUAGE_CODE %}
 | 
			
		||||
 | 
			
		||||
<nav class="navbar navbar-default navbar-fixed-top topnav navbar-transparent">
 | 
			
		||||
  <!-- Brand and toggle get grouped for better mobile display -->
 | 
			
		||||
  <div class="navbar-header">
 | 
			
		||||
    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#dcl-topnav">
 | 
			
		||||
      <span class="sr-only">{% trans "Toggle navigation" %}</span>
 | 
			
		||||
      <span class="icon-bar"></span>
 | 
			
		||||
      <span class="icon-bar"></span>
 | 
			
		||||
      <span class="icon-bar"></span>
 | 
			
		||||
    </button>
 | 
			
		||||
    {% if instance.logo_dark or instance.logo_light %}
 | 
			
		||||
      <a href="{{ instance.logo_url|default:'/' }}" id="logoBlack" class="navbar-brand"><img src="{{ instance.get_logo_dark }}"></a>
 | 
			
		||||
      <a href="{{ instance.logo_url|default:'/' }}" id="logoWhite" class="navbar-brand"><img src="{{ instance.get_logo_light }}"></a>
 | 
			
		||||
    {% else %}
 | 
			
		||||
      <a href="/" id="logoBlack" class="navbar-brand"><img src="{% static 'datacenterlight/img/logo_black.svg' %}"></a>
 | 
			
		||||
      <a href="/" id="logoWhite" class="navbar-brand"><img src="{% static 'datacenterlight/img/logo_white.svg' %}"></a>
 | 
			
		||||
    {% endif %}
 | 
			
		||||
  </div>
 | 
			
		||||
  <div class="collapse navbar-collapse" id="dcl-topnav">
 | 
			
		||||
    <!-- Start Navbar collapse-->
 | 
			
		||||
    <ul class="nav navbar-nav navbar-right">
 | 
			
		||||
      {% for plugin in instance.child_plugin_instances %}
 | 
			
		||||
        <li>
 | 
			
		||||
          {% render_plugin plugin %}
 | 
			
		||||
        </li>
 | 
			
		||||
      {% endfor %}
 | 
			
		||||
      {% if instance.language_dropdown %}
 | 
			
		||||
        <li>
 | 
			
		||||
          {% if LANGUAGE_CODE == 'en-us'%}
 | 
			
		||||
            <a class="on-hover-border" href="{% change_lang 'de' %}">Deutsch  <i class="fa fa-globe" aria-hidden="true"></i></a>
 | 
			
		||||
          {% else %}
 | 
			
		||||
            <a class="on-hover-border" href="{% change_lang 'en-us' %}">English  <i class="fa fa-globe" aria-hidden="true"></i></a>
 | 
			
		||||
          {% endif %}
 | 
			
		||||
        </li>
 | 
			
		||||
      {% endif %}
 | 
			
		||||
      {% if not request.user.is_authenticated %}
 | 
			
		||||
        <li>
 | 
			
		||||
          <a href="{% url 'hosting:login' %}">{% trans "Login" %}  <span class="fa fa-sign-in"></span></a>
 | 
			
		||||
        </li>
 | 
			
		||||
      {% else %}
 | 
			
		||||
        <li>
 | 
			
		||||
          <a href="{% url 'hosting:dashboard' %}">{% trans "Dashboard" %}</a>
 | 
			
		||||
        </li>
 | 
			
		||||
      {% endif %}
 | 
			
		||||
      {% comment %}
 | 
			
		||||
      <!-- to be used when more than one option for language -->
 | 
			
		||||
      <li class="nav-language">
 | 
			
		||||
        <div class="dropdown">
 | 
			
		||||
          <div class="dropdown-toggle select-language" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
 | 
			
		||||
            {% if LANGUAGE_CODE == 'en-us'%}
 | 
			
		||||
              <span>English</span>
 | 
			
		||||
            {% else %}
 | 
			
		||||
              <span>Deutsch</span>
 | 
			
		||||
            {% endif %}
 | 
			
		||||
            <i class="fa fa-globe" aria-hidden="true"></i>
 | 
			
		||||
          </div>
 | 
			
		||||
          <ul class="dropdown-menu drop-language dropdown-menu-right">
 | 
			
		||||
            {% if LANGUAGE_CODE == 'en-us'%}
 | 
			
		||||
              <li><a class="url" href="{% change_lang 'de' %}">Deutsch</a></li>
 | 
			
		||||
            {% else %}
 | 
			
		||||
              <li><a class="url" href="{% change_lang 'en-us' %}">English</a></li>
 | 
			
		||||
            {% endif %}
 | 
			
		||||
          </ul>
 | 
			
		||||
        </div>
 | 
			
		||||
      </li>
 | 
			
		||||
      {% endcomment %}
 | 
			
		||||
    </ul>
 | 
			
		||||
  </div>
 | 
			
		||||
</nav>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
{% load cms_tags %}
 | 
			
		||||
 | 
			
		||||
<div class="dropdown highlights-dropdown">
 | 
			
		||||
  <a class="dropdown-toggle url-init dcl-link" href="{{ instance.target|default:'#' }}" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{ instance.text }} <span class="caret"></span></a>
 | 
			
		||||
  <ul class="dropdown-menu">
 | 
			
		||||
    {% for plugin in instance.child_plugin_instances %}
 | 
			
		||||
        {% render_plugin plugin %}
 | 
			
		||||
    {% endfor %}
 | 
			
		||||
  </ul>
 | 
			
		||||
</div>
 | 
			
		||||
							
								
								
									
										31
									
								
								datacenterlight/templates/datacenterlight/cms/section.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,31 @@
 | 
			
		|||
{% load cms_tags %}
 | 
			
		||||
 | 
			
		||||
<section class="split-section {{ instance.get_extra_classes }}" id="{{ instance.html_id }}">
 | 
			
		||||
  <div class="container">
 | 
			
		||||
    {% if children_to_side|length or children_calculator|length %}
 | 
			
		||||
      <div class="row">
 | 
			
		||||
        <div class="col-sm-6 {% if instance.text_direction == 'right' %}col-sm-push-6{% endif %} split-text">
 | 
			
		||||
          {% include "datacenterlight/cms/includes/_section_split_content.html" %}
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="col-sm-6 {% if instance.text_direction == 'right' %}col-sm-pull-6{% endif %} split-figure">
 | 
			
		||||
          {% if children_calculator|length %}
 | 
			
		||||
            {% for plugin in children_calculator %}
 | 
			
		||||
              {% render_plugin plugin %}
 | 
			
		||||
            {% endfor %}
 | 
			
		||||
          {% endif %}
 | 
			
		||||
          {% if children_to_side %}
 | 
			
		||||
            <div class="section-figure">
 | 
			
		||||
              {% for plugin in children_to_side %}
 | 
			
		||||
                {% render_plugin plugin %}
 | 
			
		||||
              {% endfor %}
 | 
			
		||||
            </div>
 | 
			
		||||
          {% endif %}
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    {% else %}
 | 
			
		||||
      <div class="space">
 | 
			
		||||
        {% include "datacenterlight/cms/includes/_section_split_content.html" %}
 | 
			
		||||
      </div>
 | 
			
		||||
    {% endif %}
 | 
			
		||||
  </div>
 | 
			
		||||
</section>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
<div class="icon-section">
 | 
			
		||||
  <i class="fa fa-{{ instance.fontawesome_icon_name }}" aria-hidden="true"></i>
 | 
			
		||||
</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
<div class="section-image">
 | 
			
		||||
  <img class="img-responsive" src="{{ instance.image.url }}" alt="image">
 | 
			
		||||
  {% if instance.caption %}
 | 
			
		||||
    <div class="section-image-caption">{{ instance.caption }}</div>
 | 
			
		||||
  {% endif %}
 | 
			
		||||
</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
{% load custom_tags %}
 | 
			
		||||
 | 
			
		||||
<section class="promo-section {{instance.get_extra_classes}}" {% if instance.background_image %}style="background-image:url({{ instance.background_image.url }})"{% endif %}>
 | 
			
		||||
  <div class="container">
 | 
			
		||||
    {% if instance.heading %}
 | 
			
		||||
      <h3>{{instance.heading|escaped_line_break|linebreaksbr}}</h3>
 | 
			
		||||
    {% endif %}
 | 
			
		||||
    {% if instance.subheading %}
 | 
			
		||||
      <h4>{{instance.subheading}}</h4>
 | 
			
		||||
    {% endif %}
 | 
			
		||||
    {% if instance.content %}
 | 
			
		||||
      <p>{{instance.content}}</p>
 | 
			
		||||
    {% endif %}
 | 
			
		||||
  </div>
 | 
			
		||||
</section>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,35 +0,0 @@
 | 
			
		|||
{% extends "datacenterlight/base.html" %}
 | 
			
		||||
{% load staticfiles cms_tags sekizai_tags %}
 | 
			
		||||
{% block title %}
 | 
			
		||||
{% page_attribute page_title %}
 | 
			
		||||
{% endblock %}
 | 
			
		||||
{% block content %}
 | 
			
		||||
{% addtoblock "css" %}
 | 
			
		||||
<link href="{% static 'datacenterlight/css/cms.css' %}" media="screen" rel="stylesheet" type="text/css"/>
 | 
			
		||||
{% endaddtoblock %}
 | 
			
		||||
<div class="dcl-cms_page-full-width">
 | 
			
		||||
    <div class="dcl-cms_page-header">
 | 
			
		||||
        <div class="container">
 | 
			
		||||
            <div class="row">
 | 
			
		||||
                <div class="col-sm-12 col-md-12">
 | 
			
		||||
                    <div class="single-heading">
 | 
			
		||||
                        <h2>{% page_attribute page_title %}</h2>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="split-section left" id="dcl-cms_page-text">
 | 
			
		||||
    <div class="space">
 | 
			
		||||
        <div class="container">
 | 
			
		||||
            <div class="row">
 | 
			
		||||
                <div class="col-md-12">
 | 
			
		||||
                    {% placeholder 'datacenterlight_cms_page_text' %}
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
{% endblock %}
 | 
			
		||||
| 
						 | 
				
			
			@ -13,16 +13,21 @@
 | 
			
		|||
    <div class="row">
 | 
			
		||||
        <div class="col-sm-offset-2 col-sm-10">
 | 
			
		||||
            <div class="subtitle">
 | 
			
		||||
                {% if form_header %}
 | 
			
		||||
                    <h3>{{ form_header }}</h3>
 | 
			
		||||
                {% else %}
 | 
			
		||||
                    <h3>{% trans "Get in touch with us!" %}</h3>
 | 
			
		||||
                {% endif %}
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <form class="form-horizontal ajax-form" method="POST" action="{% url 'datacenterlight:contact_us' %}" data-toggle="validator" data-response="#contact-form">
 | 
			
		||||
    <form class="form-horizontal ajax-form" method="POST" action="{% url 'datacenterlight:contact_us' %}" data-toggle="validator" data-response="#contact-form" role="form">
 | 
			
		||||
        {% csrf_token %}
 | 
			
		||||
        <div class="form-group">
 | 
			
		||||
            <label class="control-label col-sm-2" for="name">{% trans "Name" %}</label>
 | 
			
		||||
            <div class="col-sm-10">
 | 
			
		||||
                <input type="text" name="name" class="form-control" data-minlength="3" data-error="{% trans 'Please enter your name.' %}" required>
 | 
			
		||||
                <div class="help-block with-errors"></div>
 | 
			
		||||
                {{contact_form.name.errors}}
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
| 
						 | 
				
			
			@ -30,6 +35,7 @@
 | 
			
		|||
            <label class="control-label col-sm-2" for="email">{% trans "Email" %}</label>
 | 
			
		||||
            <div class="col-sm-10">
 | 
			
		||||
                <input name="email" type="email" pattern="^[^@\s]+@([^@\s]+\.)+[^@\s]+$" class="form-control" data-error="{% trans 'Please enter a valid email address.' %}" required>
 | 
			
		||||
                <div class="help-block with-errors"></div>
 | 
			
		||||
                {{contact_form.email.errors}}
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
| 
						 | 
				
			
			@ -37,6 +43,7 @@
 | 
			
		|||
            <label class="control-label col-sm-2" for="message">{% trans "Message" %}</label>
 | 
			
		||||
            <div class="col-sm-10">
 | 
			
		||||
                <textarea class="form-control" name="message" id="message" rows="6" required></textarea>
 | 
			
		||||
                <div class="help-block with-errors"></div>
 | 
			
		||||
                {{contact_form.message.errors}}
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										105
									
								
								datacenterlight/templates/datacenterlight/downtime.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,105 @@
 | 
			
		|||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
 | 
			
		||||
<head>
 | 
			
		||||
 | 
			
		||||
    <meta charset="utf-8">
 | 
			
		||||
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
    <meta name="description" content="">
 | 
			
		||||
    <meta name="author" content="">
 | 
			
		||||
 | 
			
		||||
    <title>ungleich</title>
 | 
			
		||||
 | 
			
		||||
    <!-- Custom Fonts -->
 | 
			
		||||
    <link href="//fonts.googleapis.com/css?family=Lato:300,400" rel="stylesheet" type="text/css">
 | 
			
		||||
    <link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon" />
 | 
			
		||||
 | 
			
		||||
    <style>
 | 
			
		||||
        body {
 | 
			
		||||
            color: #333;
 | 
			
		||||
            font-family: Lato, sans-serif;
 | 
			
		||||
            font-weight: 300;
 | 
			
		||||
            font-size: 18px;
 | 
			
		||||
            line-height: 1;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        h1 {
 | 
			
		||||
            padding-top: 4%;
 | 
			
		||||
            font-weight: 300;
 | 
			
		||||
            font-size: 48px;
 | 
			
		||||
            text-align: center;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        nav {
 | 
			
		||||
            padding: 20px 15px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .downtime-container {
 | 
			
		||||
            max-width: 1200px;
 | 
			
		||||
            margin: auto;
 | 
			
		||||
            display: flex;
 | 
			
		||||
            flex-direction: column;
 | 
			
		||||
            justify-content: space-between;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .downtime-msg {
 | 
			
		||||
            text-align: center;
 | 
			
		||||
            font-size: 26px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .downtime-contact {
 | 
			
		||||
            max-width: 300px;
 | 
			
		||||
            margin: auto;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        h2 {
 | 
			
		||||
            font-weight: 300;
 | 
			
		||||
            font-size: 22px;
 | 
			
		||||
            text-align: center;
 | 
			
		||||
            margin-bottom: 5px;
 | 
			
		||||
        }
 | 
			
		||||
        p {
 | 
			
		||||
            margin: 15px auto
 | 
			
		||||
        }
 | 
			
		||||
        .xl_p {
 | 
			
		||||
            margin: 15px auto;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        a {
 | 
			
		||||
            color: #333;
 | 
			
		||||
            text-decoration: none;
 | 
			
		||||
        }
 | 
			
		||||
        a:hover, a:focus, a:active, a:active:focus {
 | 
			
		||||
            color: #4a90e2;
 | 
			
		||||
        }
 | 
			
		||||
    </style>
 | 
			
		||||
</head>
 | 
			
		||||
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
    <div class="downtime-container">
 | 
			
		||||
        <nav class="navbar navbar-default  topnav navbar-transparent" role="navigation">
 | 
			
		||||
            <div class="container topnav">
 | 
			
		||||
                <div class="navbar-header">
 | 
			
		||||
                    <a id="logoWhite" class="navbar-brand topnav" href="https://www.ungleich.ch/"><img src="https://www.ungleich.ch/static/datacenterlight/img/logo_black.svg"></a>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </nav>
 | 
			
		||||
 | 
			
		||||
        <h1>You caught us while working!</h1>
 | 
			
		||||
        <div class="downtime-msg">
 | 
			
		||||
            <p class="xl_p">We're doing scheduled maintenance from</p>
 | 
			
		||||
            <p class="xl_p">17:00 21.08.2017 to 23:00 21.08.2017 CEST.</p>
 | 
			
		||||
        </div>
 | 
			
		||||
        <h2>If you need immediate assistance, please contact us at</h2>
 | 
			
		||||
        <div class="downtime-contact">
 | 
			
		||||
            <p><a href="mailto:support@datacenterlight.ch">support@datacenterlight.ch</a></p>
 | 
			
		||||
            <p>+41 044 534 66 22</p>
 | 
			
		||||
            <p><a target="_blank" href="https://twitter.com/datacenterlight">twitter datacenterlight</a></p>
 | 
			
		||||
            <p><a target="_blank" href="https://twitter.com/ungleich">twitter ungleich</a></p>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</body>
 | 
			
		||||
 | 
			
		||||
</html>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,176 +0,0 @@
 | 
			
		|||
{% load static from staticfiles %}
 | 
			
		||||
{% load i18n %}
 | 
			
		||||
<!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b -->
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml"
 | 
			
		||||
      style="font-family: 'Lato', 'sans-serif' !important;">
 | 
			
		||||
<head>
 | 
			
		||||
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
    <title>{{dcl_text}}</title>
 | 
			
		||||
</head>
 | 
			
		||||
<body bgcolor="#ffffff"
 | 
			
		||||
      style="font-family: 'Lato', 'sans-serif' !important; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; color: white; margin: 0;">
 | 
			
		||||
<style type="text/css">
 | 
			
		||||
@media only screen and (max-width: 480px) {
 | 
			
		||||
  table[class*="container-for-gmail-android"] {
 | 
			
		||||
    min-width: 290px !important; width: 100% !important;
 | 
			
		||||
  }
 | 
			
		||||
  img[class="force-width-gmail"] {
 | 
			
		||||
    display: none !important; width: 0 !important; height: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  table[class="w320"] {
 | 
			
		||||
    width: 320px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class*="mobile-header-padding-left"] {
 | 
			
		||||
    width: 160px !important; padding-left: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class*="mobile-header-padding-right"] {
 | 
			
		||||
    width: 160px !important; padding-right: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="header-lg"] {
 | 
			
		||||
    font-size: 24px !important; padding-bottom: 5px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="content-padding"] {
 | 
			
		||||
    padding: 5px 0 5px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="button"] {
 | 
			
		||||
    padding: 5px 5px 30px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class*="free-text"] {
 | 
			
		||||
    padding: 10px 18px 30px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="mobile-hide-img"] {
 | 
			
		||||
    display: none !important; height: 0 !important; width: 0 !important; line-height: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="item"] {
 | 
			
		||||
    width: 140px !important; vertical-align: top !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="quantity"] {
 | 
			
		||||
    width: 50px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="price"] {
 | 
			
		||||
    width: 90px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="item-table"] {
 | 
			
		||||
    padding: 30px 20px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="mini-container-left"] {
 | 
			
		||||
    padding: 0 15px 15px !important; display: block !important; width: 290px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="mini-container-right"] {
 | 
			
		||||
    padding: 0 15px 15px !important; display: block !important; width: 290px !important;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
<table align="center" cellpadding="0" cellspacing="0"
 | 
			
		||||
       class="container-for-gmail-android" width="100%"
 | 
			
		||||
       style="border-collapse: collapse !important; min-width: 600px; font-family: 'Lato', 'sans-serif' !important;">
 | 
			
		||||
    <tr style="font-family: 'Lato', 'sans-serif' !important;">
 | 
			
		||||
        <td align="left" valign="top" width="100%"
 | 
			
		||||
            style="border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff url(http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg) repeat-x;"
 | 
			
		||||
            bgcolor="#ffffff">
 | 
			
		||||
            <center style="font-family: 'Lato', 'sans-serif' !important;">
 | 
			
		||||
                <table cellspacing="0" cellpadding="0" width="100%"
 | 
			
		||||
                       bgcolor="#ffffff"
 | 
			
		||||
                       background="{{base_url}}{% static 'datacenterlight/img/dcl-email-bg.jpg' %}"
 | 
			
		||||
                       style="border-collapse: collapse !important; font-family: 'Lato', 'sans-serif' !important; background: transparent;">
 | 
			
		||||
                    <tr style="font-family: 'Lato', 'sans-serif' !important;">
 | 
			
		||||
                        <td width="100%" height="80" valign="top"
 | 
			
		||||
                            style="text-align: center; vertical-align: middle; border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 14px; color: #777777; line-height: 21px; background-color: #ffffff"
 | 
			
		||||
                            align="center">
 | 
			
		||||
                            <!--[if gte mso 9]>
 | 
			
		||||
                            <v:rect xmlns:v="urn:schemas-microsoft-com:vml"
 | 
			
		||||
                                    fill="true" stroke="false"
 | 
			
		||||
                                    style="mso-width-percent:1000;height:80px; v-text-anchor:middle;">
 | 
			
		||||
                                <v:fill type="tile"
 | 
			
		||||
                                        src="{{base_url}}{% static 'datacenterlight/img/dcl-email-bg.jpg' %}"
 | 
			
		||||
                                        color="#ffffff"/>
 | 
			
		||||
                                <v:textbox inset="0,0,0,0">
 | 
			
		||||
                            <![endif]-->
 | 
			
		||||
                            <center style="font-family: 'Lato', 'sans-serif' !important;">
 | 
			
		||||
                                <table cellpadding="0" cellspacing="0"
 | 
			
		||||
                                       width="600" class="w320"
 | 
			
		||||
                                       style="border-collapse: collapse !important; font-family: 'Lato', 'sans-serif' !important;">
 | 
			
		||||
                                    <tr style="font-family: 'Lato', 'sans-serif' !important;">
 | 
			
		||||
                                        <td class="pull-left mobile-header-padding-left"
 | 
			
		||||
                                            style="vertical-align: middle; border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 290px; padding-left: 0px;"
 | 
			
		||||
                                            align="left" valign="middle">
 | 
			
		||||
                                            <a href="{{base_url}}"
 | 
			
		||||
                                               style="font-family: 'Lato', 'sans-serif' !important; color: #676767; text-decoration: none !important;"><img
 | 
			
		||||
                                                    width="137"
 | 
			
		||||
                                                    src="{{base_url}}{% static 'datacenterlight/img/datacenterlight.png' %}"
 | 
			
		||||
                                                    alt="logo"
 | 
			
		||||
                                                    style="max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; font-family: 'Lato', 'sans-serif' !important; border: none;"></a>
 | 
			
		||||
                                        </td>
 | 
			
		||||
                                        <td class="pull-right mobile-header-padding-right"
 | 
			
		||||
                                            style="color: #4d4d4d; border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 14px; text-align: right; line-height: 21px; width: 290px; padding-left: 10px;"
 | 
			
		||||
                                            align="right">
 | 
			
		||||
                                        </td>
 | 
			
		||||
                                    </tr>
 | 
			
		||||
                                </table>
 | 
			
		||||
                            </center>
 | 
			
		||||
                            <!--[if gte mso 9]>
 | 
			
		||||
                            </v:textbox>
 | 
			
		||||
                            </v:rect>
 | 
			
		||||
                            <![endif]-->
 | 
			
		||||
                        </td>
 | 
			
		||||
                    </tr>
 | 
			
		||||
                </table>
 | 
			
		||||
            </center>
 | 
			
		||||
        </td>
 | 
			
		||||
    </tr>
 | 
			
		||||
    <tr style="font-family: 'Lato', 'sans-serif' !important;">
 | 
			
		||||
        <td align="center" valign="top" width="100%"
 | 
			
		||||
            style="border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff; padding: 20px 0 5px;"
 | 
			
		||||
            class="content-padding" bgcolor="#f7f7f7">
 | 
			
		||||
            <center style="font-family: 'Lato', 'sans-serif' !important;">
 | 
			
		||||
                <table cellspacing="0" cellpadding="0" width="600" class="w320"
 | 
			
		||||
                       style="border-collapse: collapse !important; font-family: 'Lato', 'sans-serif' !important;">
 | 
			
		||||
                    <tr style="font-family: 'Lato', 'sans-serif' !important;">
 | 
			
		||||
                        <td class="header-lg"
 | 
			
		||||
                            style="border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 32px; color: #4d4d4d; text-align: left; line-height: normal; font-weight: 400; padding: 35px 5px 0px;"
 | 
			
		||||
                            align="center">
 | 
			
		||||
                            {% block email_head %}
 | 
			
		||||
                            {% endblock %}
 | 
			
		||||
                        </td>
 | 
			
		||||
                    </tr>
 | 
			
		||||
                    <tr style="font-family: 'Lato', 'sans-serif' !important;">
 | 
			
		||||
                        <td class="free-text"
 | 
			
		||||
                            style="border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 100% !important; padding: 40px 5px 20px;"
 | 
			
		||||
                            align="center">
 | 
			
		||||
                            <p>
 | 
			
		||||
                                {% block email_body %}
 | 
			
		||||
                                {% endblock %}
 | 
			
		||||
                            </p></td>
 | 
			
		||||
                    </tr>
 | 
			
		||||
                    <tr style="font-family: 'Lato', 'sans-serif' !important;">
 | 
			
		||||
                        <td class="button"
 | 
			
		||||
                            style="border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 0;"
 | 
			
		||||
                            align="center"> 
 | 
			
		||||
                        </td>
 | 
			
		||||
                    </tr>
 | 
			
		||||
                </table>
 | 
			
		||||
            </center>
 | 
			
		||||
        </td>
 | 
			
		||||
    </tr>
 | 
			
		||||
    <tr style="font-family: 'Lato', 'sans-serif' !important;">
 | 
			
		||||
        <td align="center" valign="top" width="100%"
 | 
			
		||||
            style="height: 100px; border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff;"
 | 
			
		||||
            bgcolor="#ffffff">
 | 
			
		||||
            <center style="font-family: 'Lato', 'sans-serif' !important;">
 | 
			
		||||
                <table cellspacing="0" cellpadding="0" width="600" class="w320"
 | 
			
		||||
                       style="border-collapse: collapse !important; font-family: 'Lato', 'sans-serif' !important;">
 | 
			
		||||
                    <tr style="font-family: 'Lato', 'sans-serif' !important;">
 | 
			
		||||
                        <td style="border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 14px; font-weight: 600; color: #7293de; padding: 25px 5px 0px;text-align: left; line-height: 21px;;"
 | 
			
		||||
                            align="left">{% trans 'Your Data Center Light Team' %}
 | 
			
		||||
                        </td>
 | 
			
		||||
                    </tr>
 | 
			
		||||
                </table>
 | 
			
		||||
            </center>
 | 
			
		||||
        </td>
 | 
			
		||||
    </tr>
 | 
			
		||||
</table>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +0,0 @@
 | 
			
		|||
{% load static from staticfiles %}
 | 
			
		||||
{% load i18n %}
 | 
			
		||||
{% block email_head %}
 | 
			
		||||
{% endblock %}
 | 
			
		||||
{% block email_body %}
 | 
			
		||||
{% endblock %}
 | 
			
		||||
{% trans 'Your Data Center Light Team' %}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,129 +0,0 @@
 | 
			
		|||
{% load static from staticfiles %}
 | 
			
		||||
{% load i18n%}
 | 
			
		||||
<!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b -->
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
<title>Oxygen Invoice</title>
 | 
			
		||||
</head>
 | 
			
		||||
<body bgcolor="#ffffff" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; color: white; margin: 0;">
 | 
			
		||||
<style type="text/css">
 | 
			
		||||
@media only screen and (max-width: 480px) {
 | 
			
		||||
  table[class*="container-for-gmail-android"] {
 | 
			
		||||
    min-width: 290px !important; width: 100% !important;
 | 
			
		||||
  }
 | 
			
		||||
  img[class="force-width-gmail"] {
 | 
			
		||||
    display: none !important; width: 0 !important; height: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  table[class="w320"] {
 | 
			
		||||
    width: 320px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class*="mobile-header-padding-left"] {
 | 
			
		||||
    width: 160px !important; padding-left: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class*="mobile-header-padding-right"] {
 | 
			
		||||
    width: 160px !important; padding-right: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="header-lg"] {
 | 
			
		||||
    font-size: 24px !important; padding-bottom: 5px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="content-padding"] {
 | 
			
		||||
    padding: 5px 0 5px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="button"] {
 | 
			
		||||
    padding: 5px 5px 30px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class*="free-text"] {
 | 
			
		||||
    padding: 10px 18px 30px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="mobile-hide-img"] {
 | 
			
		||||
    display: none !important; height: 0 !important; width: 0 !important; line-height: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="item"] {
 | 
			
		||||
    width: 140px !important; vertical-align: top !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="quantity"] {
 | 
			
		||||
    width: 50px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="price"] {
 | 
			
		||||
    width: 90px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="item-table"] {
 | 
			
		||||
    padding: 30px 20px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="mini-container-left"] {
 | 
			
		||||
    padding: 0 15px 15px !important; display: block !important; width: 290px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="mini-container-right"] {
 | 
			
		||||
    padding: 0 15px 15px !important; display: block !important; width: 290px !important;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
<table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%" style="border-collapse: collapse !important; min-width: 600px; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td align="left" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff url(http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg) repeat-x;" bgcolor="#ffffff">
 | 
			
		||||
      <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
      <table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" background="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; background: transparent;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td width="100%" height="80" valign="top" style="text-align: center; vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; line-height: 21px; background-color: #ffffff" align="center">
 | 
			
		||||
            <!--[if gte mso 9]>
 | 
			
		||||
            <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="mso-width-percent:1000;height:80px; v-text-anchor:middle;">
 | 
			
		||||
              <v:fill type="tile" src="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" color="#ffffff" />
 | 
			
		||||
              <v:textbox inset="0,0,0,0">
 | 
			
		||||
            <![endif]-->
 | 
			
		||||
              <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
                <table cellpadding="0" cellspacing="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="pull-left mobile-header-padding-left" style="vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 290px; padding-left: 0px;" align="left" valign="middle">
 | 
			
		||||
                      <a href="{{base_url}}" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; color: #676767; text-decoration: none !important;"><img width="137" src="{{base_url}}{% static 'datacenterlight/img/datacenterlight.png' %}" alt="logo" style="max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; border: none;"></a>
 | 
			
		||||
                    </td>
 | 
			
		||||
                    <td class="pull-right mobile-header-padding-right" style="color: #4d4d4d; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; text-align: right; line-height: 21px; width: 290px; padding-left: 10px;" align="right">
 | 
			
		||||
                    </td>
 | 
			
		||||
                  </tr></table>
 | 
			
		||||
</center>
 | 
			
		||||
              <!--[if gte mso 9]>
 | 
			
		||||
              </v:textbox>
 | 
			
		||||
            </v:rect>
 | 
			
		||||
            <![endif]-->
 | 
			
		||||
            </td>
 | 
			
		||||
          </tr></table>
 | 
			
		||||
</center>
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td align="center" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff; padding: 20px 0 5px;" class="content-padding" bgcolor="#f7f7f7">
 | 
			
		||||
      <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
        <table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="header-lg" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 32px; color: #4d4d4d; text-align: left; line-height: normal; font-weight: 400; padding: 35px 5px 0px;" align="center">
 | 
			
		||||
              {% trans "Thank you for your request." %}
 | 
			
		||||
            </td>
 | 
			
		||||
          </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="free-text" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 100% !important; padding: 40px 5px 20px;" align="center">
 | 
			
		||||
             <p>{% trans "You are one step away from being our beta tester!" %}  <br/><br/> 
 | 
			
		||||
               {% trans "Currently we are running our tests to make sure everything runs perfectly." %}<br/>
 | 
			
		||||
             {% trans "In the meantime, we would like to ask you a little patience<br/> until our team contacts you with beta access." %}<br/>
 | 
			
		||||
             {% trans "Thank you!" %}           </p></td>
 | 
			
		||||
          </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="button" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 0;" align="center"> </td>
 | 
			
		||||
          </tr>
 | 
			
		||||
</table>
 | 
			
		||||
</center>
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td align="center" valign="top" width="100%" style="height: 100px; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff;" bgcolor="#ffffff">
 | 
			
		||||
      <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
        <table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: 600; color: #7293de; padding: 25px 5px 0px;text-align: left; line-height: 21px;;" align="left">Your data center light team<br style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
</td>
 | 
			
		||||
          </tr></table>
 | 
			
		||||
</center>
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
</table>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,129 +0,0 @@
 | 
			
		|||
{% load static from staticfiles %}
 | 
			
		||||
{% load i18n%}
 | 
			
		||||
<!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b -->
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
<title>Oxygen Invoice</title>
 | 
			
		||||
</head>
 | 
			
		||||
<body bgcolor="#ffffff" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; color: white; margin: 0;">
 | 
			
		||||
<style type="text/css">
 | 
			
		||||
@media only screen and (max-width: 480px) {
 | 
			
		||||
  table[class*="container-for-gmail-android"] {
 | 
			
		||||
    min-width: 290px !important; width: 100% !important;
 | 
			
		||||
  }
 | 
			
		||||
  img[class="force-width-gmail"] {
 | 
			
		||||
    display: none !important; width: 0 !important; height: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  table[class="w320"] {
 | 
			
		||||
    width: 320px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class*="mobile-header-padding-left"] {
 | 
			
		||||
    width: 160px !important; padding-left: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class*="mobile-header-padding-right"] {
 | 
			
		||||
    width: 160px !important; padding-right: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="header-lg"] {
 | 
			
		||||
    font-size: 24px !important; padding-bottom: 5px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="content-padding"] {
 | 
			
		||||
    padding: 5px 0 5px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="button"] {
 | 
			
		||||
    padding: 5px 5px 30px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class*="free-text"] {
 | 
			
		||||
    padding: 10px 18px 30px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="mobile-hide-img"] {
 | 
			
		||||
    display: none !important; height: 0 !important; width: 0 !important; line-height: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="item"] {
 | 
			
		||||
    width: 140px !important; vertical-align: top !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="quantity"] {
 | 
			
		||||
    width: 50px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="price"] {
 | 
			
		||||
    width: 90px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="item-table"] {
 | 
			
		||||
    padding: 30px 20px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="mini-container-left"] {
 | 
			
		||||
    padding: 0 15px 15px !important; display: block !important; width: 290px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="mini-container-right"] {
 | 
			
		||||
    padding: 0 15px 15px !important; display: block !important; width: 290px !important;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
<table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%" style="border-collapse: collapse !important; min-width: 600px; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td align="left" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff url(http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg) repeat-x;" bgcolor="#ffffff">
 | 
			
		||||
      <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
      <table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" background="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; background: transparent;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td width="100%" height="80" valign="top" style="text-align: center; vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; line-height: 21px; background-color: #ffffff" align="center">
 | 
			
		||||
            <!--[if gte mso 9]>
 | 
			
		||||
            <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="mso-width-percent:1000;height:80px; v-text-anchor:middle;">
 | 
			
		||||
              <v:fill type="tile" src="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" color="#ffffff" />
 | 
			
		||||
              <v:textbox inset="0,0,0,0">
 | 
			
		||||
            <![endif]-->
 | 
			
		||||
              <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
                <table cellpadding="0" cellspacing="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="pull-left mobile-header-padding-left" style="vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 290px; padding-left: 10px;" align="left" valign="middle">
 | 
			
		||||
                      <a href="{{base_url}}" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; color: #676767; text-decoration: none !important;"><img width="137" src="{{base_url}}{% static 'datacenterlight/img/datacenterlight.png' %}" alt="logo" style="max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; border: none;"></a>
 | 
			
		||||
                    </td>
 | 
			
		||||
                    <td class="pull-right mobile-header-padding-right" style="color: #4d4d4d; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; text-align: right; line-height: 21px; width: 290px; padding-left: 10px;" align="right">
 | 
			
		||||
                    </td>
 | 
			
		||||
                  </tr></table>
 | 
			
		||||
</center>
 | 
			
		||||
              <!--[if gte mso 9]>
 | 
			
		||||
              </v:textbox>
 | 
			
		||||
            </v:rect>
 | 
			
		||||
            <![endif]-->
 | 
			
		||||
            </td>
 | 
			
		||||
          </tr></table>
 | 
			
		||||
</center>
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td align="center" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff; padding: 20px 0 5px;" class="content-padding" bgcolor="#f7f7f7">
 | 
			
		||||
      <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
        <table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="header-lg" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 32px; color: #4d4d4d; text-align: left; line-height: normal; font-weight: 400; padding: 35px 5 0;" align="center">
 | 
			
		||||
              {% trans "Thank you for your request." %}
 | 
			
		||||
            </td>
 | 
			
		||||
          </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="free-text" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 100% !important; padding: 40px 7px 20px;" align="center">
 | 
			
		||||
             <p>{% trans "You are one step away from being our beta tester!" %}  <br/><br/> 
 | 
			
		||||
               {% trans "Currently we are running our tests to make sure everything runs perfectly." %}<br/>
 | 
			
		||||
             {% trans "In the meantime, we would like to ask you a little patience<br/> until our team contacts you with beta access." %}<br/>
 | 
			
		||||
             {% trans "Thank you!" %}           </p></td>
 | 
			
		||||
          </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="button" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 0;" align="center"> </td>
 | 
			
		||||
          </tr>
 | 
			
		||||
</table>
 | 
			
		||||
</center>
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td align="center" valign="top" width="100%" style="height: 100px; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff;" bgcolor="#ffffff">
 | 
			
		||||
      <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
        <table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: 600; color: #7293de; padding: 25px 9px 0px;text-align: left; line-height: 21px;;" align="left">Your data center light team<br style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
</td>
 | 
			
		||||
          </tr></table>
 | 
			
		||||
</center>
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
</table>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,125 +0,0 @@
 | 
			
		|||
{% load static from staticfiles %}
 | 
			
		||||
<!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b -->
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
<title>Oxygen Invoice</title>
 | 
			
		||||
</head>
 | 
			
		||||
<body bgcolor="#ffffff" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; color: white; margin: 0;">
 | 
			
		||||
<style type="text/css">
 | 
			
		||||
@media only screen and (max-width: 480px) {
 | 
			
		||||
  table[class*="container-for-gmail-android"] {
 | 
			
		||||
    min-width: 290px !important; width: 100% !important;
 | 
			
		||||
  }
 | 
			
		||||
  img[class="force-width-gmail"] {
 | 
			
		||||
    display: none !important; width: 0 !important; height: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  table[class="w320"] {
 | 
			
		||||
    width: 320px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class*="mobile-header-padding-left"] {
 | 
			
		||||
    width: 160px !important; padding-left: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class*="mobile-header-padding-right"] {
 | 
			
		||||
    width: 160px !important; padding-right: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="header-lg"] {
 | 
			
		||||
    font-size: 24px !important; padding-bottom: 5px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="content-padding"] {
 | 
			
		||||
    padding: 5px 0 5px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="button"] {
 | 
			
		||||
    padding: 5px 5px 30px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class*="free-text"] {
 | 
			
		||||
    padding: 10px 18px 30px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="mobile-hide-img"] {
 | 
			
		||||
    display: none !important; height: 0 !important; width: 0 !important; line-height: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="item"] {
 | 
			
		||||
    width: 140px !important; vertical-align: top !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="quantity"] {
 | 
			
		||||
    width: 50px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="price"] {
 | 
			
		||||
    width: 90px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="item-table"] {
 | 
			
		||||
    padding: 30px 20px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="mini-container-left"] {
 | 
			
		||||
    padding: 0 15px 15px !important; display: block !important; width: 290px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="mini-container-right"] {
 | 
			
		||||
    padding: 0 15px 15px !important; display: block !important; width: 290px !important;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
<table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%" style="border-collapse: collapse !important; min-width: 600px; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td align="left" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff url(http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg) repeat-x;" bgcolor="#ffffff">
 | 
			
		||||
      <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
      <table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" background="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; background: transparent;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td width="100%" height="80" valign="top" style="text-align: center; vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; line-height: 21px; background-color: #ffffff" align="center">
 | 
			
		||||
            <!--[if gte mso 9]>
 | 
			
		||||
            <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="mso-width-percent:1000;height:80px; v-text-anchor:middle;">
 | 
			
		||||
              <v:fill type="tile" src="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" color="#ffffff" />
 | 
			
		||||
              <v:textbox inset="0,0,0,0">
 | 
			
		||||
            <![endif]-->
 | 
			
		||||
              <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
                <table cellpadding="0" cellspacing="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="pull-left mobile-header-padding-left" style="vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 290px; padding-left: 0px;" align="left" valign="middle">
 | 
			
		||||
                      <a href="{{base_url}}" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; color: #676767; text-decoration: none !important;"><img width="137" src="{{base_url}}{% static 'datacenterlight/img/datacenterlight.png' %}" alt="logo" style="max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; border: none;"></a>
 | 
			
		||||
                    </td>
 | 
			
		||||
                    <td class="pull-right mobile-header-padding-right" style="color: #4d4d4d; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; text-align: right; line-height: 21px; width: 290px; padding-left: 10px;" align="right">
 | 
			
		||||
                    </td>
 | 
			
		||||
                  </tr></table>
 | 
			
		||||
</center>
 | 
			
		||||
              <!--[if gte mso 9]>
 | 
			
		||||
              </v:textbox>
 | 
			
		||||
            </v:rect>
 | 
			
		||||
            <![endif]-->
 | 
			
		||||
            </td>
 | 
			
		||||
          </tr></table>
 | 
			
		||||
</center>
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td align="center" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff; padding: 20px 0 5px;" class="content-padding" bgcolor="#f7f7f7">
 | 
			
		||||
      <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
        <table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="header-lg" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 32px; color: #4d4d4d; text-align: left; line-height: normal; font-weight: 400; padding: 35px 5px 0px;" align="center">
 | 
			
		||||
              An user requested a beta access
 | 
			
		||||
            </td>
 | 
			
		||||
          </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="free-text" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 100% !important; padding: 40px 5px 20px;" align="center">
 | 
			
		||||
             <p>User {{email}} requested beta access         </p></td>
 | 
			
		||||
          </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="button" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 0;" align="center"> </td>
 | 
			
		||||
          </tr>
 | 
			
		||||
</table>
 | 
			
		||||
</center>
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td align="center" valign="top" width="100%" style="height: 100px; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff;" bgcolor="#ffffff">
 | 
			
		||||
      <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
        <table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: 600; color: #7293de; padding: 25px 5px 0px;text-align: left; line-height: 21px;;" align="left">Your data center light team<br style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
</td>
 | 
			
		||||
          </tr></table>
 | 
			
		||||
</center>
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
</table>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,125 +0,0 @@
 | 
			
		|||
{% load static from staticfiles %}
 | 
			
		||||
<!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b -->
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
<title>Oxygen Invoice</title>
 | 
			
		||||
</head>
 | 
			
		||||
<body bgcolor="#ffffff" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; color: white; margin: 0;">
 | 
			
		||||
<style type="text/css">
 | 
			
		||||
@media only screen and (max-width: 480px) {
 | 
			
		||||
  table[class*="container-for-gmail-android"] {
 | 
			
		||||
    min-width: 290px !important; width: 100% !important;
 | 
			
		||||
  }
 | 
			
		||||
  img[class="force-width-gmail"] {
 | 
			
		||||
    display: none !important; width: 0 !important; height: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  table[class="w320"] {
 | 
			
		||||
    width: 320px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class*="mobile-header-padding-left"] {
 | 
			
		||||
    width: 160px !important; padding-left: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class*="mobile-header-padding-right"] {
 | 
			
		||||
    width: 160px !important; padding-right: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="header-lg"] {
 | 
			
		||||
    font-size: 24px !important; padding-bottom: 5px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="content-padding"] {
 | 
			
		||||
    padding: 5px 0 5px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="button"] {
 | 
			
		||||
    padding: 5px 5px 30px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class*="free-text"] {
 | 
			
		||||
    padding: 10px 18px 30px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="mobile-hide-img"] {
 | 
			
		||||
    display: none !important; height: 0 !important; width: 0 !important; line-height: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="item"] {
 | 
			
		||||
    width: 140px !important; vertical-align: top !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="quantity"] {
 | 
			
		||||
    width: 50px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="price"] {
 | 
			
		||||
    width: 90px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="item-table"] {
 | 
			
		||||
    padding: 30px 20px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="mini-container-left"] {
 | 
			
		||||
    padding: 0 15px 15px !important; display: block !important; width: 290px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="mini-container-right"] {
 | 
			
		||||
    padding: 0 15px 15px !important; display: block !important; width: 290px !important;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
<table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%" style="border-collapse: collapse !important; min-width: 600px; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td align="left" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff url(http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg) repeat-x;" bgcolor="#ffffff">
 | 
			
		||||
      <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
      <table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" background="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; background: transparent;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td width="100%" height="80" valign="top" style="text-align: center; vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; line-height: 21px; background-color: #ffffff" align="center">
 | 
			
		||||
            <!--[if gte mso 9]>
 | 
			
		||||
            <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="mso-width-percent:1000;height:80px; v-text-anchor:middle;">
 | 
			
		||||
              <v:fill type="tile" src="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" color="#ffffff" />
 | 
			
		||||
              <v:textbox inset="0,0,0,0">
 | 
			
		||||
            <![endif]-->
 | 
			
		||||
              <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
                <table cellpadding="0" cellspacing="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="pull-left mobile-header-padding-left" style="vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 290px; padding-left: 10px;" align="left" valign="middle">
 | 
			
		||||
                      <a href="{{base_url}}" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; color: #676767; text-decoration: none !important;"><img width="137" src="{{base_url}}{% static 'datacenterlight/img/datacenterlight.png' %}" alt="logo" style="max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; border: none;"></a>
 | 
			
		||||
                    </td>
 | 
			
		||||
                    <td class="pull-right mobile-header-padding-right" style="color: #4d4d4d; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; text-align: right; line-height: 21px; width: 290px; padding-left: 10px;" align="right">
 | 
			
		||||
                    </td>
 | 
			
		||||
                  </tr></table>
 | 
			
		||||
</center>
 | 
			
		||||
              <!--[if gte mso 9]>
 | 
			
		||||
              </v:textbox>
 | 
			
		||||
            </v:rect>
 | 
			
		||||
            <![endif]-->
 | 
			
		||||
            </td>
 | 
			
		||||
          </tr></table>
 | 
			
		||||
</center>
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td align="center" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff; padding: 20px 0 5px;" class="content-padding" bgcolor="#f7f7f7">
 | 
			
		||||
      <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
        <table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="header-lg" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 32px; color: #4d4d4d; text-align: left; line-height: normal; font-weight: 400; padding: 35px 5 0;" align="center">
 | 
			
		||||
              An user requested a beta access
 | 
			
		||||
            </td>
 | 
			
		||||
          </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="free-text" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 100% !important; padding: 40px 7px 20px;" align="center">
 | 
			
		||||
             <p>User {{email}} requested beta access         </p></td>
 | 
			
		||||
          </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="button" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 0;" align="center"> </td>
 | 
			
		||||
          </tr>
 | 
			
		||||
</table>
 | 
			
		||||
</center>
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td align="center" valign="top" width="100%" style="height: 100px; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff;" bgcolor="#ffffff">
 | 
			
		||||
      <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
        <table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: 600; color: #7293de; padding: 25px 9px 0px;text-align: left; line-height: 21px;;" align="left">Your data center light team<br style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
</td>
 | 
			
		||||
          </tr></table>
 | 
			
		||||
</center>
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
</table>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,131 +0,0 @@
 | 
			
		|||
{% load static from staticfiles %}
 | 
			
		||||
<!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b -->
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
<title>Oxygen Invoice</title>
 | 
			
		||||
</head>
 | 
			
		||||
<body bgcolor="#ffffff" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; color: white; margin: 0;">
 | 
			
		||||
<style type="text/css">
 | 
			
		||||
@media only screen and (max-width: 480px) {
 | 
			
		||||
  table[class*="container-for-gmail-android"] {
 | 
			
		||||
    min-width: 290px !important; width: 100% !important;
 | 
			
		||||
  }
 | 
			
		||||
  img[class="force-width-gmail"] {
 | 
			
		||||
    display: none !important; width: 0 !important; height: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  table[class="w320"] {
 | 
			
		||||
    width: 320px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class*="mobile-header-padding-left"] {
 | 
			
		||||
    width: 160px !important; padding-left: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class*="mobile-header-padding-right"] {
 | 
			
		||||
    width: 160px !important; padding-right: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="header-lg"] {
 | 
			
		||||
    font-size: 24px !important; padding-bottom: 5px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="content-padding"] {
 | 
			
		||||
    padding: 5px 0 5px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="button"] {
 | 
			
		||||
    padding: 5px 5px 30px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class*="free-text"] {
 | 
			
		||||
    padding: 10px 18px 30px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="mobile-hide-img"] {
 | 
			
		||||
    display: none !important; height: 0 !important; width: 0 !important; line-height: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="item"] {
 | 
			
		||||
    width: 140px !important; vertical-align: top !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="quantity"] {
 | 
			
		||||
    width: 50px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="price"] {
 | 
			
		||||
    width: 90px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="item-table"] {
 | 
			
		||||
    padding: 30px 20px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="mini-container-left"] {
 | 
			
		||||
    padding: 0 15px 15px !important; display: block !important; width: 290px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="mini-container-right"] {
 | 
			
		||||
    padding: 0 15px 15px !important; display: block !important; width: 290px !important;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
<table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%" style="border-collapse: collapse !important; min-width: 600px; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td align="left" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff url(http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg) repeat-x;" bgcolor="#ffffff">
 | 
			
		||||
      <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
      <table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" background="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; background: transparent;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td width="100%" height="80" valign="top" style="text-align: center; vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; line-height: 21px; background-color: #ffffff" align="center">
 | 
			
		||||
            <!--[if gte mso 9]>
 | 
			
		||||
            <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="mso-width-percent:1000;height:80px; v-text-anchor:middle;">
 | 
			
		||||
              <v:fill type="tile" src="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" color="#ffffff" />
 | 
			
		||||
              <v:textbox inset="0,0,0,0">
 | 
			
		||||
            <![endif]-->
 | 
			
		||||
              <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
                <table cellpadding="0" cellspacing="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="pull-left mobile-header-padding-left" style="vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 290px; padding-left: 0px;" align="left" valign="middle">
 | 
			
		||||
                      <a href="{{base_url}}" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; color: #676767; text-decoration: none !important;"><img width="137" src="{{base_url}}{% static 'datacenterlight/img/datacenterlight.png' %}" alt="logo" style="max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; border: none;"></a>
 | 
			
		||||
                    </td>
 | 
			
		||||
                    <td class="pull-right mobile-header-padding-right" style="color: #4d4d4d; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; text-align: right; line-height: 21px; width: 290px; padding-left: 10px;" align="right">
 | 
			
		||||
                    </td>
 | 
			
		||||
                  </tr></table>
 | 
			
		||||
</center>
 | 
			
		||||
              <!--[if gte mso 9]>
 | 
			
		||||
              </v:textbox>
 | 
			
		||||
            </v:rect>
 | 
			
		||||
            <![endif]-->
 | 
			
		||||
            </td>
 | 
			
		||||
          </tr></table>
 | 
			
		||||
</center>
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td align="center" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff; padding: 20px 0 5px;" class="content-padding" bgcolor="#f7f7f7">
 | 
			
		||||
      <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
        <table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="header-lg" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 32px; color: #4d4d4d; text-align: left; line-height: normal; font-weight: 400; padding: 35px 5px 0px;" align="center">
 | 
			
		||||
              An user requested a beta access
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            </td>
 | 
			
		||||
          </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="free-text" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 100% !important; padding: 40px 5px 20px;" align="center">
 | 
			
		||||
             <p>User {{email}} requested beta access         </p>
 | 
			
		||||
             {% for vm in vms %}
 | 
			
		||||
                Type: {{vm.type}} - Amount: {{vm.amount}}
 | 
			
		||||
             {% endfor %}
 | 
			
		||||
             </td>
 | 
			
		||||
          </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="button" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 0;" align="center"> </td>
 | 
			
		||||
          </tr>
 | 
			
		||||
</table>
 | 
			
		||||
</center>
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td align="center" valign="top" width="100%" style="height: 100px; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff;" bgcolor="#ffffff">
 | 
			
		||||
      <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
        <table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: 600; color: #7293de; padding: 25px 5px 0px;text-align: left; line-height: 21px;;" align="left">Your data center light team<br style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
</td>
 | 
			
		||||
          </tr></table>
 | 
			
		||||
</center>
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
</table>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,131 +0,0 @@
 | 
			
		|||
{% load static from staticfiles %}
 | 
			
		||||
<!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b -->
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
<title>Oxygen Invoice</title>
 | 
			
		||||
</head>
 | 
			
		||||
<body bgcolor="#ffffff" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; color: white; margin: 0;">
 | 
			
		||||
<style type="text/css">
 | 
			
		||||
@media only screen and (max-width: 480px) {
 | 
			
		||||
  table[class*="container-for-gmail-android"] {
 | 
			
		||||
    min-width: 290px !important; width: 100% !important;
 | 
			
		||||
  }
 | 
			
		||||
  img[class="force-width-gmail"] {
 | 
			
		||||
    display: none !important; width: 0 !important; height: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  table[class="w320"] {
 | 
			
		||||
    width: 320px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class*="mobile-header-padding-left"] {
 | 
			
		||||
    width: 160px !important; padding-left: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class*="mobile-header-padding-right"] {
 | 
			
		||||
    width: 160px !important; padding-right: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="header-lg"] {
 | 
			
		||||
    font-size: 24px !important; padding-bottom: 5px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="content-padding"] {
 | 
			
		||||
    padding: 5px 0 5px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="button"] {
 | 
			
		||||
    padding: 5px 5px 30px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class*="free-text"] {
 | 
			
		||||
    padding: 10px 18px 30px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="mobile-hide-img"] {
 | 
			
		||||
    display: none !important; height: 0 !important; width: 0 !important; line-height: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="item"] {
 | 
			
		||||
    width: 140px !important; vertical-align: top !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="quantity"] {
 | 
			
		||||
    width: 50px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class~="price"] {
 | 
			
		||||
    width: 90px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="item-table"] {
 | 
			
		||||
    padding: 30px 20px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="mini-container-left"] {
 | 
			
		||||
    padding: 0 15px 15px !important; display: block !important; width: 290px !important;
 | 
			
		||||
  }
 | 
			
		||||
  td[class="mini-container-right"] {
 | 
			
		||||
    padding: 0 15px 15px !important; display: block !important; width: 290px !important;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
<table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%" style="border-collapse: collapse !important; min-width: 600px; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td align="left" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff url(http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg) repeat-x;" bgcolor="#ffffff">
 | 
			
		||||
      <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
      <table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" background="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; background: transparent;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td width="100%" height="80" valign="top" style="text-align: center; vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; line-height: 21px; background-color: #ffffff" align="center">
 | 
			
		||||
            <!--[if gte mso 9]>
 | 
			
		||||
            <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="mso-width-percent:1000;height:80px; v-text-anchor:middle;">
 | 
			
		||||
              <v:fill type="tile" src="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" color="#ffffff" />
 | 
			
		||||
              <v:textbox inset="0,0,0,0">
 | 
			
		||||
            <![endif]-->
 | 
			
		||||
              <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
                <table cellpadding="0" cellspacing="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="pull-left mobile-header-padding-left" style="vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 290px; padding-left: 10px;" align="left" valign="middle">
 | 
			
		||||
                      <a href="{{base_url}}" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; color: #676767; text-decoration: none !important;"><img width="137" src="{{base_url}}{% static 'datacenterlight/img/datacenterlight.png' %}" alt="logo" style="max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; border: none;"></a>
 | 
			
		||||
                    </td>
 | 
			
		||||
                    <td class="pull-right mobile-header-padding-right" style="color: #4d4d4d; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; text-align: right; line-height: 21px; width: 290px; padding-left: 10px;" align="right">
 | 
			
		||||
                    </td>
 | 
			
		||||
                  </tr></table>
 | 
			
		||||
</center>
 | 
			
		||||
              <!--[if gte mso 9]>
 | 
			
		||||
              </v:textbox>
 | 
			
		||||
            </v:rect>
 | 
			
		||||
            <![endif]-->
 | 
			
		||||
            </td>
 | 
			
		||||
          </tr></table>
 | 
			
		||||
</center>
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td align="center" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff; padding: 20px 0 5px;" class="content-padding" bgcolor="#f7f7f7">
 | 
			
		||||
      <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
        <table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="header-lg" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 32px; color: #4d4d4d; text-align: left; line-height: normal; font-weight: 400; padding: 35px 5 0;" align="center">
 | 
			
		||||
              An user requested a beta access
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            </td>
 | 
			
		||||
          </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="free-text" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 100% !important; padding: 40px 7px 20px;" align="center">
 | 
			
		||||
             <p>User {{email}} requested beta access         </p>
 | 
			
		||||
             {% for vm in vms %}
 | 
			
		||||
                Type: {{vm.type}}
 | 
			
		||||
             {% endfor %}
 | 
			
		||||
             </td>
 | 
			
		||||
          </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td class="button" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 0;" align="center"> </td>
 | 
			
		||||
          </tr>
 | 
			
		||||
</table>
 | 
			
		||||
</center>
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td align="center" valign="top" width="100%" style="height: 100px; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff;" bgcolor="#ffffff">
 | 
			
		||||
      <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
        <table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
<td style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: 600; color: #7293de; padding: 25px 9px 0px;text-align: left; line-height: 21px;;" align="left">Your data center light team<br style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
 | 
			
		||||
</td>
 | 
			
		||||
          </tr></table>
 | 
			
		||||
</center>
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
</table>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -14,7 +14,7 @@
 | 
			
		|||
    <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;">
 | 
			
		||||
                <img src="{{ base_url }}{% static 'datacenterlight/img/datacenterlight.png' %}" style="max-width: 200px;">
 | 
			
		||||
            </td>
 | 
			
		||||
        </tr>
 | 
			
		||||
        <tr>
 | 
			
		||||
| 
						 | 
				
			
			@ -33,18 +33,19 @@
 | 
			
		|||
                <p style="color: #4382c8; line-height: 1.4; font-family: Lato, Arial, sans-serif; font-weight: 300; margin: 0;">
 | 
			
		||||
                    {{base_url}}{{activation_link}}
 | 
			
		||||
                </p>
 | 
			
		||||
                <p>
 | 
			
		||||
                    {% if account_details %}
 | 
			
		||||
                        {% url 'hosting:reset_password' as reset_password_url %}
 | 
			
		||||
                        <p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin-bottom: 10px; margin-top: 10px;">
 | 
			
		||||
                        {% trans "Your account details are as follows" %}:
 | 
			
		||||
 | 
			
		||||
                        {% trans "Username" %} : {% trans "Your email address" %}
 | 
			
		||||
                        {% trans "Password" %} : {{account_details}}
 | 
			
		||||
 | 
			
		||||
                        {% trans "You can reset your password here" %}:
 | 
			
		||||
                        {{base_url}}{{reset_password_url}}
 | 
			
		||||
                    {% endif %}
 | 
			
		||||
                        </p>
 | 
			
		||||
                        <p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin-bottom: 10px; margin-top: 0;">
 | 
			
		||||
                        {% trans "Username" %} : {% trans "Your email address" %}<br/>
 | 
			
		||||
                        {% trans "Password" %} : {{account_details}}
 | 
			
		||||
                        </p>
 | 
			
		||||
                        <p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin-bottom: 0; margin-top: 0;">
 | 
			
		||||
                            {% blocktrans %}You can reset your password <a href="{{base_url}}{{reset_password_url}}" style="text-decoration: none; color: #4382c8; font-weight: 400;">here</a>.{% endblocktrans %}
 | 
			
		||||
                        </p>
 | 
			
		||||
                    {% endif %}
 | 
			
		||||
            </td>
 | 
			
		||||
        </tr>
 | 
			
		||||
        <tr>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,7 +14,7 @@
 | 
			
		|||
    <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;">
 | 
			
		||||
                <img src="{{ base_url }}{% static 'datacenterlight/img/datacenterlight.png' %}" style="max-width: 200px;">
 | 
			
		||||
            </td>
 | 
			
		||||
        </tr>
 | 
			
		||||
        <tr>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,14 +1,32 @@
 | 
			
		|||
{% load staticfiles i18n%}
 | 
			
		||||
<form id="order_form" method="POST" action="" data-toggle="validator" role="form">
 | 
			
		||||
 | 
			
		||||
{% if vm_pricing %}
 | 
			
		||||
    <script type="application/javascript">
 | 
			
		||||
        window.vat_inclusive = {% if vm_pricing.vat_inclusive %}true{% else %}false{% endif%};
 | 
			
		||||
        window.vat_percentage = {{vm_pricing.vat_percentage|default:0}};
 | 
			
		||||
        window.coresUnitPrice = {{vm_pricing.cores_unit_price|default:0}};
 | 
			
		||||
        window.ramUnitPrice = {{vm_pricing.ram_unit_price|default:0}};
 | 
			
		||||
        window.ssdUnitPrice = {{vm_pricing.ssd_unit_price|default:0}};
 | 
			
		||||
        window.hddUnitPrice = {{vm_pricing.hdd_unit_price|default:0}};
 | 
			
		||||
        window.discountAmount = {{vm_pricing.discount_amount|default:0}};
 | 
			
		||||
    </script>
 | 
			
		||||
{% endif %}
 | 
			
		||||
 | 
			
		||||
<form id="order_form" method="POST" action="{{calculator_form_url}}" data-toggle="validator" role="form">
 | 
			
		||||
    {% csrf_token %}
 | 
			
		||||
    <div class="title">
 | 
			
		||||
        <h3>{% trans "VM hosting" %} </h3>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="price">
 | 
			
		||||
        <span id="total">15</span>
 | 
			
		||||
        <span id="total"></span>
 | 
			
		||||
        <span>CHF/{% trans "month" %}</span>
 | 
			
		||||
        <div class="price-text">
 | 
			
		||||
            <p>{% trans "VAT included" %}</p>
 | 
			
		||||
            <p>
 | 
			
		||||
                {% if vm_pricing.vat_inclusive %}{% trans "VAT included" %} <br>{% endif %}
 | 
			
		||||
                {% if vm_pricing.discount_amount %}
 | 
			
		||||
                    {% trans "You save" %} {{ vm_pricing.discount_amount }} CHF
 | 
			
		||||
                {% endif %}
 | 
			
		||||
            </p>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="descriptions">
 | 
			
		||||
| 
						 | 
				
			
			@ -36,8 +54,8 @@
 | 
			
		|||
        <div class="form-group">
 | 
			
		||||
            <div class="description input">
 | 
			
		||||
                <i class="fa fa-minus-circle left" data-minus="ram" aria-hidden="true"></i>
 | 
			
		||||
                <input id="ramValue" class="input-price select-number" type="number" min="2" max="200" name="ram"
 | 
			
		||||
                       data-error="{% trans 'Please enter a value in range 2 - 200.' %}" required>
 | 
			
		||||
                <input id="ramValue" class="input-price select-number" type="number" min="1" max="200" name="ram"
 | 
			
		||||
                       data-error="{% trans 'Please enter a value in range 1 - 200.' %}" required>
 | 
			
		||||
                <span> GB RAM</span>
 | 
			
		||||
                <i class="fa fa-plus-circle right" data-plus="ram" aria-hidden="true"></i>
 | 
			
		||||
            </div>
 | 
			
		||||
| 
						 | 
				
			
			@ -71,15 +89,13 @@
 | 
			
		|||
        </div>
 | 
			
		||||
        <div class="description select-configuration input form-group justify-center">
 | 
			
		||||
            <label for="config">OS</label>
 | 
			
		||||
            <select name="config" id="">
 | 
			
		||||
            <select name="config">
 | 
			
		||||
                {% for template in templates %}
 | 
			
		||||
                <option value="{{template.opennebula_vm_template_id}}">{{template.name}}</option>
 | 
			
		||||
                {% endfor %}
 | 
			
		||||
            </select>
 | 
			
		||||
        </div>
 | 
			
		||||
        <!--<div class="description check-ip">
 | 
			
		||||
            <input type="checkbox" name="ipv6"> Ipv6 Only<br>
 | 
			
		||||
        </div>-->
 | 
			
		||||
    </div>
 | 
			
		||||
    <input type="hidden" name="pricing_name" value="{% if vm_pricing.name %}{{vm_pricing.name}}{% else %}unknown{% endif%}"></input>
 | 
			
		||||
    <input type="submit" class="btn btn-primary disabled" value="{% trans 'Continue' %}"></input>
 | 
			
		||||
</form>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,39 +1,21 @@
 | 
			
		|||
{% load staticfiles i18n%}
 | 
			
		||||
{% get_current_language as LANGUAGE_CODE %}
 | 
			
		||||
{% load i18n %}
 | 
			
		||||
 | 
			
		||||
<footer>
 | 
			
		||||
    <div class="container">
 | 
			
		||||
        <ul class="list-inline">
 | 
			
		||||
            {% if request.resolver_match.url_name != "index" %}
 | 
			
		||||
            <li>
 | 
			
		||||
                   <a href="{% url 'datacenterlight:index' %}">{% trans "Home" %}</a>
 | 
			
		||||
               <a class="url-init" href="https://{{MULTISITE_CMS_FALLBACK}}">{% trans "Home" %}</a>
 | 
			
		||||
            </li>
 | 
			
		||||
            <li class="footer-menu-divider">⋅</li>
 | 
			
		||||
            {% endif %}
 | 
			
		||||
            <li>
 | 
			
		||||
                <a class="url-init" href="{% url 'datacenterlight:index' %}#how">{% trans "Highlights" %}</a>
 | 
			
		||||
            </li>
 | 
			
		||||
            <li>
 | 
			
		||||
                <a class="url-init" href="{% url 'datacenterlight:index' %}#your">{% trans "Scale out" %}</a>
 | 
			
		||||
            </li>
 | 
			
		||||
           <li>
 | 
			
		||||
                <a class="url-init" href="{% url 'datacenterlight:index' %}#our">{% trans "Reliable and light" %}</a>
 | 
			
		||||
            </li>
 | 
			
		||||
            {% if request.resolver_match.url_name != "index" %}
 | 
			
		||||
                <li>
 | 
			
		||||
                    <a class="url-init" href="{% url 'datacenterlight:index' %}#price">{% trans "Pricing" %}</a>
 | 
			
		||||
                <a class="url-init" href="https://{{MULTISITE_CMS_FALLBACK}}#contact">{% trans "Contact" %}</a>
 | 
			
		||||
            </li>
 | 
			
		||||
            <li class="footer-menu-divider">⋅</li>
 | 
			
		||||
            {% else %}
 | 
			
		||||
            <li>
 | 
			
		||||
                    <a class="url-init" href="{% url 'datacenterlight:index' %}#price">{% trans "Order VM" %}</a>
 | 
			
		||||
                </li>
 | 
			
		||||
            {% endif %}
 | 
			
		||||
            <li>
 | 
			
		||||
                <a class="url-init" href="{% url 'datacenterlight:index' %}#contact">{% trans "Contact" %}</a>
 | 
			
		||||
                <a class="url-init" href="https://{{MULTISITE_CMS_FALLBACK}}/cms/terms-of-service">{% trans "Terms of Service" %}</a>
 | 
			
		||||
            </li>
 | 
			
		||||
        </ul>
 | 
			
		||||
 | 
			
		||||
        <p class="copyright text-muted small">Copyright © ungleich GmbH {% now "Y" %}. {% trans "All Rights Reserved" %}</p>
 | 
			
		||||
        <p class="copyright text-muted small">Copyright © ungleich glarus ag {% now "Y" %}. {% trans "All Rights Reserved" %}</p>
 | 
			
		||||
    </div>
 | 
			
		||||
</footer>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,7 @@
 | 
			
		|||
{% load staticfiles i18n%}
 | 
			
		||||
{% load custom_tags %}
 | 
			
		||||
{% load staticfiles i18n custom_tags %}
 | 
			
		||||
{% get_current_language as LANGUAGE_CODE %}
 | 
			
		||||
<nav class="navbar navbar-default navbar-fixed-top topnav">
 | 
			
		||||
    <div class="topnav">
 | 
			
		||||
 | 
			
		||||
<nav class="navbar navbar-default navbar-fixed-top topnav navbar-transparent">
 | 
			
		||||
    <!-- Brand and toggle get grouped for better mobile display -->
 | 
			
		||||
    <div class="navbar-header">
 | 
			
		||||
        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
 | 
			
		||||
| 
						 | 
				
			
			@ -17,19 +16,8 @@
 | 
			
		|||
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
 | 
			
		||||
        <!-- Start Navbar collapse-->
 | 
			
		||||
        <ul class="nav navbar-nav navbar-right">
 | 
			
		||||
                <li class="dropdown highlights-dropdown">
 | 
			
		||||
                    <a class="dropdown-toggle url-init" href="{% url 'datacenterlight:index' %}#how" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{% trans "Highlights" %} <span class="caret"></span></a>
 | 
			
		||||
                    <ul class="dropdown-menu ">
 | 
			
		||||
                        <li><a class="url-init" href="{% url 'datacenterlight:index' %}#your">{% trans "Scale out" %}</a></li>
 | 
			
		||||
                        <li><a class="url-init" href="{% url 'datacenterlight:index' %}#our">{% trans "Reliable and light" %}</a></li>
 | 
			
		||||
                        <li> <a class="url-init" href="{% url 'datacenterlight:index' %}#price">{% trans "Order VM" %}</a></li>
 | 
			
		||||
                    </ul>
 | 
			
		||||
                </li>
 | 
			
		||||
            <li>
 | 
			
		||||
                    <a href="{% url 'datacenterlight:whydatacenterlight' %}">{% trans "Why Data Center Light?" %}</a>
 | 
			
		||||
                </li>
 | 
			
		||||
                <li>
 | 
			
		||||
                    <a class="url-init" href="{% url 'datacenterlight:index' %}#contact">{% trans "Contact" %}</a>
 | 
			
		||||
                <a class="url-init" href="https://datacenterlight.ch/en-us/cms/datacenterlight/#contact">{% trans "Contact" %}</a>
 | 
			
		||||
            </li>
 | 
			
		||||
            <li>
 | 
			
		||||
                {% if LANGUAGE_CODE == 'en-us'%}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,10 +6,6 @@
 | 
			
		|||
    <!-- Header -->
 | 
			
		||||
    <div class="intro-header" id="home">
 | 
			
		||||
        <div class="container">
 | 
			
		||||
 | 
			
		||||
            <div class="row">
 | 
			
		||||
                <div class="col-lg-12">
 | 
			
		||||
 | 
			
		||||
            <div class="intro-message">
 | 
			
		||||
              <h1>Data Center Light</h1>
 | 
			
		||||
                <h3>{% trans "Finally, an affordable VM hosting in Switzerland!" %}</h3>
 | 
			
		||||
| 
						 | 
				
			
			@ -25,22 +21,16 @@
 | 
			
		|||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
        </div>
 | 
			
		||||
        <!-- /.container -->
 | 
			
		||||
 | 
			
		||||
    </div>
 | 
			
		||||
    <!-- /.intro-header -->
 | 
			
		||||
 | 
			
		||||
    <!-- Page Content -->
 | 
			
		||||
    <div class="split-section right" id="how">
 | 
			
		||||
 | 
			
		||||
        <div class="container">
 | 
			
		||||
            <div class="row">
 | 
			
		||||
                <div class="col-xs-12 col-sm-6 col-md-6 icon-section">
 | 
			
		||||
                <div class="col-sm-6 icon-section">
 | 
			
		||||
                    <i class="fa fa-cogs" aria-hidden="true"></i>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="col-xs-12 col-sm-6 col-md-6">
 | 
			
		||||
                <div class="col-sm-6">
 | 
			
		||||
                    <div class="split-text">
 | 
			
		||||
                        <div class="split-title">
 | 
			
		||||
                            <h2>{% trans "Highlights" %}</h2>
 | 
			
		||||
| 
						 | 
				
			
			@ -65,91 +55,79 @@
 | 
			
		|||
                                <p class="lead">{% trans "Cuts down the costs for you by using FOSS (Free Open Source Software) exclusively, wherefore we can save money from paying licenses." %}</p>
 | 
			
		||||
                              </li>
 | 
			
		||||
                             </ul>
 | 
			
		||||
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <!-- /.container -->
 | 
			
		||||
        <!-- /.option 1 -->
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="split-section left" id="your">
 | 
			
		||||
 | 
			
		||||
    <div class="split-section left section-gradient" id="your">
 | 
			
		||||
        <div class="container">
 | 
			
		||||
            <div class="row">
 | 
			
		||||
                <div class="col-xs-12 col-sm-6 col-md-6">
 | 
			
		||||
                <div class="col-sm-6">
 | 
			
		||||
                    <div class="split-text">
 | 
			
		||||
                        <div class="split-title">
 | 
			
		||||
                            <h2>{% trans "Scale out" %}</h2>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div class="split-description">
 | 
			
		||||
                            <p class="lead">{% trans "We don't use special hardware. We use commodity hardware: we buy computers that you buy. Just many more and put them in a cozy home for computers called data center." %}</p>
 | 
			
		||||
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="col-xs-12 col-sm-6 col-md-6 icon-section">
 | 
			
		||||
                <div class="col-sm-6 icon-section">
 | 
			
		||||
                    <i class="fa fa-rocket" aria-hidden="true"></i>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <!-- /.container -->
 | 
			
		||||
        <!-- /.option 1 -->
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="split-section right" id="our">
 | 
			
		||||
 | 
			
		||||
    <div class="split-section right" id="our">
 | 
			
		||||
        <div class="container">
 | 
			
		||||
            <div class="row">
 | 
			
		||||
                <div class="col-xs-12 col-sm-6 col-md-6 icon-section">
 | 
			
		||||
                <div class="col-sm-6 icon-section">
 | 
			
		||||
                    <i class="fa fa-handshake-o" aria-hidden="true"></i>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="col-xs-12 col-sm-6 col-md-6">
 | 
			
		||||
                <div class="col-sm-6">
 | 
			
		||||
                    <div class="split-text">
 | 
			
		||||
                        <div class="split-title">
 | 
			
		||||
                            <h2>{% trans "Reliable and light" %}</h2>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div class="split-description">
 | 
			
		||||
                            <p class="lead">{% trans "Our VMs are located in Switzerland, with reliable power supply and fast internet connection. Our VM costs less thanks to our featherlight infrastructure." %}</p>
 | 
			
		||||
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <!-- /.container -->
 | 
			
		||||
        <!-- /.option 1 -->
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <!-- /.content-section-b -->
 | 
			
		||||
    <div class="content-section-a pricing-section" id="price">
 | 
			
		||||
 | 
			
		||||
    <div class="split-section pricing-section section-gradient" id="price">
 | 
			
		||||
        <div class="container">
 | 
			
		||||
        <!-- Page Features -->
 | 
			
		||||
            <div class="row text-center">
 | 
			
		||||
                <div class="col-xs-12 col-md-6 text">
 | 
			
		||||
                    <h2 class="section-heading">{% trans "Simple and affordable: Try our virtual machine with featherlight price." %}</h2>
 | 
			
		||||
                    <p class="lead new-lead">{% blocktrans %}Ready in 30 seconds.<br/>Experience the unbeatable speed from Data Center Light.{% endblocktrans %}</p>
 | 
			
		||||
            <div class="row">
 | 
			
		||||
                <div class="col-md-6">
 | 
			
		||||
                    <div class="split-text">
 | 
			
		||||
                      <div class="split-title">
 | 
			
		||||
                        <h2>{% trans "Simple and affordable: Try our virtual machine with featherlight price." %}</h2>
 | 
			
		||||
                      </div>
 | 
			
		||||
                      <div class="split-description">
 | 
			
		||||
                        <div class="lead">
 | 
			
		||||
                          <p>{% blocktrans %}Ready in 30 seconds.<br/>Experience the unbeatable speed from Data Center Light.{% endblocktrans %}</p>
 | 
			
		||||
                        </div>
 | 
			
		||||
                      </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="col-md-6">
 | 
			
		||||
                    <div class="price-calc-section">
 | 
			
		||||
                        <div class="card">
 | 
			
		||||
                            {% include "datacenterlight/includes/_calculator_form.html" %}
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
 | 
			
		||||
                <div class="col-xs-12 col-md-6 hero-feature">
 | 
			
		||||
                    <div class="price-calc-section no-padding">
 | 
			
		||||
                        <div class="landing card">
 | 
			
		||||
                            <img class="img-beta" src="{% static 'datacenterlight/img/beta-img.png' %}" alt="">
 | 
			
		||||
                            <div class="caption">
 | 
			
		||||
                            {% include "datacenterlight/calculator_form.html" %}
 | 
			
		||||
            </div>
 | 
			
		||||
         </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
         </div>
 | 
			
		||||
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <!-- / contact section -->
 | 
			
		||||
    <div class="full-contact-section">
 | 
			
		||||
        <div class="intro-header-2 contact-section" id="contact">
 | 
			
		||||
            <div class="container">
 | 
			
		||||
| 
						 | 
				
			
			@ -160,18 +138,18 @@
 | 
			
		|||
                        </div>
 | 
			
		||||
                        <div class="contact-details">
 | 
			
		||||
                            <div class="subtitle">
 | 
			
		||||
                                <h3>ungleich GmbH</h3>
 | 
			
		||||
                                <h3>ungleich glarus ag</h3>
 | 
			
		||||
                            </div>
 | 
			
		||||
                            <div class="description">
 | 
			
		||||
                                <p>info@datacenterlight.ch</p>
 | 
			
		||||
                                <p>In der Au 7, Schwanden 8762</p>
 | 
			
		||||
                                <p>Bahnhofstrasse 1, 8783 Linthal</p>
 | 
			
		||||
                                <p>{% trans "Switzerland " %}</p>
 | 
			
		||||
                            </div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div class="social">
 | 
			
		||||
                            <a target="_blank" class="" href="https://twitter.com/datacenterlight"><i class="fa fa-twitter fa-fw"></i></a>
 | 
			
		||||
                            <a target="_blank"  class=""  href="https://github.com/ungleich"><i class="fa fa-github fa-fw"></i></a>
 | 
			
		||||
                            <a target="_blank"  class=""  href="https://www.facebook.com/ungleich.ch/"><i class="fa fa-facebook"></i></a>
 | 
			
		||||
                            <a target="_blank" href="https://twitter.com/datacenterlight"><i class="fa fa-twitter fa-fw"></i></a>
 | 
			
		||||
                            <a target="_blank" href="https://github.com/ungleich"><i class="fa fa-github fa-fw"></i></a>
 | 
			
		||||
                            <a target="_blank" href="https://www.facebook.com/ungleich.ch/"><i class="fa fa-facebook"></i></a>
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div class="col-sm-6">
 | 
			
		||||
| 
						 | 
				
			
			@ -180,10 +158,8 @@
 | 
			
		|||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
    </div>
 | 
			
		||||
    <!-- /.banner -->
 | 
			
		||||
{% endblock %}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
{% extends "hosting/base_short.html" %}
 | 
			
		||||
{% load staticfiles bootstrap3 i18n %}
 | 
			
		||||
{% extends "datacenterlight/base_hosting.html" %}
 | 
			
		||||
{% 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"/>
 | 
			
		||||
| 
						 | 
				
			
			@ -39,7 +39,7 @@
 | 
			
		|||
                        <p>
 | 
			
		||||
                            {% trans "Don't have an account yet?" %}<br>
 | 
			
		||||
                            {% trans "You can sign up by filling in the information below." %}<br>
 | 
			
		||||
                            <a href="{% url 'hosting:reset_password' %}">{% trans "Forgot password?" %}</a>
 | 
			
		||||
                            <a href="{% url 'hosting:reset_password' %}" target="_blank">{% trans "Forgot password?" %}</a> or <a href="{% url 'hosting:resend_activation_link' %}" target="_blank">{% trans "Resend activation link" %}?</a>
 | 
			
		||||
                        </p>
 | 
			
		||||
                    {% endif %}
 | 
			
		||||
                </div>
 | 
			
		||||
| 
						 | 
				
			
			@ -78,7 +78,24 @@
 | 
			
		|||
                        <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>
 | 
			
		||||
                            <strong>{%trans "Total" %}</strong>  
 | 
			
		||||
                            <small>
 | 
			
		||||
                                ({% if vm_pricing.vat_inclusive %}{%trans "including VAT" %}{% else %}{%trans "excluding VAT" %}{% endif %})
 | 
			
		||||
                            </small>
 | 
			
		||||
                            <strong class="pull-right">{{request.session.specs.price|intcomma}} CHF/{% trans "Month" %}</strong>
 | 
			
		||||
                        </p>
 | 
			
		||||
                        <hr>
 | 
			
		||||
                        {% if vm_pricing.discount_amount %}
 | 
			
		||||
                        <p class="mb-0">
 | 
			
		||||
                            {%trans "Discount" as discount_name %}
 | 
			
		||||
                            <strong>{{ vm_pricing.discount_name|default:discount_name }}</strong>  
 | 
			
		||||
                            <strong class="pull-right text-primary">- {{ vm_pricing.discount_amount }} CHF/{% trans "Month" %}</strong>
 | 
			
		||||
                        </p>
 | 
			
		||||
                        <p>
 | 
			
		||||
                            ({% trans "Will be applied at checkout" %})
 | 
			
		||||
                        </p>
 | 
			
		||||
                        {% endif %}
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,24 +1,166 @@
 | 
			
		|||
{% extends "hosting/order_detail.html" %}
 | 
			
		||||
{% load i18n %}
 | 
			
		||||
{% extends "datacenterlight/base_hosting.html" %}
 | 
			
		||||
{% load staticfiles bootstrap3 i18n custom_tags humanize %}
 | 
			
		||||
 | 
			
		||||
{% block navbar %}
 | 
			
		||||
    {% include "datacenterlight/includes/_navbar.html" %}
 | 
			
		||||
{% endblock navbar %}
 | 
			
		||||
 | 
			
		||||
{% block submit_btn %}
 | 
			
		||||
{% block content %}
 | 
			
		||||
<div id="order-detail{{order.pk}}" class="order-detail-container">
 | 
			
		||||
    {% if messages %}
 | 
			
		||||
        <div class="alert alert-warning">
 | 
			
		||||
            {% for message in messages %}
 | 
			
		||||
                <span>{{ message }}</span>
 | 
			
		||||
            {% endfor %}
 | 
			
		||||
        </div>
 | 
			
		||||
    {% endif %}
 | 
			
		||||
    {% if not error %}
 | 
			
		||||
        <div class="dashboard-container-head">
 | 
			
		||||
            <h1 class="dashboard-title-thin">
 | 
			
		||||
                <img src="{% static 'hosting/img/billing.svg' %}" class="un-icon">{% blocktrans with page_header_text=page_header_text|default:"Invoice" %}{{page_header_text}}{% endblocktrans %}
 | 
			
		||||
            </h1>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="order-details">
 | 
			
		||||
            <p>
 | 
			
		||||
                <strong>{% trans "Date" %}:</strong>
 | 
			
		||||
                <span class="locale_date">
 | 
			
		||||
                    {% now "Y-m-d h:i a" %}
 | 
			
		||||
                </span>
 | 
			
		||||
            </p>
 | 
			
		||||
            <hr>
 | 
			
		||||
            <div>
 | 
			
		||||
                <address>
 | 
			
		||||
                    <h4>{% trans "Billed to" %}:</h4>
 | 
			
		||||
                    <p>
 | 
			
		||||
                      {% with request.session.billing_address_data as billing_address %}
 | 
			
		||||
                          {{billing_address.cardholder_name}}<br>
 | 
			
		||||
                          {{billing_address.street_address}}, {{billing_address.postal_code}}<br>
 | 
			
		||||
                          {{billing_address.city}}, {{billing_address.country}}
 | 
			
		||||
                      {% endwith %}
 | 
			
		||||
                    </p>
 | 
			
		||||
                </address>
 | 
			
		||||
            </div>
 | 
			
		||||
            <hr>
 | 
			
		||||
            <div>
 | 
			
		||||
                <h4>{% trans "Payment method" %}:</h4>
 | 
			
		||||
                <p>
 | 
			
		||||
                    {{cc_brand|default:_('Credit Card')}} {% trans "ending in" %} ****{{cc_last4}}<br>
 | 
			
		||||
                    {{request.user.email}}
 | 
			
		||||
                </p>
 | 
			
		||||
            </div>
 | 
			
		||||
            <hr>
 | 
			
		||||
            <div>
 | 
			
		||||
                <h4>{% trans "Order summary" %}</h4>
 | 
			
		||||
                <p>
 | 
			
		||||
                    <strong>{% trans "Product" %}:</strong> 
 | 
			
		||||
                    {{ request.session.template.name }}
 | 
			
		||||
                </p>
 | 
			
		||||
                <div class="row">
 | 
			
		||||
                    <div class="col-sm-6">
 | 
			
		||||
                        <p>
 | 
			
		||||
                            <span>{% trans "Cores" %}: </span>
 | 
			
		||||
                            <strong class="pull-right">{{vm.cpu|floatformat}}</strong>
 | 
			
		||||
                        </p>
 | 
			
		||||
                        <p>
 | 
			
		||||
                            <span>{% trans "Memory" %}: </span>
 | 
			
		||||
                            <strong class="pull-right">{{vm.memory|intcomma}} GB</strong>
 | 
			
		||||
                        </p>
 | 
			
		||||
                        <p>
 | 
			
		||||
                            <span>{% trans "Disk space" %}: </span>
 | 
			
		||||
                            <strong class="pull-right">{{vm.disk_size|intcomma}} GB</strong>
 | 
			
		||||
                        </p>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div class="col-sm-12">
 | 
			
		||||
                        <hr class="thin-hr">
 | 
			
		||||
                    </div>
 | 
			
		||||
                    {% if vm.vat > 0 or vm.discount.amount > 0 %}
 | 
			
		||||
                        <div class="col-sm-6">
 | 
			
		||||
                            <div class="subtotal-price">
 | 
			
		||||
                                {% if vm.vat > 0 %}
 | 
			
		||||
                                    <p>
 | 
			
		||||
                                        <strong class="text-lg">{% trans "Subtotal" %} </strong>
 | 
			
		||||
                                        <strong class="pull-right">{{vm.price|floatformat:2|intcomma}} CHF</strong>
 | 
			
		||||
                                    </p>
 | 
			
		||||
                                    <p>
 | 
			
		||||
                                        <small>{% trans "VAT" %} ({{ vm.vat_percent|floatformat:2|intcomma }}%) </small>
 | 
			
		||||
                                        <strong class="pull-right">{{vm.vat|floatformat:2|intcomma}} CHF</strong>
 | 
			
		||||
                                    </p>
 | 
			
		||||
                                {% endif %}
 | 
			
		||||
                                {% if vm.discount.amount > 0 %}
 | 
			
		||||
                                    <p class="text-primary">
 | 
			
		||||
                                        {%trans "Discount" as discount_name %}
 | 
			
		||||
                                        <strong>{{ vm.discount.name|default:discount_name }} </strong>
 | 
			
		||||
                                        <strong class="pull-right">- {{ vm.discount.amount }} CHF</strong>
 | 
			
		||||
                                    </p>
 | 
			
		||||
                                {% endif %}
 | 
			
		||||
                            </div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div class="col-sm-12">
 | 
			
		||||
                            <hr class="thin-hr">
 | 
			
		||||
                        </div>
 | 
			
		||||
                    {% endif %}
 | 
			
		||||
                    <div class="col-sm-6">
 | 
			
		||||
                        <p class="total-price">
 | 
			
		||||
                            <strong>{% trans "Total" %} </strong>
 | 
			
		||||
                            <strong class="pull-right">{{vm.total_price|floatformat:2|intcomma}} CHF</strong>
 | 
			
		||||
                        </p>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <hr class="thin-hr">
 | 
			
		||||
        </div>
 | 
			
		||||
        <form id="virtual_machine_create_form" action="" method="POST">
 | 
			
		||||
            {% 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_total_price=vm.total_price|floatformat:2|intcomma %}By clicking "Place order" this plan will charge your credit card account with {{vm_total_price}} 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-toggle="modal" data-target="#createvm-modal">
 | 
			
		||||
                    <button class="btn choice-btn" id="btn-create-vm" data-toggle="modal" data-target="#createvm-modal">
 | 
			
		||||
                      {% trans "Place order" %}
 | 
			
		||||
                    </button>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </form>
 | 
			
		||||
{% endblock submit_btn %}
 | 
			
		||||
    {% endif %}
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- Create VM Modal -->
 | 
			
		||||
<div class="modal fade" id="createvm-modal" tabindex="-1" role="dialog"
 | 
			
		||||
     aria-hidden="true" data-backdrop="static" data-keyboard="false">
 | 
			
		||||
    <div class="modal-dialog">
 | 
			
		||||
        <div class="modal-content">
 | 
			
		||||
            <div class="modal-header">
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="modal-body">
 | 
			
		||||
                <div class="modal-icon">
 | 
			
		||||
                    <i class="fa fa-cog fa-spin fa-3x fa-fw"></i>
 | 
			
		||||
                    <span class="sr-only">{% trans "Processing..." %}</span>
 | 
			
		||||
                </div>
 | 
			
		||||
                <h4 class="modal-title" id="createvm-modal-title"></h4>
 | 
			
		||||
                <div class="modal-text" id="createvm-modal-body">
 | 
			
		||||
                    {% trans "Hold tight, we are processing your request" %}
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="modal-footer">
 | 
			
		||||
                    <a id="createvm-modal-done-btn" class="btn btn-success btn-ok btn-wide hide" href="{% url 'hosting:virtual_machines' %}">{% trans "OK" %}</a>
 | 
			
		||||
                    <button id="createvm-modal-close-btn" type="button" class="btn btn-danger btn-ok btn-wide hide" data-dismiss="modal" aria-label="create-vm-close">{% trans "Close" %}</button>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- / Create VM Modal -->
 | 
			
		||||
 | 
			
		||||
<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_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%}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,32 +0,0 @@
 | 
			
		|||
{% extends "datacenterlight/base.html" %}
 | 
			
		||||
{% load staticfiles i18n %}
 | 
			
		||||
{% block content %}
 | 
			
		||||
 | 
			
		||||
	<div class="intro-pricing success-pricing">
 | 
			
		||||
 | 
			
		||||
		<div class="intro-message">
 | 
			
		||||
			<h2 class="section-heading">{% trans "Thank you for order! Our team will contact you via email" %}</h2>
 | 
			
		||||
			{% if LANGUAGE_CODE == 'en-us'%}
 | 
			
		||||
			<h2 class="section-heading">{% trans "as soon as possible!" %}</h2>
 | 
			
		||||
			{% endif %}
 | 
			
		||||
		</div>
 | 
			
		||||
 | 
			
		||||
	</div>
 | 
			
		||||
 | 
			
		||||
	<script type="text/javascript">
 | 
			
		||||
		  window.onload=function(){
 | 
			
		||||
			$('.selectpicker').selectpicker({
 | 
			
		||||
				 style: 'btn-link',
 | 
			
		||||
				 windowPadding: 10,
 | 
			
		||||
			});
 | 
			
		||||
 | 
			
		||||
			var hash = window.location.hash.substr(1);
 | 
			
		||||
			console.log(hash);
 | 
			
		||||
			if (hash == 'requestform'){
 | 
			
		||||
				$('#reques-success-message').modal('show');
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		   };
 | 
			
		||||
	</script>
 | 
			
		||||
 | 
			
		||||
{% endblock %}
 | 
			
		||||
| 
						 | 
				
			
			@ -3,25 +3,16 @@
 | 
			
		|||
 | 
			
		||||
{% block content %}
 | 
			
		||||
    <!-- Why Data Center Light? -->
 | 
			
		||||
    <div class="full-whydcl-sec">
 | 
			
		||||
        <div class="whydcl-header whydcl-section" id="why_dcl">
 | 
			
		||||
    <div class="dcl-header">
 | 
			
		||||
        <div class="container">
 | 
			
		||||
            <div class="row">
 | 
			
		||||
                <div class="col-sm-12 col-md-12">
 | 
			
		||||
                    <div class="single-heading">
 | 
			
		||||
                        <h2>{% trans "Why Data Center Light?" %}</h2>
 | 
			
		||||
                     </div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
            <h1>{% trans "Why Data Center Light?" %}</h1>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="split-section left" id="tech_stack">
 | 
			
		||||
        <div class="space">
 | 
			
		||||
        <div class="container">
 | 
			
		||||
            <div class="row">
 | 
			
		||||
                <div class="col-xs-12 col-sm-6 col-md-6">
 | 
			
		||||
                    <div class="split-text">
 | 
			
		||||
                <div class="col-sm-6 split-text">
 | 
			
		||||
                    <div class="split-title">
 | 
			
		||||
                        <h2>{% trans "Tech Stack" %}</h2>
 | 
			
		||||
                    </div>
 | 
			
		||||
| 
						 | 
				
			
			@ -30,123 +21,120 @@
 | 
			
		|||
                        <p class="lead">{% blocktrans %} Our full software stack is open source – We don't use anything that isn't open source. <br>Yes, we are that cool. {% endblocktrans %}</p>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="col-sm-6 split-figure">
 | 
			
		||||
                    <div class="section-figure">
 | 
			
		||||
                        <div class="section-image">
 | 
			
		||||
                            <img class="img-responsive" src="{% static 'datacenterlight/img/devuan.png' %}" alt="Devuan">
 | 
			
		||||
                            <div class="section-image-caption">{% trans "Our services run on" %}</div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                <div class="col-xs-12 col-sm-6 col-md-6">
 | 
			
		||||
                    <div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap">
 | 
			
		||||
                        <img class="img-responsive btm-space" src="{% static 'datacenterlight/img/devuan.png' %}" alt="Devuan">
 | 
			
		||||
                        <span class="logo-caption">{% trans "Our services run on" %}</span>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap">
 | 
			
		||||
                        <div class="section-image">
 | 
			
		||||
                            <img class="img-responsive" src="{% static 'datacenterlight/img/prometheus.png' %}" alt="Prometheus">
 | 
			
		||||
                        <span class="logo-caption">{% trans "Our monitoring" %}</span>
 | 
			
		||||
                            <div class="section-image-caption">{% trans "Our monitoring" %}</div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                    <div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap">
 | 
			
		||||
                        <img class="img-responsive btm-space" src="{% static 'datacenterlight/img/Ceph_Logo.png' %}" alt="Ceph">
 | 
			
		||||
                        <span class="logo-caption">{% trans "Our storage layer" %}</span>
 | 
			
		||||
                        <div class="section-image">
 | 
			
		||||
                            <img class="img-responsive" src="{% static 'datacenterlight/img/Ceph_Logo.png' %}" alt="Ceph">
 | 
			
		||||
                            <div class="section-image-caption">{% trans "Our storage layer" %}</div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                    <div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap">
 | 
			
		||||
                        <div class="section-image">
 | 
			
		||||
                            <img class="img-responsive" src="{% static 'datacenterlight/img/django.png' %}" alt="Django">
 | 
			
		||||
                        <span class="logo-caption">{% trans "Our web frontend" %}</span>
 | 
			
		||||
                            <div class="section-image-caption">{% trans "Our web frontend" %}</div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                    <div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap">
 | 
			
		||||
                        <img class="img-responsive btm-space" src="{% static 'datacenterlight/img/opennebula.png' %}" alt="Opennebula">
 | 
			
		||||
                        <span class="logo-caption">{% trans "Our cloud" %}</span>
 | 
			
		||||
                        <div class="section-image">
 | 
			
		||||
                            <img class="img-responsive" src="{% static 'datacenterlight/img/opennebula.png' %}" alt="Opennebula">
 | 
			
		||||
                            <div class="section-image-caption">{% trans "Our cloud" %}</div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                    <div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap">
 | 
			
		||||
                        <div class="section-image">
 | 
			
		||||
                            <img class="img-responsive" src="{% static 'datacenterlight/img/cdistbyungleich.png' %}" alt="Cdist by ungleich">
 | 
			
		||||
                        <span class="logo-caption">{% trans "Our configuration management system" %}</span>
 | 
			
		||||
                            <div class="section-image-caption">{% trans "Our configuration management system" %}</div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                    <div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap">
 | 
			
		||||
                        <div class="section-image">
 | 
			
		||||
                            <img class="img-responsive" src="{% static 'datacenterlight/img/python-logo.png' %}" alt="Python">
 | 
			
		||||
                        <span class="logo-caption">{% trans "Our awesome juice" %}</span>
 | 
			
		||||
                            <div class="section-image-caption">{% trans "Our awesome juice" %}</div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div class="section-image">
 | 
			
		||||
                            <img class="img-responsive" src="{% static 'datacenterlight/img/tayga.png' %}" alt="Tayga">
 | 
			
		||||
                            <div class="section-image-caption">{% trans "Our NAT64 gateway" %}</div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
                    <div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap">
 | 
			
		||||
                        <img class="img-responsive btm-space-tayga" src="{% static 'datacenterlight/img/tayga.png' %}" alt="Tayga">
 | 
			
		||||
                        <span class="logo-caption">{% trans "Our NAT64 gateway" %}</span>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <!-- /.container -->
 | 
			
		||||
        <hr class="thick-divider"/><!-- Divider -->
 | 
			
		||||
        <div class=" space">
 | 
			
		||||
    <div class="split-section right split-section-plain">
 | 
			
		||||
        <div class="container">
 | 
			
		||||
            <div class="row">
 | 
			
		||||
                <div class="col-xs-12 col-sm-4 col-md-5 ">
 | 
			
		||||
                    <div class="col-xs-12 col-sm-12 col-md-6 col-md-6 logo-wrap-1">
 | 
			
		||||
                <div class="col-sm-4 col-md-5 split-figure">
 | 
			
		||||
                    <div class="section-figure">
 | 
			
		||||
                        <div class="section-image">
 | 
			
		||||
                            <img class="img-responsive" src="{% static 'datacenterlight/img/opennebula.png' %}" alt="Opennebula">
 | 
			
		||||
                        </div>
 | 
			
		||||
                    <div class="col-xs-12 col-sm-12 col-md-6 col-md-6 logo-wrap-1">
 | 
			
		||||
                        <div class="section-image">
 | 
			
		||||
                            <img class="img-responsive" src="{% static 'datacenterlight/img/cdistbyungleich.png' %}" alt="Cdist byu ngleich">
 | 
			
		||||
                        </div>
 | 
			
		||||
                    <div class="col-xs-12 col-sm-12 col-md-6 col-md-6 logo-wrap-1">
 | 
			
		||||
                        <div class="section-image">
 | 
			
		||||
                            <img class="img-responsive" src="{% static 'datacenterlight/img/prometheus.png' %}" alt="Prometheus">
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                <div class="col-xs-12 col-sm-8 col-md-7 text-right">
 | 
			
		||||
                        <div class="tech-sub-sec">
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="col-sm-8 col-md-7 split-text">
 | 
			
		||||
                    <div class="split-title-plain">
 | 
			
		||||
                        <h2>{% trans "We believe in giving back to the FOSS community." %}</h2>
 | 
			
		||||
                            <p class="lead new-lead">{% blocktrans %}Data Center Light is the child of free and open source software (FOSS) movement. <br>We grew up with it, live by it, and believe in it.<br> The more we work on our data center,<br> the more we contribute back to the FOSS community.{% endblocktrans %}</p>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div class="split-description">
 | 
			
		||||
                        <p class="lead">{% blocktrans %}Data Center Light is the child of free and open source software (FOSS) movement. <br>We grew up with it, live by it, and believe in it.<br> The more we work on our data center,<br> the more we contribute back to the FOSS community.{% endblocktrans %}</p>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
        <!-- /.container -->
 | 
			
		||||
        <hr class="thick-divider"/><!-- Divider -->
 | 
			
		||||
        <div class="space">
 | 
			
		||||
 | 
			
		||||
    <div class="banner-list">
 | 
			
		||||
        <div class="container">
 | 
			
		||||
            <div class="tech-sub-sec">
 | 
			
		||||
                <h3>{% trans "We bring the future to you." %}</h3>
 | 
			
		||||
            <div class="banner-list-heading">
 | 
			
		||||
                <h2>{% trans "We bring the future to you." %}</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="flex-row flex-row-rev">
 | 
			
		||||
                <div class="percent-text">
 | 
			
		||||
                    100% <strong>IPv6</strong>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="desc-text padding-vertical">
 | 
			
		||||
                    <p class="lead new-lead">{% blocktrans %}Data Center Light uses the most modern technologies out there.<br>Your VM needs only IPv6. Data Center Light provides<br> transparent two-way IPv6/IPv4 translation.{% endblocktrans %}</p>
 | 
			
		||||
                    <p class="lead">{% blocktrans %}Data Center Light uses the most modern technologies out there.<br>Your VM needs only IPv6. Data Center Light provides<br> transparent two-way IPv6/IPv4 translation.{% endblocktrans %}</p>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="flex-row">
 | 
			
		||||
                <div class="percent-text">
 | 
			
		||||
                    <span class="space-middle"> 100% <strong>SSD</strong></span> <span class="ssdimg"><img class="img-responsive" src="{% static 'datacenterlight/img/ssd.jpg' %}" alt="SSD"></span>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="desc-text padding-vertical w380">
 | 
			
		||||
                    <p class="lead new-lead lead-right">{% blocktrans %} No more spinning metal plates! Data Center Light uses only SSDs. We keep things faster and lighter. {% endblocktrans %}</p>
 | 
			
		||||
                <div class="desc-text padding-vertical">
 | 
			
		||||
                    <p class="lead">{% blocktrans %} No more spinning metal plates! Data Center Light uses only SSDs. We keep things faster and lighter. {% endblocktrans %}</p>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
        <!-- /.container -->
 | 
			
		||||
    </div>
 | 
			
		||||
    <!-- /.content-section-b -->
 | 
			
		||||
    <div class="content-section-a pricing-section" id="price">
 | 
			
		||||
 | 
			
		||||
    <div class="split-section section-gradient left" id="price">
 | 
			
		||||
        <div class="container">
 | 
			
		||||
        <!-- Page Features -->
 | 
			
		||||
            <div class="row text-center">
 | 
			
		||||
                <div class="col-xs-12 col-md-6 text">
 | 
			
		||||
                    <h2 class="section-heading">{% trans "Starting from only 15CHF per month. Try now." %}</h2>
 | 
			
		||||
                    <p class="lead new-lead">{% trans "Actions speak louder than words. Let's do it, try our VM now." %}</p>
 | 
			
		||||
            <div class="row">
 | 
			
		||||
                <div class="col-md-6 split-text">
 | 
			
		||||
                    <div class="split-title">
 | 
			
		||||
                        <h2>{% trans "Starting from only 15CHF per month. Try now." %}</h2>
 | 
			
		||||
                    </div>
 | 
			
		||||
 | 
			
		||||
                <div class="col-xs-12 col-md-6 hero-feature">
 | 
			
		||||
                    <div class="price-calc-section no-padding">
 | 
			
		||||
                        <div class="landing card">
 | 
			
		||||
                            <img class="img-beta" src="{% static 'datacenterlight/img/beta-img.png' %}" alt="">
 | 
			
		||||
                            <div class="caption">
 | 
			
		||||
                            {% include "datacenterlight/calculator_form.html" %}
 | 
			
		||||
                    <div class="split-description">
 | 
			
		||||
                        <div class="lead">
 | 
			
		||||
                            <p>{% trans "Actions speak louder than words. Let's do it, try our VM now." %}</p>
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
 | 
			
		||||
                <div class="col-md-6">
 | 
			
		||||
                    <div class="price-calc-section">
 | 
			
		||||
                        <div class="card">
 | 
			
		||||
                            {% include "datacenterlight/includes/_calculator_form.html" %}
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
         </div>
 | 
			
		||||
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <!-- End Why Data Center Light? -->
 | 
			
		||||
{% endblock %}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,4 +41,14 @@ def multiply(value, arg):
 | 
			
		|||
    :param arg:
 | 
			
		||||
    :return:
 | 
			
		||||
    """
 | 
			
		||||
    return value*arg
 | 
			
		||||
    return value * arg
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@register.filter('escaped_line_break')
 | 
			
		||||
def escaped_line_break(value):
 | 
			
		||||
    """
 | 
			
		||||
    usage: {{ text|escaped_line_break }}
 | 
			
		||||
    :param value:
 | 
			
		||||
    :return:
 | 
			
		||||
    """
 | 
			
		||||
    return value.replace("\\n", "\n")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,13 +1,11 @@
 | 
			
		|||
from django.conf.urls import url
 | 
			
		||||
from django.views.generic import TemplateView, RedirectView
 | 
			
		||||
 | 
			
		||||
from .views import (
 | 
			
		||||
    IndexView, BetaProgramView, LandingProgramView, BetaAccessView,
 | 
			
		||||
    SuccessView, PaymentOrderView, OrderConfirmationView,
 | 
			
		||||
    IndexView, PaymentOrderView, OrderConfirmationView,
 | 
			
		||||
    WhyDataCenterLightView, ContactUsView
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
from django.views.generic import TemplateView
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
urlpatterns = [
 | 
			
		||||
    url(r'^$', IndexView.as_view(), name='index'),
 | 
			
		||||
| 
						 | 
				
			
			@ -15,17 +13,14 @@ urlpatterns = [
 | 
			
		|||
    url(r'^g/$', IndexView.as_view(), name='index_g'),
 | 
			
		||||
    url(r'^f/$', IndexView.as_view(), name='index_f'),
 | 
			
		||||
    url(r'^l/$', IndexView.as_view(), name='index_l'),
 | 
			
		||||
    url(r'^new/$', RedirectView.as_view(url='/cms/'),
 | 
			
		||||
        name='cms_index'),
 | 
			
		||||
    url(r'^whydatacenterlight/?$', WhyDataCenterLightView.as_view(),
 | 
			
		||||
        name='whydatacenterlight'),
 | 
			
		||||
    url(r'^beta-program/?$', BetaProgramView.as_view(), name='beta'),
 | 
			
		||||
    url(r'^landing/?$', LandingProgramView.as_view(), name='landing'),
 | 
			
		||||
    url(r'^payment/?$', PaymentOrderView.as_view(), name='payment'),
 | 
			
		||||
    url(r'^order-confirmation/?$', OrderConfirmationView.as_view(),
 | 
			
		||||
        name='order_confirmation'),
 | 
			
		||||
    url(r'^order-success/?$', SuccessView.as_view(), name='order_success'),
 | 
			
		||||
    url(r'^beta_access?$', BetaAccessView.as_view(), name='beta_access'),
 | 
			
		||||
    url(r'^contact/?$', ContactUsView.as_view(), name='contact_us'),
 | 
			
		||||
 | 
			
		||||
    url(r'glasfaser/?$',
 | 
			
		||||
        TemplateView.as_view(template_name='ungleich_page/glasfaser.html'),
 | 
			
		||||
        name='glasfaser'),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										14
									
								
								datacenterlight/utils.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
from django.contrib.sites.models import Site
 | 
			
		||||
 | 
			
		||||
from .cms_models import CMSIntegration
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_cms_integration(name):
 | 
			
		||||
    current_site = Site.objects.get_current()
 | 
			
		||||
    try:
 | 
			
		||||
        cms_integration = CMSIntegration.objects.get(
 | 
			
		||||
            name=name, domain=current_site
 | 
			
		||||
        )
 | 
			
		||||
    except CMSIntegration.DoesNotExist:
 | 
			
		||||
        cms_integration = CMSIntegration.objects.get(name=name, domain=None)
 | 
			
		||||
    return cms_integration
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
import logging
 | 
			
		||||
import json
 | 
			
		||||
import logging
 | 
			
		||||
 | 
			
		||||
from django import forms
 | 
			
		||||
from django.conf import settings
 | 
			
		||||
| 
						 | 
				
			
			@ -11,22 +11,20 @@ from django.http import HttpResponseRedirect, HttpResponse
 | 
			
		|||
from django.shortcuts import render
 | 
			
		||||
from django.utils.translation import get_language, ugettext_lazy as _
 | 
			
		||||
from django.views.decorators.cache import cache_control
 | 
			
		||||
from django.views.generic import FormView, CreateView, TemplateView, DetailView
 | 
			
		||||
from django.views.generic import FormView, CreateView, DetailView
 | 
			
		||||
 | 
			
		||||
from datacenterlight.tasks import create_vm_task
 | 
			
		||||
from hosting.models import HostingOrder, UserCardDetail
 | 
			
		||||
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.hosting_utils import get_vm_price, HostingUtils
 | 
			
		||||
from utils.mailer import BaseEmail
 | 
			
		||||
from utils.forms import BillingAddressForm, BillingAddressFormSignup
 | 
			
		||||
from utils.hosting_utils import get_vm_price_with_vat
 | 
			
		||||
from utils.stripe_utils import StripeUtils
 | 
			
		||||
from utils.tasks import send_plain_email_task
 | 
			
		||||
from .forms import BetaAccessForm, ContactForm
 | 
			
		||||
from .models import BetaAccess, BetaAccessVMType, BetaAccessVM, VMTemplate
 | 
			
		||||
from .forms import ContactForm
 | 
			
		||||
from .models import VMTemplate, VMPricing
 | 
			
		||||
from .utils import get_cms_integration
 | 
			
		||||
 | 
			
		||||
logger = logging.getLogger(__name__)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -43,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()
 | 
			
		||||
| 
						 | 
				
			
			@ -69,138 +68,14 @@ 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))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class LandingProgramView(TemplateView):
 | 
			
		||||
    template_name = "datacenterlight/landing.html"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SuccessView(TemplateView):
 | 
			
		||||
    template_name = "datacenterlight/success.html"
 | 
			
		||||
 | 
			
		||||
    def get(self, request, *args, **kwargs):
 | 
			
		||||
        if 'specs' not in request.session or 'user' not in request.session:
 | 
			
		||||
            return HttpResponseRedirect(reverse('datacenterlight:index'))
 | 
			
		||||
        elif 'token' not in request.session:
 | 
			
		||||
            return HttpResponseRedirect(reverse('datacenterlight:payment'))
 | 
			
		||||
        elif 'order_confirmation' not in request.session:
 | 
			
		||||
            return HttpResponseRedirect(
 | 
			
		||||
                reverse('datacenterlight:order_confirmation'))
 | 
			
		||||
        else:
 | 
			
		||||
            for session_var in ['specs', 'user', 'template', 'billing_address',
 | 
			
		||||
                                'billing_address_data',
 | 
			
		||||
                                'token', 'customer']:
 | 
			
		||||
                if session_var in request.session:
 | 
			
		||||
                    del request.session[session_var]
 | 
			
		||||
        return render(request, self.template_name)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class BetaAccessView(FormView):
 | 
			
		||||
    template_name = "datacenterlight/beta_access.html"
 | 
			
		||||
    form_class = BetaAccessForm
 | 
			
		||||
    success_message = "Thank you, we will contact you as soon as possible"
 | 
			
		||||
 | 
			
		||||
    def form_valid(self, form):
 | 
			
		||||
        context = {
 | 
			
		||||
            'base_url': "{0}://{1}".format(self.request.scheme,
 | 
			
		||||
                                           self.request.get_host())
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        email_data = {
 | 
			
		||||
            'subject': 'DatacenterLight Beta Access Request',
 | 
			
		||||
            'from_address': '(datacenterlight) datacenterlight Support <support@datacenterlight.ch>',
 | 
			
		||||
            'to': form.cleaned_data.get('email'),
 | 
			
		||||
            'from': '(datacenterlight) DatacenterLight Support support@datacenterlight.ch',
 | 
			
		||||
            'context': context,
 | 
			
		||||
            'template_name': 'request_access_confirmation',
 | 
			
		||||
            'template_path': 'datacenterlight/emails/'
 | 
			
		||||
        }
 | 
			
		||||
        email = BaseEmail(**email_data)
 | 
			
		||||
        email.send()
 | 
			
		||||
 | 
			
		||||
        context.update({
 | 
			
		||||
            'email': form.cleaned_data.get('email')
 | 
			
		||||
        })
 | 
			
		||||
 | 
			
		||||
        email_data = {
 | 
			
		||||
            'subject': 'DatacenterLight Beta Access Request',
 | 
			
		||||
            'from_address': '(datacenterlight) datacenterlight Support <support@datacenterlight.ch>',
 | 
			
		||||
            'to': 'info@ungleich.ch',
 | 
			
		||||
            'context': context,
 | 
			
		||||
            'template_name': 'request_access_notification',
 | 
			
		||||
            'template_path': 'datacenterlight/emails/'
 | 
			
		||||
        }
 | 
			
		||||
        email = BaseEmail(**email_data)
 | 
			
		||||
        email.send()
 | 
			
		||||
 | 
			
		||||
        messages.add_message(self.request, messages.SUCCESS,
 | 
			
		||||
                             self.success_message)
 | 
			
		||||
        return render(self.request, 'datacenterlight/beta_success.html', {})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class BetaProgramView(CreateView):
 | 
			
		||||
    template_name = "datacenterlight/beta.html"
 | 
			
		||||
    model = BetaAccessVM
 | 
			
		||||
    fields = '__all__'
 | 
			
		||||
    # form_class = BetaAccessForm
 | 
			
		||||
    # success_url = "/datacenterlight#requestform"
 | 
			
		||||
    success_message = "Thank you, we will contact you as soon as possible"
 | 
			
		||||
 | 
			
		||||
    def get_success_url(self):
 | 
			
		||||
        success_url = reverse('datacenterlight:beta')
 | 
			
		||||
        success_url += "#success"
 | 
			
		||||
        return success_url
 | 
			
		||||
 | 
			
		||||
    def get_context_data(self, **kwargs):
 | 
			
		||||
        vms = BetaAccessVMType.objects.all()
 | 
			
		||||
        context = super(BetaProgramView, self).get_context_data(**kwargs)
 | 
			
		||||
 | 
			
		||||
        # templates = OpenNebulaManager().get_templates()
 | 
			
		||||
        # data = VirtualMachineTemplateSerializer(templates, many=True).data
 | 
			
		||||
 | 
			
		||||
        context.update({
 | 
			
		||||
            'base_url': "{0}://{1}".format(self.request.scheme,
 | 
			
		||||
                                           self.request.get_host()),
 | 
			
		||||
            'vms': vms
 | 
			
		||||
        })
 | 
			
		||||
        return context
 | 
			
		||||
 | 
			
		||||
    def post(self, request, *args, **kwargs):
 | 
			
		||||
        data = request.POST
 | 
			
		||||
        vms = BetaAccessVM.create(data)
 | 
			
		||||
 | 
			
		||||
        context = {
 | 
			
		||||
            'base_url': "{0}://{1}".format(self.request.scheme,
 | 
			
		||||
                                           self.request.get_host()),
 | 
			
		||||
            'email': data.get('email'),
 | 
			
		||||
            'name': data.get('name'),
 | 
			
		||||
            'vms': vms
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        email_data = {
 | 
			
		||||
            'subject': 'DatacenterLight Beta Access Request',
 | 
			
		||||
            'from_address': '(datacenterlight) datacenterlight Support <support@datacenterlight.ch>',
 | 
			
		||||
            'to': 'info@ungleich.ch',
 | 
			
		||||
            'context': context,
 | 
			
		||||
            'template_name': 'request_beta_access_notification',
 | 
			
		||||
            'template_path': 'datacenterlight/emails/'
 | 
			
		||||
        }
 | 
			
		||||
        email = BaseEmail(**email_data)
 | 
			
		||||
        email.send()
 | 
			
		||||
 | 
			
		||||
        messages.add_message(self.request, messages.SUCCESS,
 | 
			
		||||
                             self.success_message)
 | 
			
		||||
        return HttpResponseRedirect(self.get_success_url())
 | 
			
		||||
            return render(
 | 
			
		||||
                self.request, 'datacenterlight/index.html',
 | 
			
		||||
                self.get_context_data(success=True, contact_form=form)
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class IndexView(CreateView):
 | 
			
		||||
    template_name = "datacenterlight/index.html"
 | 
			
		||||
    model = BetaAccess
 | 
			
		||||
    form_class = BetaAccessForm
 | 
			
		||||
    success_url = "/datacenterlight#requestform"
 | 
			
		||||
    success_message = "Thank you, we will contact you as soon as possible"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -209,7 +84,7 @@ class IndexView(CreateView):
 | 
			
		|||
            raise ValidationError(_('Invalid number of cores'))
 | 
			
		||||
 | 
			
		||||
    def validate_memory(self, value):
 | 
			
		||||
        if (value > 200) or (value < 2):
 | 
			
		||||
        if (value > 200) or (value < 1):
 | 
			
		||||
            raise ValidationError(_('Invalid RAM size'))
 | 
			
		||||
 | 
			
		||||
    def validate_storage(self, value):
 | 
			
		||||
| 
						 | 
				
			
			@ -218,15 +93,11 @@ class IndexView(CreateView):
 | 
			
		|||
 | 
			
		||||
    @cache_control(no_cache=True, must_revalidate=True, no_store=True)
 | 
			
		||||
    def get(self, request, *args, **kwargs):
 | 
			
		||||
        for session_var in ['specs', 'user', 'billing_address_data']:
 | 
			
		||||
        for session_var in ['specs', 'user', 'billing_address_data',
 | 
			
		||||
                            'pricing_name']:
 | 
			
		||||
            if session_var in request.session:
 | 
			
		||||
                del request.session[session_var]
 | 
			
		||||
 | 
			
		||||
        vm_templates = VMTemplate.objects.all()
 | 
			
		||||
        context = {
 | 
			
		||||
            'templates': vm_templates
 | 
			
		||||
        }
 | 
			
		||||
        return render(request, self.template_name, context)
 | 
			
		||||
        return HttpResponseRedirect(reverse('datacenterlight:cms_index'))
 | 
			
		||||
 | 
			
		||||
    def post(self, request):
 | 
			
		||||
        cores = request.POST.get('cpu')
 | 
			
		||||
| 
						 | 
				
			
			@ -236,43 +107,73 @@ class IndexView(CreateView):
 | 
			
		|||
        storage = request.POST.get('storage')
 | 
			
		||||
        storage_field = forms.IntegerField(validators=[self.validate_storage])
 | 
			
		||||
        template_id = int(request.POST.get('config'))
 | 
			
		||||
        pricing_name = request.POST.get('pricing_name')
 | 
			
		||||
        vm_pricing = VMPricing.get_vm_pricing_by_name(pricing_name)
 | 
			
		||||
 | 
			
		||||
        template = VMTemplate.objects.filter(
 | 
			
		||||
            opennebula_vm_template_id=template_id).first()
 | 
			
		||||
            opennebula_vm_template_id=template_id
 | 
			
		||||
        ).first()
 | 
			
		||||
        template_data = VMTemplateSerializer(template).data
 | 
			
		||||
        referer_url = request.META['HTTP_REFERER']
 | 
			
		||||
 | 
			
		||||
        if vm_pricing is None:
 | 
			
		||||
            vm_pricing_name_msg = _(
 | 
			
		||||
                "Incorrect pricing name. Please contact support"
 | 
			
		||||
                "{support_email}".format(
 | 
			
		||||
                    support_email=settings.DCL_SUPPORT_FROM_ADDRESS
 | 
			
		||||
                )
 | 
			
		||||
            )
 | 
			
		||||
            messages.add_message(
 | 
			
		||||
                self.request, messages.ERROR, vm_pricing_name_msg,
 | 
			
		||||
                extra_tags='pricing'
 | 
			
		||||
            )
 | 
			
		||||
            return HttpResponseRedirect(referer_url + "#order_form")
 | 
			
		||||
        else:
 | 
			
		||||
            vm_pricing_name = vm_pricing.name
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            cores = cores_field.clean(cores)
 | 
			
		||||
        except ValidationError as err:
 | 
			
		||||
            msg = '{} : {}.'.format(cores, str(err))
 | 
			
		||||
            messages.add_message(self.request, messages.ERROR, msg,
 | 
			
		||||
                                 extra_tags='cores')
 | 
			
		||||
            return HttpResponseRedirect(
 | 
			
		||||
                reverse('datacenterlight:index') + "#order_form")
 | 
			
		||||
            messages.add_message(
 | 
			
		||||
                self.request, messages.ERROR, msg, extra_tags='cores'
 | 
			
		||||
            )
 | 
			
		||||
            return HttpResponseRedirect(referer_url + "#order_form")
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            memory = memory_field.clean(memory)
 | 
			
		||||
        except ValidationError as err:
 | 
			
		||||
            msg = '{} : {}.'.format(memory, str(err))
 | 
			
		||||
            messages.add_message(self.request, messages.ERROR, msg,
 | 
			
		||||
                                 extra_tags='memory')
 | 
			
		||||
            return HttpResponseRedirect(
 | 
			
		||||
                reverse('datacenterlight:index') + "#order_form")
 | 
			
		||||
            messages.add_message(
 | 
			
		||||
                self.request, messages.ERROR, msg, extra_tags='memory'
 | 
			
		||||
            )
 | 
			
		||||
            return HttpResponseRedirect(referer_url + "#order_form")
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            storage = storage_field.clean(storage)
 | 
			
		||||
        except ValidationError as err:
 | 
			
		||||
            msg = '{} : {}.'.format(storage, str(err))
 | 
			
		||||
            messages.add_message(self.request, messages.ERROR, msg,
 | 
			
		||||
                                 extra_tags='storage')
 | 
			
		||||
            return HttpResponseRedirect(
 | 
			
		||||
                reverse('datacenterlight:index') + "#order_form")
 | 
			
		||||
        amount_to_be_charged = get_vm_price(cpu=cores, memory=memory,
 | 
			
		||||
                                            disk_size=storage)
 | 
			
		||||
            messages.add_message(
 | 
			
		||||
                self.request, messages.ERROR, msg, extra_tags='storage'
 | 
			
		||||
            )
 | 
			
		||||
            return HttpResponseRedirect(referer_url + "#order_form")
 | 
			
		||||
 | 
			
		||||
        price, vat, vat_percent, discount = get_vm_price_with_vat(
 | 
			
		||||
            cpu=cores,
 | 
			
		||||
            memory=memory,
 | 
			
		||||
            ssd_size=storage,
 | 
			
		||||
            pricing_name=vm_pricing_name
 | 
			
		||||
        )
 | 
			
		||||
        specs = {
 | 
			
		||||
            'cpu': cores,
 | 
			
		||||
            'memory': memory,
 | 
			
		||||
            'disk_size': storage,
 | 
			
		||||
            'price': amount_to_be_charged
 | 
			
		||||
            'price': price,
 | 
			
		||||
            'vat': vat,
 | 
			
		||||
            'vat_percent': vat_percent,
 | 
			
		||||
            'discount': discount,
 | 
			
		||||
            'total_price': price + vat - discount['amount'],
 | 
			
		||||
            'pricing_name': vm_pricing_name
 | 
			
		||||
        }
 | 
			
		||||
        request.session['specs'] = specs
 | 
			
		||||
        request.session['template'] = template_data
 | 
			
		||||
| 
						 | 
				
			
			@ -286,54 +187,16 @@ class IndexView(CreateView):
 | 
			
		|||
    def get_context_data(self, **kwargs):
 | 
			
		||||
        context = super(IndexView, self).get_context_data(**kwargs)
 | 
			
		||||
        context.update({
 | 
			
		||||
            'base_url': "{0}://{1}".format(self.request.scheme,
 | 
			
		||||
                                           self.request.get_host()),
 | 
			
		||||
            'base_url': "{0}://{1}".format(
 | 
			
		||||
                self.request.scheme, self.request.get_host()
 | 
			
		||||
            ),
 | 
			
		||||
            'contact_form': ContactForm
 | 
			
		||||
        })
 | 
			
		||||
        return context
 | 
			
		||||
 | 
			
		||||
    def form_valid(self, form):
 | 
			
		||||
 | 
			
		||||
        context = {
 | 
			
		||||
            'base_url': "{0}://{1}".format(self.request.scheme,
 | 
			
		||||
                                           self.request.get_host())
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        email_data = {
 | 
			
		||||
            'subject': 'DatacenterLight Beta Access Request',
 | 
			
		||||
            'from_address': '(datacenterlight) datacenterlight Support <support@datacenterlight.ch>',
 | 
			
		||||
            'to': form.cleaned_data.get('email'),
 | 
			
		||||
            'from': '(datacenterlight) DatacenterLight Support support@datacenterlight.ch',
 | 
			
		||||
            'context': context,
 | 
			
		||||
            'template_name': 'request_access_confirmation',
 | 
			
		||||
            'template_path': 'datacenterlight/emails/'
 | 
			
		||||
        }
 | 
			
		||||
        email = BaseEmail(**email_data)
 | 
			
		||||
        email.send()
 | 
			
		||||
 | 
			
		||||
        context.update({
 | 
			
		||||
            'email': form.cleaned_data.get('email')
 | 
			
		||||
        })
 | 
			
		||||
 | 
			
		||||
        email_data = {
 | 
			
		||||
            'subject': 'DatacenterLight Beta Access Request',
 | 
			
		||||
            'from_address': '(datacenterlight) datacenterlight Support <support@datacenterlight.ch>',
 | 
			
		||||
            'to': 'info@ungleich.ch',
 | 
			
		||||
            'context': context,
 | 
			
		||||
            'template_name': 'request_access_notification',
 | 
			
		||||
            'template_path': 'datacenterlight/emails/'
 | 
			
		||||
        }
 | 
			
		||||
        email = BaseEmail(**email_data)
 | 
			
		||||
        email.send()
 | 
			
		||||
 | 
			
		||||
        messages.add_message(self.request, messages.SUCCESS,
 | 
			
		||||
                             self.success_message)
 | 
			
		||||
        return super(IndexView, self).form_valid(form)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class WhyDataCenterLightView(IndexView):
 | 
			
		||||
    template_name = "datacenterlight/whydatacenterlight.html"
 | 
			
		||||
    model = BetaAccess
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class PaymentOrderView(FormView):
 | 
			
		||||
| 
						 | 
				
			
			@ -347,21 +210,11 @@ class PaymentOrderView(FormView):
 | 
			
		|||
 | 
			
		||||
    def get_context_data(self, **kwargs):
 | 
			
		||||
        context = super(PaymentOrderView, self).get_context_data(**kwargs)
 | 
			
		||||
        user = self.request.user
 | 
			
		||||
        stripe_customer = None
 | 
			
		||||
        if hasattr(user, 'stripecustomer'):
 | 
			
		||||
            stripe_customer = user.stripecustomer
 | 
			
		||||
        cards_list = UserCardDetail.get_all_cards_list(
 | 
			
		||||
            stripe_customer=stripe_customer
 | 
			
		||||
        )
 | 
			
		||||
        if 'billing_address_data' in self.request.session:
 | 
			
		||||
            billing_address_data = self.request.session['billing_address_data']
 | 
			
		||||
            if 'token' in billing_address_data:
 | 
			
		||||
                billing_address_data.pop('token')
 | 
			
		||||
            if 'card' in billing_address_data:
 | 
			
		||||
                billing_address_data.pop('card')
 | 
			
		||||
        else:
 | 
			
		||||
            billing_address_data = {}
 | 
			
		||||
 | 
			
		||||
        if self.request.user.is_authenticated():
 | 
			
		||||
            if billing_address_data:
 | 
			
		||||
                billing_address_form = BillingAddressForm(
 | 
			
		||||
| 
						 | 
				
			
			@ -371,34 +224,47 @@ class PaymentOrderView(FormView):
 | 
			
		|||
                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({
 | 
			
		||||
            'cards_list': cards_list,
 | 
			
		||||
            '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': get_cms_integration('default'),
 | 
			
		||||
            'vm_pricing': VMPricing.get_vm_pricing_by_name(
 | 
			
		||||
                self.request.session['specs']['pricing_name']
 | 
			
		||||
            )
 | 
			
		||||
        })
 | 
			
		||||
        return context
 | 
			
		||||
 | 
			
		||||
    @cache_control(no_cache=True, must_revalidate=True, no_store=True)
 | 
			
		||||
    def get(self, request, *args, **kwargs):
 | 
			
		||||
        # user is no longer added to session on the index page
 | 
			
		||||
        if 'specs' not in request.session:
 | 
			
		||||
            return HttpResponseRedirect(reverse('datacenterlight:index'))
 | 
			
		||||
        HostingUtils.clear_items_from_list(
 | 
			
		||||
            request.session,
 | 
			
		||||
            ['token', 'card_id', 'customer', 'user']
 | 
			
		||||
        )
 | 
			
		||||
        return self.render_to_response(self.get_context_data())
 | 
			
		||||
 | 
			
		||||
    def post(self, request, *args, **kwargs):
 | 
			
		||||
        if 'login_form' in request.POST:
 | 
			
		||||
            login_form = HostingUserLoginForm(data=request.POST,
 | 
			
		||||
                                              prefix='login_form')
 | 
			
		||||
            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')
 | 
			
		||||
| 
						 | 
				
			
			@ -428,39 +294,8 @@ class PaymentOrderView(FormView):
 | 
			
		|||
                    'name': request.user.name
 | 
			
		||||
                }
 | 
			
		||||
                customer = StripeCustomer.get_or_create(
 | 
			
		||||
                    email=this_user.get('email'), token=token
 | 
			
		||||
                )
 | 
			
		||||
                if token is '':
 | 
			
		||||
                    # card selected case
 | 
			
		||||
                    card_id = address_form.cleaned_data.get('card')
 | 
			
		||||
                    try:
 | 
			
		||||
                        user_card_detail = UserCardDetail.objects.get(
 | 
			
		||||
                            id=card_id)
 | 
			
		||||
                        if not request.user.has_perm(
 | 
			
		||||
                            'view_usercarddetail', user_card_detail
 | 
			
		||||
                        ):
 | 
			
		||||
                            raise UserCardDetail.DoesNotExist(
 | 
			
		||||
                                _("{user} does not have permission to access"
 | 
			
		||||
                                  " the card").format(user=request.user.email)
 | 
			
		||||
                            )
 | 
			
		||||
                    except UserCardDetail.DoesNotExist as e:
 | 
			
		||||
                        ex = str(e)
 | 
			
		||||
                        logger.error(
 | 
			
		||||
                            "Card Id: {card_id}, Exception: {ex}".format(
 | 
			
		||||
                                card_id=card_id, ex=ex
 | 
			
		||||
                            )
 | 
			
		||||
                        )
 | 
			
		||||
                        msg = _("An error occurred. Details: {}".format(ex))
 | 
			
		||||
                        messages.add_message(
 | 
			
		||||
                            self.request, messages.ERROR, msg,
 | 
			
		||||
                            extra_tags='make_charge_error'
 | 
			
		||||
                        )
 | 
			
		||||
                        return HttpResponseRedirect(
 | 
			
		||||
                            reverse('hosting:payment') + '#payment_error'
 | 
			
		||||
                        )
 | 
			
		||||
                    request.session['card_id'] = user_card_detail.id
 | 
			
		||||
                else:
 | 
			
		||||
                    request.session['token'] = token
 | 
			
		||||
                    email=this_user.get('email'),
 | 
			
		||||
                    token=token)
 | 
			
		||||
            else:
 | 
			
		||||
                user_email = address_form.cleaned_data.get('email')
 | 
			
		||||
                user_name = address_form.cleaned_data.get('name')
 | 
			
		||||
| 
						 | 
				
			
			@ -481,9 +316,9 @@ class PaymentOrderView(FormView):
 | 
			
		|||
                            )
 | 
			
		||||
                        )
 | 
			
		||||
                        customer = StripeCustomer.create_stripe_api_customer(
 | 
			
		||||
                            email=user_email, token=token,
 | 
			
		||||
                            customer_name=user_name
 | 
			
		||||
                        )
 | 
			
		||||
                            email=user_email,
 | 
			
		||||
                            token=token,
 | 
			
		||||
                            customer_name=user_name)
 | 
			
		||||
                except CustomUser.DoesNotExist:
 | 
			
		||||
                    logger.debug(
 | 
			
		||||
                        ("StripeCustomer does not exist for {email}."
 | 
			
		||||
| 
						 | 
				
			
			@ -495,7 +330,7 @@ class PaymentOrderView(FormView):
 | 
			
		|||
                        email=user_email,
 | 
			
		||||
                        token=token,
 | 
			
		||||
                        customer_name=user_name)
 | 
			
		||||
                request.session['token'] = token
 | 
			
		||||
 | 
			
		||||
            request.session['billing_address_data'] = address_form.cleaned_data
 | 
			
		||||
            request.session['user'] = this_user
 | 
			
		||||
            # Get or create stripe customer
 | 
			
		||||
| 
						 | 
				
			
			@ -508,6 +343,7 @@ class PaymentOrderView(FormView):
 | 
			
		|||
                        billing_address_form=address_form
 | 
			
		||||
                    )
 | 
			
		||||
                )
 | 
			
		||||
            request.session['token'] = token
 | 
			
		||||
            if type(customer) is StripeCustomer:
 | 
			
		||||
                request.session['customer'] = customer.stripe_id
 | 
			
		||||
            else:
 | 
			
		||||
| 
						 | 
				
			
			@ -530,36 +366,30 @@ class OrderConfirmationView(DetailView):
 | 
			
		|||
    def get(self, request, *args, **kwargs):
 | 
			
		||||
        if 'specs' not in request.session or 'user' not in request.session:
 | 
			
		||||
            return HttpResponseRedirect(reverse('datacenterlight:index'))
 | 
			
		||||
        if 'token' not in request.session and 'card_id' not in request.session:
 | 
			
		||||
        if 'token' not in request.session:
 | 
			
		||||
            return HttpResponseRedirect(reverse('datacenterlight:payment'))
 | 
			
		||||
        stripe_api_cus_id = request.session.get('customer')
 | 
			
		||||
        stripe_utils = StripeUtils()
 | 
			
		||||
        card_details = stripe_utils.get_card_details(stripe_api_cus_id,
 | 
			
		||||
                                                     request.session.get(
 | 
			
		||||
                                                         'token'))
 | 
			
		||||
        if not card_details.get('response_object'):
 | 
			
		||||
            msg = card_details.get('error')
 | 
			
		||||
            messages.add_message(self.request, messages.ERROR, msg,
 | 
			
		||||
                                 extra_tags='failed_payment')
 | 
			
		||||
            return HttpResponseRedirect(
 | 
			
		||||
                reverse('datacenterlight:payment') + '#payment_error')
 | 
			
		||||
        context = {
 | 
			
		||||
            'site_url': reverse('datacenterlight:index'),
 | 
			
		||||
            'cc_last4': card_details.get('response_object').get('last4'),
 | 
			
		||||
            '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': get_cms_integration('default'),
 | 
			
		||||
        }
 | 
			
		||||
        if 'token' in request.session:
 | 
			
		||||
            stripe_utils = StripeUtils()
 | 
			
		||||
            card_details = stripe_utils.get_cards_details_from_token(
 | 
			
		||||
                request.session.get('token')
 | 
			
		||||
            )
 | 
			
		||||
            card_detail_resp = card_details.get('response_object')
 | 
			
		||||
            if not card_detail_resp:
 | 
			
		||||
                msg = card_details.get('error')
 | 
			
		||||
                messages.add_message(
 | 
			
		||||
                    self.request, messages.ERROR, msg,
 | 
			
		||||
                    extra_tags='failed_payment'
 | 
			
		||||
                )
 | 
			
		||||
                return HttpResponseRedirect(
 | 
			
		||||
                    reverse('datacenterlight:payment') + '#payment_error'
 | 
			
		||||
                )
 | 
			
		||||
            context['cc_last4'] = card_detail_resp.get('last4')
 | 
			
		||||
            context['cc_brand'] = card_detail_resp.get('brand')
 | 
			
		||||
        else:
 | 
			
		||||
            card_id = self.request.session.get('card_id')
 | 
			
		||||
            card_detail = UserCardDetail.objects.get(id=card_id)
 | 
			
		||||
            context['cc_last4'] = card_detail.last4
 | 
			
		||||
            context['cc_brand'] = card_detail.brand
 | 
			
		||||
        return render(request, self.template_name, context)
 | 
			
		||||
 | 
			
		||||
    def post(self, request, *args, **kwargs):
 | 
			
		||||
| 
						 | 
				
			
			@ -569,16 +399,13 @@ class OrderConfirmationView(DetailView):
 | 
			
		|||
        stripe_api_cus_id = request.session.get('customer')
 | 
			
		||||
        vm_template_id = template.get('id', 1)
 | 
			
		||||
        stripe_utils = StripeUtils()
 | 
			
		||||
        if 'token' in self.request.session:
 | 
			
		||||
            card_details = stripe_utils.get_cards_details_from_token(
 | 
			
		||||
                request.session['token']
 | 
			
		||||
            )
 | 
			
		||||
        card_details = stripe_utils.get_card_details(stripe_api_cus_id,
 | 
			
		||||
                                                     request.session.get(
 | 
			
		||||
                                                         'token'))
 | 
			
		||||
        if not card_details.get('response_object'):
 | 
			
		||||
            msg = card_details.get('error')
 | 
			
		||||
                messages.add_message(
 | 
			
		||||
                    self.request, messages.ERROR, msg,
 | 
			
		||||
                    extra_tags='failed_payment'
 | 
			
		||||
                )
 | 
			
		||||
            messages.add_message(self.request, messages.ERROR, msg,
 | 
			
		||||
                                 extra_tags='failed_payment')
 | 
			
		||||
            response = {
 | 
			
		||||
                'status': False,
 | 
			
		||||
                'redirect': "{url}#{section}".format(
 | 
			
		||||
| 
						 | 
				
			
			@ -587,88 +414,28 @@ class OrderConfirmationView(DetailView):
 | 
			
		|||
                'msg_title': str(_('Error.')),
 | 
			
		||||
                'msg_body': str(
 | 
			
		||||
                    _('There was a payment related error.'
 | 
			
		||||
                          ' On close of this popup, you will be redirected '
 | 
			
		||||
                          'back to the payment page.'))
 | 
			
		||||
                      ' On close of this popup, you will be redirected back to'
 | 
			
		||||
                      ' the payment page.'))
 | 
			
		||||
            }
 | 
			
		||||
                return HttpResponse(
 | 
			
		||||
                    json.dumps(response), content_type="application/json"
 | 
			
		||||
                )
 | 
			
		||||
            card_details_response = card_details['response_object']
 | 
			
		||||
            card_details_dict = {
 | 
			
		||||
                'last4': card_details_response['last4'],
 | 
			
		||||
                'brand': card_details_response['brand'],
 | 
			
		||||
                'card_id': card_details_response['card_id']
 | 
			
		||||
            }
 | 
			
		||||
            s_cus = None
 | 
			
		||||
            try:
 | 
			
		||||
                s_cus = StripeCustomer.objects.get(stripe_id=stripe_api_cus_id)
 | 
			
		||||
            except StripeCustomer.DoesNotExist:
 | 
			
		||||
                pass
 | 
			
		||||
            if s_cus:
 | 
			
		||||
                ucd = UserCardDetail.get_user_card_details(s_cus, card_details_response)
 | 
			
		||||
                if not ucd:
 | 
			
		||||
                    acc_result = stripe_utils.associate_customer_card(
 | 
			
		||||
                        stripe_api_cus_id, request.session['token'],
 | 
			
		||||
                        set_as_default=True
 | 
			
		||||
                    )
 | 
			
		||||
                    if acc_result['response_object'] is None:
 | 
			
		||||
                        msg = acc_result.get('error')
 | 
			
		||||
                        messages.add_message(
 | 
			
		||||
                            self.request, messages.ERROR, msg,
 | 
			
		||||
                            extra_tags='failed_payment'
 | 
			
		||||
                        )
 | 
			
		||||
                        response = {
 | 
			
		||||
                            'status': False,
 | 
			
		||||
                            'redirect': "{url}#{section}".format(
 | 
			
		||||
                                url=reverse('datacenterlight:payment'),
 | 
			
		||||
                                section='payment_error'),
 | 
			
		||||
                            'msg_title': str(_('Error.')),
 | 
			
		||||
                            'msg_body': str(
 | 
			
		||||
                                _('There was a payment related error.'
 | 
			
		||||
                                  ' On close of this popup, you will be '
 | 
			
		||||
                                  'redirected back to the payment page.')
 | 
			
		||||
                            )
 | 
			
		||||
                        }
 | 
			
		||||
                        logger.error(
 | 
			
		||||
                            "Card association failed. Error {error}".format(
 | 
			
		||||
                                error=acc_result['error']
 | 
			
		||||
                            )
 | 
			
		||||
                        )
 | 
			
		||||
            return HttpResponse(json.dumps(response),
 | 
			
		||||
                                content_type="application/json")
 | 
			
		||||
                else:
 | 
			
		||||
                    if not ucd.preferred:
 | 
			
		||||
                        UserCardDetail.set_default_card(
 | 
			
		||||
                            stripe_api_cus_id=stripe_api_cus_id,
 | 
			
		||||
                            stripe_source_id=ucd.card_id
 | 
			
		||||
                        )
 | 
			
		||||
        else:
 | 
			
		||||
            card_id = request.session.get('card_id')
 | 
			
		||||
            user_card_detail = UserCardDetail.objects.get(id=card_id)
 | 
			
		||||
            card_details_dict = {
 | 
			
		||||
                'last4': user_card_detail.last4,
 | 
			
		||||
                'brand': user_card_detail.brand,
 | 
			
		||||
                'card_id': user_card_detail.card_id
 | 
			
		||||
            }
 | 
			
		||||
            if not user_card_detail.preferred:
 | 
			
		||||
                UserCardDetail.set_default_card(
 | 
			
		||||
                    stripe_api_cus_id=stripe_api_cus_id,
 | 
			
		||||
                    stripe_source_id=user_card_detail.card_id
 | 
			
		||||
                )
 | 
			
		||||
        card_details_dict = card_details.get('response_object')
 | 
			
		||||
        cpu = specs.get('cpu')
 | 
			
		||||
        memory = specs.get('memory')
 | 
			
		||||
        disk_size = specs.get('disk_size')
 | 
			
		||||
        amount_to_be_charged = specs.get('price')
 | 
			
		||||
        plan_name = StripeUtils.get_stripe_plan_name(
 | 
			
		||||
            cpu=cpu, memory=memory, disk_size=disk_size
 | 
			
		||||
        )
 | 
			
		||||
        stripe_plan_id = StripeUtils.get_stripe_plan_id(
 | 
			
		||||
            cpu=cpu, ram=memory, ssd=disk_size, version=1, app='dcl'
 | 
			
		||||
        )
 | 
			
		||||
        amount_to_be_charged = specs.get('total_price')
 | 
			
		||||
        plan_name = StripeUtils.get_stripe_plan_name(cpu=cpu,
 | 
			
		||||
                                                     memory=memory,
 | 
			
		||||
                                                     disk_size=disk_size)
 | 
			
		||||
        stripe_plan_id = StripeUtils.get_stripe_plan_id(cpu=cpu,
 | 
			
		||||
                                                        ram=memory,
 | 
			
		||||
                                                        ssd=disk_size,
 | 
			
		||||
                                                        version=1,
 | 
			
		||||
                                                        app='dcl')
 | 
			
		||||
        stripe_plan = stripe_utils.get_or_create_stripe_plan(
 | 
			
		||||
            amount=amount_to_be_charged, name=plan_name,
 | 
			
		||||
            stripe_plan_id=stripe_plan_id
 | 
			
		||||
        )
 | 
			
		||||
            amount=amount_to_be_charged,
 | 
			
		||||
            name=plan_name,
 | 
			
		||||
            stripe_plan_id=stripe_plan_id)
 | 
			
		||||
        subscription_result = stripe_utils.subscribe_customer_to_plan(
 | 
			
		||||
            stripe_api_cus_id,
 | 
			
		||||
            [{"plan": stripe_plan.get(
 | 
			
		||||
| 
						 | 
				
			
			@ -677,14 +444,6 @@ class OrderConfirmationView(DetailView):
 | 
			
		|||
        # Check if the subscription was approved and is active
 | 
			
		||||
        if (stripe_subscription_obj is None
 | 
			
		||||
                or stripe_subscription_obj.status != 'active'):
 | 
			
		||||
            if request.user.is_authenticated():
 | 
			
		||||
                sac_id = request.user.stripecustomer.stripe_id
 | 
			
		||||
            else:
 | 
			
		||||
                sac_id = stripe_api_cus_id
 | 
			
		||||
            stripe_utils.dissociate_customer_card(
 | 
			
		||||
                sac_id,
 | 
			
		||||
                card_details_dict['card_id']
 | 
			
		||||
            )
 | 
			
		||||
            msg = subscription_result.get('error')
 | 
			
		||||
            messages.add_message(self.request, messages.ERROR, msg,
 | 
			
		||||
                                 extra_tags='failed_payment')
 | 
			
		||||
| 
						 | 
				
			
			@ -701,6 +460,7 @@ class OrderConfirmationView(DetailView):
 | 
			
		|||
            }
 | 
			
		||||
            return HttpResponse(json.dumps(response),
 | 
			
		||||
                                content_type="application/json")
 | 
			
		||||
 | 
			
		||||
        # Create user if the user is not logged in and if he is not already
 | 
			
		||||
        # registered
 | 
			
		||||
        if not request.user.is_authenticated():
 | 
			
		||||
| 
						 | 
				
			
			@ -738,21 +498,13 @@ class OrderConfirmationView(DetailView):
 | 
			
		|||
            # object already exists
 | 
			
		||||
            stripe_customer_id = request.user.stripecustomer.id
 | 
			
		||||
            custom_user = request.user
 | 
			
		||||
 | 
			
		||||
        # Save billing address
 | 
			
		||||
        billing_address_data = request.session.get('billing_address_data')
 | 
			
		||||
        logger.debug('billing_address_data is {}'.format(billing_address_data))
 | 
			
		||||
        billing_address_data.update({
 | 
			
		||||
            'user': custom_user.id
 | 
			
		||||
        })
 | 
			
		||||
        if 'token' in request.session and s_cus is not None:
 | 
			
		||||
            ucd = UserCardDetail.get_or_create_user_card_detail(
 | 
			
		||||
                stripe_customer=s_cus,
 | 
			
		||||
                card_details=card_details_response
 | 
			
		||||
            )
 | 
			
		||||
            UserCardDetail.save_default_card_local(
 | 
			
		||||
                s_cus.stripe_id,
 | 
			
		||||
                ucd.card_id
 | 
			
		||||
            )
 | 
			
		||||
        user = {
 | 
			
		||||
            'name': custom_user.name,
 | 
			
		||||
            'email': custom_user.email,
 | 
			
		||||
| 
						 | 
				
			
			@ -761,28 +513,29 @@ class OrderConfirmationView(DetailView):
 | 
			
		|||
            'request_host': request.get_host(),
 | 
			
		||||
            'language': get_language(),
 | 
			
		||||
        }
 | 
			
		||||
        create_vm_task.delay(
 | 
			
		||||
            vm_template_id, user, specs, template, stripe_customer_id,
 | 
			
		||||
            billing_address_data, stripe_subscription_obj.id,
 | 
			
		||||
            card_details_dict
 | 
			
		||||
        )
 | 
			
		||||
        HostingUtils.clear_items_from_list(
 | 
			
		||||
            request.session,
 | 
			
		||||
            ['specs', 'template', 'billing_address', 'billing_address_data',
 | 
			
		||||
             'token', 'customer', 'card_id']
 | 
			
		||||
        )
 | 
			
		||||
        if request.user.is_authenticated():
 | 
			
		||||
            redirect_url = reverse('hosting:virtual_machines')
 | 
			
		||||
        else:
 | 
			
		||||
            redirect_url = reverse('datacenterlight:index')
 | 
			
		||||
 | 
			
		||||
        create_vm_task.delay(vm_template_id, user, specs, template,
 | 
			
		||||
                             stripe_customer_id, billing_address_data,
 | 
			
		||||
                             stripe_subscription_obj.id, card_details_dict)
 | 
			
		||||
        for session_var in ['specs', 'template', 'billing_address',
 | 
			
		||||
                            'billing_address_data',
 | 
			
		||||
                            'token', 'customer', 'pricing_name']:
 | 
			
		||||
            if session_var in request.session:
 | 
			
		||||
                del request.session[session_var]
 | 
			
		||||
 | 
			
		||||
        response = {
 | 
			
		||||
            'status': True,
 | 
			
		||||
            'redirect': redirect_url,
 | 
			
		||||
            'redirect': (
 | 
			
		||||
                reverse('hosting:virtual_machines')
 | 
			
		||||
                if request.user.is_authenticated()
 | 
			
		||||
                else reverse('datacenterlight:index')
 | 
			
		||||
            ),
 | 
			
		||||
            'msg_title': str(_('Thank you for the order.')),
 | 
			
		||||
            'msg_body': str(
 | 
			
		||||
                _('Your VM will be up and running in a few moments.'
 | 
			
		||||
                  ' We will send you a confirmation email as soon as'
 | 
			
		||||
                  ' it is ready.'))
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return HttpResponse(json.dumps(response),
 | 
			
		||||
                            content_type="application/json")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
# Generated by Django 1.9.4 on 2017-12-23 22:56
 | 
			
		||||
from __future__ import unicode_literals
 | 
			
		||||
 | 
			
		||||
from django.db import migrations, models
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ('digitalglarus', '0024_bookingcancellation'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='membershiporder',
 | 
			
		||||
            name='stripe_subscription_id',
 | 
			
		||||
            field=models.CharField(max_length=100, null=True),
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
import calendar
 | 
			
		||||
import time
 | 
			
		||||
 | 
			
		||||
from datetime import datetime, date, timedelta
 | 
			
		||||
from dateutil.relativedelta import relativedelta
 | 
			
		||||
from django.db import models
 | 
			
		||||
| 
						 | 
				
			
			@ -59,6 +59,17 @@ class MembershipType(models.Model):
 | 
			
		|||
        return "{} - {}".format(datetime.strftime(start_date, "%b, %d %Y"),
 | 
			
		||||
                                datetime.strftime(end_date, "%b, %d %Y"))
 | 
			
		||||
 | 
			
		||||
    @cached_property
 | 
			
		||||
    def next_month_in_sec_since_epoch(self):
 | 
			
		||||
        """
 | 
			
		||||
        First day of the next month expressed in seconds since the epoch time
 | 
			
		||||
        :return: Time in seconds
 | 
			
		||||
        """
 | 
			
		||||
        start_date, end_date = self.first_month_range
 | 
			
		||||
        first_day_next_month = end_date + timedelta(days=1)
 | 
			
		||||
        epoch_time = int(time.mktime(first_day_next_month.timetuple()))
 | 
			
		||||
        return epoch_time
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Membership(models.Model):
 | 
			
		||||
    type = models.ForeignKey(MembershipType)
 | 
			
		||||
| 
						 | 
				
			
			@ -71,12 +82,12 @@ class Membership(models.Model):
 | 
			
		|||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def get_current_membership(cls, user):
 | 
			
		||||
 | 
			
		||||
        has_order_current_month = Q(membershiporder__customer__user=user,
 | 
			
		||||
                                    membershiporder__created_at__month=datetime.today().month)
 | 
			
		||||
        has_order_current_month = Q(
 | 
			
		||||
            membershiporder__customer__user=user,
 | 
			
		||||
            membershiporder__created_at__month=datetime.today().month
 | 
			
		||||
        )
 | 
			
		||||
        # import pdb;pdb.set_trace()
 | 
			
		||||
        return cls.objects.\
 | 
			
		||||
            filter(has_order_current_month).last()
 | 
			
		||||
        return cls.objects.filter(has_order_current_month).last()
 | 
			
		||||
 | 
			
		||||
    # def get_current_active_membership(cls, user):
 | 
			
		||||
    #     membership = cls.get_current_membership(user)
 | 
			
		||||
| 
						 | 
				
			
			@ -84,8 +95,7 @@ class Membership(models.Model):
 | 
			
		|||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def get_by_user(cls, user):
 | 
			
		||||
        return cls.objects.\
 | 
			
		||||
            filter(membershiporder__customer__user=user).last()
 | 
			
		||||
        return cls.objects.filter(membershiporder__customer__user=user).last()
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def create(cls, data):
 | 
			
		||||
| 
						 | 
				
			
			@ -96,18 +106,23 @@ class Membership(models.Model):
 | 
			
		|||
    def activate_or_crete(cls, data, user):
 | 
			
		||||
        membership = cls.get_by_user(user)
 | 
			
		||||
        membership_id = membership.id if membership else None
 | 
			
		||||
        obj, created = cls.objects.update_or_create(id=membership_id, defaults=data)
 | 
			
		||||
        obj, created = cls.objects.update_or_create(
 | 
			
		||||
            id=membership_id, defaults=data
 | 
			
		||||
        )
 | 
			
		||||
        return obj
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def is_digitalglarus_active_member(cls, user):
 | 
			
		||||
        # past_month = (datetime.today() - relativedelta(months=1)).month
 | 
			
		||||
        has_order_current_month = Q(membershiporder__customer__user=user,
 | 
			
		||||
                                    membershiporder__created_at__month=datetime.today().month)
 | 
			
		||||
        has_order_current_month = Q(
 | 
			
		||||
            membershiporder__customer__user=user,
 | 
			
		||||
            membershiporder__created_at__month=datetime.today().month
 | 
			
		||||
        )
 | 
			
		||||
        # has_order_past_month = Q(membershiporder__customer__user=user,
 | 
			
		||||
        #  membershiporder__created_at__month=past_month)
 | 
			
		||||
        active_membership = Q(active=True)
 | 
			
		||||
        # return cls.objects.filter(has_order_past_month | has_order_current_month).\
 | 
			
		||||
        # return cls.objects.filter(
 | 
			
		||||
        # has_order_past_month | has_order_current_month).\
 | 
			
		||||
        return cls.objects.filter(has_order_current_month).\
 | 
			
		||||
            filter(active_membership).exists()
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -129,6 +144,7 @@ class MembershipOrder(Ordereable, models.Model):
 | 
			
		|||
    membership = models.ForeignKey(Membership)
 | 
			
		||||
    start_date = models.DateField()
 | 
			
		||||
    end_date = models.DateField()
 | 
			
		||||
    stripe_subscription_id = models.CharField(max_length=100, null=True)
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def current_membership_dates(cls, user):
 | 
			
		||||
| 
						 | 
				
			
			@ -172,10 +188,12 @@ class MembershipOrder(Ordereable, models.Model):
 | 
			
		|||
    @classmethod
 | 
			
		||||
    def create(cls, data):
 | 
			
		||||
        stripe_charge = data.pop('stripe_charge', None)
 | 
			
		||||
        stripe_subscription_id = data.pop('stripe_subscription_id', None)
 | 
			
		||||
        instance = cls.objects.create(**data)
 | 
			
		||||
        instance.stripe_charge_id = stripe_charge.id
 | 
			
		||||
        instance.last4 = stripe_charge.source.last4
 | 
			
		||||
        instance.cc_brand = stripe_charge.source.brand
 | 
			
		||||
        instance.stripe_subscription_id = stripe_subscription_id
 | 
			
		||||
        instance.save()
 | 
			
		||||
        return instance
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -70,7 +70,7 @@ hr.small {
 | 
			
		|||
  }
 | 
			
		||||
  .navbar-custom .navbar-brand {
 | 
			
		||||
    color: white;
 | 
			
		||||
    padding: 20px;
 | 
			
		||||
    padding: 5px 20px;
 | 
			
		||||
  }
 | 
			
		||||
  .navbar-custom .navbar-brand:hover,
 | 
			
		||||
  .navbar-custom .navbar-brand:focus {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
		 Before Width: | Height: | Size: 169 KiB After Width: | Height: | Size: 141 KiB  | 
| 
						 | 
				
			
			@ -235,7 +235,7 @@ fieldset[disabled] .btn-xl.active {
 | 
			
		|||
.navbar-default .navbar-brand {
 | 
			
		||||
	font-family: "Helvetica Neue", Helvetica, Arial, cursive;
 | 
			
		||||
	color: #a1cfd7;
 | 
			
		||||
	padding-top: 10px;
 | 
			
		||||
	padding-top: 11px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.navbar-default .navbar-brand:hover,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||