digitalglarus booking update
This commit is contained in:
		
					parent
					
						
							
								b546300891
							
						
					
				
			
			
				commit
				
					
						ae0c404951
					
				
			
		
					 22 changed files with 5935 additions and 3794 deletions
				
			
		|  | @ -84,7 +84,7 @@ table { | ||||||
| 
 | 
 | ||||||
| /*select date*/ | /*select date*/ | ||||||
| .calendar tbody td:hover { | .calendar tbody td:hover { | ||||||
| 	background: #8BC4C9; | 	background: #347D80; | ||||||
| 	color: #f9f9f9; | 	color: #f9f9f9; | ||||||
| 	/*border: .1px solid #8BC4C9;*/ | 	/*border: .1px solid #8BC4C9;*/ | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -15,15 +15,15 @@ | ||||||
|             <span class="icon-bar"></span> |             <span class="icon-bar"></span> | ||||||
|             <span class="icon-bar"></span> |             <span class="icon-bar"></span> | ||||||
|           </button> |           </button> | ||||||
|           <a class="navbar-brand" href="#"><span>Brand</span></a> |           <a class="navbar-brand" href="#"><span>Digital Glarus</span></a> | ||||||
|         </div> |         </div> | ||||||
|         <div class="collapse navbar-collapse" id="navbar-ex-collapse"> |         <div class="collapse navbar-collapse" id="navbar-ex-collapse"> | ||||||
|           <ul class="nav navbar-nav navbar-right"> |           <ul class="nav navbar-nav navbar-right"> | ||||||
|             <li class="active"> |             <li class="active"> | ||||||
|               <a href="#">Home</a> |               <a href="{% url 'digitalglarus:index' %}">Home</a> | ||||||
|             </li> |             </li> | ||||||
|             <li> |             <li> | ||||||
|               <a href="#">Contacts</a> |               <a href="{% url 'digitalglarus:contact' %}">Contacts</a> | ||||||
|             </li> |             </li> | ||||||
|           </ul> |           </ul> | ||||||
|         </div> |         </div> | ||||||
|  |  | ||||||
|  | @ -1,6 +1,7 @@ | ||||||
| from django.db import models | from django.db import models | ||||||
| from cms.models import CMSPlugin | from cms.models import CMSPlugin | ||||||
| from filer.fields.image import FilerImageField | from filer.fields.image import FilerImageField | ||||||
|  | from django.core.urlresolvers import reverse | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class Supporter(models.Model): | class Supporter(models.Model): | ||||||
|  |  | ||||||
							
								
								
									
										71
									
								
								digitalglarus/static/digitalglarus/css/login.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								digitalglarus/static/digitalglarus/css/login.css
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,71 @@ | ||||||
|  | .user { | ||||||
|  |     padding-right: 2%; | ||||||
|  |     background-position: 6px 7px; | ||||||
|  |     background-repeat: no-repeat; | ||||||
|  |     background-color: white; | ||||||
|  |     padding: 5px 8px 4px 8px; | ||||||
|  |     -webkit-border-radius: 0px 0px 8px 8px; | ||||||
|  |     -moz-border-radius: 0px 0px 8px 8px; | ||||||
|  |     border-radius: 1px 1px 1px 1px; | ||||||
|  |     -webkit-box-sizing: border-box; | ||||||
|  |     -moz-box-sizing: border-box; | ||||||
|  |     box-sizing: border-box; | ||||||
|  |     margin-left: 8px; | ||||||
|  |     background-color: #333; | ||||||
|  |     padding: 4px 4px 0px 4px; | ||||||
|  |     -webkit-border-radius: 0px 0px 10px 10px; | ||||||
|  |     -moz-border-radius: 0px 0px 10px 10px; | ||||||
|  |     border-radius: 0px 0px 10px 10px; | ||||||
|  |     font-size: 14px; | ||||||
|  |     line-height: 1.42857143; | ||||||
|  |     color: #794646; | ||||||
|  |     background-color: #fff; | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .user_loggedin{ | ||||||
|  |     padding-bottom: 2%; | ||||||
|  |     padding-right: 2%; | ||||||
|  |     background-position: 6px 7px; | ||||||
|  |     background-repeat: no-repeat; | ||||||
|  |     background-color: white; | ||||||
|  |     padding: 5px 8px 4px 8px; | ||||||
|  |     -webkit-border-radius: 0px 0px 8px 8px; | ||||||
|  |     -moz-border-radius: 0px 0px 8px 8px; | ||||||
|  |     border-radius: 1px 1px 1px 1px; | ||||||
|  |     -webkit-box-sizing: border-box; | ||||||
|  |     -moz-box-sizing: border-box; | ||||||
|  |     box-sizing: border-box; | ||||||
|  |     float: left; | ||||||
|  |     margin-left: 8px; | ||||||
|  |     background-color: #333; | ||||||
|  |     padding: 4px 4px 0px 4px; | ||||||
|  |     -webkit-border-radius: 0px 0px 10px 10px; | ||||||
|  |     -moz-border-radius: 0px 0px 10px 10px; | ||||||
|  |     border-radius: 0px 0px 10px 10px; | ||||||
|  |     font-size: 14px; | ||||||
|  |     line-height: 1.42857143; | ||||||
|  |     color: #777; | ||||||
|  |     background-color: #fff; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .user > span { | ||||||
|  |     width: 100%; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .u_P { | ||||||
|  |     background-color: #fffcfc; | ||||||
|  |     text-transform: uppercase; | ||||||
|  |     padding-right: 2%; | ||||||
|  |     padding-left:2%; | ||||||
|  |     padding-bottom:0.5%; | ||||||
|  |     margin-right: 1%; | ||||||
|  | } | ||||||
|  | .u_P a{ | ||||||
|  |     margin-bottom: 1%; | ||||||
|  |     color: #777; | ||||||
|  | } | ||||||
|  | .u_P a:hover{ | ||||||
|  |     text-decoration: None; | ||||||
|  |     color: #000; | ||||||
|  | } | ||||||
|  | @ -21,12 +21,15 @@ | ||||||
| 
 | 
 | ||||||
|     <!-- Custom CSS --> |     <!-- Custom CSS --> | ||||||
|     <link href="{% static 'digitalglarus/css/business-casual.css' %}" rel="stylesheet"> |     <link href="{% static 'digitalglarus/css/business-casual.css' %}" rel="stylesheet"> | ||||||
|  |     <link href="{% static 'digitalglarus/css/login.css' %}" rel="stylesheet"> | ||||||
| 
 | 
 | ||||||
|     <!-- Fonts --> |     <!-- Fonts --> | ||||||
|     <link href="//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800" |     <link href="//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800" | ||||||
|           rel="stylesheet" type="text/css"> |           rel="stylesheet" type="text/css"> | ||||||
|     <link href="//fonts.googleapis.com/css?family=Josefin+Slab:100,300,400,600,700,100italic,300italic,400italic,600italic,700italic" |     <link href="//fonts.googleapis.com/css?family=Josefin+Slab:100,300,400,600,700,100italic,300italic,400italic,600italic,700italic" | ||||||
|           rel="stylesheet" type="text/css"> |           rel="stylesheet" type="text/css"> | ||||||
|  |     <link href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css" | ||||||
|  |           rel="stylesheet" type="text/css"> | ||||||
| 
 | 
 | ||||||
|     {% render_block "css" postprocessor "compressor.contrib.sekizai.compress" %} |     {% render_block "css" postprocessor "compressor.contrib.sekizai.compress" %} | ||||||
|     {% render_block "js" postprocessor "compressor.contrib.sekizai.compress" %} |     {% render_block "js" postprocessor "compressor.contrib.sekizai.compress" %} | ||||||
|  | @ -37,6 +40,7 @@ | ||||||
| 	<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> | 	<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> | ||||||
| 	<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> | 	<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> | ||||||
|     <![endif]--> |     <![endif]--> | ||||||
|  | 
 | ||||||
|     <script> |     <script> | ||||||
|         (function (i, s, o, g, r, a, m) { |         (function (i, s, o, g, r, a, m) { | ||||||
|             i['GoogleAnalyticsObject'] = r; |             i['GoogleAnalyticsObject'] = r; | ||||||
|  | @ -58,14 +62,28 @@ | ||||||
| 
 | 
 | ||||||
| <body> | <body> | ||||||
| {% cms_toolbar %} | {% cms_toolbar %} | ||||||
|  | <div class="pull-right u_P user"> | ||||||
|  |     {% if request.user.is_authenticated %} | ||||||
|  |         <div class="user_loggedin"> | ||||||
|  |             <h4>{{ request.user.name }} | ||||||
|  |                 <a href="{% url 'logout_glarus' %}"><i class="fa fa-1x fa-sign-out" | ||||||
|  |                                                        aria-hidden="true"></i></a> | ||||||
|  |             </h4> | ||||||
|  |         </div> | ||||||
|  |     {% else %} | ||||||
|  |         <a href="{% url 'login_glarus' %}"><h4>Login</h4></a> | ||||||
|  |     {% endif %} | ||||||
|  | </div> | ||||||
| <div class="brand">Digital Glarus</div> | <div class="brand">Digital Glarus</div> | ||||||
| <div class="address-bar">The Swiss IT Valley | Schwanden, 8762 GL Switzerland | From 2015.10.13</div> | <div class="address-bar">The Swiss IT Valley | Schwanden, 8762 GL Switzerland | From 2015.10.13</div> | ||||||
| <div>{% language_chooser "language_chooser.html" %}</div> | <div>{% language_chooser "language_chooser.html" %}</div> | ||||||
| 
 | 
 | ||||||
| <!-- Navigation --> | <!-- Navigation --> | ||||||
| <nav class="navbar navbar-default" role="navigation"> | <nav class="navbar navbar-default" role="navigation"> | ||||||
|  | 
 | ||||||
|     <div class="container"> |     <div class="container"> | ||||||
|         <!-- Brand and toggle get grouped for better mobile display --> |         <!-- Brand and toggle get grouped for better mobile display --> | ||||||
|  | 
 | ||||||
|         <div class="navbar-header"> |         <div class="navbar-header"> | ||||||
|             <button type="button" class="navbar-toggle" data-toggle="collapse" |             <button type="button" class="navbar-toggle" data-toggle="collapse" | ||||||
|                     data-target="#bs-example-navbar-collapse-1"> |                     data-target="#bs-example-navbar-collapse-1"> | ||||||
|  | @ -80,8 +98,8 @@ | ||||||
|         <!-- Collect the nav links, forms, and other content for toggling --> |         <!-- Collect the nav links, forms, and other content for toggling --> | ||||||
|         <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> |         <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> | ||||||
|             <ul class="nav navbar-nav"> |             <ul class="nav navbar-nav"> | ||||||
| {#                <pre> {% filter force_escape %} {% debug %} {% endfilter %} </pre>#} |                 {#                <pre> {% filter force_escape %} {% debug %} {% endfilter %} </pre>#} | ||||||
| {#                {% show_menu 0 0 0 1 %}#} |                 {#                {% show_menu 0 0 0 1 %}#} | ||||||
|                 <li> |                 <li> | ||||||
|                     <a href="{% url 'pages-root' %}">Home</a> |                     <a href="{% url 'pages-root' %}">Home</a> | ||||||
|                 </li> |                 </li> | ||||||
|  |  | ||||||
|  | @ -9,6 +9,8 @@ urlpatterns = [ | ||||||
|     url(_(r'about/?$'), AboutView.as_view(), name='about'), |     url(_(r'about/?$'), AboutView.as_view(), name='about'), | ||||||
|     url(_(r'contact/?$'), ContactView.as_view(), name='contact'), |     url(_(r'contact/?$'), ContactView.as_view(), name='contact'), | ||||||
|     url(_(r'supporters/?$'), views.supporters, name='supporters'), |     url(_(r'supporters/?$'), views.supporters, name='supporters'), | ||||||
|  |     url(_(r'calendar_api/(?P<month>\d+)/(?P<year>\d+)?$'),views.CalendarApi.as_view()), | ||||||
|  |     url(_(r'calendar_api/'),views.CalendarApi.as_view()), | ||||||
|     url(_(r'support-us/?$'), views.support, name='support'), |     url(_(r'support-us/?$'), views.support, name='support'), | ||||||
|     url(r'^blog/(?P<slug>\w[-\w]*)/$', views.blog_detail, name='blog-detail'), |     url(r'^blog/(?P<slug>\w[-\w]*)/$', views.blog_detail, name='blog-detail'), | ||||||
|     url(r'blog/$', views.blog, name='blog'), |     url(r'blog/$', views.blog, name='blog'), | ||||||
|  |  | ||||||
|  | @ -9,12 +9,28 @@ from django.views.generic import TemplateView | ||||||
| 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 | ||||||
| from django.contrib import messages | from django.contrib import messages | ||||||
| 
 | from django.http import JsonResponse | ||||||
|  | from django.views.generic import View | ||||||
| 
 | 
 | ||||||
| from .models import Supporter | from .models import Supporter | ||||||
| from utils.forms import ContactUsForm | from utils.forms import ContactUsForm | ||||||
| from django.views.generic.edit import FormView | from django.views.generic.edit import FormView | ||||||
|  | from membership.calendar.calendar import BookCalendar | ||||||
|  | from membership.models import Calendar as CalendarModel | ||||||
|  | import json | ||||||
|  | from django.contrib.auth import logout | ||||||
| 
 | 
 | ||||||
|  | class CalendarApi(View): | ||||||
|  |     def get(self,request,month,year): | ||||||
|  |         calendar = BookCalendar(request.user,requested_month=month).formatmonth(int(year),int(month)) | ||||||
|  |         ret = {'calendar':calendar,'month':month,'year':year} | ||||||
|  |         return JsonResponse(ret) | ||||||
|  | 
 | ||||||
|  |     def post(self,request): | ||||||
|  |         pd = json.loads(request.POST.get('data','')) | ||||||
|  |         ret = {'status':'success'} | ||||||
|  |         CalendarModel.add_dates(pd,request.user) | ||||||
|  |         return JsonResponse(ret) | ||||||
| 
 | 
 | ||||||
| class ContactView(FormView): | class ContactView(FormView): | ||||||
|     template_name = 'contact.html' |     template_name = 'contact.html' | ||||||
|  | @ -45,17 +61,6 @@ def detail(request, message_id): | ||||||
| def about(request): | def about(request): | ||||||
|     return render(request, 'digitalglarus/about.html') |     return render(request, 'digitalglarus/about.html') | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| #def index(request): |  | ||||||
| #    return render(request, 'digitalglarus/index.html') |  | ||||||
| # |  | ||||||
| #def letscowork(request): |  | ||||||
| #    return render(request, 'digitalglarus/letscowork.html') |  | ||||||
| 
 |  | ||||||
| # def index(request): |  | ||||||
| #     return home(request) |  | ||||||
| 
 |  | ||||||
| def home(request): | def home(request): | ||||||
|     return render(request, 'index.html') |     return render(request, 'index.html') | ||||||
| 
 | 
 | ||||||
|  | @ -92,3 +97,6 @@ def supporters(request): | ||||||
|         'supporters': Supporter.objects.order_by('name') |         'supporters': Supporter.objects.order_by('name') | ||||||
|     } |     } | ||||||
|     return render(request, 'supporters.html', context) |     return render(request, 'supporters.html', context) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -282,9 +282,9 @@ CACHES = { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| if LOGIN_URL is None: | if LOGIN_URL is None: | ||||||
|     LOGIN_URL = APP_ROOT_ENDPOINT + 'accounts/login/' |     LOGIN_URL = APP_ROOT_ENDPOINT + 'login/' | ||||||
| if LOGOUT_URL is None: | if LOGOUT_URL is None: | ||||||
|     LOGOUT_URL = APP_ROOT_ENDPOINT + 'accounts/logout/' |     LOGOUT_URL = APP_ROOT_ENDPOINT + 'logout/' | ||||||
| if LOGIN_REDIRECT_URL is None: | if LOGIN_REDIRECT_URL is None: | ||||||
|     LOGIN_REDIRECT_URL = APP_ROOT_ENDPOINT |     LOGIN_REDIRECT_URL = APP_ROOT_ENDPOINT | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -24,8 +24,8 @@ urlpatterns += i18n_patterns('', | ||||||
|                              url(r'^digitalglarus/', include('digitalglarus.urls', |                              url(r'^digitalglarus/', include('digitalglarus.urls', | ||||||
|                                                              namespace="digitalglarus"),name='digitalglarus'), |                                                              namespace="digitalglarus"),name='digitalglarus'), | ||||||
|                              url(r'^blog/',include('ungleich.urls',namespace='ungleich')), |                              url(r'^blog/',include('ungleich.urls',namespace='ungleich')), | ||||||
|                              url(r'^',include('ungleich_page.urls',namespace='ungleich_page'),name="ungleich_page"), |  | ||||||
|                              url(r'^login/',include(membership_urls)), |                              url(r'^login/',include(membership_urls)), | ||||||
|  |                              url(r'^$',include('ungleich_page.urls',namespace='ungleich_page'),name="ungleich_page"), | ||||||
|                              url(r'^', include('cms.urls')), |                              url(r'^', include('cms.urls')), | ||||||
|                              ) |                              ) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										1
									
								
								membership/calendar/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								membership/calendar/__init__.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | __author__ = 'tomislav' | ||||||
							
								
								
									
										136
									
								
								membership/calendar/calendar.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								membership/calendar/calendar.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,136 @@ | ||||||
|  | from calendar import month_name, day_abbr | ||||||
|  | from calendar import Calendar | ||||||
|  | from membership.models import Calendar as CalendarModel | ||||||
|  | import datetime | ||||||
|  | 
 | ||||||
|  | now = datetime.datetime.now() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class CustomCalendar(Calendar): | ||||||
|  |     def __init__(self): | ||||||
|  |         super(CustomCalendar, self).__init__(firstweekday=0) | ||||||
|  | 
 | ||||||
|  |     def itermonthdays(self, year, month): | ||||||
|  |         """ | ||||||
|  |         Like itermonthdates(), but will yield day numbers. For days outside | ||||||
|  |         the specified month the day number. | ||||||
|  |         """ | ||||||
|  |         for date in self.itermonthdates(year, month): | ||||||
|  |             yield date.day | ||||||
|  | 
 | ||||||
|  |     def itermonthdays2(self, year, month): | ||||||
|  |         """ | ||||||
|  |         Like itermonthdates(), but will yield (day number, weekday number) | ||||||
|  |         tuples. For days outside the specified month the day number is 0. | ||||||
|  |         """ | ||||||
|  |         for date in self.itermonthdates(year, month): | ||||||
|  |             yield (date.day, date.weekday(), date.month) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class CustomHTMLCalendar(CustomCalendar): | ||||||
|  |     """ | ||||||
|  |     This calendar returns complete HTML pages. | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  |     # CSS classes for the day <td>s | ||||||
|  | 
 | ||||||
|  |     def __init__(self, requested_month): | ||||||
|  |         self.requested_month = requested_month | ||||||
|  |         super(CustomHTMLCalendar, self).__init__() | ||||||
|  | 
 | ||||||
|  |     def formatday(self, day, weekday, month=None,year=None): | ||||||
|  |         """ | ||||||
|  |         Return a day as a table cell. | ||||||
|  |         """ | ||||||
|  | 
 | ||||||
|  |         booked = CalendarModel.objects.filter(user_id=self.user.id) | ||||||
|  |         is_booked= booked.filter(datebooked=datetime.date(day=day,month=month,year=year)) | ||||||
|  | 
 | ||||||
|  |         if month < int(self.requested_month): | ||||||
|  |             return '<td class="prev-month %s">%d</td>' % ("selected" if is_booked else "",day) | ||||||
|  |         elif month > int(self.requested_month): | ||||||
|  |             return '<td class="next-month %s">%d</td>' % ("selected" if is_booked else "",day) | ||||||
|  |         else: | ||||||
|  |             return '<td class="%s">%d</td>' % ("selected" if is_booked else "",day) | ||||||
|  | 
 | ||||||
|  |     def formatweek(self, theweek,year): | ||||||
|  |         """ | ||||||
|  |         Return a complete week as a table row. | ||||||
|  |         """ | ||||||
|  |         s = ''.join(self.formatday(d, wd, month,year) for (d, wd, month) in theweek) | ||||||
|  |         return '<tr>%s</tr>' % s | ||||||
|  | 
 | ||||||
|  |     def formatmonthname(self, theyear, themonth, withyear=True): | ||||||
|  |         """ | ||||||
|  |         Return a month name as a table row. | ||||||
|  |         """ | ||||||
|  |         if withyear: | ||||||
|  |             s = '%s %s' % (month_name[themonth], theyear) | ||||||
|  |         else: | ||||||
|  |             s = '%s' % month_name[themonth] | ||||||
|  |         return '<tr><th colspan="7" class="month">%s</th></tr>' % s | ||||||
|  | 
 | ||||||
|  |     def add_before(self): | ||||||
|  |         return '<a class="btn-prev fontawesome-angle-left" href="#"></a>' | ||||||
|  | 
 | ||||||
|  |     def add_after(self): | ||||||
|  |         return '<a class="btn-next fontawesome-angle-right" href="#"></a>' | ||||||
|  | 
 | ||||||
|  |     def formatmonth(self, theyear, themonth, withyear=True): | ||||||
|  |         """ | ||||||
|  |         Return a formatted month as a table. | ||||||
|  |         """ | ||||||
|  |         v = [] | ||||||
|  |         a = v.append | ||||||
|  |         a('<table border="0" cellpadding="0" cellspacing="0" class="month">') | ||||||
|  |         a('\n') | ||||||
|  |         a(self.add_before()) | ||||||
|  |         a('\n') | ||||||
|  |         a(self.formatmonthname(theyear, themonth, withyear=withyear)) | ||||||
|  |         a('\n') | ||||||
|  |         a(self.add_after()) | ||||||
|  |         a('\n') | ||||||
|  |         a(self.formatweekheader()) | ||||||
|  |         a('\n') | ||||||
|  |         for week in self.monthdays2calendar(theyear, themonth): | ||||||
|  |             a(self.formatweek(week,theyear)) | ||||||
|  |             a('\n') | ||||||
|  |         a('</table>') | ||||||
|  |         a('\n') | ||||||
|  |         a('<span id="datesbooked"></span>') | ||||||
|  |         return ''.join(v) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class BookCalendar(CustomHTMLCalendar): | ||||||
|  |     def __init__(self, user,requested_month): | ||||||
|  |         self.user=user | ||||||
|  |         super(BookCalendar, self).__init__(requested_month) | ||||||
|  | 
 | ||||||
|  |     def formatmonth(self, year, month): | ||||||
|  |         self.year, self.month = year, month | ||||||
|  |         return super(BookCalendar, self).formatmonth(year, month) | ||||||
|  | 
 | ||||||
|  |     def day_cell(self, cssclass, body): | ||||||
|  |         return '<td>%s</td>' %  body | ||||||
|  | 
 | ||||||
|  |     def formatmonthname(self, theyear, themonth, withyear): | ||||||
|  |         """ | ||||||
|  |         Return a month name as a table row. | ||||||
|  |         """ | ||||||
|  |         s = '%s' % month_name[themonth] | ||||||
|  |         return '<span id="monthtitle">%s</span>' % s | ||||||
|  | 
 | ||||||
|  |     def formatweekday(self, day): | ||||||
|  |         """ | ||||||
|  |         Return a weekday name as a table header. | ||||||
|  |         """ | ||||||
|  | 
 | ||||||
|  |         ret = '<td>%s</td>' % day_abbr[day][0:2] | ||||||
|  |         return ret | ||||||
|  | 
 | ||||||
|  |     def formatweekheader(self): | ||||||
|  |         """ | ||||||
|  |         Return a header for a week as a table row. | ||||||
|  |         """ | ||||||
|  |         s = ''.join(self.formatweekday(i) for i in self.iterweekdays()) | ||||||
|  |         return '<thead>%s</thead>' % s | ||||||
							
								
								
									
										35
									
								
								membership/migrations/0003_auto_20160422_1002.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								membership/migrations/0003_auto_20160422_1002.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,35 @@ | ||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | # Generated by Django 1.9.4 on 2016-04-22 10:02 | ||||||
|  | from __future__ import unicode_literals | ||||||
|  | 
 | ||||||
|  | from django.conf import settings | ||||||
|  | from django.db import migrations, models | ||||||
|  | import django.db.models.deletion | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  | 
 | ||||||
|  |     dependencies = [ | ||||||
|  |         ('sites', '0002_alter_domain_unique'), | ||||||
|  |         ('membership', '0002_auto_20160324_2336'), | ||||||
|  |     ] | ||||||
|  | 
 | ||||||
|  |     operations = [ | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name='Calendar', | ||||||
|  |             fields=[ | ||||||
|  |                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||||||
|  |                 ('datebooked', models.DateField()), | ||||||
|  |             ], | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name='customuser', | ||||||
|  |             name='site', | ||||||
|  |             field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='sites.Site'), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name='calendar', | ||||||
|  |             name='user', | ||||||
|  |             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
|  | @ -1,10 +1,13 @@ | ||||||
|  | from datetime import datetime | ||||||
|  | 
 | ||||||
| from django.db import models | from django.db import models | ||||||
| from django.utils.translation import ugettext_lazy as _ | from django.utils.translation import ugettext_lazy as _ | ||||||
| from django.contrib.auth.models import User, AbstractBaseUser, BaseUserManager,AbstractUser | from django.contrib.auth.models import User, AbstractBaseUser, BaseUserManager, AbstractUser | ||||||
| from django.contrib.auth.hashers import make_password | from django.contrib.auth.hashers import make_password | ||||||
| from django.core.mail import send_mail | from django.core.mail import send_mail | ||||||
| from django.core.validators import RegexValidator | from django.core.validators import RegexValidator | ||||||
| from django.contrib.auth.models import User | from django.contrib.auth.models import User | ||||||
|  | from django.contrib.sites.models import Site | ||||||
| 
 | 
 | ||||||
| REGISTRATION_MESSAGE = {'subject': "Validation mail", | REGISTRATION_MESSAGE = {'subject': "Validation mail", | ||||||
|                         'message': 'Please validate Your account under this link http://localhost:8000/en-us/login/validate/{}', |                         'message': 'Please validate Your account under this link http://localhost:8000/en-us/login/validate/{}', | ||||||
|  | @ -43,6 +46,7 @@ class MyUserManager(BaseUserManager): | ||||||
| 
 | 
 | ||||||
| class CustomUser(AbstractBaseUser): | class CustomUser(AbstractBaseUser): | ||||||
|     VALIDATED_CHOICES = ((0, 'Not validated'), (1, 'Validated')) |     VALIDATED_CHOICES = ((0, 'Not validated'), (1, 'Validated')) | ||||||
|  |     site = models.ForeignKey(Site, default=1) | ||||||
|     name = models.CharField(max_length=50) |     name = models.CharField(max_length=50) | ||||||
|     email = models.EmailField(unique=True) |     email = models.EmailField(unique=True) | ||||||
| 
 | 
 | ||||||
|  | @ -123,5 +127,26 @@ class CreditCards(models.Model): | ||||||
|     card_number = models.CharField(max_length=50) |     card_number = models.CharField(max_length=50) | ||||||
|     expiry_date = models.CharField(max_length=50, validators=[RegexValidator(r'\d{2}\/\d{4}', _( |     expiry_date = models.CharField(max_length=50, validators=[RegexValidator(r'\d{2}\/\d{4}', _( | ||||||
|         'Use this pattern(MM/YYYY).'))]) |         'Use this pattern(MM/YYYY).'))]) | ||||||
|     ccv = models.CharField(max_length=4,validators=[RegexValidator(r'\d{3,4}',_('Wrong CCV number.'))]) |     ccv = models.CharField(max_length=4, validators=[RegexValidator(r'\d{3,4}', _('Wrong CCV number.'))]) | ||||||
|     payment_type = models.CharField(max_length=5,default='N') |     payment_type = models.CharField(max_length=5, default='N') | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Calendar(models.Model): | ||||||
|  |     datebooked = models.DateField() | ||||||
|  |     user = models.ForeignKey(CustomUser) | ||||||
|  | 
 | ||||||
|  |     def __init__(self, *args, **kwargs): | ||||||
|  |         if kwargs.get('datebooked'): | ||||||
|  |             user = kwargs.get('user') | ||||||
|  |             kwargs['datebooked'] = datetime.strptime(kwargs.get('datebooked', ''), '%d,%m,%Y') | ||||||
|  |             self.user_id = user.id | ||||||
|  |         super(Calendar, self).__init__(*args, **kwargs) | ||||||
|  | 
 | ||||||
|  |     @classmethod | ||||||
|  |     def add_dates(cls,dates,user): | ||||||
|  |         old_dates = Calendar.objects.filter(user_id=user.id) | ||||||
|  |         if old_dates: | ||||||
|  |             old_dates.delete() | ||||||
|  |         for date in dates: | ||||||
|  |             Calendar.objects.create(datebooked=date,user=user) | ||||||
|  | 
 | ||||||
|  |  | ||||||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										168
									
								
								membership/static/stylesheet.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										168
									
								
								membership/static/stylesheet.css
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,168 @@ | ||||||
|  | @charset "utf-8"; | ||||||
|  | /* CSS Document */ | ||||||
|  | 
 | ||||||
|  | /* ---------- FONTAWESOME ---------- */ | ||||||
|  | /* ---------- http://fortawesome.github.com/Font-Awesome/ ---------- */ | ||||||
|  | /* ---------- http://weloveiconfonts.com/ ---------- */ | ||||||
|  | 
 | ||||||
|  | @import url(http://weloveiconfonts.com/api/?family=fontawesome); | ||||||
|  | 
 | ||||||
|  | *[class*="fontawesome-"]:before { | ||||||
|  |   font-family: 'FontAwesome', sans-serif; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* ---------- GENERAL ---------- */ | ||||||
|  | 
 | ||||||
|  | /*body {*/ | ||||||
|  | 	/*background: #f9f9f9;*/ | ||||||
|  | 	/*color: #0e171c;*/ | ||||||
|  | 	/*font: 300 100%/1em 'Lato', sans-serif;*/ | ||||||
|  | 	/*margin: 0;*/ | ||||||
|  | /*}*/ | ||||||
|  | /**/ | ||||||
|  | /*a {*/ | ||||||
|  | 	/*text-decoration: none;*/ | ||||||
|  | /*}*/ | ||||||
|  | 
 | ||||||
|  | /*Month size*/ | ||||||
|  | #monthtitle { | ||||||
|  | 	font-size: 1.2em; | ||||||
|  | 	line-height: 1.25em; | ||||||
|  | 	margin: .25em 0; | ||||||
|  | 	font-weight: 600; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | h3 { | ||||||
|  | 	font-size: 1.5em; | ||||||
|  | 	line-height: 1em; | ||||||
|  | 	margin: .33em 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | table { | ||||||
|  | 	border-collapse: collapse; | ||||||
|  | 	border-spacing: 0; | ||||||
|  | 	margin:auto; | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*.container {*/ | ||||||
|  | 	/*height: 358px;*/ | ||||||
|  | 	/*left: 50%;*/ | ||||||
|  | 	/*margin: -255px 0 0 -245px;*/ | ||||||
|  | 	/*position: absolute;*/ | ||||||
|  | 	/*top: 50%;*/ | ||||||
|  | 	/*width: 340px;*/ | ||||||
|  | /*}*/ | ||||||
|  | 
 | ||||||
|  | /* ---------- CALENDAR ---------- */ | ||||||
|  | 
 | ||||||
|  | .calendar { | ||||||
|  | 	text-align: center; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .calendar header { | ||||||
|  | 	position: relative; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .calendar #monthtitle { | ||||||
|  | 	text-transform: uppercase; | ||||||
|  | 	color: #1A6687; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #datesbooked{ | ||||||
|  | 	color:#1a6687; | ||||||
|  | 	padding-top: 2px; | ||||||
|  | } | ||||||
|  | /*Title*/ | ||||||
|  | .calendar thead { | ||||||
|  | 	font-weight: 500; | ||||||
|  | 	/*text-transform: uppercase;*/ | ||||||
|  | 	color: #8BC4C9; | ||||||
|  | 	/*margin-bottom:1px;*/ | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*Body text*/ | ||||||
|  | .calendar tbody { | ||||||
|  | 	color: #7c8a95; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*select date*/ | ||||||
|  | .calendar tbody td:hover { | ||||||
|  | 	background: #8BC4C9; | ||||||
|  | 	color: #f9f9f9; | ||||||
|  | 	/*border: .1px solid #8BC4C9;*/ | ||||||
|  | 
 | ||||||
|  | 	/*border-radius: 50%;*/ | ||||||
|  | } | ||||||
|  | .selected{ | ||||||
|  | 	background: #6b9699; | ||||||
|  | 	color: #f9f9f9; | ||||||
|  | } | ||||||
|  | .calendar thead>tr>td{ | ||||||
|  | 	border-top:hidden; | ||||||
|  | 	border-left:hidden; | ||||||
|  | 	border-right: hidden; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .calendar td { | ||||||
|  | 	border: .1px solid #cbd1d2; | ||||||
|  | 	/*border-radius: 50%;*/ | ||||||
|  | 	display: inline-block; | ||||||
|  | 	height: 2.5em; | ||||||
|  | 	line-height: 2.5em; | ||||||
|  | 	text-align: center; | ||||||
|  | 	width: 2.5em; | ||||||
|  | 	 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .calendar .prev-month, | ||||||
|  | .calendar .next-month { | ||||||
|  | 	/*border: .1px solid #cbd1d2;*/ | ||||||
|  | 	color: #cbd1d2; | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .calendar .prev-month:hover, | ||||||
|  | .calendar .next-month:hover { | ||||||
|  | 	border: .5px solid #cbd1d2; | ||||||
|  | 	background: #cbd1d2; | ||||||
|  | 	color: #f9f9f9; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*Today*/ | ||||||
|  | .current-day { | ||||||
|  | 	color: #8BC4C9; | ||||||
|  | 	/*background-color: #8BC4C9;*/ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /*Next,Prev month*/ | ||||||
|  | .btn-prev, | ||||||
|  | .btn-next { | ||||||
|  | 	border: 1px solid transparent; | ||||||
|  | 	color: #8BC4C9; | ||||||
|  | 	font-size: 1.5em; | ||||||
|  | 	padding: 1em; | ||||||
|  | 	/*height: .7em;*/ | ||||||
|  | 	/*line-height: .3em;*/ | ||||||
|  | 	/*margin: auto;*/ | ||||||
|  | 	/*position: absolute;*/ | ||||||
|  | 	/*top: .1em;*/ | ||||||
|  | 	/*width: 25em;*/ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | .btn-prev:hover, | ||||||
|  | .btn-next:hover { | ||||||
|  | 	background: none; | ||||||
|  | 	color: #1A6687; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .btn-prev { | ||||||
|  | 	left: 6em; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .btn-next { | ||||||
|  | 	right: 6em; | ||||||
|  | } | ||||||
							
								
								
									
										112
									
								
								membership/templates/calendar/calendar.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								membership/templates/calendar/calendar.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,112 @@ | ||||||
|  | <script type="text/javascript"> | ||||||
|  |     var date = new Date(); | ||||||
|  |     var month = date.getMonth() + 1; | ||||||
|  |     var year = date.getFullYear(); | ||||||
|  |     var selected_dates = []; | ||||||
|  |     var monthly_selected_dates = []; | ||||||
|  | 
 | ||||||
|  |     $("#myModal").ready(function () { | ||||||
|  |         $.get('/digitalglarus/calendar_api/' + month + '/' + year, function (data) { | ||||||
|  |             $(".calendar").html(data.calendar) | ||||||
|  |             calendar_refresh(); | ||||||
|  |             //calendar fields | ||||||
|  |             $(".calendar").on('click', 'td', function () { | ||||||
|  |                 if (this.className != 'prev-month' && this.className != 'next-month') { | ||||||
|  |                     if ($(this).className == 'selected') { | ||||||
|  |                         date_text = this.textContent + "," +//day | ||||||
|  |                                 (date.getMonth() + 1).toString() + "," + | ||||||
|  |                                 date.getFullYear().toString(); | ||||||
|  |                         monthly_selected_dates.splice(monthly_selected_dates.indexOf(date_text), 1); | ||||||
|  |                     } | ||||||
|  |                     $(this).toggleClass('selected'); | ||||||
|  |                 } | ||||||
|  |                 updateSelectedDates(); | ||||||
|  |             }) | ||||||
|  |         }); | ||||||
|  |     }) | ||||||
|  | 
 | ||||||
|  | </script> | ||||||
|  | <div class="container"> | ||||||
|  |     <div class="calendar"> | ||||||
|  |     </div> | ||||||
|  |     <!-- end calendar --> | ||||||
|  | </div> <!-- end container --> | ||||||
|  | <script type="text/javascript"> | ||||||
|  |     function updateSelectedDates() { | ||||||
|  |         monthly_selected_dates = []; | ||||||
|  |         $("tr>td.selected").each(function () { | ||||||
|  |             date_text = this.textContent + "," +//day | ||||||
|  |                     (date.getMonth() + 1).toString() + "," + | ||||||
|  |                     date.getFullYear().toString(); | ||||||
|  |             if (monthly_selected_dates.indexOf(date_text) == -1) | ||||||
|  |                 monthly_selected_dates.push(date_text); | ||||||
|  |         }); | ||||||
|  |         console.log("monthly:"); | ||||||
|  |         console.log(monthly_selected_dates); | ||||||
|  |         console.log("all:") | ||||||
|  |         console.log(selected_dates); | ||||||
|  |     } | ||||||
|  |     languageCode = $('body').attr('lang') | ||||||
|  |     function updateCurrentSelectedDates() { | ||||||
|  |         $("tbody>tr>td[class='']").each(function (i, el) { | ||||||
|  |             date_text = this.textContent + "," +//day | ||||||
|  |                     (date.getMonth() + 1).toString() + "," + | ||||||
|  |                     date.getFullYear().toString(); | ||||||
|  |             if (selected_dates.indexOf(date_text) != -1) { | ||||||
|  |                 $(this).addClass('selected'); | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     function insertUnique() { | ||||||
|  |         selected_dates.push.apply(selected_dates, monthly_selected_dates); | ||||||
|  |         unique = [] | ||||||
|  |         $.each(selected_dates, function (i, el) { | ||||||
|  |             if ($.inArray(el, unique) === -1) unique.push(el); | ||||||
|  |         }); | ||||||
|  |         selected_dates = unique; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     function calendar_refresh() { | ||||||
|  |         $("#myModal") | ||||||
|  |                 .on('click', 'a.btn-prev,a.btn-next', function () { | ||||||
|  |                     if (/btn-prev/i.test(this.className)) { | ||||||
|  |                         date.setMonth(date.getMonth() - 1); | ||||||
|  |                     } else { | ||||||
|  |                         date.setMonth(date.getMonth() + 1) | ||||||
|  |                     } | ||||||
|  |                     insertUnique(); | ||||||
|  | 
 | ||||||
|  |                     $.get('/' + languageCode + '/digitalglarus/calendar_api/' + (date.getMonth() + 1) + '/' + date.getFullYear(), | ||||||
|  |                             function (data) { | ||||||
|  |                                 $(".calendar").html(data.calendar); | ||||||
|  |                                 updateCurrentSelectedDates(); | ||||||
|  |                             }); | ||||||
|  |                 }) | ||||||
|  |                 .on('click', '#bookdate', function () { | ||||||
|  | 
 | ||||||
|  |                     insertUnique(); | ||||||
|  |                     if (selected_dates.length) { | ||||||
|  |                         $.ajaxSetup({ | ||||||
|  |                             beforeSend: function (xhr, settings) { | ||||||
|  |                                 if (!this.crossDomain) { | ||||||
|  |                                     xhr.setRequestHeader("X-CSRFToken", '{{  csrf_token }}'); | ||||||
|  |                                 } | ||||||
|  |                             } | ||||||
|  |                         }); | ||||||
|  |                         postData = {data: JSON.stringify(selected_dates)} | ||||||
|  |                         console.log(postData) | ||||||
|  |                         $.post('/' + languageCode + '/digitalglarus/calendar_api/', postData, function (data) { | ||||||
|  |                             if (data.status == 'success') { | ||||||
|  |                                 $('#datesbooked').html("Dates booked!"); | ||||||
|  |                                 setTimeout(function () { | ||||||
|  |                                     $('#close').click(); | ||||||
|  |                                     location.reload(); | ||||||
|  |                                 }, 800) | ||||||
|  |                             } | ||||||
|  |                         }) | ||||||
|  |                     } else { | ||||||
|  |                         $('#datesbooked').html("Please select date."); | ||||||
|  |                     } | ||||||
|  |                 }); | ||||||
|  |     } | ||||||
|  | </script> | ||||||
|  | @ -36,7 +36,7 @@ | ||||||
|         </div> |         </div> | ||||||
|         <div class="row"> |         <div class="row"> | ||||||
|             <div class="col-md-12 text-center"> |             <div class="col-md-12 text-center"> | ||||||
|                 <a class="btn btn-primary" href="{% url 'login' %}">Back</a> |                 <a class="btn btn-primary" href="{% url 'login_glarus' %}">Back</a> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|         <a hrefhelp@digitalglarus.ch<="" p=""> |         <a hrefhelp@digitalglarus.ch<="" p=""> | ||||||
|  |  | ||||||
|  | @ -20,15 +20,15 @@ | ||||||
|                 <span class="icon-bar"></span> |                 <span class="icon-bar"></span> | ||||||
|                 <span class="icon-bar"></span> |                 <span class="icon-bar"></span> | ||||||
|             </button> |             </button> | ||||||
|             <a class="navbar-brand" href="#"><span>Brand</span></a> |             <a class="navbar-brand" href="#"><span>Digital Glarus</span></a> | ||||||
|         </div> |         </div> | ||||||
|         <div class="collapse navbar-collapse" id="navbar-ex-collapse"> |         <div class="collapse navbar-collapse" id="navbar-ex-collapse"> | ||||||
|             <ul class="nav navbar-nav navbar-right"> |             <ul class="nav navbar-nav navbar-right"> | ||||||
|                 <li class="active"> |                 <li class="active"> | ||||||
|                     <a href="#">Home</a> |                     <a href="{% url 'digitalglarus:index' %}">Home</a> | ||||||
|                 </li> |                 </li> | ||||||
|                 <li> |                 <li> | ||||||
|                     <a href="#">Contacts</a> |                     <a href="{% url 'digitalglarus:contact' %}">Contacts</a> | ||||||
|                 </li> |                 </li> | ||||||
|             </ul> |             </ul> | ||||||
|         </div> |         </div> | ||||||
|  |  | ||||||
|  | @ -1,196 +1,252 @@ | ||||||
| <html><head> | <html> | ||||||
|  | <head> | ||||||
|     <meta charset="utf-8"> |     <meta charset="utf-8"> | ||||||
|     <meta name="viewport" content="width=device-width, initial-scale=1"> |     <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||||
|     <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> |     <script type="text/javascript" | ||||||
|     <script type="text/javascript" src="http://netdna.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script> |             src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> | ||||||
|     <link href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet" type="text/css"> |     <script type="text/javascript" | ||||||
|  |             src="http://netdna.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script> | ||||||
|  |     <link href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css" | ||||||
|  |           rel="stylesheet" type="text/css"> | ||||||
|     {% load static %} |     {% load static %} | ||||||
|     <link href="{% get_static_prefix %}membership.css" rel="stylesheet" type="text/css"> |     <link href="{% get_static_prefix %}membership.css" rel="stylesheet" type="text/css"> | ||||||
|   </head><body> |     <link href="{% get_static_prefix %}stylesheet.css" rel="stylesheet" type="text/css"> | ||||||
|     <div class="cover"> | 
 | ||||||
|       <div class="navbar"> | </head> | ||||||
|  | <body lang="{{ language_code }}"> | ||||||
|  | <div class="cover"> | ||||||
|  |     <div class="navbar"> | ||||||
|  |         <div class="pull-right u_P user"> | ||||||
|  |             {% if request.user.is_authenticated %} | ||||||
|  |                 <div class="user"><i class="fa fa-2x fa-user" | ||||||
|  |                                      aria-hidden="true"></i>{{ request.user.name }} (<a href="{% url 'logout_glarus' %}">Logout</a>)</div> | ||||||
|  |             {% else %} | ||||||
|  |                 <a href="{% url 'login_glarus' %}"> Login </a> | ||||||
|  |             {% endif %} | ||||||
|  |         </div> | ||||||
|         <div class="container"> |         <div class="container"> | ||||||
|           <div class="navbar-header"> |             <div class="navbar-header"> | ||||||
|             <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-ex-collapse"> |                 <button type="button" class="navbar-toggle" data-toggle="collapse" | ||||||
|               <span class="sr-only">Toggle navigation</span> |                         data-target="#navbar-ex-collapse"> | ||||||
|               <span class="icon-bar"></span> |                     <span class="sr-only">Toggle navigation</span> | ||||||
|               <span class="icon-bar"></span> |                     <span class="icon-bar"></span> | ||||||
|               <span class="icon-bar"></span> |                     <span class="icon-bar"></span> | ||||||
|             </button> |                     <span class="icon-bar"></span> | ||||||
|             <a class="navbar-brand" href="#"><span>Digital Glarus</span></a> |                 </button> | ||||||
|           </div> |                 <a class="navbar-brand" href="#"><span>Digital Glarus</span></a> | ||||||
|           <div class="collapse navbar-collapse" id="navbar-ex-collapse"> |  | ||||||
|             <ul class="nav navbar-nav navbar-right"> |  | ||||||
|               <li class="active"> |  | ||||||
|                 <a href="#">Home</a> |  | ||||||
|               </li> |  | ||||||
|               <li> |  | ||||||
|                 <a href="#">Contacts</a> |  | ||||||
|               </li> |  | ||||||
|             </ul> |  | ||||||
|           </div> |  | ||||||
|         </div> |  | ||||||
|       </div> |  | ||||||
|         {% load static %} |  | ||||||
| 
 |  | ||||||
|       <div class="cover-image" style="background-image : url('{% get_static_prefix %}photo-1418479631014-8cbf89db3431 2.jpg')"></div> |  | ||||||
|       <div class="container"> |  | ||||||
|         <div class="row"> |  | ||||||
|           <div class="col-md-12 text-center"> |  | ||||||
|             <h2 class="text-inverse">When do you want to cowork?</h2> |  | ||||||
|             <p class="text-inverse">Pick a date!</p> |  | ||||||
|             <a class="btn btn-lg btn-primary">Calender</a> |  | ||||||
|           </div> |  | ||||||
|         </div> |  | ||||||
|       </div> |  | ||||||
|     </div> |  | ||||||
|     <div class="section"> |  | ||||||
|       <div class="container"> |  | ||||||
|         <div class="row"> |  | ||||||
|           <div class="col-md-12"> |  | ||||||
|             <h2 class="text-center">Become a member!</h2> |  | ||||||
|           </div> |  | ||||||
|         </div> |  | ||||||
|         <div class="row"> |  | ||||||
|           <div class="col-md-12"> |  | ||||||
|             <p class="text-center">Become our member of Digital Glarus! </p> |  | ||||||
|           </div> |  | ||||||
|         </div> |  | ||||||
|       </div> |  | ||||||
|     </div> |  | ||||||
|     <div class="section"> |  | ||||||
|       <div class="container"> |  | ||||||
|         <div class="row"> |  | ||||||
|           <div class="col-md-6"> |  | ||||||
|             <img src="https://ununsplash.imgix.net/photo-1423753623104-718aaace6772?w=1024&q=50&fm=jpg&s=1ffa61419561b5c796bca3158e7c704c" class="img-responsive"> |  | ||||||
|           </div> |  | ||||||
|           <div class="col-md-6"> |  | ||||||
|             <h2 class="text-muted">The Spontaneous</h2> |  | ||||||
|             <h3>35CHF/Month (1 day pass included)</h3> |  | ||||||
|             <p>Do you dream of having a place to be inspired in the middle of the Alps? |  | ||||||
|               With only 35CHF a month, you can enjoy the full benefit of a Digital Chalet |  | ||||||
|               Schwanden membership! You can enjoy high speed network connection and comfortable |  | ||||||
|               working desks where you can come up with best ideas for your project surrounded |  | ||||||
|               by friendly coworkers. And if your work gets too productive to leave, you |  | ||||||
|               can crash on our guest bed for the night, the house has everything a coworker |  | ||||||
|               needs from an equipped kitchen to a shower. The Spontaneous includes 1 |  | ||||||
|               day pass included, it is perfect for you if you are planning a retreat |  | ||||||
|               month of a coworking in the nature, or coming for a limited period to Switzerland |  | ||||||
|               for coworking. It is a perfect try-out package! |  | ||||||
|               <br> |  | ||||||
|             </p> |  | ||||||
|             <a class="btn btn-primary" href="/login/buy/month/">Buy Now</a> |  | ||||||
|           </div> |  | ||||||
|         </div> |  | ||||||
|       </div> |  | ||||||
|     </div> |  | ||||||
|     <div class="section"> |  | ||||||
|       <div class="container"> |  | ||||||
|         <div class="row"> |  | ||||||
|           <div class="col-md-6"> |  | ||||||
|             <h2 class="text-muted">The Committed</h2> |  | ||||||
|             <h3>360CHF/Year (2 free day per month included)</h3> |  | ||||||
|             <p>Be a regular coworker in our Digital Chalet Schwanden! With only 360CHF, |  | ||||||
|               you can enjoy the full coworking space for the whole year, with additional |  | ||||||
|               2 free day passes for each month. It is an ideal deal for our busy and |  | ||||||
|               active coworkers who would like to save time(and nerve)for requesting new |  | ||||||
|               membership every month. Signifiantly discounted price is applied for yearly |  | ||||||
|               membership. |  | ||||||
|               <br> |  | ||||||
|             </p> |  | ||||||
|             <a class="btn btn-primary" href="/login/buy/year/">Buy Now</a> |  | ||||||
|           </div> |  | ||||||
|           <div class="col-md-6"> |  | ||||||
|             <img src="https://unsplash.imgix.net/photo-1413834932717-29e7d4714192?w=1024&q=50&fm=jpg&s=d9d6cbc32dd4968d0c21e331436a6af6" class="img-responsive"> |  | ||||||
|           </div> |  | ||||||
|         </div> |  | ||||||
|       </div> |  | ||||||
|     </div> |  | ||||||
|     <div class="section"> |  | ||||||
|       <div class="container"> |  | ||||||
|         <div class="row"> |  | ||||||
|           <div class="col-md-12"> |  | ||||||
|             <h2 class="text-center text-primary">A Quick Glance..</h2> |  | ||||||
|             <p class="text-center">A short guide for membership features.</p> |  | ||||||
|           </div> |  | ||||||
|         </div> |  | ||||||
|         <div class="row"> |  | ||||||
|           <div class="col-md-12"> |  | ||||||
|             <table class="table"> |  | ||||||
|               <thead> |  | ||||||
|                 <tr> |  | ||||||
|                   <th></th> |  | ||||||
|                   <th>The Spontaneous</th> |  | ||||||
|                   <th>The Committed</th> |  | ||||||
|                 </tr> |  | ||||||
|               </thead> |  | ||||||
|               <tbody> |  | ||||||
|                 <tr> |  | ||||||
|                   <td>Includes</td> |  | ||||||
|                   <td>1 work day included</td> |  | ||||||
|                   <td>2 free work days per month</td> |  | ||||||
|                 </tr> |  | ||||||
|                 <tr> |  | ||||||
|                   <td>Fits for</td> |  | ||||||
|                   <td>Great for trial, see how it goes</td> |  | ||||||
|                   <td>Perfect for coworking with great price</td> |  | ||||||
|                 </tr> |  | ||||||
|                 <tr> |  | ||||||
|                   <td>Price</td> |  | ||||||
|                   <td>Decicde every month</td> |  | ||||||
|                   <td>Pay once per year</td> |  | ||||||
|                 </tr> |  | ||||||
|                 <tr> |  | ||||||
|                   <td>Membership price</td> |  | ||||||
|                   <td>35CHF/Month</td> |  | ||||||
|                   <td>360CHF/Year</td> |  | ||||||
|                 </tr> |  | ||||||
|                 <tr> |  | ||||||
|                   <td>Price per additional day</td> |  | ||||||
|                   <td>20 CHF</td> |  | ||||||
|                   <td>15 CHF</td> |  | ||||||
|                 </tr> |  | ||||||
|               </tbody> |  | ||||||
|             </table> |  | ||||||
|           </div> |  | ||||||
|         </div> |  | ||||||
|       </div> |  | ||||||
|     </div> |  | ||||||
|     <footer class="section section-primary"> |  | ||||||
|       <div class="container"> |  | ||||||
|         <div class="row"> |  | ||||||
|           <div class="col-sm-6"> |  | ||||||
|             <h1>Digital Glarus</h1> |  | ||||||
|             <p>In der Au 7 8762 Schwanden |  | ||||||
|               <br>Copyright © ungleich GmbH 2016</p> |  | ||||||
|           </div> |  | ||||||
|           <div class="col-sm-6"> |  | ||||||
|             <p class="text-info text-right"> |  | ||||||
|               <br> |  | ||||||
|               <br> |  | ||||||
|             </p> |  | ||||||
|             <div class="row"> |  | ||||||
|               <div class="col-md-12 hidden-lg hidden-md hidden-sm text-left"> |  | ||||||
|                 <a href="#"><i class="fa fa-3x fa-fw fa-instagram text-inverse"></i></a> |  | ||||||
|                 <a href="#"><i class="fa fa-3x fa-fw fa-twitter text-inverse"></i></a> |  | ||||||
|                 <a href="#"><i class="fa fa-3x fa-fw fa-facebook text-inverse"></i></a> |  | ||||||
|                 <a href="#"><i class="fa fa-3x fa-fw fa-github text-inverse"></i></a> |  | ||||||
|               </div> |  | ||||||
|             </div> |             </div> | ||||||
|             <div class="row"> |             <div class="collapse navbar-collapse" id="navbar-ex-collapse"> | ||||||
|               <div class="col-md-12 hidden-xs text-right"> |                 <ul class="nav navbar-nav navbar-right"> | ||||||
|                 <a href="https://twitter.com/DigitalGlarus"><i class="fa fa-twitter"></i></a> |                     <li class="active"> | ||||||
|                 <i class="fa fa-3x fa-fw fa-instagram text-inverse"></i> |                         <a href="{% url 'digitalglarus:index' %}">Home</a> | ||||||
|                 <a href="#"><i class="fa fa-3x fa-fw fa-twitter text-inverse"></i></a> |                     </li> | ||||||
|                 <a href="#"><i class="fa fa-3x fa-fw fa-facebook text-inverse"></i></a> |                     <li> | ||||||
|                 <a href="https://github.com/ungleich"><i class="fa fa-github"></i></a> |                         <a href="{% url 'digitalglarus:contact' %}">Contacts</a> | ||||||
|                 <i class="fa fa-3x fa-fw fa-github text-inverse"></i> |                     </li> | ||||||
|               </div> | 
 | ||||||
|  |                     <li> | ||||||
|  | 
 | ||||||
|  |                     </li> | ||||||
|  |                 </ul> | ||||||
|             </div> |             </div> | ||||||
|           </div> |  | ||||||
|         </div> |         </div> | ||||||
|       </div> |     </div> | ||||||
|     </footer> |     {% load static %} | ||||||
|  | 
 | ||||||
|  |     <div class="cover-image" | ||||||
|  |          style="background-image : url('{% get_static_prefix %}photo-1418479631014-8cbf89db3431 2.jpg')"></div> | ||||||
|  |     <div class="container"> | ||||||
|  |         <div class="row"> | ||||||
|  |             <div class="col-md-12 text-center"> | ||||||
|  |                 <h2 class="text-inverse">When do you want to cowork?</h2> | ||||||
|  | 
 | ||||||
|  |                 <p class="text-inverse">Pick a date!</p> | ||||||
|  |                 <button class="btn btn-lg btn-primary" data-toggle="modal" data-target="#myModal">Calender | ||||||
|  |                 </button> | ||||||
|  |                 <!-- Modal --> | ||||||
|  |                 <div class="modal fade" id="myModal" tabindex="-1" role="dialog" | ||||||
|  |                      aria-labelledby="myModalLabel"> | ||||||
|  |                     <div class="modal-dialog" role="document"> | ||||||
|  |                         <div class="modal-content"> | ||||||
|  |                             <div class="modal-header"> | ||||||
|  |                                 <button type="button" class="close" data-dismiss="modal" aria-label="Close"> | ||||||
|  |                                     <span aria-hidden="true">×</span></button> | ||||||
|  |                                 <h4 class="modal-title" id="myModalLabel">Pick coworking date.</h4> | ||||||
|  |                             </div> | ||||||
|  |                             <div class="modal-body"> | ||||||
|  |                                 {% include 'calendar/calendar.html' %} | ||||||
|  |                             </div> | ||||||
|  |                             <div class="modal-footer"> | ||||||
|  |                                 <button type="button" id="close" class="btn btn-default" | ||||||
|  |                                         data-dismiss="modal">Close | ||||||
|  |                                 </button> | ||||||
|  |                                 <button type="button" id='bookdate' class="btn btn-primary">Book date | ||||||
|  |                                 </button> | ||||||
|  |                             </div> | ||||||
|  |                         </div> | ||||||
|  |                     </div> | ||||||
|  |                 </div> | ||||||
|  |             </div> | ||||||
|  |         </div> | ||||||
|  |     </div> | ||||||
|  | </div> | ||||||
|  | <div class="section"> | ||||||
|  |     <div class="container"> | ||||||
|  |         <div class="row"> | ||||||
|  |             <div class="col-md-12"> | ||||||
|  |                 <h2 class="text-center">Become a member!</h2> | ||||||
|  |             </div> | ||||||
|  |         </div> | ||||||
|  |         <div class="row"> | ||||||
|  |             <div class="col-md-12"> | ||||||
|  |                 <p class="text-center">Become our member of Digital Glarus! </p> | ||||||
|  |             </div> | ||||||
|  |         </div> | ||||||
|  |     </div> | ||||||
|  | </div> | ||||||
|  | <div class="section"> | ||||||
|  |     <div class="container"> | ||||||
|  |         <div class="row"> | ||||||
|  |             <div class="col-md-6"> | ||||||
|  |                 <img src="https://ununsplash.imgix.net/photo-1423753623104-718aaace6772?w=1024&q=50&fm=jpg&s=1ffa61419561b5c796bca3158e7c704c" | ||||||
|  |                      class="img-responsive"> | ||||||
|  |             </div> | ||||||
|  |             <div class="col-md-6"> | ||||||
|  |                 <h2 class="text-muted">The Spontaneous</h2> | ||||||
|  | 
 | ||||||
|  |                 <h3>35CHF/Month (1 day pass included)</h3> | ||||||
|  | 
 | ||||||
|  |                 <p>Do you dream of having a place to be inspired in the middle of the Alps? | ||||||
|  |                     With only 35CHF a month, you can enjoy the full benefit of a Digital Chalet | ||||||
|  |                     Schwanden membership! You can enjoy high speed network connection and comfortable | ||||||
|  |                     working desks where you can come up with best ideas for your project surrounded | ||||||
|  |                     by friendly coworkers. And if your work gets too productive to leave, you | ||||||
|  |                     can crash on our guest bed for the night, the house has everything a coworker | ||||||
|  |                     needs from an equipped kitchen to a shower. The Spontaneous includes 1 | ||||||
|  |                     day pass included, it is perfect for you if you are planning a retreat | ||||||
|  |                     month of a coworking in the nature, or coming for a limited period to Switzerland | ||||||
|  |                     for coworking. It is a perfect try-out package! | ||||||
|  |                     <br> | ||||||
|  |                 </p> | ||||||
|  |                 <a class="btn btn-primary" href="/login/buy/month/">Buy Now</a> | ||||||
|  |             </div> | ||||||
|  |         </div> | ||||||
|  |     </div> | ||||||
|  | </div> | ||||||
|  | <div class="section"> | ||||||
|  |     <div class="container"> | ||||||
|  |         <div class="row"> | ||||||
|  |             <div class="col-md-6"> | ||||||
|  |                 <h2 class="text-muted">The Committed</h2> | ||||||
|  | 
 | ||||||
|  |                 <h3>360CHF/Year (2 free day per month included)</h3> | ||||||
|  | 
 | ||||||
|  |                 <p>Be a regular coworker in our Digital Chalet Schwanden! With only 360CHF, | ||||||
|  |                     you can enjoy the full coworking space for the whole year, with additional | ||||||
|  |                     2 free day passes for each month. It is an ideal deal for our busy and | ||||||
|  |                     active coworkers who would like to save time(and nerve)for requesting new | ||||||
|  |                     membership every month. Signifiantly discounted price is applied for yearly | ||||||
|  |                     membership. | ||||||
|  |                     <br> | ||||||
|  |                 </p> | ||||||
|  |                 <a class="btn btn-primary" href="/login/buy/year/">Buy Now</a> | ||||||
|  |             </div> | ||||||
|  |             <div class="col-md-6"> | ||||||
|  |                 <img src="https://unsplash.imgix.net/photo-1413834932717-29e7d4714192?w=1024&q=50&fm=jpg&s=d9d6cbc32dd4968d0c21e331436a6af6" | ||||||
|  |                      class="img-responsive"> | ||||||
|  |             </div> | ||||||
|  |         </div> | ||||||
|  |     </div> | ||||||
|  | </div> | ||||||
|  | <div class="section"> | ||||||
|  |     <div class="container"> | ||||||
|  |         <div class="row"> | ||||||
|  |             <div class="col-md-12"> | ||||||
|  |                 <h2 class="text-center text-primary">A Quick Glance..</h2> | ||||||
|  | 
 | ||||||
|  |                 <p class="text-center">A short guide for membership features.</p> | ||||||
|  |             </div> | ||||||
|  |         </div> | ||||||
|  |         <div class="row"> | ||||||
|  |             <div class="col-md-12"> | ||||||
|  |                 <table class="table"> | ||||||
|  |                     <thead> | ||||||
|  |                     <tr> | ||||||
|  |                         <th></th> | ||||||
|  |                         <th>The Spontaneous</th> | ||||||
|  |                         <th>The Committed</th> | ||||||
|  |                     </tr> | ||||||
|  |                     </thead> | ||||||
|  |                     <tbody> | ||||||
|  |                     <tr> | ||||||
|  |                         <td>Includes</td> | ||||||
|  |                         <td>1 work day included</td> | ||||||
|  |                         <td>2 free work days per month</td> | ||||||
|  |                     </tr> | ||||||
|  |                     <tr> | ||||||
|  |                         <td>Fits for</td> | ||||||
|  |                         <td>Great for trial, see how it goes</td> | ||||||
|  |                         <td>Perfect for coworking with great price</td> | ||||||
|  |                     </tr> | ||||||
|  |                     <tr> | ||||||
|  |                         <td>Price</td> | ||||||
|  |                         <td>Decicde every month</td> | ||||||
|  |                         <td>Pay once per year</td> | ||||||
|  |                     </tr> | ||||||
|  |                     <tr> | ||||||
|  |                         <td>Membership price</td> | ||||||
|  |                         <td>35CHF/Month</td> | ||||||
|  |                         <td>360CHF/Year</td> | ||||||
|  |                     </tr> | ||||||
|  |                     <tr> | ||||||
|  |                         <td>Price per additional day</td> | ||||||
|  |                         <td>20 CHF</td> | ||||||
|  |                         <td>15 CHF</td> | ||||||
|  |                     </tr> | ||||||
|  |                     </tbody> | ||||||
|  |                 </table> | ||||||
|  |             </div> | ||||||
|  |         </div> | ||||||
|  |     </div> | ||||||
|  | </div> | ||||||
|  | <footer class="section section-primary"> | ||||||
|  |     <div class="container"> | ||||||
|  |         <div class="row"> | ||||||
|  |             <div class="col-sm-6"> | ||||||
|  |                 <h1>Digital Glarus</h1> | ||||||
|  | 
 | ||||||
|  |                 <p>In der Au 7 8762 Schwanden | ||||||
|  |                     <br>Copyright © ungleich GmbH 2016</p> | ||||||
|  |             </div> | ||||||
|  |             <div class="col-sm-6"> | ||||||
|  |                 <p class="text-info text-right"> | ||||||
|  |                     <br> | ||||||
|  |                     <br> | ||||||
|  |                 </p> | ||||||
|  | 
 | ||||||
|  |                 <div class="row"> | ||||||
|  |                     <div class="col-md-12 hidden-lg hidden-md hidden-sm text-left"> | ||||||
|  |                         <a href="#"><i class="fa fa-3x fa-fw fa-instagram text-inverse"></i></a> | ||||||
|  |                         <a href="#"><i class="fa fa-3x fa-fw fa-twitter text-inverse"></i></a> | ||||||
|  |                         <a href="#"><i class="fa fa-3x fa-fw fa-facebook text-inverse"></i></a> | ||||||
|  |                         <a href="#"><i class="fa fa-3x fa-fw fa-github text-inverse"></i></a> | ||||||
|  |                     </div> | ||||||
|  |                 </div> | ||||||
|  |                 <div class="row"> | ||||||
|  |                     <div class="col-md-12 hidden-xs text-right"> | ||||||
|  |                         <a href="https://twitter.com/DigitalGlarus"><i class="fa fa-twitter"></i></a> | ||||||
|  |                         <i class="fa fa-3x fa-fw fa-instagram text-inverse"></i> | ||||||
|  |                         <a href="#"><i class="fa fa-3x fa-fw fa-twitter text-inverse"></i></a> | ||||||
|  |                         <a href="#"><i class="fa fa-3x fa-fw fa-facebook text-inverse"></i></a> | ||||||
|  |                         <a href="https://github.com/ungleich"><i class="fa fa-github"></i></a> | ||||||
|  |                         <i class="fa fa-3x fa-fw fa-github text-inverse"></i> | ||||||
|  |                     </div> | ||||||
|  |                 </div> | ||||||
|  |             </div> | ||||||
|  |         </div> | ||||||
|  |     </div> | ||||||
|  | </footer> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| </body></html> | </body> | ||||||
|  | </html> | ||||||
|  | @ -19,7 +19,7 @@ | ||||||
|               <br>Check your email to activate your account.</p> |               <br>Check your email to activate your account.</p> | ||||||
|             <div class="row"> |             <div class="row"> | ||||||
|             <div class="col-md-12 text-center"> |             <div class="col-md-12 text-center"> | ||||||
|                 <a class="btn btn-primary" href="{% url 'login' %}">Back</a> |                 <a class="btn btn-primary" href="{% url 'login_glarus' %}">Back</a> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|           </div> |           </div> | ||||||
|  |  | ||||||
|  | @ -5,9 +5,10 @@ from django.contrib.auth.decorators import login_required | ||||||
| from . import views | from . import views | ||||||
| 
 | 
 | ||||||
| urlpatterns = ( | urlpatterns = ( | ||||||
|     url(r"^$", views.LoginRegistrationView.as_view(), name='login'), |     url(r"^$", views.LoginRegistrationView.as_view(), name='login_glarus'), | ||||||
|     url(r"^validate/(?P<validate_slug>.*)/$", views.validate_email), |     url(r"^validate/(?P<validate_slug>.*)/$", views.validate_email), | ||||||
|     url(r"^membership/$", login_required(views.MembershipView.as_view()), name='membership'), |     url(r"^membership/$", login_required(views.MembershipView.as_view()), name='membership'), | ||||||
|  |     url(r'logout/?$',views.logout_glarus,name='logout_glarus'), | ||||||
|     url(r"^buy/(?P<time>\w+)/$", login_required(views.CreditCardView.as_view()), name='payment'), |     url(r"^buy/(?P<time>\w+)/$", login_required(views.CreditCardView.as_view()), name='payment'), | ||||||
|     url(r'^buy/(?P<time>\w+)/reset',login_required(views.reset),name='reset') |     url(r'^buy/(?P<time>\w+)/reset',login_required(views.reset),name='reset') | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | @ -4,6 +4,10 @@ from django.contrib.auth import authenticate, login | ||||||
| from django.views.decorators.cache import cache_control | from django.views.decorators.cache import cache_control | ||||||
| from django.conf import settings | from django.conf import settings | ||||||
| from django.db.models import Q | from django.db.models import Q | ||||||
|  | from django.utils.translation import get_language | ||||||
|  | from django.contrib.auth import logout | ||||||
|  | from django.http import HttpResponseRedirect | ||||||
|  | from django.core.urlresolvers import  reverse_lazy,reverse | ||||||
| 
 | 
 | ||||||
| from .models import CustomUser | from .models import CustomUser | ||||||
| from .forms import (LoginForm, RegisterForm, PaymentForm) | from .forms import (LoginForm, RegisterForm, PaymentForm) | ||||||
|  | @ -105,9 +109,14 @@ class LoginRegistrationView(View): | ||||||
| 
 | 
 | ||||||
| class MembershipView(View): | class MembershipView(View): | ||||||
|     def get(self, request): |     def get(self, request): | ||||||
|         #if the user has payed allready |         #if the user has payed already | ||||||
|         member_payed = request.user.creditcards_set.filter(Q(payment_type='month') | Q(payment_type='year')) |         member_payed = request.user.creditcards_set.filter(Q(payment_type='month') | Q(payment_type='year')) | ||||||
|         if member_payed: |         if member_payed: | ||||||
|             return redirect('/') |             return redirect('/') | ||||||
|         request.session['next'] = 0 |         request.session['next'] = 0 | ||||||
|         return render(request, 'templates/membership.html') |         language = get_language() | ||||||
|  |         return render(request, 'templates/membership.html',context={'language_code':language}) | ||||||
|  | 
 | ||||||
|  | def logout_glarus(request): | ||||||
|  |     logout(request) | ||||||
|  |     return HttpResponseRedirect('/digitalglarus') | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue