from django.contrib import admin from django.utils.html import format_html from django.core.urlresolvers import reverse from utils.mailer import BaseEmail from utils.stripe_utils import StripeUtils from .forms import HostingOrderAdminForm from .models import VirtualMachineType, VirtualMachinePlan, HostingOrder class HostingOrderAdmin(admin.ModelAdmin): # fields = ('slug', 'imdb_link', 'start', 'finish', 'added_by') list_display = ('id', 'created_at', 'plan', 'user') search_fields = ['vm_plan__id', 'customer__user__email'] def save_model(self, request, obj, form, change): if not change: customer = form.cleaned_data.get('customer') # Get and set billing address from the lastest charged order last_order = HostingOrder.objects.filter(customer=customer).latest('id') billing_address = last_order.billing_address obj.billing_address = billing_address charge = form.cleaned_data.get('charge') # Associate an order with a stripe payment obj.set_stripe_charge(charge) # If the Stripe payment was successed, set order status approved obj.set_approved() context = { 'order': obj, 'vm': obj.vm_plan, 'base_url': "{0}://{1}".format(request.scheme, request.get_host()) } email_data = { 'subject': 'Your VM plan has been charged', 'to': obj.customer.user.email, 'context': context, 'template_name': 'vm_charged', 'template_path': 'emails/' } email = BaseEmail(**email_data) email.send() obj.save() return obj def get_form(self, request, obj=None, **kwargs): if obj is None: kwargs['form'] = HostingOrderAdminForm return super(HostingOrderAdmin, self).get_form(request, obj, **kwargs) def user(self, obj): email = obj.customer.user.email user_url = reverse("admin:membership_customuser_change", args=[obj.customer.user.id]) return format_html("{email}", url=user_url, email=email) def plan(self, obj): vm_name = obj.vm_plan.name vm_url = reverse("admin:hosting_virtualmachineplan_change", args=[obj.vm_plan.id]) return format_html("{vm_name}", url=vm_url, vm_name=vm_name) plan.short_description = "Virtual Machine Plan" class VirtualMachinePlanAdmin(admin.ModelAdmin): list_display = ('name', 'id', 'email') def email(self, obj): return obj.hosting_orders.latest('id').customer.user.email def save_model(self, request, obj, form, change): email = self.email(obj) if 'status' in form.changed_data: context = { 'vm': obj, 'base_url': "{0}://{1}".format(request.scheme, request.get_host()) } email_data = { 'subject': 'Your VM has been activated', 'to': email, 'context': context, 'template_name': 'vm_status_changed', 'template_path': 'emails/' } email = BaseEmail(**email_data) email.send() obj.save() admin.site.register(HostingOrder, HostingOrderAdmin) admin.site.register(VirtualMachineType) admin.site.register(VirtualMachinePlan, VirtualMachinePlanAdmin)