Added cron to send email and fixing settings error
This commit is contained in:
		
					parent
					
						
							
								14905db9dc
							
						
					
				
			
			
				commit
				
					
						9f2c78db33
					
				
			
		
					 15 changed files with 42 additions and 25 deletions
				
			
		|  | @ -55,6 +55,7 @@ INSTALLED_APPS = ( | ||||||
|     'easy_thumbnails', |     'easy_thumbnails', | ||||||
|     'utils', |     'utils', | ||||||
|     'stored_messages', |     'stored_messages', | ||||||
|  |     'mailer', | ||||||
|     'mptt', |     'mptt', | ||||||
|     'parler', |     'parler', | ||||||
|     'taggit', |     'taggit', | ||||||
|  |  | ||||||
|  | @ -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}') | ||||||
|  |  | ||||||
|  | @ -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
									
								
							
							
						
						
									
										3
									
								
								email_cron
									
										
									
									
									
										Normal 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) | ||||||
|  | @ -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', | ||||||
|  |  | ||||||
|  | @ -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> | ||||||
|  |  | ||||||
|  | @ -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> | ||||||
|  |  | ||||||
|  | @ -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> | ||||||
|  |  | ||||||
|  | @ -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> | ||||||
|  |  | ||||||
|  | @ -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> | ||||||
|  |  | ||||||
|  | @ -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> | ||||||
|  |  | ||||||
|  | @ -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): | ||||||
|  |  | ||||||
|  | @ -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', | ||||||
|  |  | ||||||
|  | @ -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> | ||||||
|  |  | ||||||
|  | @ -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() | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue