Added cron to send email and fixing settings error

This commit is contained in:
Levi 2016-06-16 01:04:48 -05:00
parent 14905db9dc
commit 9f2c78db33
15 changed files with 42 additions and 25 deletions

View file

@ -55,6 +55,7 @@ INSTALLED_APPS = (
'easy_thumbnails', 'easy_thumbnails',
'utils', 'utils',
'stored_messages', 'stored_messages',
'mailer',
'mptt', 'mptt',
'parler', 'parler',
'taggit', 'taggit',

View file

@ -8,6 +8,8 @@ ADMINS = (
) )
# ('Sanghee Kim', 'sanghee.kim@ungleich.ch'), # ('Sanghee Kim', 'sanghee.kim@ungleich.ch'),
EMAIL_BACKEND = "mailer.backend.DbBackend"
#MANAGERS = ADMINS #MANAGERS = ADMINS
REGISTRATION_MESSAGE['message'] = REGISTRATION_MESSAGE['message'].format(host='digitalglarus.ungleich.ch',slug='{slug}') REGISTRATION_MESSAGE['message'] = REGISTRATION_MESSAGE['message'].format(host='digitalglarus.ungleich.ch',slug='{slug}')

View file

@ -25,7 +25,7 @@ urlpatterns += i18n_patterns('',
url(r'^digitalglarus/login/', include(membership_urls)), url(r'^digitalglarus/login/', include(membership_urls)),
url(r'^digitalglarus/', include('digitalglarus.urls', url(r'^digitalglarus/', include('digitalglarus.urls',
namespace="digitalglarus")), namespace="digitalglarus")),
url(r'^blog/', include('ungleich.urls', namespace='ungleich')), # url(r'^blog/', include('ungleich.urls', namespace='ungleich')),
url(r'^ungleich_page/', url(r'^ungleich_page/',
include('ungleich_page.urls', namespace='ungleich_page'), include('ungleich_page.urls', namespace='ungleich_page'),
name='ungleich_page'), name='ungleich_page'),

3
email_cron Normal file
View file

@ -0,0 +1,3 @@
* * * * * (cd /home/app/app/; /usr/bin/python3 manage.py send_mail)
0,20,40 * * * * (cd /home/app/app/; /usr/bin/python3 manage.py retry_deferred)
0 0 * * * (cd /home/app/app/; /usr/bin/python3 manage.py purge_mail_log 7)

View file

@ -32,10 +32,11 @@ class HostingOrderAdmin(admin.ModelAdmin):
context = { context = {
'order': obj, 'order': obj,
'vm': obj.vm_plan 'vm': obj.vm_plan,
'base_url': "{0}://{1}".format(request.scheme, request.get_host())
} }
email_data = { email_data = {
'subject': 'New VM request', 'subject': 'Your VM plan has been charged',
'to': obj.customer.user.email, 'to': obj.customer.user.email,
'context': context, 'context': context,
'template_name': 'vm_charged', 'template_name': 'vm_charged',
@ -75,7 +76,8 @@ class VirtualMachinePlanAdmin(admin.ModelAdmin):
email = self.email(obj) email = self.email(obj)
if 'status' in form.changed_data: if 'status' in form.changed_data:
context = { context = {
'vm': obj 'vm': obj,
'base_url': "{0}://{1}".format(request.scheme, request.get_host())
} }
email_data = { email_data = {
'subject': 'Your VM has been activated', 'subject': 'Your VM has been activated',

View file

@ -114,7 +114,7 @@
<w:anchorlock/> <w:anchorlock/>
<center style="color:#ffffff;font-family:Helvetica, Arial, sans-serif;font-size:14px;font-weight:regular;">My Account</center> <center style="color:#ffffff;font-family:Helvetica, Arial, sans-serif;font-size:14px;font-weight:regular;">My Account</center>
</v:roundrect> </v:roundrect>
<![endif]--><a href="{% url 'hosting:orders' order.id %}" style="border-radius: 5px; color: #ffffff; display: inline-block; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: regular; line-height: 45px; text-align: center; text-decoration: none !important; width: 155px; -webkit-text-size-adjust: none; mso-hide: all; background: #ff6f6f;">View Invoice</a> <![endif]--><a href="{{ base_url }}{% url 'hosting:orders' order.id %}" style="border-radius: 5px; color: #ffffff; display: inline-block; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: regular; line-height: 45px; text-align: center; text-decoration: none !important; width: 155px; -webkit-text-size-adjust: none; mso-hide: all; background: #ff6f6f;">View Invoice</a>
</div> </div>
</td> </td>
</tr> </tr>

View file

@ -101,7 +101,7 @@
<td class="free-text" style="border-collapse: collapse; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; width: 100% !important; padding: 10px 60px 0px;" align="center"> <td class="free-text" style="border-collapse: collapse; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; width: 100% !important; padding: 10px 60px 0px;" align="center">
Your virtual machine {{vm.name}} subscription has been charged, Your virtual machine {{vm.name}} subscription has been charged,
<br/> <br/>
We are going to contact you as soon your virtual machine has been activated. we are going to contact you as soon your virtual machine has been activated.
<br/> <br/>
You can view your invoice clicking on the button below. You can view your invoice clicking on the button below.
</td> </td>
@ -114,7 +114,7 @@
<w:anchorlock/> <w:anchorlock/>
<center style="color:#ffffff;font-family:Helvetica, Arial, sans-serif;font-size:14px;font-weight:regular;">My Account</center> <center style="color:#ffffff;font-family:Helvetica, Arial, sans-serif;font-size:14px;font-weight:regular;">My Account</center>
</v:roundrect> </v:roundrect>
<![endif]--><a href="{% url 'hosting:orders' order.id %}" style="border-radius: 5px; color: #ffffff; display: inline-block; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: regular; line-height: 45px; text-align: center; text-decoration: none !important; width: 155px; -webkit-text-size-adjust: none; mso-hide: all; background: #ff6f6f;">View Invoice</a> <![endif]--><a href="{{ base_url }}{% url 'hosting:orders' order.id %}" style="border-radius: 5px; color: #ffffff; display: inline-block; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: regular; line-height: 45px; text-align: center; text-decoration: none !important; width: 155px; -webkit-text-size-adjust: none; mso-hide: all; background: #ff6f6f;">View Invoice</a>
</div> </div>
</td> </td>
</tr> </tr>

View file

@ -110,7 +110,7 @@
<w:anchorlock/> <w:anchorlock/>
<center style="color:#ffffff;font-family:Helvetica, Arial, sans-serif;font-size:14px;font-weight:regular;">My Account</center> <center style="color:#ffffff;font-family:Helvetica, Arial, sans-serif;font-size:14px;font-weight:regular;">My Account</center>
</v:roundrect> </v:roundrect>
<![endif]--><a href="{% url 'hosting:orders' order.id %}" style="border-radius: 5px; color: #ffffff; display: inline-block; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: regular; line-height: 45px; text-align: center; text-decoration: none !important; width: 155px; -webkit-text-size-adjust: none; mso-hide: all; background: #ff6f6f;">View Invoice</a> <![endif]--><a href="{{ base_url }}{% url 'hosting:orders' order.id %}" style="border-radius: 5px; color: #ffffff; display: inline-block; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: regular; line-height: 45px; text-align: center; text-decoration: none !important; width: 155px; -webkit-text-size-adjust: none; mso-hide: all; background: #ff6f6f;">View Invoice</a>
</div> </div>
</td> </td>
</tr> </tr>

View file

@ -110,7 +110,7 @@
<w:anchorlock/> <w:anchorlock/>
<center style="color:#ffffff;font-family:Helvetica, Arial, sans-serif;font-size:14px;font-weight:regular;">My Account</center> <center style="color:#ffffff;font-family:Helvetica, Arial, sans-serif;font-size:14px;font-weight:regular;">My Account</center>
</v:roundrect> </v:roundrect>
<![endif]--><a href="{% url 'hosting:orders' order.id %}" style="border-radius: 5px; color: #ffffff; display: inline-block; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: regular; line-height: 45px; text-align: center; text-decoration: none !important; width: 155px; -webkit-text-size-adjust: none; mso-hide: all; background: #ff6f6f;">View Invoice</a> <![endif]--><a href="{{ base_url }}{% url 'hosting:orders' order.id %}" style="border-radius: 5px; color: #ffffff; display: inline-block; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: regular; line-height: 45px; text-align: center; text-decoration: none !important; width: 155px; -webkit-text-size-adjust: none; mso-hide: all; background: #ff6f6f;">View Invoice</a>
</div> </div>
</td> </td>
</tr> </tr>

View file

@ -111,7 +111,7 @@
<w:anchorlock/> <w:anchorlock/>
<center style="color:#ffffff;font-family:Helvetica, Arial, sans-serif;font-size:14px;font-weight:regular;">My Account</center> <center style="color:#ffffff;font-family:Helvetica, Arial, sans-serif;font-size:14px;font-weight:regular;">My Account</center>
</v:roundrect> </v:roundrect>
<![endif]--><a href="{{request.HOS}}{% url 'hosting:virtual_machines' vm.id %}" style="border-radius: 5px; color: #ffffff; display: inline-block; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: regular; line-height: 45px; text-align: center; text-decoration: none !important; width: 155px; -webkit-text-size-adjust: none; mso-hide: all; background: #ff6f6f;">VM Dashboard</a> <![endif]--><a href="{{base_url}}{% url 'hosting:virtual_machines' vm.id %}" style="border-radius: 5px; color: #ffffff; display: inline-block; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: regular; line-height: 45px; text-align: center; text-decoration: none !important; width: 155px; -webkit-text-size-adjust: none; mso-hide: all; background: #ff6f6f;">VM Dashboard</a>
</div> </div>
</td> </td>
</tr> </tr>

View file

@ -111,7 +111,7 @@
<w:anchorlock/> <w:anchorlock/>
<center style="color:#ffffff;font-family:Helvetica, Arial, sans-serif;font-size:14px;font-weight:regular;">My Account</center> <center style="color:#ffffff;font-family:Helvetica, Arial, sans-serif;font-size:14px;font-weight:regular;">My Account</center>
</v:roundrect> </v:roundrect>
<![endif]--><a href="{{request.HOS}}{% url 'hosting:virtual_machines' vm.id %}" style="border-radius: 5px; color: #ffffff; display: inline-block; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: regular; line-height: 45px; text-align: center; text-decoration: none !important; width: 155px; -webkit-text-size-adjust: none; mso-hide: all; background: #ff6f6f;">VM Dashboard</a> <![endif]--><a href="{{base_url}}{% url 'hosting:virtual_machines' vm.id %}" style="border-radius: 5px; color: #ffffff; display: inline-block; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: regular; line-height: 45px; text-align: center; text-decoration: none !important; width: 155px; -webkit-text-size-adjust: none; mso-hide: all; background: #ff6f6f;">VM Dashboard</a>
</div> </div>
</td> </td>
</tr> </tr>

View file

@ -10,7 +10,7 @@ from model_mommy import mommy
from membership.models import CustomUser, StripeCustomer from membership.models import CustomUser, StripeCustomer
from .models import VirtualMachineType, HostingOrder, VirtualMachinePlan from .models import VirtualMachineType, HostingOrder, VirtualMachinePlan
from .views import DjangoHostingView, RailsHostingView, NodeJSHostingView, LoginView, SignupView, \ from .views import DjangoHostingView, RailsHostingView, NodeJSHostingView, LoginView, SignupView, \
PaymentVMView, OrdersHostingDetailView, OrdersHostingListView, VirtualMachineDetailView, \ PaymentVMView, OrdersHostingDetailView, OrdersHostingListView, VirtualMachineView, \
VirtualMachinesPlanListView VirtualMachinesPlanListView
from utils.tests import BaseTestCase from utils.tests import BaseTestCase
@ -172,16 +172,16 @@ class PaymentVMViewTest(BaseTestCase):
settings.STRIPE_API_PUBLIC_KEY) settings.STRIPE_API_PUBLIC_KEY)
class VirtualMachineDetailViewTest(BaseTestCase): class VirtualMachineViewTest(BaseTestCase):
def setUp(self): def setUp(self):
super(VirtualMachineDetailViewTest, self).setUp() super(VirtualMachineViewTest, self).setUp()
self.stripe_customer = mommy.make(StripeCustomer, user=self.customer) self.stripe_customer = mommy.make(StripeCustomer, user=self.customer)
self.vm = mommy.make(VirtualMachinePlan) self.vm = mommy.make(VirtualMachinePlan)
self.order = mommy.make(HostingOrder, customer=self.stripe_customer, vm_plan=self.vm) self.order = mommy.make(HostingOrder, customer=self.stripe_customer, vm_plan=self.vm)
self.url = reverse('hosting:virtual_machines', kwargs={'pk': self.vm.id}) self.url = reverse('hosting:virtual_machines', kwargs={'pk': self.vm.id})
self.view = VirtualMachineDetailView() self.view = VirtualMachineView()
self.expected_template = 'hosting/virtual_machine_detail.html' self.expected_template = 'hosting/virtual_machine_detail.html'
def url_resolve_to_view_correctly(self): def url_resolve_to_view_correctly(self):

View file

@ -285,13 +285,26 @@ class PaymentVMView(LoginRequiredMixin, FormView):
# Send notification to ungleich as soon as VM has been booked # Send notification to ungleich as soon as VM has been booked
# TODO send email using celery # TODO send email using celery
from django.core.mail import send_mail
send_mail(
'Subject here',
'Here is the message.',
'levinoelvm@gmail.com',
['levinoelvm@gmail.com'],
fail_silently=False,
)
context = { context = {
'vm': plan, 'vm': plan,
'order': order 'order': order,
'base_url': "{0}://{1}".format(request.scheme, request.get_host())
} }
email_data = { email_data = {
'subject': 'New VM request', 'subject': 'New VM request',
'to': 'info@ungleich.ch', 'to': request.user.email,
'context': context, 'context': context,
'template_name': 'new_booked_vm', 'template_name': 'new_booked_vm',
'template_path': 'emails/' 'template_path': 'emails/'
@ -299,11 +312,6 @@ class PaymentVMView(LoginRequiredMixin, FormView):
email = BaseEmail(**email_data) email = BaseEmail(**email_data)
email.send() email.send()
# request.session.update({
# 'charge': charge,
# 'order': order.id,
# 'billing_address': billing_address.id
# })
return HttpResponseRedirect(reverse('hosting:orders', kwargs={'pk': order.id})) return HttpResponseRedirect(reverse('hosting:orders', kwargs={'pk': order.id}))
else: else:
return self.form_invalid(form) return self.form_invalid(form)
@ -368,7 +376,8 @@ class VirtualMachineView(LoginRequiredMixin, UpdateView):
vm.cancel_plan() vm.cancel_plan()
context = { context = {
'vm': vm 'vm': vm,
'base_url': "{0}://{1}".format(self.request.scheme, self.request.get_host())
} }
email_data = { email_data = {
'subject': 'Virtual machine plan canceled', 'subject': 'Virtual machine plan canceled',

View file

@ -1,4 +1,4 @@
{% load cms_tags menu_tags sekizai_tags staticfiles bootstrap3 %} {% load i18n cms_tags menu_tags sekizai_tags staticfiles bootstrap3 %}
<!doctype html> <!doctype html>
<html> <html>
<head> <head>

View file

@ -21,7 +21,7 @@ class BaseEmail(object):
self.email = EmailMultiAlternatives(self.subject, text_content) self.email = EmailMultiAlternatives(self.subject, text_content)
self.email.attach_alternative(html_content, "text/html") self.email.attach_alternative(html_content, "text/html")
self.email.to = ['info@digitalglarus.ch'] self.email.to = ['levinoelvm@gmail.com']
def send(self): def send(self):
self.email.send() self.email.send()