diff --git a/hosting/templates/hosting/orders.html b/hosting/templates/hosting/orders.html index 99c6464f..2b262de3 100644 --- a/hosting/templates/hosting/orders.html +++ b/hosting/templates/hosting/orders.html @@ -1,64 +1,101 @@ {% extends "hosting/base_short.html" %} {% load staticfiles bootstrap3 %} -{% block content %} +{% block content %} -<div> - <div class="container orders-container"> - <div class="row"> - <div class="col-md-8 col-md-offset-2"> - <table class="table borderless table-hover"> - <h3><i class="fa fa-credit-card"></i> My Orders</h3> - <br/> - <thead> - <tr> - <th>#</th> - <th>Date</th> - <th>Amount</th> - <th>Status</th> - <th></th> - </tr> - </thead> - <tbody> - {% for order in orders %} - <tr> - <td scope="row">{{order.id}}</td> - <td>{{order.created_at}}</td> - <td>{{order.VMPlan.price}} CHF</td> - <td>{% if order.approved %} - <span class="text-success strong">Approved</span> - {% else%} - <span class="text-danger strong">Declined</span> - {% endif%} - </td> - <td> - <button type="button" class="btn btn-default"><a href="{% url 'hosting:orders' order.id %}">View Detail</a></button> - </td> - </tr> - {% endfor %} - </tbody> - </table> + <div> + <div class="container orders-container"> + <div class="row"> + <div class="col-md-8 col-md-offset-2"> + <table class="table borderless table-hover"> + <h3><i class="fa fa-credit-card"></i> My Orders</h3> + <br/> + <thead> + <tr> + <th>#</th> + <th>Date</th> + <th>Amount</th> + <th>Status</th> + <th></th> + </tr> + </thead> + <tbody> + {% for order in orders %} + <tr> + <td scope="row">{{ order.id }}</td> + <td>{{ order.created_at }}</td> + <td>{{ order.VMPlan.price }} CHF</td> + <td>{% if order.approved %} + <span class="text-success strong">Approved</span> + {% else %} + <span class="text-danger strong">Declined</span> + {% endif %} + </td> + <td> + <button type="button" class="btn btn-default"><a + href="{% url 'hosting:orders' order.id %}">View Detail</a> + </button> + <button type="button" class="btn btn-default" data-toggle="modal" + data-target="#Modal{{ order.id }}"><a + href="#">Cancel order</a> + </button> + </td> + </tr> + <div class="modal fade" id="Modal{{ order.id }}" tabindex="-1" role="dialog" + aria-labelledby="exampleModalLabel"> + <div class="modal-dialog" role="document"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" + aria-label="Confirm"><span + aria-hidden="true">×</span> + </button> + </div> + <div class="modal-body"> + <h4 class="modal-title" id="ModalLabel">Do You want do delete + Your + order?</h4> - {% if is_paginated %} - <div class="pagination"> + <form method="post" action="{% url 'hosting:delete_order' order.id %}"> + {% csrf_token %} + <div class="modal-footer"> + <button type="button" class="btn btn-default" + data-dismiss="modal"> + Close + </button> + <button type="submit" class="btn btn-primary">Delete + </button> + </div> + </form> + </div> + </div> + </div> + </div> + {% endfor %} + + </tbody> + </table> + + {% if is_paginated %} + <div class="pagination"> <span class="page-links"> {% if page_obj.has_previous %} - <a href="{{request.path}}?page={{ page_obj.previous_page_number }}">previous</a> - {% endif %} - <span class="page-current"> + <a href="{{ request.path }}?page={{ page_obj.previous_page_number }}">previous</a> + {% endif %} + <span class="page-current"> Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}. </span> - {% if page_obj.has_next %} - <a href="{{request.path}}?page={{ page_obj.next_page_number }}">next</a> - {% endif %} + {% if page_obj.has_next %} + <a href="{{ request.path }}?page={{ page_obj.next_page_number }}">next</a> + {% endif %} </span> - </div> - {% endif %} + </div> + {% endif %} - </div> + </div> - </div> - </div> + </div> + </div> -</div> + </div> -{%endblock%} \ No newline at end of file +{% endblock %} \ No newline at end of file diff --git a/hosting/urls.py b/hosting/urls.py index bb195b79..d280c904 100644 --- a/hosting/urls.py +++ b/hosting/urls.py @@ -3,7 +3,7 @@ from django.conf.urls import url from .views import DjangoHostingView, RailsHostingView, PaymentVMView, \ NodeJSHostingView, LoginView, SignupView, IndexView, \ OrdersHostingListView, OrdersHostingDetailView, VirtualMachinesPlanListView,\ - VirtualMachineDetailListView + VirtualMachineDetailListView,OrdersHostingDeleteView urlpatterns = [ # url(r'pricing/?$', VMPricingView.as_view(), name='pricing'), @@ -14,6 +14,7 @@ urlpatterns = [ url(r'payment/?$', PaymentVMView.as_view(), name='payment'), url(r'orders/?$', OrdersHostingListView.as_view(), name='orders'), url(r'orders/(?P<pk>\d+)/?$', OrdersHostingDetailView.as_view(), name='orders'), + url(r'cancel_order/(?P<pk>\d+)/?$',OrdersHostingDeleteView.as_view(),name='delete_order'), url(r'my-virtual-machines/?$', VirtualMachinesPlanListView.as_view(), name='virtual_machines'), url(r'my-virtual-machines/(?P<pk>\d+)/?$', VirtualMachineDetailListView.as_view(), name='virtual_machines'), diff --git a/hosting/views.py b/hosting/views.py index b0e76028..4157f936 100644 --- a/hosting/views.py +++ b/hosting/views.py @@ -3,7 +3,7 @@ from django.shortcuts import get_object_or_404, render from django.core.urlresolvers import reverse_lazy, reverse from django.contrib.auth.mixins import LoginRequiredMixin -from django.views.generic import View, CreateView, FormView, ListView, DetailView +from django.views.generic import View, CreateView, FormView, ListView, DetailView,DeleteView from django.http import HttpResponseRedirect from django.contrib.auth import authenticate, login from django.conf import settings @@ -124,7 +124,7 @@ class LoginView(FormView): class SignupView(CreateView): template_name = 'hosting/signup.html' form_class = HostingUserSignupForm - moodel = CustomUser + model = CustomUser def get_success_url(self): next_url = self.request.session.get('next', reverse_lazy('hosting:signup')) @@ -235,6 +235,14 @@ class OrdersHostingListView(LoginRequiredMixin, ListView): self.queryset = HostingOrder.objects.filter(customer__user=user) return super(OrdersHostingListView, self).get_queryset() +class OrdersHostingDeleteView(LoginRequiredMixin,DeleteView): + login_url=reverse_lazy('hosting:login') + success_url = reverse_lazy('hosting:orders') + model = HostingOrder + def get_queryset(self): + user = self.request.user + self.queryset = VirtualMachinePlan.objects.active(user) + return super(VirtualMachinesPlanListView, self).get_queryset() class VirtualMachinesPlanListView(LoginRequiredMixin, ListView): template_name = "hosting/virtual_machines.html"