As an admin I can change the VM ip using admin panel ,Fixed notification view count label, Fixed hosting company name on payment view, Added configuration in VM hosting page, Admin can changes the VM configuration using admin panel
This commit is contained in:
parent
0cb7645b50
commit
1d83d4de79
18 changed files with 165 additions and 18 deletions
21
hosting/migrations/0022_virtualmachineplan_ip.py
Normal file
21
hosting/migrations/0022_virtualmachineplan_ip.py
Normal file
|
@ -0,0 +1,21 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.4 on 2016-06-07 00:52
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('hosting', '0021_auto_20160526_0445'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='virtualmachineplan',
|
||||
name='ip',
|
||||
field=models.CharField(default='127.0.0.1', max_length=50),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
21
hosting/migrations/0023_virtualmachineplan_configutarion.py
Normal file
21
hosting/migrations/0023_virtualmachineplan_configutarion.py
Normal file
|
@ -0,0 +1,21 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.4 on 2016-06-07 02:13
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('hosting', '0022_virtualmachineplan_ip'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='virtualmachineplan',
|
||||
name='configutarion',
|
||||
field=models.CharField(choices=[('django', 'Ubuntu 14.04, Django'), ('rails', 'Ubuntu 14.04, Rails'), ('nodejs', 'Debian, NodeJS')], default='django', max_length=20),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
20
hosting/migrations/0024_auto_20160607_0231.py
Normal file
20
hosting/migrations/0024_auto_20160607_0231.py
Normal file
|
@ -0,0 +1,20 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.4 on 2016-06-07 02:31
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('hosting', '0023_virtualmachineplan_configutarion'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name='virtualmachineplan',
|
||||
old_name='configutarion',
|
||||
new_name='configuration',
|
||||
),
|
||||
]
|
|
@ -10,7 +10,9 @@ class ProcessVMSelectionMixin(object):
|
|||
'memory': request.POST.get('memory'),
|
||||
'disk_size': request.POST.get('disk_space'),
|
||||
'hosting_company': request.POST.get('hosting_company'),
|
||||
'hosting_company_name': request.POST.get('hosting_company_name'),
|
||||
'location_code': request.POST.get('location_code'),
|
||||
'configuration': request.POST.get('configuration'),
|
||||
'configuration_detail': request.POST.get('configuration_detail'),
|
||||
'final_price': request.POST.get('final_price')
|
||||
}
|
||||
request.session['vm_specs'] = vm_specs
|
||||
|
|
|
@ -35,6 +35,7 @@ class VirtualMachineType(models.Model):
|
|||
(DE_LOCATION, 'Germany'),
|
||||
(CH_LOCATION, 'Switzerland'),
|
||||
)
|
||||
|
||||
description = models.TextField()
|
||||
base_price = models.FloatField()
|
||||
memory_price = models.FloatField()
|
||||
|
@ -93,13 +94,25 @@ class VirtualMachinePlan(models.Model):
|
|||
(CANCELED_STATUS, 'Canceled')
|
||||
)
|
||||
|
||||
DJANGO = 'django'
|
||||
RAILS = 'rails'
|
||||
NODEJS = 'nodejs'
|
||||
|
||||
VM_CONFIGURATION = (
|
||||
(DJANGO, 'Ubuntu 14.04, Django'),
|
||||
(RAILS, 'Ubuntu 14.04, Rails'),
|
||||
(NODEJS, 'Debian, NodeJS'),
|
||||
)
|
||||
|
||||
cores = models.IntegerField()
|
||||
memory = models.IntegerField()
|
||||
disk_size = models.IntegerField()
|
||||
vm_type = models.ForeignKey(VirtualMachineType)
|
||||
price = models.FloatField()
|
||||
public_key = models.TextField()
|
||||
public_key = models.TextField(blank=True)
|
||||
status = models.CharField(max_length=20, choices=VM_STATUS_CHOICES, default=PENDING_STATUS)
|
||||
ip = models.CharField(max_length=50, blank=True)
|
||||
configuration = models.CharField(max_length=20, choices=VM_CONFIGURATION)
|
||||
|
||||
objects = VMPlansManager()
|
||||
|
||||
|
|
|
@ -39,4 +39,8 @@
|
|||
.virtual-machine-container .tabs-right>li>a {
|
||||
border-radius: 0 4px 4px 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.virtual-machine-container .right-place{
|
||||
margin-top: 15px;
|
||||
}
|
|
@ -29,7 +29,7 @@ $( document ).ready(function() {
|
|||
|
||||
$('[data-toggle="tooltip"]').tooltip();
|
||||
|
||||
var clipboard = new Clipboard('#copy_to_clipboard');
|
||||
var clipboard = new Clipboard('.to_copy');
|
||||
|
||||
clipboard.on('success', function(e) {
|
||||
var selector = "#";
|
||||
|
|
16
hosting/static/hosting/js/initial.js
Normal file
16
hosting/static/hosting/js/initial.js
Normal file
|
@ -0,0 +1,16 @@
|
|||
$( document ).ready(function() {
|
||||
|
||||
|
||||
$('[data-toggle="tooltip"]').tooltip();
|
||||
|
||||
var clipboard = new Clipboard('.to_copy');
|
||||
|
||||
clipboard.on('success', function(e) {
|
||||
var selector = "#";
|
||||
var copy_button_id = selector.concat(e.trigger.id);
|
||||
setTimeout(function(){
|
||||
$(copy_button_id).tooltip('hide');
|
||||
}, 1000);
|
||||
});
|
||||
|
||||
});
|
|
@ -53,7 +53,7 @@
|
|||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand topnav" href="#"><img src="{% static 'hosting/img/logo_black.svg' %}"></a>
|
||||
<a class="navbar-brand topnav" href="{% url 'ungleich_page:landing' %}"><img src="{% static 'hosting/img/logo_black.svg' %}"></a>
|
||||
</div>
|
||||
<!-- Collect the nav links, forms, and other content for toggling -->
|
||||
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
||||
|
@ -161,6 +161,9 @@
|
|||
<!-- Bootstrap Core JavaScript -->
|
||||
<script src="{% static 'hosting/js/bootstrap.min.js' %}"></script>
|
||||
|
||||
<!-- Init JavaScript -->
|
||||
<script src="{% static 'hosting/js/initial.js' %}"></script>
|
||||
|
||||
<!-- Stripe Lib -->
|
||||
<script type="text/javascript" src="//js.stripe.com/v2/"></script>
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand topnav" href="#"><img src="{% static 'hosting/img/logo_black.svg' %}"></a>
|
||||
<a class="navbar-brand topnav" href="{% url 'ungleich_page:landing' %}"><img src="{% static 'hosting/img/logo_black.svg' %}"></a>
|
||||
</div>
|
||||
<!-- Collect the nav links, forms, and other content for toggling -->
|
||||
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
||||
|
|
|
@ -23,7 +23,9 @@
|
|||
<form class="form-inline" method="POST" action="{{request.path}}">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="hosting_company" value="{{vm.hosting_company}}">
|
||||
<input type="hidden" name="hosting_company_name" value="{{vm.hosting_company_name}}">
|
||||
<input type="hidden" name="location_code" value="{{vm.location_code}}">
|
||||
<input type="hidden" name="configuration_detail" value="{{configuration_detail}}">
|
||||
<input type="hidden" name="configuration" value="{{hosting}}">
|
||||
|
||||
|
||||
<ul class="pricing {% cycle 'p-red' 'p-black' 'p-red' 'p-yel' %}">
|
||||
|
@ -43,6 +45,15 @@
|
|||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<!-- Single button -->
|
||||
<div class="btn-group">
|
||||
<div class="form-group">
|
||||
<label for="cores">Configuration: </label>
|
||||
{{configuration_detail}}
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<!-- Single button -->
|
||||
<div class="btn-group">
|
||||
|
|
|
@ -13,7 +13,12 @@
|
|||
<ul class="nav nav-tabs tabs-left sideways">
|
||||
<li class="active">
|
||||
<a href="#unread-v" data-toggle="tab">
|
||||
Unread <span class="badge">{{unread_notifications|length}}</span>
|
||||
Unread
|
||||
{% if unread_notifications|length > 0%}
|
||||
<span class="badge">
|
||||
{{unread_notifications|length}}
|
||||
</span>
|
||||
{% endif %}
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
|
|
|
@ -50,6 +50,8 @@
|
|||
<div class="content">
|
||||
<p><b>Type</b> <span class="pull-right">{{order.vm_plan.hosting_company_name}}</span></p>
|
||||
<hr>
|
||||
<p><b>Configuration</b> <span class="pull-right">{{order.vm_plan.get_configuration_display}}</span></p>
|
||||
<hr>
|
||||
<p><b>Cores</b> <span class="pull-right">{{order.vm_plan.cores}}</span></p>
|
||||
<hr>
|
||||
<p><b>Memory</b> <span class="pull-right">{{order.vm_plan.memory}} GiB</span></p>
|
||||
|
|
|
@ -86,10 +86,12 @@
|
|||
<h3><b>Billing Amount</b></h3>
|
||||
<hr>
|
||||
<div class="content">
|
||||
<p><b>Type</b> <span class="pull-right">{{request.session.vm_specs.hosting_company_name}}</span></p>
|
||||
<p><b>Type</b> <span class="pull-right">{{request.session.vm_specs.location_code}}</span></p>
|
||||
<hr>
|
||||
<p><b>Cores</b> <span class="pull-right">{{request.session.vm_specs.cores}}</span></p>
|
||||
<hr>
|
||||
<p><b>Configuration</b> <span class="pull-right">{{request.session.vm_specs.configuration_detail}}</span></p>
|
||||
<hr>
|
||||
<p><b>Memory</b> <span class="pull-right">{{request.session.vm_specs.memory}} GiB</span></p>
|
||||
<hr>
|
||||
<p><b>Disk space</b> <span class="pull-right">{{request.session.vm_specs.disk_size}} GiB</span></p>
|
||||
|
|
|
@ -42,9 +42,27 @@
|
|||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="settings-v">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="col-md-12 inline-headers">
|
||||
<h3>{{virtual_machine.hosting_company_name}}</h3>
|
||||
|
||||
{% if virtual_machine.ip %}
|
||||
<div class="pull-right right-place">
|
||||
<button type="link" data-clipboard-text="{{virtual_machine.ip}}" id="copy_vm_id" class="to_copy btn btn-link"
|
||||
data-toggle="tooltip" data-placement="bottom" title="Copied" data-trigger="click">
|
||||
Ip: {{virtual_machine.ip}} <i class="fa fa-files-o" aria-hidden="true"></i>
|
||||
</button>
|
||||
</div>
|
||||
{% else %}
|
||||
|
||||
<div class="pull-right right-place">
|
||||
<span class="label label-warning"><strong>Ip not assigned yet</strong></span>
|
||||
<i data-toggle="tooltip" title="Your ip will be assigned soon" class="fa fa-info-circle" aria-hidden="true"></i>
|
||||
</div>
|
||||
|
||||
{% endif %}
|
||||
|
||||
<hr>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
|
|
|
@ -7,7 +7,6 @@ from .views import DjangoHostingView, RailsHostingView, PaymentVMView,\
|
|||
MarkAsReadNotificationView
|
||||
|
||||
urlpatterns = [
|
||||
# url(r'pricing/?$', VMPricingView.as_view(), name='pricing'),
|
||||
url(r'index/?$', IndexView.as_view(), name='index'),
|
||||
url(r'django/?$', DjangoHostingView.as_view(), name='djangohosting'),
|
||||
url(r'nodejs/?$', NodeJSHostingView.as_view(), name='nodejshosting'),
|
||||
|
|
|
@ -27,9 +27,12 @@ class DjangoHostingView(ProcessVMSelectionMixin, View):
|
|||
template_name = "hosting/django.html"
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
HOSTING = 'django'
|
||||
configuration_detail = dict(VirtualMachinePlan.VM_CONFIGURATION).get(HOSTING)
|
||||
context = {
|
||||
'hosting': "django",
|
||||
'hosting': HOSTING,
|
||||
'hosting_long': "Django",
|
||||
'configuration_detail': configuration_detail,
|
||||
'domain': "django-hosting.ch",
|
||||
'google_analytics': "UA-62285904-6",
|
||||
'email': "info@django-hosting.ch",
|
||||
|
@ -49,8 +52,11 @@ class RailsHostingView(ProcessVMSelectionMixin, View):
|
|||
template_name = "hosting/rails.html"
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
HOSTING = 'rails'
|
||||
configuration_detail = dict(VirtualMachinePlan.VM_CONFIGURATION).get(HOSTING)
|
||||
context = {
|
||||
'hosting': "rails",
|
||||
'hosting': HOSTING,
|
||||
'configuration_detail': configuration_detail,
|
||||
'hosting_long': "Ruby On Rails",
|
||||
'domain': "rails-hosting.ch",
|
||||
'google_analytics': "UA-62285904-5",
|
||||
|
@ -69,9 +75,12 @@ class NodeJSHostingView(ProcessVMSelectionMixin, View):
|
|||
template_name = "hosting/nodejs.html"
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
HOSTING = 'nodejs'
|
||||
configuration_detail = dict(VirtualMachinePlan.VM_CONFIGURATION).get(HOSTING)
|
||||
context = {
|
||||
'hosting': "nodejs",
|
||||
'hosting_long': "NodeJS",
|
||||
'configuration_detail': configuration_detail,
|
||||
'domain': "node-hosting.ch",
|
||||
'google_analytics': "UA-62285904-7",
|
||||
'email': "info@node-hosting.ch",
|
||||
|
@ -230,6 +239,7 @@ class PaymentVMView(LoginRequiredMixin, FormView):
|
|||
'cores': specifications.get('cores'),
|
||||
'memory': specifications.get('memory'),
|
||||
'disk_size': specifications.get('disk_size'),
|
||||
'configuration': specifications.get('configuration'),
|
||||
'price': final_price
|
||||
}
|
||||
token = form.cleaned_data.get('token')
|
||||
|
@ -289,11 +299,11 @@ class PaymentVMView(LoginRequiredMixin, FormView):
|
|||
email = BaseEmail(**email_data)
|
||||
email.send()
|
||||
|
||||
request.session.update({
|
||||
'charge': charge,
|
||||
'order': order.id,
|
||||
'billing_address': billing_address.id
|
||||
})
|
||||
# request.session.update({
|
||||
# 'charge': charge,
|
||||
# 'order': order.id,
|
||||
# 'billing_address': billing_address.id
|
||||
# })
|
||||
return HttpResponseRedirect(reverse('hosting:orders', kwargs={'pk': order.id}))
|
||||
else:
|
||||
return self.form_invalid(form)
|
||||
|
|
|
@ -4,6 +4,6 @@ from django.utils.translation import ugettext_lazy as _
|
|||
|
||||
urlpatterns = [
|
||||
url(r'^$', LandingView.as_view(), name='landing'),
|
||||
url(r'^ungleich_page/?$', LandingView.as_view(), name='landing'),
|
||||
# url(r'^ungleich_page/?$', LandingView.as_view(), name='landing'),
|
||||
url(_(r'contact/$'), ContactView.as_view(), name='contact'),
|
||||
]
|
||||
|
|
Loading…
Reference in a new issue