add calculator placeholder to cms_integration

This commit is contained in:
Arvind Tiwari 2018-04-25 14:52:25 +05:30
commit 3bf064a017
13 changed files with 195 additions and 74 deletions

View file

@ -26,6 +26,10 @@ class CMSIntegration(models.Model):
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:
@ -288,7 +292,7 @@ class DCLSectionPromoPluginModel(CMSPlugin):
return extra_classes
class DCLCustomPricingModel(CMSPlugin):
class DCLCalculatorPluginModel(CMSPlugin):
pricing = models.ForeignKey(
VMPricing,
related_name="dcl_custom_pricing_vm_pricing",

View file

@ -1,3 +1,4 @@
from cms.models.pluginmodel import CMSPlugin
from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool
@ -6,7 +7,7 @@ from .cms_models import (
DCLFooterPluginModel, DCLLinkPluginModel, DCLNavbarDropdownPluginModel,
DCLSectionIconPluginModel, DCLSectionImagePluginModel,
DCLSectionPluginModel, DCLNavbarPluginModel,
DCLSectionPromoPluginModel, DCLCustomPricingModel
DCLSectionPromoPluginModel, DCLCalculatorPluginModel
)
from .models import VMTemplate, VMPricing
@ -21,7 +22,7 @@ class DCLSectionPlugin(CMSPluginBase):
allow_children = True
child_classes = [
'DCLSectionIconPlugin', 'DCLSectionImagePlugin',
'DCLSectionPromoPlugin', 'UngleichHTMLPlugin'
'DCLSectionPromoPlugin', 'UngleichHTMLPlugin', 'DCLCalculatorPlugin'
]
def render(self, context, instance, placeholder):
@ -30,14 +31,18 @@ class DCLSectionPlugin(CMSPluginBase):
)
context['children_to_side'] = []
context['children_to_content'] = []
context['children_calculator'] = []
if instance.child_plugin_instances is not None:
right_children = [
'DCLSectionImagePluginModel',
'DCLSectionIconPluginModel'
'DCLSectionIconPluginModel',
]
for child in instance.child_plugin_instances:
print(child.__dict__)
if child.__class__.__name__ in right_children:
context['children_to_side'].append(child)
elif child.__class__.__name__ == 'CMSPlugin':
context['children_calculator'].append(child)
else:
context['children_to_content'].append(child)
return context
@ -75,50 +80,42 @@ class DCLSectionPromoPlugin(CMSPluginBase):
@plugin_pool.register_plugin
class DCLCalculatorPlugin(CMSPluginBase):
module = "Datacenterlight"
name = "DCL Calculator Section Plugin"
model = DCLSectionPluginModel
name = "DCL Calculator Plugin"
model = DCLCalculatorPluginModel
render_template = "datacenterlight/cms/calculator.html"
cache = False
allow_children = True
child_classes = [
'DCLSectionPromoPlugin', 'UngleichHTMLPlugin', 'DCLCustomPricingPlugin'
]
require_parent = True
def render(self, context, instance, placeholder):
context = super(DCLCalculatorPlugin, self).render(
context, instance, placeholder
)
context['templates'] = VMTemplate.objects.all()
context['children_to_content'] = []
pricing_plugin_model = None
if instance.child_plugin_instances is not None:
context['children_to_content'].extend(
instance.child_plugin_instances
)
for child in instance.child_plugin_instances:
if child.__class__.__name__ == 'DCLCustomPricingModel':
# The second clause is just to make sure we pick up the
# most recent CustomPricing, if more than one is present
if (pricing_plugin_model is None or child.pricing_id >
pricing_plugin_model.model.pricing_id):
pricing_plugin_model = child
if pricing_plugin_model:
context['vm_pricing'] = VMPricing.get_vm_pricing_by_name(
name=pricing_plugin_model.pricing.name
)
else:
context['vm_pricing'] = VMPricing.get_default_pricing()
# pricing_plugin_model = None
# if instance.child_plugin_instances is not None:
# for child in instance.child_plugin_instances:
# if child.__class__.__name__ == 'DCLCustomPricingModel':
# # The second clause is just to make sure we pick up the
# # most recent CustomPricing, if more than one is present
# if (pricing_plugin_model is None or child.pricing_id >
# pricing_plugin_model.model.pricing_id):
# pricing_plugin_model = child
# if pricing_plugin_model:
# context['vm_pricing'] = VMPricing.get_vm_pricing_by_name(
# name=pricing_plugin_model.pricing.name
# )
# else:
# context['vm_pricing'] = VMPricing.get_default_pricing()
return context
@plugin_pool.register_plugin
class DCLCustomPricingPlugin(CMSPluginBase):
module = "Datacenterlight"
name = "DCL Custom Pricing Plugin"
model = DCLCustomPricingModel
render_plugin = False
# @plugin_pool.register_plugin
# class DCLCustomPricingPlugin(CMSPluginBase):
# module = "Datacenterlight"
# name = "DCL Custom Pricing Plugin"
# model = DCLCustomPricingModel
# render_plugin = False
@plugin_pool.register_plugin

View file

@ -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',
),
]

View file

@ -776,7 +776,7 @@ textarea {
width: 100%;
margin: 0 auto;
background: #fff;
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1), 0 0 6px rgba(0, 0, 0, 0.15);
padding-bottom: 40px;
border-radius: 7px;
text-align: center;
@ -929,7 +929,7 @@ textarea {
}
@media(max-width:991px) {
@media(max-width:767px) {
.section-sm-center .split-text,
.section-sm-center .space {
text-align: center !important;

View file

@ -1,16 +1,5 @@
<div class="split-section {{ instance.get_extra_classes }}" id="{{ instance.html_id }}">
<div class="container">
<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 %}">
<div class="price-calc-section">
<div class="card">
{% include "datacenterlight/includes/_calculator_form.html" %}
</div>
</div>
</div>
</div>
<div class="price-calc-section">
<div class="card">
{% include "datacenterlight/includes/_calculator_form.html" with vm_pricing=instance.pricing %}
</div>
</div>

View file

@ -2,17 +2,24 @@
<section class="split-section {{ instance.get_extra_classes }}" id="{{ instance.html_id }}">
<div class="container">
{% if children_to_side|length %}
{% 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">
<div class="section-figure">
{% for plugin in children_to_side %}
{% if children_calculator|length %}
{% for plugin in children_calculator %}
{% render_plugin plugin %}
{% endfor %}
</div>
{% endif %}
{% if children_to_side %}
<div class="section-figure">
{% for plugin in children_to_side %}
{% render_plugin plugin %}
{% endfor %}
</div>
{% endif %}
</div>
</div>
{% else %}

View file

@ -17,7 +17,7 @@
<h3>{% trans "VM hosting" %} </h3>
</div>
<div class="price">
<span id="total">15</span>
<span id="total"></span>
<span>CHF/{% trans "month" %}</span>
{% if vm_pricing.vat_inclusive %}
<div class="price-text">
@ -94,4 +94,4 @@
</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>
</form>