Merge pull request #672 from pcoder/task/5681/offer-512mb-ram
Allow admin to lower the minimum RAM for a calculator instance to 512 MB
This commit is contained in:
		
				commit
				
					
						961bf2e46f
					
				
			
		
					 9 changed files with 171 additions and 26 deletions
				
			
		| 
						 | 
					@ -361,3 +361,4 @@ class DCLCalculatorPluginModel(CMSPlugin):
 | 
				
			||||||
        help_text="Write the name of the template that you need selected as"
 | 
					        help_text="Write the name of the template that you need selected as"
 | 
				
			||||||
                  " default when the calculator loads"
 | 
					                  " default when the calculator loads"
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					    enable_512mb_ram = models.BooleanField(default=False)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -99,9 +99,8 @@ class DCLCalculatorPlugin(CMSPluginBase):
 | 
				
			||||||
            context['templates'] = VMTemplate.objects.filter(
 | 
					            context['templates'] = VMTemplate.objects.filter(
 | 
				
			||||||
                vm_type=instance.vm_type
 | 
					                vm_type=instance.vm_type
 | 
				
			||||||
            ).order_by('name')
 | 
					            ).order_by('name')
 | 
				
			||||||
        context['default_selected_template'] = (
 | 
					        context['instance'] = instance
 | 
				
			||||||
            instance.default_selected_template
 | 
					        context['min_ram'] = 0.5 if instance.enable_512mb_ram else 1
 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
        return context
 | 
					        return context
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,20 @@
 | 
				
			||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					# Generated by Django 1.9.4 on 2018-09-29 05:36
 | 
				
			||||||
 | 
					from __future__ import unicode_literals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from django.db import migrations, models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Migration(migrations.Migration):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    dependencies = [
 | 
				
			||||||
 | 
					        ('datacenterlight', '0026_dclcalculatorpluginmodel_default_selected_template'),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    operations = [
 | 
				
			||||||
 | 
					        migrations.AddField(
 | 
				
			||||||
 | 
					            model_name='dclcalculatorpluginmodel',
 | 
				
			||||||
 | 
					            name='enable_512mb_ram',
 | 
				
			||||||
 | 
					            field=models.BooleanField(default=False),
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,10 @@
 | 
				
			||||||
    /* ---------------------------------------------
 | 
					    /* ---------------------------------------------
 | 
				
			||||||
     Scripts initialization
 | 
					     Scripts initialization
 | 
				
			||||||
     --------------------------------------------- */
 | 
					     --------------------------------------------- */
 | 
				
			||||||
 | 
					    var minRam = 1;
 | 
				
			||||||
 | 
					    if(window.minRam){
 | 
				
			||||||
 | 
					        minRam = window.minRam;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    var cardPricing = {
 | 
					    var cardPricing = {
 | 
				
			||||||
        'cpu': {
 | 
					        'cpu': {
 | 
				
			||||||
            'id': 'coreValue',
 | 
					            'id': 'coreValue',
 | 
				
			||||||
| 
						 | 
					@ -16,7 +20,7 @@
 | 
				
			||||||
        'ram': {
 | 
					        'ram': {
 | 
				
			||||||
            'id': 'ramValue',
 | 
					            'id': 'ramValue',
 | 
				
			||||||
            'value': 2,
 | 
					            'value': 2,
 | 
				
			||||||
            'min': 1,
 | 
					            'min': minRam,
 | 
				
			||||||
            'max': 200,
 | 
					            'max': 200,
 | 
				
			||||||
            'interval': 1
 | 
					            'interval': 1
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
| 
						 | 
					@ -40,6 +44,7 @@
 | 
				
			||||||
        _initNavUrl();
 | 
					        _initNavUrl();
 | 
				
			||||||
        _initPricing();
 | 
					        _initPricing();
 | 
				
			||||||
        ajaxForms();
 | 
					        ajaxForms();
 | 
				
			||||||
 | 
					        $('#ramValue').data('old-value', $('#ramValue').val());
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $(window).resize(function() {
 | 
					    $(window).resize(function() {
 | 
				
			||||||
| 
						 | 
					@ -144,21 +149,54 @@
 | 
				
			||||||
            var data = $(this).data('minus');
 | 
					            var data = $(this).data('minus');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (cardPricing[data].value > cardPricing[data].min) {
 | 
					            if (cardPricing[data].value > cardPricing[data].min) {
 | 
				
			||||||
                cardPricing[data].value = Number(cardPricing[data].value) - cardPricing[data].interval;
 | 
					                if(data === 'ram' && String(cardPricing[data].value) === "1" && minRam === 0.5){
 | 
				
			||||||
 | 
					                    cardPricing[data].value = 0.5;
 | 
				
			||||||
 | 
					                    $('#ramValue').val('0.5');
 | 
				
			||||||
 | 
					                    $("#ramValue").attr('step', 0.5);
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    cardPricing[data].value = Number(cardPricing[data].value) - cardPricing[data].interval;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            _fetchPricing();
 | 
					            _fetchPricing();
 | 
				
			||||||
 | 
					            $('#ramValue').data('old-value', $('#ramValue').val());
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
        $('.fa-plus-circle.right').click(function(event) {
 | 
					        $('.fa-plus-circle.right').click(function(event) {
 | 
				
			||||||
            var data = $(this).data('plus');
 | 
					            var data = $(this).data('plus');
 | 
				
			||||||
            if (cardPricing[data].value < cardPricing[data].max) {
 | 
					            if (cardPricing[data].value < cardPricing[data].max) {
 | 
				
			||||||
                cardPricing[data].value = Number(cardPricing[data].value) + cardPricing[data].interval;
 | 
					                if(data === 'ram' && String(cardPricing[data].value) === "0.5" && minRam === 0.5){
 | 
				
			||||||
 | 
					                    cardPricing[data].value = 1;
 | 
				
			||||||
 | 
					                    $('#ramValue').val('1');
 | 
				
			||||||
 | 
					                    $("#ramValue").attr('step', 1);
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    cardPricing[data].value = Number(cardPricing[data].value) + cardPricing[data].interval;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            _fetchPricing();
 | 
					            _fetchPricing();
 | 
				
			||||||
 | 
					            $('#ramValue').data('old-value', $('#ramValue').val());
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $('.input-price').change(function() {
 | 
					        $('.input-price').change(function() {
 | 
				
			||||||
            var data = $(this).attr("name");
 | 
					            var data = $(this).attr("name");
 | 
				
			||||||
            cardPricing[data].value = $('input[name=' + data + ']').val();
 | 
					            var input = $('input[name=' + data + ']');
 | 
				
			||||||
 | 
					            var inputValue = input.val();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if(data === 'ram') {
 | 
				
			||||||
 | 
					                var ramInput = $('#ramValue');
 | 
				
			||||||
 | 
					                if ($('#ramValue').data('old-value') < $('#ramValue').val()) {
 | 
				
			||||||
 | 
					                    if($('#ramValue').val() === '1' && minRam === 0.5) {
 | 
				
			||||||
 | 
					                        $("#ramValue").attr('step', 1);
 | 
				
			||||||
 | 
					                        $('#ramValue').val('1');
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    if($('#ramValue').val() === '0' && minRam === 0.5) {
 | 
				
			||||||
 | 
					                        $("#ramValue").attr('step', 0.5);
 | 
				
			||||||
 | 
					                        $('#ramValue').val('0.5');
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                inputValue = $('#ramValue').val();
 | 
				
			||||||
 | 
					                $('#ramValue').data('old-value', $('#ramValue').val());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            cardPricing[data].value = inputValue;
 | 
				
			||||||
            _fetchPricing();
 | 
					            _fetchPricing();
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,11 +9,14 @@
 | 
				
			||||||
        window.ssdUnitPrice = {{vm_pricing.ssd_unit_price|default:0}};
 | 
					        window.ssdUnitPrice = {{vm_pricing.ssd_unit_price|default:0}};
 | 
				
			||||||
        window.hddUnitPrice = {{vm_pricing.hdd_unit_price|default:0}};
 | 
					        window.hddUnitPrice = {{vm_pricing.hdd_unit_price|default:0}};
 | 
				
			||||||
        window.discountAmount = {{vm_pricing.discount_amount|default:0}};
 | 
					        window.discountAmount = {{vm_pricing.discount_amount|default:0}};
 | 
				
			||||||
 | 
					        window.minRam = {{min_ram}};
 | 
				
			||||||
 | 
					        window.minRamErr = '{% blocktrans with min_ram=min_ram %}Please enter a value in range {{min_ram}} - 200.{% endblocktrans %}';
 | 
				
			||||||
    </script>
 | 
					    </script>
 | 
				
			||||||
{% endif %}
 | 
					{% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<form id="order_form" method="POST" action="{{calculator_form_url}}" data-toggle="validator" role="form">
 | 
					<form id="order_form" method="POST" action="{{calculator_form_url}}" data-toggle="validator" role="form">
 | 
				
			||||||
    {% csrf_token %}
 | 
					    {% csrf_token %}
 | 
				
			||||||
 | 
					    <input type="hidden" name="pid" value="{{instance.id}}">
 | 
				
			||||||
    <div class="title">
 | 
					    <div class="title">
 | 
				
			||||||
        <h3>{% trans "VM hosting" %} </h3>
 | 
					        <h3>{% trans "VM hosting" %} </h3>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
| 
						 | 
					@ -54,8 +57,8 @@
 | 
				
			||||||
        <div class="form-group">
 | 
					        <div class="form-group">
 | 
				
			||||||
            <div class="description input">
 | 
					            <div class="description input">
 | 
				
			||||||
                <i class="fa fa-minus-circle left" data-minus="ram" aria-hidden="true"></i>
 | 
					                <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="1" max="200" name="ram"
 | 
					                <input id="ramValue" class="input-price select-number" type="number" min="{% if min_ram == 0.5 %}0{% else %}1{% endif %}" max="200" name="ram"
 | 
				
			||||||
                       data-error="{% trans 'Please enter a value in range 1 - 200.' %}" required>
 | 
					                       data-error="{% blocktrans with min_ram=min_ram %}Please enter a value in range {{min_ram}} - 200.{% endblocktrans %}" required step="1">
 | 
				
			||||||
                <span> GB RAM</span>
 | 
					                <span> GB RAM</span>
 | 
				
			||||||
                <i class="fa fa-plus-circle right" data-plus="ram" aria-hidden="true"></i>
 | 
					                <i class="fa fa-plus-circle right" data-plus="ram" aria-hidden="true"></i>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
| 
						 | 
					@ -92,11 +95,11 @@
 | 
				
			||||||
            <select name="config">
 | 
					            <select name="config">
 | 
				
			||||||
                {% for template in templates %}
 | 
					                {% for template in templates %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                <option value="{{template.opennebula_vm_template_id}}" {% if template.name|lower == default_selected_template|lower %}selected="selected"{% endif %}>{{template.name}}</option>
 | 
					                <option value="{{template.opennebula_vm_template_id}}" {% if template.name|lower == instance.default_selected_template|lower %}selected="selected"{% endif %}>{{template.name}}</option>
 | 
				
			||||||
                {% endfor %}
 | 
					                {% endfor %}
 | 
				
			||||||
            </select>
 | 
					            </select>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    <input type="hidden" name="pricing_name" value="{% if vm_pricing.name %}{{vm_pricing.name}}{% else %}unknown{% endif%}"></input>
 | 
					    <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>
 | 
					    <input type="submit" class="btn btn-primary disabled" value="{% trans 'Continue' %}"></input>
 | 
				
			||||||
</form>
 | 
					</form>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,6 +27,7 @@ from utils.forms import (
 | 
				
			||||||
from utils.hosting_utils import get_vm_price_with_vat
 | 
					from utils.hosting_utils import get_vm_price_with_vat
 | 
				
			||||||
from utils.stripe_utils import StripeUtils
 | 
					from utils.stripe_utils import StripeUtils
 | 
				
			||||||
from utils.tasks import send_plain_email_task
 | 
					from utils.tasks import send_plain_email_task
 | 
				
			||||||
 | 
					from .cms_models import DCLCalculatorPluginModel
 | 
				
			||||||
from .forms import ContactForm
 | 
					from .forms import ContactForm
 | 
				
			||||||
from .models import VMTemplate, VMPricing
 | 
					from .models import VMTemplate, VMPricing
 | 
				
			||||||
from .utils import get_cms_integration, create_vm, clear_all_session_vars
 | 
					from .utils import get_cms_integration, create_vm, clear_all_session_vars
 | 
				
			||||||
| 
						 | 
					@ -89,7 +90,29 @@ class IndexView(CreateView):
 | 
				
			||||||
            raise ValidationError(_('Invalid number of cores'))
 | 
					            raise ValidationError(_('Invalid number of cores'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def validate_memory(self, value):
 | 
					    def validate_memory(self, value):
 | 
				
			||||||
        if (value > 200) or (value < 1):
 | 
					        if 'pid' in self.request.POST:
 | 
				
			||||||
 | 
					            try:
 | 
				
			||||||
 | 
					                plugin = DCLCalculatorPluginModel.objects.get(
 | 
				
			||||||
 | 
					                             id=self.request.POST['pid']
 | 
				
			||||||
 | 
					                         )
 | 
				
			||||||
 | 
					            except DCLCalculatorPluginModel.DoesNotExist as dne:
 | 
				
			||||||
 | 
					                logger.error(
 | 
				
			||||||
 | 
					                    str(dne) + " plugin_id: " + self.request.POST['pid']
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					                raise ValidationError(_('Invalid calculator properties'))
 | 
				
			||||||
 | 
					            if plugin.enable_512mb_ram:
 | 
				
			||||||
 | 
					                if value % 1 == 0 or value == 0.5:
 | 
				
			||||||
 | 
					                    logger.debug(
 | 
				
			||||||
 | 
					                        "Given ram {value} is either 0.5 or a"
 | 
				
			||||||
 | 
					                        " whole number".format(value=value)
 | 
				
			||||||
 | 
					                    )
 | 
				
			||||||
 | 
					                    if (value > 200) or (value < 0.5):
 | 
				
			||||||
 | 
					                        raise ValidationError(_('Invalid RAM size'))
 | 
				
			||||||
 | 
					                else:
 | 
				
			||||||
 | 
					                    raise ValidationError(_('Invalid RAM size'))
 | 
				
			||||||
 | 
					            elif (value > 200) or (value < 1) or (value % 1 != 0):
 | 
				
			||||||
 | 
					                raise ValidationError(_('Invalid RAM size'))
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
            raise ValidationError(_('Invalid RAM size'))
 | 
					            raise ValidationError(_('Invalid RAM size'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def validate_storage(self, value):
 | 
					    def validate_storage(self, value):
 | 
				
			||||||
| 
						 | 
					@ -105,7 +128,7 @@ class IndexView(CreateView):
 | 
				
			||||||
        cores = request.POST.get('cpu')
 | 
					        cores = request.POST.get('cpu')
 | 
				
			||||||
        cores_field = forms.IntegerField(validators=[self.validate_cores])
 | 
					        cores_field = forms.IntegerField(validators=[self.validate_cores])
 | 
				
			||||||
        memory = request.POST.get('ram')
 | 
					        memory = request.POST.get('ram')
 | 
				
			||||||
        memory_field = forms.IntegerField(validators=[self.validate_memory])
 | 
					        memory_field = forms.FloatField(validators=[self.validate_memory])
 | 
				
			||||||
        storage = request.POST.get('storage')
 | 
					        storage = request.POST.get('storage')
 | 
				
			||||||
        storage_field = forms.IntegerField(validators=[self.validate_storage])
 | 
					        storage_field = forms.IntegerField(validators=[self.validate_storage])
 | 
				
			||||||
        template_id = int(request.POST.get('config'))
 | 
					        template_id = int(request.POST.get('config'))
 | 
				
			||||||
| 
						 | 
					@ -174,7 +197,7 @@ class IndexView(CreateView):
 | 
				
			||||||
            'vat': vat,
 | 
					            'vat': vat,
 | 
				
			||||||
            'vat_percent': vat_percent,
 | 
					            'vat_percent': vat_percent,
 | 
				
			||||||
            'discount': discount,
 | 
					            'discount': discount,
 | 
				
			||||||
            'total_price': price + vat - discount['amount'],
 | 
					            'total_price': round(price + vat - discount['amount'], 2),
 | 
				
			||||||
            'pricing_name': vm_pricing_name
 | 
					            'pricing_name': vm_pricing_name
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        request.session['specs'] = specs
 | 
					        request.session['specs'] = specs
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -157,6 +157,10 @@ $( document ).ready(function() {
 | 
				
			||||||
    /* ---------------------------------------------
 | 
					    /* ---------------------------------------------
 | 
				
			||||||
     Scripts initialization
 | 
					     Scripts initialization
 | 
				
			||||||
     --------------------------------------------- */
 | 
					     --------------------------------------------- */
 | 
				
			||||||
 | 
					    var minRam = 1;
 | 
				
			||||||
 | 
					    if(window.minRam){
 | 
				
			||||||
 | 
					        minRam = window.minRam;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    var cardPricing = {
 | 
					    var cardPricing = {
 | 
				
			||||||
        'cpu': {
 | 
					        'cpu': {
 | 
				
			||||||
            'id': 'coreValue',
 | 
					            'id': 'coreValue',
 | 
				
			||||||
| 
						 | 
					@ -168,7 +172,7 @@ $( document ).ready(function() {
 | 
				
			||||||
        'ram': {
 | 
					        'ram': {
 | 
				
			||||||
            'id': 'ramValue',
 | 
					            'id': 'ramValue',
 | 
				
			||||||
            'value': 2,
 | 
					            'value': 2,
 | 
				
			||||||
            'min': 1,
 | 
					            'min': minRam,
 | 
				
			||||||
            'max': 200,
 | 
					            'max': 200,
 | 
				
			||||||
            'interval': 1
 | 
					            'interval': 1
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
| 
						 | 
					@ -188,21 +192,54 @@ $( document ).ready(function() {
 | 
				
			||||||
            var data = $(this).data('minus');
 | 
					            var data = $(this).data('minus');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (cardPricing[data].value > cardPricing[data].min) {
 | 
					            if (cardPricing[data].value > cardPricing[data].min) {
 | 
				
			||||||
                cardPricing[data].value = Number(cardPricing[data].value) - cardPricing[data].interval;
 | 
					                if(data === 'ram' && String(cardPricing[data].value) === "1" && minRam === 0.5){
 | 
				
			||||||
 | 
					                    cardPricing[data].value = 0.5;
 | 
				
			||||||
 | 
					                    $('#ramValue').val('0.5');
 | 
				
			||||||
 | 
					                    $("#ramValue").attr('step', 0.5);
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    cardPricing[data].value = Number(cardPricing[data].value) - cardPricing[data].interval;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            _fetchPricing();
 | 
					            _fetchPricing();
 | 
				
			||||||
 | 
					            $('#ramValue').data('old-value', $('#ramValue').val());
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
        $('.fa-plus-circle.right').click(function(event) {
 | 
					        $('.fa-plus-circle.right').click(function(event) {
 | 
				
			||||||
            var data = $(this).data('plus');
 | 
					            var data = $(this).data('plus');
 | 
				
			||||||
            if (cardPricing[data].value < cardPricing[data].max) {
 | 
					            if (cardPricing[data].value < cardPricing[data].max) {
 | 
				
			||||||
                cardPricing[data].value = Number(cardPricing[data].value) + cardPricing[data].interval;
 | 
					                if(data === 'ram' && String(cardPricing[data].value) === "0.5" && minRam === 0.5){
 | 
				
			||||||
 | 
					                    cardPricing[data].value = 1;
 | 
				
			||||||
 | 
					                    $('#ramValue').val('1');
 | 
				
			||||||
 | 
					                    $("#ramValue").attr('step', 1);
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    cardPricing[data].value = Number(cardPricing[data].value) + cardPricing[data].interval;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            _fetchPricing();
 | 
					            _fetchPricing();
 | 
				
			||||||
 | 
					            $('#ramValue').data('old-value', $('#ramValue').val());
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $('.input-price').change(function() {
 | 
					        $('.input-price').change(function() {
 | 
				
			||||||
            var data = $(this).attr("name");
 | 
					            var data = $(this).attr("name");
 | 
				
			||||||
            cardPricing[data].value = $('input[name=' + data + ']').val();
 | 
					            var input = $('input[name=' + data + ']');
 | 
				
			||||||
 | 
					            var inputValue = input.val();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if(data === 'ram') {
 | 
				
			||||||
 | 
					                var ramInput = $('#ramValue');
 | 
				
			||||||
 | 
					                if ($('#ramValue').data('old-value') < $('#ramValue').val()) {
 | 
				
			||||||
 | 
					                    if($('#ramValue').val() === '1' && minRam === 0.5) {
 | 
				
			||||||
 | 
					                        $("#ramValue").attr('step', 1);
 | 
				
			||||||
 | 
					                        $('#ramValue').val('1');
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    if($('#ramValue').val() === '0' && minRam === 0.5) {
 | 
				
			||||||
 | 
					                        $("#ramValue").attr('step', 0.5);
 | 
				
			||||||
 | 
					                        $('#ramValue').val('0.5');
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                inputValue = $('#ramValue').val();
 | 
				
			||||||
 | 
					                $('#ramValue').data('old-value', $('#ramValue').val());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            cardPricing[data].value = inputValue;
 | 
				
			||||||
            _fetchPricing();
 | 
					            _fetchPricing();
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -236,4 +273,5 @@ $( document ).ready(function() {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    _initPricing();
 | 
					    _initPricing();
 | 
				
			||||||
});
 | 
					    $('#ramValue').data('old-value', $('#ramValue').val());
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,6 +32,7 @@ from stored_messages.api import mark_read
 | 
				
			||||||
from stored_messages.models import Message
 | 
					from stored_messages.models import Message
 | 
				
			||||||
from stored_messages.settings import stored_messages_settings
 | 
					from stored_messages.settings import stored_messages_settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from datacenterlight.cms_models import DCLCalculatorPluginModel
 | 
				
			||||||
from datacenterlight.models import VMTemplate, VMPricing
 | 
					from datacenterlight.models import VMTemplate, VMPricing
 | 
				
			||||||
from datacenterlight.utils import create_vm, get_cms_integration
 | 
					from datacenterlight.utils import create_vm, get_cms_integration
 | 
				
			||||||
from hosting.models import UserCardDetail
 | 
					from hosting.models import UserCardDetail
 | 
				
			||||||
| 
						 | 
					@ -1198,7 +1199,29 @@ class CreateVirtualMachinesView(LoginRequiredMixin, View):
 | 
				
			||||||
            raise ValidationError(_('Invalid number of cores'))
 | 
					            raise ValidationError(_('Invalid number of cores'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def validate_memory(self, value):
 | 
					    def validate_memory(self, value):
 | 
				
			||||||
        if (value > 200) or (value < 1):
 | 
					        if 'pid' in self.request.POST:
 | 
				
			||||||
 | 
					            try:
 | 
				
			||||||
 | 
					                plugin = DCLCalculatorPluginModel.objects.get(
 | 
				
			||||||
 | 
					                             id=self.request.POST['pid']
 | 
				
			||||||
 | 
					                         )
 | 
				
			||||||
 | 
					            except DCLCalculatorPluginModel.DoesNotExist as dne:
 | 
				
			||||||
 | 
					                logger.error(
 | 
				
			||||||
 | 
					                    str(dne) + " plugin_id: " + self.request.POST['pid']
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					                raise ValidationError(_('Invalid calculator properties'))
 | 
				
			||||||
 | 
					            if plugin.enable_512mb_ram:
 | 
				
			||||||
 | 
					                if value % 1 == 0 or value == 0.5:
 | 
				
			||||||
 | 
					                    logger.debug(
 | 
				
			||||||
 | 
					                        "Given ram {value} is either 0.5 or a"
 | 
				
			||||||
 | 
					                        " whole number".format(value=value)
 | 
				
			||||||
 | 
					                    )
 | 
				
			||||||
 | 
					                    if (value > 200) or (value < 0.5):
 | 
				
			||||||
 | 
					                        raise ValidationError(_('Invalid RAM size'))
 | 
				
			||||||
 | 
					                else:
 | 
				
			||||||
 | 
					                    raise ValidationError(_('Invalid RAM size'))
 | 
				
			||||||
 | 
					            elif (value > 200) or (value < 1) or (value % 1 != 0):
 | 
				
			||||||
 | 
					                raise ValidationError(_('Invalid RAM size'))
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
            raise ValidationError(_('Invalid RAM size'))
 | 
					            raise ValidationError(_('Invalid RAM size'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def validate_storage(self, value):
 | 
					    def validate_storage(self, value):
 | 
				
			||||||
| 
						 | 
					@ -1218,7 +1241,7 @@ class CreateVirtualMachinesView(LoginRequiredMixin, View):
 | 
				
			||||||
        cores = request.POST.get('cpu')
 | 
					        cores = request.POST.get('cpu')
 | 
				
			||||||
        cores_field = forms.IntegerField(validators=[self.validate_cores])
 | 
					        cores_field = forms.IntegerField(validators=[self.validate_cores])
 | 
				
			||||||
        memory = request.POST.get('ram')
 | 
					        memory = request.POST.get('ram')
 | 
				
			||||||
        memory_field = forms.IntegerField(validators=[self.validate_memory])
 | 
					        memory_field = forms.FloatField(validators=[self.validate_memory])
 | 
				
			||||||
        storage = request.POST.get('storage')
 | 
					        storage = request.POST.get('storage')
 | 
				
			||||||
        storage_field = forms.IntegerField(validators=[self.validate_storage])
 | 
					        storage_field = forms.IntegerField(validators=[self.validate_storage])
 | 
				
			||||||
        template_id = int(request.POST.get('config'))
 | 
					        template_id = int(request.POST.get('config'))
 | 
				
			||||||
| 
						 | 
					@ -1282,7 +1305,7 @@ class CreateVirtualMachinesView(LoginRequiredMixin, View):
 | 
				
			||||||
            'price': price,
 | 
					            'price': price,
 | 
				
			||||||
            'vat': vat,
 | 
					            'vat': vat,
 | 
				
			||||||
            'vat_percent': vat_percent,
 | 
					            'vat_percent': vat_percent,
 | 
				
			||||||
            'total_price': price + vat - discount['amount'],
 | 
					            'total_price': round(price + vat - discount['amount'], 2),
 | 
				
			||||||
            'pricing_name': vm_pricing_name
 | 
					            'pricing_name': vm_pricing_name
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -249,8 +249,8 @@ class OpenNebulaManager():
 | 
				
			||||||
            vm_specs = vm_specs_formatter.format(
 | 
					            vm_specs = vm_specs_formatter.format(
 | 
				
			||||||
                vcpu=int(specs['cpu']),
 | 
					                vcpu=int(specs['cpu']),
 | 
				
			||||||
                cpu=0.1 * int(specs['cpu']),
 | 
					                cpu=0.1 * int(specs['cpu']),
 | 
				
			||||||
                memory=1024 * int(specs['memory']),
 | 
					                memory=(512 if specs['memory'] == 0.5 else
 | 
				
			||||||
 | 
					                        1024 * int(specs['memory'])),
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
            vm_specs += """<DISK>
 | 
					            vm_specs += """<DISK>
 | 
				
			||||||
                                  <TYPE>fs</TYPE>
 | 
					                                  <TYPE>fs</TYPE>
 | 
				
			||||||
| 
						 | 
					@ -269,8 +269,8 @@ class OpenNebulaManager():
 | 
				
			||||||
            vm_specs = vm_specs_formatter.format(
 | 
					            vm_specs = vm_specs_formatter.format(
 | 
				
			||||||
                vcpu=int(specs['cpu']),
 | 
					                vcpu=int(specs['cpu']),
 | 
				
			||||||
                cpu=0.1 * int(specs['cpu']),
 | 
					                cpu=0.1 * int(specs['cpu']),
 | 
				
			||||||
                memory=1024 * int(specs['memory']),
 | 
					                memory=(512 if specs['memory'] == 0.5 else
 | 
				
			||||||
 | 
					                        1024 * int(specs['memory'])),
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
            vm_specs += """<DISK>
 | 
					            vm_specs += """<DISK>
 | 
				
			||||||
                                  <TYPE>fs</TYPE>
 | 
					                                  <TYPE>fs</TYPE>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue