Merge pull request #85 from levivm/develop
As an admin I can change the VM ip using admin panel ,Fixed notificat…
This commit is contained in:
commit
ac382d42b9
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