Merge pull request #123 from levivm/feature/new_digitalglarus
Reduced pixels needed to navbar transition color, Added membership de…
This commit is contained in:
		
				commit
				
					
						7afef7578f
					
				
			
		
					 12 changed files with 446 additions and 9 deletions
				
			
		
							
								
								
									
										20
									
								
								digitalglarus/migrations/0017_membership_active.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								digitalglarus/migrations/0017_membership_active.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | ||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | # Generated by Django 1.9.4 on 2016-09-13 01:51 | ||||||
|  | from __future__ import unicode_literals | ||||||
|  | 
 | ||||||
|  | from django.db import migrations, models | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  | 
 | ||||||
|  |     dependencies = [ | ||||||
|  |         ('digitalglarus', '0016_auto_20160909_0110'), | ||||||
|  |     ] | ||||||
|  | 
 | ||||||
|  |     operations = [ | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name='membership', | ||||||
|  |             name='active', | ||||||
|  |             field=models.BooleanField(default=True), | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
|  | @ -23,7 +23,7 @@ class IsNotMemberMixin(object): | ||||||
|         if Membership.is_digitalglarus_member(request.user): |         if Membership.is_digitalglarus_member(request.user): | ||||||
|             return HttpResponseRedirect(self.already_member_redirect_url) |             return HttpResponseRedirect(self.already_member_redirect_url) | ||||||
| 
 | 
 | ||||||
|         return super(MembershipRequiredMixin, self).dispatch(request, *args, **kwargs) |         return super(IsNotMemberMixin, self).dispatch(request, *args, **kwargs) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class Ordereable(models.Model): | class Ordereable(models.Model): | ||||||
|  |  | ||||||
|  | @ -60,6 +60,7 @@ class MembershipType(models.Model): | ||||||
| 
 | 
 | ||||||
| class Membership(models.Model): | class Membership(models.Model): | ||||||
|     type = models.ForeignKey(MembershipType) |     type = models.ForeignKey(MembershipType) | ||||||
|  |     active = models.BooleanField(default=True) | ||||||
| 
 | 
 | ||||||
|     @classmethod |     @classmethod | ||||||
|     def is_digitalglarus_member(cls, user): |     def is_digitalglarus_member(cls, user): | ||||||
|  | @ -68,17 +69,32 @@ class Membership(models.Model): | ||||||
|                                       membershiporder__created_at__month=datetime.today().month) |                                       membershiporder__created_at__month=datetime.today().month) | ||||||
|         has_booking_past_month = Q(membershiporder__customer__user=user, |         has_booking_past_month = Q(membershiporder__customer__user=user, | ||||||
|                                    membershiporder__created_at__month=past_month) |                                    membershiporder__created_at__month=past_month) | ||||||
|         return cls.objects.filter(has_booking_past_month | has_booking_current_month).exists() |         active_membership = Q(active=True) | ||||||
|  |         return cls.objects.filter(has_booking_past_month | has_booking_current_month).\ | ||||||
|  |             filter(active_membership).exists() | ||||||
| 
 | 
 | ||||||
|     @classmethod |     @classmethod | ||||||
|     def create(cls, data): |     def create(cls, data): | ||||||
|         instance = cls.objects.create(**data) |         instance = cls.objects.create(**data) | ||||||
|         return instance |         return instance | ||||||
| 
 | 
 | ||||||
|  |     def deactivate(self): | ||||||
|  |         self.active = False | ||||||
|  |         self.save() | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| class MembershipOrder(Ordereable, models.Model): | class MembershipOrder(Ordereable, models.Model): | ||||||
|     membership = models.ForeignKey(Membership) |     membership = models.ForeignKey(Membership) | ||||||
| 
 | 
 | ||||||
|  |     def first_membership_range_date(self): | ||||||
|  |         start_date = self.created_at | ||||||
|  |         _, days_in_month = calendar.monthrange(start_date.year, | ||||||
|  |                                                start_date.month) | ||||||
|  |         pass_days = start_date.day | ||||||
|  |         days_left = days_in_month - pass_days | ||||||
|  |         end_date = start_date + timedelta(days=days_left) | ||||||
|  |         return start_date, end_date | ||||||
|  | 
 | ||||||
|     @classmethod |     @classmethod | ||||||
|     def current_membership(cls, user): |     def current_membership(cls, user): | ||||||
|         last_payment = cls.objects.\ |         last_payment = cls.objects.\ | ||||||
|  |  | ||||||
|  | @ -13,7 +13,7 @@ var cbpAnimatedHeader = (function() { | ||||||
| 	var docElem = document.documentElement, | 	var docElem = document.documentElement, | ||||||
| 		header = document.querySelector( '.navbar-default' ), | 		header = document.querySelector( '.navbar-default' ), | ||||||
| 		didScroll = false, | 		didScroll = false, | ||||||
| 		changeHeaderOn = 300; | 		changeHeaderOn = 20; | ||||||
| 
 | 
 | ||||||
| 	function init() { | 	function init() { | ||||||
| 		window.addEventListener( 'scroll', function( event ) { | 		window.addEventListener( 'scroll', function( event ) { | ||||||
|  |  | ||||||
|  | @ -64,5 +64,6 @@ | ||||||
|                |                | ||||||
|             </div>  |             </div>  | ||||||
|        </div> |        </div> | ||||||
|  |   </section> | ||||||
| 
 | 
 | ||||||
| {% endblock %} | {% endblock %} | ||||||
|  | @ -0,0 +1,136 @@ | ||||||
|  | {% load static from staticfiles %} | ||||||
|  | <!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b --> | ||||||
|  | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> | ||||||
|  | <html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <head> | ||||||
|  | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | ||||||
|  | <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||||
|  | <title>Oxygen Invoice</title> | ||||||
|  | </head> | ||||||
|  | <body bgcolor="#f7f7f7" style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; color: white; margin: 0;"> | ||||||
|  | <style type="text/css"> | ||||||
|  | @media only screen and (max-width: 480px) { | ||||||
|  |   table[class*="container-for-gmail-android"] { | ||||||
|  |     min-width: 290px !important; width: 100% !important; | ||||||
|  |   } | ||||||
|  |   img[class="force-width-gmail"] { | ||||||
|  |     display: none !important; width: 0 !important; height: 0 !important; | ||||||
|  |   } | ||||||
|  |   table[class="w320"] { | ||||||
|  |     width: 320px !important; | ||||||
|  |   } | ||||||
|  |   td[class*="mobile-header-padding-left"] { | ||||||
|  |     width: 160px !important; padding-left: 0 !important; | ||||||
|  |   } | ||||||
|  |   td[class*="mobile-header-padding-right"] { | ||||||
|  |     width: 160px !important; padding-right: 0 !important; | ||||||
|  |   } | ||||||
|  |   td[class="header-lg"] { | ||||||
|  |     font-size: 24px !important; padding-bottom: 5px !important; | ||||||
|  |   } | ||||||
|  |   td[class="content-padding"] { | ||||||
|  |     padding: 5px 0 5px !important; | ||||||
|  |   } | ||||||
|  |   td[class="button"] { | ||||||
|  |     padding: 5px 5px 30px !important; | ||||||
|  |   } | ||||||
|  |   td[class*="free-text"] { | ||||||
|  |     padding: 10px 18px 30px !important; | ||||||
|  |   } | ||||||
|  |   td[class~="mobile-hide-img"] { | ||||||
|  |     display: none !important; height: 0 !important; width: 0 !important; line-height: 0 !important; | ||||||
|  |   } | ||||||
|  |   td[class~="item"] { | ||||||
|  |     width: 140px !important; vertical-align: top !important; | ||||||
|  |   } | ||||||
|  |   td[class~="quantity"] { | ||||||
|  |     width: 50px !important; | ||||||
|  |   } | ||||||
|  |   td[class~="price"] { | ||||||
|  |     width: 90px !important; | ||||||
|  |   } | ||||||
|  |   td[class="item-table"] { | ||||||
|  |     padding: 30px 20px !important; | ||||||
|  |   } | ||||||
|  |   td[class="mini-container-left"] { | ||||||
|  |     padding: 0 15px 15px !important; display: block !important; width: 290px !important; | ||||||
|  |   } | ||||||
|  |   td[class="mini-container-right"] { | ||||||
|  |     padding: 0 15px 15px !important; display: block !important; width: 290px !important; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
|  | <table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%" style="border-collapse: collapse !important; min-width: 600px; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <tr style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <td align="left" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff url(http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg) repeat-x;" bgcolor="#ffffff"> | ||||||
|  |       <center style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  |       <table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" background="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" style="border-collapse: collapse !important; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; background: transparent;"><tr style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <td width="100%" height="80" valign="top" style="text-align: center; vertical-align: middle; border-collapse: collapse; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; line-height: 21px;" align="center"> | ||||||
|  |             <!--[if gte mso 9]> | ||||||
|  |             <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="mso-width-percent:1000;height:80px; v-text-anchor:middle;"> | ||||||
|  |               <v:fill type="tile" src="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" color="#ffffff" /> | ||||||
|  |               <v:textbox inset="0,0,0,0"> | ||||||
|  |             <![endif]--> | ||||||
|  |               <center style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  |                 <table cellpadding="0" cellspacing="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <td class="pull-left mobile-header-padding-left" style="vertical-align: middle; border-collapse: collapse; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 290px; padding-left: 10px;" align="left" valign="middle"> | ||||||
|  |                       <a href="{{base_url}}" style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; color: #676767; text-decoration: none !important;"><img width="137" src="{{base_url}}{% static "hosting/img/logo_black.png" %}" alt="logo" style="max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; border: none;"></a> | ||||||
|  |                     </td> | ||||||
|  |                     <td class="pull-right mobile-header-padding-right" style="color: #4d4d4d; border-collapse: collapse; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; text-align: right; line-height: 21px; width: 290px; padding-left: 10px;" align="right"> | ||||||
|  |                     </td> | ||||||
|  |                   </tr></table> | ||||||
|  | </center> | ||||||
|  |               <!--[if gte mso 9]> | ||||||
|  |               </v:textbox> | ||||||
|  |             </v:rect> | ||||||
|  |             <![endif]--> | ||||||
|  |             </td> | ||||||
|  |           </tr></table> | ||||||
|  | </center> | ||||||
|  |     </td> | ||||||
|  |   </tr> | ||||||
|  | <tr style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <td align="center" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #f7f7f7; padding: 20px 0 5px;" class="content-padding" bgcolor="#f7f7f7"> | ||||||
|  |       <center style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  |         <table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <tr style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <td class="header-lg" style="border-collapse: collapse; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 32px; color: #4d4d4d; text-align: center; line-height: normal; font-weight: 700; padding: 35px 0 0;" align="center"> | ||||||
|  |               Thank you for your subscription.  | ||||||
|  |             </td> | ||||||
|  |           </tr> | ||||||
|  | <tr style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <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 monthly membership for period {{membership_start_date|date}} - {{membership_start_date|date}} has been charged. <br/> You can view your invoice clicking on the button below.  | ||||||
|  |             </td> | ||||||
|  |           </tr> | ||||||
|  | <tr style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <td class="button" style="border-collapse: collapse; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 30px 0;" align="center"> | ||||||
|  |               <div style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <!--[if mso]> | ||||||
|  |                 <v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" href="http://" style="height:45px;v-text-anchor:middle;width:155px;" arcsize="15%" strokecolor="#ffffff" fillcolor="#ff6f6f"> | ||||||
|  |                   <w:anchorlock/> | ||||||
|  |                   <center style="color:#ffffff;font-family:Helvetica, Arial, sans-serif;font-size:14px;font-weight:regular;">My Account</center> | ||||||
|  |                 </v:roundrect> | ||||||
|  |               <![endif]--><a href="{{ base_url }}{% url 'digitalglarus:membership_orders_detail' 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> | ||||||
|  |             </td> | ||||||
|  |           </tr> | ||||||
|  | </table> | ||||||
|  | </center> | ||||||
|  |     </td> | ||||||
|  |   </tr> | ||||||
|  | <tr style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <td align="center" valign="top" width="100%" style="height: 100px; border-collapse: collapse; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #f7f7f7;" bgcolor="#f7f7f7"> | ||||||
|  |       <center style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  |         <table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <td style="border-collapse: collapse; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 25px 0;" align="center"> | ||||||
|  |               <strong style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">ungleich</strong><br style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | </td> | ||||||
|  |           </tr></table> | ||||||
|  | </center> | ||||||
|  |     </td> | ||||||
|  |   </tr> | ||||||
|  | </table> | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
|  | 
 | ||||||
|  | @ -0,0 +1,136 @@ | ||||||
|  | {% load static from staticfiles %} | ||||||
|  | <!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b --> | ||||||
|  | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> | ||||||
|  | <html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <head> | ||||||
|  | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | ||||||
|  | <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||||
|  | <title>Oxygen Invoice</title> | ||||||
|  | </head> | ||||||
|  | <body bgcolor="#f7f7f7" style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; color: white; margin: 0;"> | ||||||
|  | <style type="text/css"> | ||||||
|  | @media only screen and (max-width: 480px) { | ||||||
|  |   table[class*="container-for-gmail-android"] { | ||||||
|  |     min-width: 290px !important; width: 100% !important; | ||||||
|  |   } | ||||||
|  |   img[class="force-width-gmail"] { | ||||||
|  |     display: none !important; width: 0 !important; height: 0 !important; | ||||||
|  |   } | ||||||
|  |   table[class="w320"] { | ||||||
|  |     width: 320px !important; | ||||||
|  |   } | ||||||
|  |   td[class*="mobile-header-padding-left"] { | ||||||
|  |     width: 160px !important; padding-left: 0 !important; | ||||||
|  |   } | ||||||
|  |   td[class*="mobile-header-padding-right"] { | ||||||
|  |     width: 160px !important; padding-right: 0 !important; | ||||||
|  |   } | ||||||
|  |   td[class="header-lg"] { | ||||||
|  |     font-size: 24px !important; padding-bottom: 5px !important; | ||||||
|  |   } | ||||||
|  |   td[class="content-padding"] { | ||||||
|  |     padding: 5px 0 5px !important; | ||||||
|  |   } | ||||||
|  |   td[class="button"] { | ||||||
|  |     padding: 5px 5px 30px !important; | ||||||
|  |   } | ||||||
|  |   td[class*="free-text"] { | ||||||
|  |     padding: 10px 18px 30px !important; | ||||||
|  |   } | ||||||
|  |   td[class~="mobile-hide-img"] { | ||||||
|  |     display: none !important; height: 0 !important; width: 0 !important; line-height: 0 !important; | ||||||
|  |   } | ||||||
|  |   td[class~="item"] { | ||||||
|  |     width: 140px !important; vertical-align: top !important; | ||||||
|  |   } | ||||||
|  |   td[class~="quantity"] { | ||||||
|  |     width: 50px !important; | ||||||
|  |   } | ||||||
|  |   td[class~="price"] { | ||||||
|  |     width: 90px !important; | ||||||
|  |   } | ||||||
|  |   td[class="item-table"] { | ||||||
|  |     padding: 30px 20px !important; | ||||||
|  |   } | ||||||
|  |   td[class="mini-container-left"] { | ||||||
|  |     padding: 0 15px 15px !important; display: block !important; width: 290px !important; | ||||||
|  |   } | ||||||
|  |   td[class="mini-container-right"] { | ||||||
|  |     padding: 0 15px 15px !important; display: block !important; width: 290px !important; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
|  | <table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%" style="border-collapse: collapse !important; min-width: 600px; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <tr style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <td align="left" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff url(http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg) repeat-x;" bgcolor="#ffffff"> | ||||||
|  |       <center style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  |       <table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" background="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" style="border-collapse: collapse !important; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; background: transparent;"><tr style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <td width="100%" height="80" valign="top" style="text-align: center; vertical-align: middle; border-collapse: collapse; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; line-height: 21px;" align="center"> | ||||||
|  |             <!--[if gte mso 9]> | ||||||
|  |             <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="mso-width-percent:1000;height:80px; v-text-anchor:middle;"> | ||||||
|  |               <v:fill type="tile" src="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" color="#ffffff" /> | ||||||
|  |               <v:textbox inset="0,0,0,0"> | ||||||
|  |             <![endif]--> | ||||||
|  |               <center style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  |                 <table cellpadding="0" cellspacing="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <td class="pull-left mobile-header-padding-left" style="vertical-align: middle; border-collapse: collapse; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 290px; padding-left: 10px;" align="left" valign="middle"> | ||||||
|  |                       <a href="{{base_url}}" style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; color: #676767; text-decoration: none !important;"><img width="137" src="{{base_url}}{% static "hosting/img/logo_black.png" %}" alt="logo" style="max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; border: none;"></a> | ||||||
|  |                     </td> | ||||||
|  |                     <td class="pull-right mobile-header-padding-right" style="color: #4d4d4d; border-collapse: collapse; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; text-align: right; line-height: 21px; width: 290px; padding-left: 10px;" align="right"> | ||||||
|  |                     </td> | ||||||
|  |                   </tr></table> | ||||||
|  | </center> | ||||||
|  |               <!--[if gte mso 9]> | ||||||
|  |               </v:textbox> | ||||||
|  |             </v:rect> | ||||||
|  |             <![endif]--> | ||||||
|  |             </td> | ||||||
|  |           </tr></table> | ||||||
|  | </center> | ||||||
|  |     </td> | ||||||
|  |   </tr> | ||||||
|  | <tr style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <td align="center" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #f7f7f7; padding: 20px 0 5px;" class="content-padding" bgcolor="#f7f7f7"> | ||||||
|  |       <center style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  |         <table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <tr style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <td class="header-lg" style="border-collapse: collapse; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 32px; color: #4d4d4d; text-align: center; line-height: normal; font-weight: 700; padding: 35px 0 0;" align="center"> | ||||||
|  |               Thank you for your subscription.  | ||||||
|  |             </td> | ||||||
|  |           </tr> | ||||||
|  | <tr style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <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 monthly membership for period {{membership_start_date|date}} - {{membership_start_date|date}} has been charged. <br/> You can view your invoice clicking on the button below.  | ||||||
|  |             </td> | ||||||
|  |           </tr> | ||||||
|  | <tr style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <td class="button" style="border-collapse: collapse; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 30px 0;" align="center"> | ||||||
|  |               <div style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <!--[if mso]> | ||||||
|  |                 <v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" href="http://" style="height:45px;v-text-anchor:middle;width:155px;" arcsize="15%" strokecolor="#ffffff" fillcolor="#ff6f6f"> | ||||||
|  |                   <w:anchorlock/> | ||||||
|  |                   <center style="color:#ffffff;font-family:Helvetica, Arial, sans-serif;font-size:14px;font-weight:regular;">My Account</center> | ||||||
|  |                 </v:roundrect> | ||||||
|  |               <![endif]--><a href="{{ base_url }}{% url 'digitalglarus:membership_orders_detail' 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> | ||||||
|  |             </td> | ||||||
|  |           </tr> | ||||||
|  | </table> | ||||||
|  | </center> | ||||||
|  |     </td> | ||||||
|  |   </tr> | ||||||
|  | <tr style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <td align="center" valign="top" width="100%" style="height: 100px; border-collapse: collapse; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #f7f7f7;" bgcolor="#f7f7f7"> | ||||||
|  |       <center style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  |         <table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | <td style="border-collapse: collapse; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 25px 0;" align="center"> | ||||||
|  |               <strong style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">ungleich</strong><br style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||||
|  | </td> | ||||||
|  |           </tr></table> | ||||||
|  | </center> | ||||||
|  |     </td> | ||||||
|  |   </tr> | ||||||
|  | </table> | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
|  | 
 | ||||||
|  | @ -0,0 +1,62 @@ | ||||||
|  | {% extends "new_base_glarus.html" %} | ||||||
|  | {% load staticfiles cms_tags bootstrap3%} | ||||||
|  | {% block title %}crowdfunding{% endblock %} | ||||||
|  | 
 | ||||||
|  | {% block content %} | ||||||
|  |   <section id="price"> | ||||||
|  |     <div class="signup-container"> | ||||||
|  | 	  <div class="col-xs-12 col-sm-3 col-lg-4 text-center wow fadeInDown"> </div> | ||||||
|  |       <div class="col-xs-12 col-sm-6 col-lg-4 text-center wow fadeInDown">  | ||||||
|  |      | ||||||
|  |          <!-- <span class="glyphicon glyphicon-user"></span> --> | ||||||
|  |           <div class="payment-box"> | ||||||
|  |              <h2 class="billing-head">Membership Deactivation</h2>  | ||||||
|  |              <hr class="greyline-long"> | ||||||
|  |                <h2 class="membership-lead">Are you sure do you want to cancel your membership with us ?</h2> | ||||||
|  |                <div class="date-box"> | ||||||
|  |                  </div> | ||||||
|  |                  <!--<hr class="primary">--> | ||||||
|  |                       <div class="signup-form form-group row"> | ||||||
|  |                        | ||||||
|  |                         <div class="button-booking-box form-inline row"> | ||||||
|  | 
 | ||||||
|  |                           <form method="POST" action=""> | ||||||
|  |                             {% csrf_token %}  | ||||||
|  |                             <button type="submit" class="btn btn-primary btn-blue">Cancel my Membership</button> | ||||||
|  |                           </form> | ||||||
|  | 
 | ||||||
|  |                         </div> | ||||||
|  |                           <div class="notice-box text-left"> | ||||||
|  |                             <p class="order-bottom-text"> | ||||||
|  |                               Your membership wouldn't be automatically renewed each month. | ||||||
|  |                             </p> | ||||||
|  |                          </div> | ||||||
|  |                       </div> | ||||||
|  |          | ||||||
|  |       </div>        | ||||||
|  |      <div class="col-xs-12 col-sm-3 col-lg-4 text-center wow fadeInDown"> </div> | ||||||
|  |       </div> | ||||||
|  |     </div>  | ||||||
|  |     </div> | ||||||
|  |       </div> | ||||||
|  |     </div>    | ||||||
|  |   </section> | ||||||
|  |   <section id="contact"> | ||||||
|  |     <div class="fill"> | ||||||
|  |      <div class="row" class="wow fadeInDown"> | ||||||
|  |       <div class="col-lg-12 text-center wow fadeInDown"> | ||||||
|  |           <div class="col-md-4 map-title"> | ||||||
|  |             Digital Glarus<br> | ||||||
|  |             <span class="map-caption">In der Au 7 Schwanden 8762 Switzerland | ||||||
|  |             <br>info@digitalglarus.ch | ||||||
|  |             <br> | ||||||
|  |             (044) 534-66-22 | ||||||
|  |             <p> </p> | ||||||
|  |             </span> | ||||||
|  |           </div> | ||||||
|  |            <p> </p> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |   </section> | ||||||
|  | {% endblock %}  | ||||||
|  | @ -67,7 +67,7 @@ | ||||||
|            |            | ||||||
|         </div>  |         </div>  | ||||||
|     </div> |     </div> | ||||||
|   </section> | </section> | ||||||
| 
 | 
 | ||||||
| <!-- stripe key data --> | <!-- stripe key data --> | ||||||
| {% if stripe_key %} | {% if stripe_key %} | ||||||
|  |  | ||||||
|  | @ -9,7 +9,7 @@ | ||||||
|     <div class="signup-container"> |     <div class="signup-container"> | ||||||
|       <div class="col-xs-12 col-sm-6 col-lg-8 text-center wow fadeInDown">  |       <div class="col-xs-12 col-sm-6 col-lg-8 text-center wow fadeInDown">  | ||||||
|         <div class="payment-box"> |         <div class="payment-box"> | ||||||
|             <h2 class="section-heading payment-head">Your Order History</h2> |             <h2 class="section-heading payment-head">Your Membership History</h2> | ||||||
|             <hr class="greyline-long"> |             <hr class="greyline-long"> | ||||||
|             <h2 class="order-head">Member Name</h2> |             <h2 class="order-head">Member Name</h2> | ||||||
|             <h2 class="member-name">{{request.user.name}}</h2> |             <h2 class="member-name">{{request.user.name}}</h2> | ||||||
|  | @ -17,7 +17,7 @@ | ||||||
|             <h2 class="order-head">Active Membership</h2> |             <h2 class="order-head">Active Membership</h2> | ||||||
|             <h2 class="member-name">{{membership_start_date|date}}-{{membership_end_date|date}}</h2> |             <h2 class="member-name">{{membership_start_date|date}}-{{membership_end_date|date}}</h2> | ||||||
|             <hr class="greyline-long"> |             <hr class="greyline-long"> | ||||||
|             <h2 class="order-head">Booking history</h2> |             <h2 class="order-head">Orders history</h2> | ||||||
|             <table class="table"> |             <table class="table"> | ||||||
|               <thead> |               <thead> | ||||||
|                 <tr> |                 <tr> | ||||||
|  | @ -44,6 +44,22 @@ | ||||||
|                                     In der Au 7 8762 Schwanden<br> |                                     In der Au 7 8762 Schwanden<br> | ||||||
|                                     Switzerland |                                     Switzerland | ||||||
|             </h2> |             </h2> | ||||||
|  | 
 | ||||||
|  |             <hr class="greyline-long"> | ||||||
|  |             <h2 class="order-head">Your Next Membership</h2> | ||||||
|  |             <h2 class="history-name"> | ||||||
|  |               Dates: {{membership_start_date|date}} - {{membership_end_date|date}}<br> | ||||||
|  |             </h2> | ||||||
|  |             <h2 class="history-name"> | ||||||
|  | 
 | ||||||
|  |               <a class="btn btn-primary btn-grey btn-edit print" href="{% url 'digitalglarus:membership_deactivate' %}">Deactivate</a> | ||||||
|  |             </h2> | ||||||
|  |             <div class="row"> | ||||||
|  |               <div class="col-md-10"> | ||||||
|  |                 <span>You will be charged on the first of the month until you  | ||||||
|  |                 cancel your subscription. Previous charges won't be refunded.</span> | ||||||
|  |               </div> | ||||||
|  |             </div> | ||||||
|                                          |                                          | ||||||
|         </div> |         </div> | ||||||
|           </div>                 |           </div>                 | ||||||
|  | @ -64,5 +80,6 @@ | ||||||
|                |                | ||||||
|             </div>  |             </div>  | ||||||
|        </div> |        </div> | ||||||
|  | </section> | ||||||
| 
 | 
 | ||||||
| {% endblock %} | {% endblock %} | ||||||
|  | @ -5,7 +5,7 @@ from . import views | ||||||
| from .views import ContactView, IndexView, AboutView, HistoryView, LoginView, SignupView,\ | from .views import ContactView, IndexView, AboutView, HistoryView, LoginView, SignupView,\ | ||||||
|     PasswordResetView, PasswordResetConfirmView, MembershipPaymentView, MembershipActivatedView,\ |     PasswordResetView, PasswordResetConfirmView, MembershipPaymentView, MembershipActivatedView,\ | ||||||
|     MembershipPricingView, BookingSelectDatesView, BookingPaymentView, OrdersBookingDetailView,\ |     MembershipPricingView, BookingSelectDatesView, BookingPaymentView, OrdersBookingDetailView,\ | ||||||
|     BookingOrdersListView, MembershipOrdersListView, OrdersMembershipDetailView |     BookingOrdersListView, MembershipOrdersListView, OrdersMembershipDetailView, MembershipDeactivateView | ||||||
| # from membership.views import LoginRegistrationView | # from membership.views import LoginRegistrationView | ||||||
| 
 | 
 | ||||||
| urlpatterns = [ | urlpatterns = [ | ||||||
|  | @ -28,6 +28,8 @@ urlpatterns = [ | ||||||
|     url(_(r'membership/payment/?$'), MembershipPaymentView.as_view(), name='membership_payment'), |     url(_(r'membership/payment/?$'), MembershipPaymentView.as_view(), name='membership_payment'), | ||||||
|     url(_(r'membership/activated/?$'), MembershipActivatedView.as_view(), |     url(_(r'membership/activated/?$'), MembershipActivatedView.as_view(), | ||||||
|         name='membership_activated'), |         name='membership_activated'), | ||||||
|  |     url(_(r'membership/deactivate/?$'), MembershipDeactivateView.as_view(), | ||||||
|  |         name='membership_deactivate'), | ||||||
|     url(_(r'membership/pricing/?$'), MembershipPricingView.as_view(), |     url(_(r'membership/pricing/?$'), MembershipPricingView.as_view(), | ||||||
|         name='membership_pricing'), |         name='membership_pricing'), | ||||||
|     url(_(r'membership/orders/(?P<pk>\d+)/?$'), OrdersMembershipDetailView.as_view(), |     url(_(r'membership/orders/(?P<pk>\d+)/?$'), OrdersMembershipDetailView.as_view(), | ||||||
|  |  | ||||||
|  | @ -7,7 +7,7 @@ from django.forms import ModelForm | ||||||
| from django.http import HttpResponseRedirect | from django.http import HttpResponseRedirect | ||||||
| from django.core.urlresolvers import reverse_lazy, reverse | from django.core.urlresolvers import reverse_lazy, reverse | ||||||
| from django.utils.translation import ugettext_lazy as _ | from django.utils.translation import ugettext_lazy as _ | ||||||
| from django.views.generic import TemplateView | from django.views.generic import TemplateView, UpdateView | ||||||
| from django.contrib.auth.mixins import LoginRequiredMixin | from django.contrib.auth.mixins import LoginRequiredMixin | ||||||
| from django.utils.translation import get_language | from django.utils.translation import get_language | ||||||
| from djangocms_blog.models import Post | from djangocms_blog.models import Post | ||||||
|  | @ -15,8 +15,11 @@ from django.contrib import messages | ||||||
| from django.http import JsonResponse | from django.http import JsonResponse | ||||||
| from django.views.generic import View, DetailView, ListView | from django.views.generic import View, DetailView, ListView | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| from .models import Supporter | from .models import Supporter | ||||||
| from utils.forms import ContactUsForm | from utils.forms import ContactUsForm | ||||||
|  | from utils.mailer import BaseEmail | ||||||
|  | 
 | ||||||
| from django.views.generic.edit import FormView | from django.views.generic.edit import FormView | ||||||
| from membership.calendar.calendar import BookCalendar | from membership.calendar.calendar import BookCalendar | ||||||
| from membership.models import Calendar as CalendarModel, StripeCustomer | from membership.models import Calendar as CalendarModel, StripeCustomer | ||||||
|  | @ -296,12 +299,35 @@ class MembershipPaymentView(LoginRequiredMixin, IsNotMemberMixin, FormView): | ||||||
|                 'stripe_charge': charge, |                 'stripe_charge': charge, | ||||||
|                 'amount': membership_type.first_month_price |                 'amount': membership_type.first_month_price | ||||||
|             } |             } | ||||||
|             MembershipOrder.create(order_data) |             membership_order = MembershipOrder.create(order_data) | ||||||
| 
 | 
 | ||||||
|             request.session.update({ |             request.session.update({ | ||||||
|                 'membership_price': membership.type.first_month_price, |                 'membership_price': membership.type.first_month_price, | ||||||
|                 'membership_dates': membership.type.first_month_formated_range |                 'membership_dates': membership.type.first_month_formated_range | ||||||
|             }) |             }) | ||||||
|  | 
 | ||||||
|  |             start_m_date, end_m_date = membership_order.first_membership_range_date() | ||||||
|  | 
 | ||||||
|  |             context = { | ||||||
|  |                 'membership': membership, | ||||||
|  |                 'order': membership_order, | ||||||
|  |                 'membership_start_date': start_m_date, | ||||||
|  |                 'membership_end_date': end_m_date, | ||||||
|  |                 'base_url': "{0}://{1}".format(request.scheme, request.get_host()) | ||||||
|  | 
 | ||||||
|  |             } | ||||||
|  |             email_data = { | ||||||
|  |                 'subject': 'Your membership has been charged', | ||||||
|  |                 'to': request.user.email, | ||||||
|  |                 'context': context, | ||||||
|  |                 'template_name': 'membership_charge', | ||||||
|  |                 'template_path': 'digitalglarus/emails/' | ||||||
|  |             } | ||||||
|  |             email = BaseEmail(**email_data) | ||||||
|  |             email.send() | ||||||
|  |             import pdb | ||||||
|  |             pdb.set_trace() | ||||||
|  | 
 | ||||||
|             return HttpResponseRedirect(reverse('digitalglarus:membership_activated')) |             return HttpResponseRedirect(reverse('digitalglarus:membership_activated')) | ||||||
| 
 | 
 | ||||||
|         else: |         else: | ||||||
|  | @ -322,6 +348,27 @@ class MembershipActivatedView(TemplateView): | ||||||
|         return context |         return context | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | class MembershipDeactivateView(LoginRequiredMixin, UpdateView): | ||||||
|  |     template_name = "digitalglarus/membership_deactivated.html" | ||||||
|  |     model = Membership | ||||||
|  |     success_url = reverse_lazy('digitalglarus:membership_orders_list') | ||||||
|  |     login_url = reverse_lazy('digitalglarus:login') | ||||||
|  |     fields = '__all__' | ||||||
|  | 
 | ||||||
|  |     def get_object(self): | ||||||
|  |         membership_order = MembershipOrder.objects.\ | ||||||
|  |             filter(customer__user=self.request.user).last() | ||||||
|  |         if not membership_order: | ||||||
|  |             raise AttributeError("Membership does not exists") | ||||||
|  |         membership = membership_order.membership | ||||||
|  |         return membership | ||||||
|  | 
 | ||||||
|  |     def post(self, *args, **kwargs): | ||||||
|  |         membership = self.get_object() | ||||||
|  |         membership.deactivate() | ||||||
|  |         return HttpResponseRedirect(self.success_url) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| class MembershipOrdersListView(LoginRequiredMixin, ListView): | class MembershipOrdersListView(LoginRequiredMixin, ListView): | ||||||
|     template_name = "digitalglarus/membership_orders_list.html" |     template_name = "digitalglarus/membership_orders_list.html" | ||||||
|     context_object_name = "orders" |     context_object_name = "orders" | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue