756 lines
		
	
	
	
		
			28 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			756 lines
		
	
	
	
		
			28 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from django.conf import settings
 | |
| from django.shortcuts import render
 | |
| from django.http import HttpResponseRedirect
 | |
| from django.core.urlresolvers import reverse_lazy, reverse
 | |
| from django.utils.translation import ugettext_lazy as _
 | |
| from django.views.generic import TemplateView, UpdateView
 | |
| from django.contrib.auth.mixins import LoginRequiredMixin
 | |
| from django.utils.translation import get_language
 | |
| from djangocms_blog.models import Post
 | |
| from django.contrib import messages
 | |
| from django.views.generic import DetailView, ListView
 | |
| from .models import Supporter
 | |
| from .mixins import ChangeMembershipStatusMixin
 | |
| from utils.forms import ContactUsForm
 | |
| from utils.mailer import BaseEmail
 | |
| from django.views.generic.edit import FormView
 | |
| from membership.models import StripeCustomer
 | |
| from utils.views import LoginViewMixin, SignupViewMixin, \
 | |
|     PasswordResetViewMixin, PasswordResetConfirmViewMixin
 | |
| from utils.forms import PasswordResetRequestForm, UserBillingAddressForm, EditCreditCardForm
 | |
| from utils.stripe_utils import StripeUtils
 | |
| from utils.models import UserBillingAddress
 | |
| 
 | |
| from .forms import LoginForm, SignupForm, MembershipBillingForm, BookingDateForm,\
 | |
|     BookingBillingForm, CancelBookingForm
 | |
| 
 | |
| from .models import MembershipType, Membership, MembershipOrder, Booking, BookingPrice,\
 | |
|     BookingOrder, BookingCancellation
 | |
| 
 | |
| from .mixins import MembershipRequiredMixin, IsNotMemberMixin
 | |
| 
 | |
| 
 | |
| class IndexView(TemplateView):
 | |
|     template_name = "digitalglarus/index.html"
 | |
| 
 | |
| 
 | |
| class SupportusView(TemplateView):
 | |
|     template_name = "digitalglarus/supportus.html"
 | |
| 
 | |
|     def get_context_data(self, *args, **kwargs):
 | |
|         context = super(SupportusView, self).get_context_data(**kwargs)
 | |
|         tags = ["dg-renovation"]
 | |
|         posts = Post.objects.filter(tags__name__in=tags, publish=True).translated(get_language())
 | |
|         context.update({
 | |
|             'post_list': posts
 | |
|         })
 | |
|         return context
 | |
| 
 | |
| 
 | |
| class LoginView(LoginViewMixin):
 | |
|     template_name = "digitalglarus/login.html"
 | |
|     form_class = LoginForm
 | |
| 
 | |
|     def get_success_url(self):
 | |
|         # redirect to membership orders list if user has at least one.
 | |
|         if self.request.user \
 | |
|            and MembershipOrder.objects.filter(customer__user=self.request.user):
 | |
| 
 | |
|             return reverse_lazy('digitalglarus:membership_orders_list')
 | |
| 
 | |
|         return reverse_lazy('digitalglarus:membership_pricing')
 | |
| 
 | |
| 
 | |
| class SignupView(SignupViewMixin):
 | |
|     template_name = "digitalglarus/signup.html"
 | |
|     form_class = SignupForm
 | |
|     success_url = reverse_lazy('digitalglarus:login')
 | |
| 
 | |
| 
 | |
| class PasswordResetView(PasswordResetViewMixin):
 | |
|     template_name = 'digitalglarus/reset_password.html'
 | |
|     success_url = reverse_lazy('digitalglarus:login')
 | |
|     form_class = PasswordResetRequestForm
 | |
|     template_email_path = 'digitalglarus/emails/'
 | |
| 
 | |
| 
 | |
| class PasswordResetConfirmView(PasswordResetConfirmViewMixin):
 | |
|     template_name = 'digitalglarus/confirm_reset_password.html'
 | |
|     success_url = reverse_lazy('digitalglarus:login')
 | |
| 
 | |
| 
 | |
| class HistoryView(TemplateView):
 | |
|     template_name = "digitalglarus/history.html"
 | |
| 
 | |
|     def get_context_data(self, *args, **kwargs):
 | |
|         context = super(HistoryView, self).get_context_data(**kwargs)
 | |
|         supporters = Supporter.objects.all()
 | |
|         context.update({
 | |
|             'supporters': supporters
 | |
|         })
 | |
|         return context
 | |
| 
 | |
| 
 | |
| class EditCreditCardView(FormView):
 | |
|     template_name = "digitalglarus/edit_credit_card.html"
 | |
|     form_class = EditCreditCardForm
 | |
|     success_url = reverse_lazy('digitalglarus:booking_payment')
 | |
| 
 | |
|     def get_context_data(self, *args, **kwargs):
 | |
|         context = super(EditCreditCardView, self).get_context_data(*args, **kwargs)
 | |
|         context.update({
 | |
|             'stripe_key': settings.STRIPE_API_PUBLIC_KEY
 | |
|         })
 | |
|         return context
 | |
| 
 | |
|     def form_valid(self, form):
 | |
|         token = form.cleaned_data.get('token')
 | |
|         user = self.request.user
 | |
|         customer = user.stripecustomer
 | |
|         stripe_utls = StripeUtils()
 | |
|         card_response = stripe_utls.update_customer_card(customer.stripe_id, token)
 | |
|         new_card_data = card_response.get('response_object')
 | |
|         self.request.session.update({
 | |
|             'new_change_credit_card': new_card_data
 | |
|         })
 | |
| 
 | |
|         return super(EditCreditCardView, self).form_valid(form)
 | |
| 
 | |
| 
 | |
| class BookingSelectDatesView(LoginRequiredMixin, MembershipRequiredMixin, FormView):
 | |
|     template_name = "digitalglarus/booking.html"
 | |
|     form_class = BookingDateForm
 | |
|     membership_redirect_url = reverse_lazy('digitalglarus:membership_pricing')
 | |
|     login_url = reverse_lazy('digitalglarus:login')
 | |
|     success_url = reverse_lazy('digitalglarus:booking_payment')
 | |
| 
 | |
|     def get_form_kwargs(self):
 | |
|         kwargs = super(BookingSelectDatesView, self).get_form_kwargs()
 | |
|         kwargs.update({'user': self.request.user})
 | |
|         return kwargs
 | |
| 
 | |
|     def form_valid(self, form):
 | |
|         user = self.request.user
 | |
|         start_date = form.cleaned_data.get('start_date')
 | |
|         end_date = form.cleaned_data.get('end_date')
 | |
|         booking_days = (end_date - start_date).days + 1
 | |
| 
 | |
|         price_per_day = BookingPrice.objects.get().price_per_day
 | |
| 
 | |
|         original_price, final_price, free_days = Booking.\
 | |
|             booking_price(user, start_date, end_date)
 | |
| 
 | |
|         total_discount = price_per_day * free_days
 | |
| 
 | |
|         self.request.session.update({
 | |
|             'original_price': original_price,
 | |
|             'final_price': final_price,
 | |
|             'total_discount': total_discount,
 | |
|             'booking_price_per_day': price_per_day,
 | |
|             'booking_days': booking_days,
 | |
|             'free_days': free_days,
 | |
|             'start_date': start_date.strftime('%m/%d/%Y'),
 | |
|             'end_date': end_date.strftime('%m/%d/%Y'),
 | |
|             'is_free': final_price == 0
 | |
|         })
 | |
|         return super(BookingSelectDatesView, self).form_valid(form)
 | |
| 
 | |
| 
 | |
| class BookingPaymentView(LoginRequiredMixin, MembershipRequiredMixin, FormView):
 | |
|     template_name = "digitalglarus/booking_payment.html"
 | |
|     form_class = BookingBillingForm
 | |
|     membership_redirect_url = reverse_lazy('digitalglarus:membership_pricing')
 | |
|     # success_url = reverse_lazy('digitalglarus:booking_payment')
 | |
|     booking_needed_fields = ['original_price', 'final_price', 'booking_days', 'free_days',
 | |
|                              'start_date', 'end_date', 'booking_price_per_day',
 | |
|                              'total_discount', 'is_free']
 | |
| 
 | |
|     def dispatch(self, request, *args, **kwargs):
 | |
|         from_booking = all(field in request.session.keys()
 | |
|                            for field in self.booking_needed_fields)
 | |
|         if not from_booking:
 | |
|             return HttpResponseRedirect(reverse('digitalglarus:booking'))
 | |
| 
 | |
|         return super(BookingPaymentView, self).dispatch(request, *args, **kwargs)
 | |
| 
 | |
|     def get_success_url(self, order_id):
 | |
|         return reverse('digitalglarus:booking_orders_detail', kwargs={'pk': order_id})
 | |
| 
 | |
|     def get_form_kwargs(self):
 | |
|         current_billing_address = self.request.user.billing_addresses.first()
 | |
|         form_kwargs = super(BookingPaymentView, self).get_form_kwargs()
 | |
|         form_kwargs.update({
 | |
|             'initial': {
 | |
|                 'start_date': self.request.session.get('start_date'),
 | |
|                 'end_date': self.request.session.get('end_date'),
 | |
|                 'price': self.request.session.get('final_price'),
 | |
|                 'street_address': current_billing_address.street_address,
 | |
|                 'city': current_billing_address.city,
 | |
|                 'postal_code': current_billing_address.postal_code,
 | |
|                 'country': current_billing_address.country,
 | |
|             }
 | |
|         })
 | |
|         return form_kwargs
 | |
| 
 | |
|     def get_context_data(self, *args, **kwargs):
 | |
|         context = super(BookingPaymentView, self).get_context_data(*args, **kwargs)
 | |
| 
 | |
|         booking_data = {key: self.request.session.get(key)
 | |
|                         for key in self.booking_needed_fields}
 | |
|         user = self.request.user
 | |
|         last_booking_order = BookingOrder.objects.filter(customer__user=user).last()
 | |
|         last_membership_order = MembershipOrder.objects.filter(customer__user=user).last()
 | |
| 
 | |
|         # check if user changes his credit card
 | |
|         credit_card_data = self.request.session.get('new_change_credit_card')
 | |
|         # import pdb
 | |
|         # pdb.set_trace()
 | |
| 
 | |
|         if not credit_card_data:
 | |
|             credit_card_data = last_booking_order.get_booking_cc_data() if last_booking_order \
 | |
|                 and last_booking_order.get_booking_cc_data() \
 | |
|                 else last_membership_order.get_membership_order_cc_data()
 | |
| 
 | |
|         booking_data.update({
 | |
|             'credit_card_data': credit_card_data if credit_card_data else None,
 | |
|             'stripe_key': settings.STRIPE_API_PUBLIC_KEY
 | |
|         })
 | |
|         context.update(booking_data)
 | |
|         return context
 | |
| 
 | |
|     def form_valid(self, form):
 | |
|         data = form.cleaned_data
 | |
|         context = self.get_context_data()
 | |
|         token = data.get('token')
 | |
|         start_date = data.get('start_date')
 | |
|         end_date = data.get('end_date')
 | |
|         is_free = context.get('is_free')
 | |
|         normal_price, final_price, free_days = Booking.\
 | |
|             booking_price(self.request.user, start_date, end_date)
 | |
|         charge = None
 | |
| 
 | |
|         # if not credit_card_needed:
 | |
|         # Get or create stripe customer
 | |
|         customer = StripeCustomer.get_or_create(email=self.request.user.email,
 | |
|                                                 token=token)
 | |
|         if not customer:
 | |
|             form.add_error("__all__", "Invalid credit card")
 | |
|             return self.render_to_response(self.get_context_data(form=form))
 | |
| 
 | |
|         # If booking is not free, make the stripe charge
 | |
|         if not is_free:
 | |
|             # Make stripe charge to a customer
 | |
|             stripe_utils = StripeUtils()
 | |
|             charge_response = stripe_utils.make_charge(amount=final_price,
 | |
|                                                        customer=customer.stripe_id)
 | |
|             charge = charge_response.get('response_object')
 | |
| 
 | |
|             # Check if the payment was approved
 | |
|             if not charge:
 | |
|                 context.update({
 | |
|                     'paymentError': charge_response.get('error'),
 | |
|                     'form': form
 | |
|                 })
 | |
|                 return render(self.request, self.template_name, context)
 | |
| 
 | |
|             charge = charge_response.get('response_object')
 | |
| 
 | |
|         # Create Billing Address for Membership Order
 | |
|         billing_address = form.save()
 | |
| 
 | |
|         # Create Billing Address for User if he does not have one
 | |
|         if not customer.user.billing_addresses.count():
 | |
|             data.update({
 | |
|                 'user': customer.user.id
 | |
|             })
 | |
|             billing_address_user_form = UserBillingAddressForm(data)
 | |
|             billing_address_user_form.is_valid()
 | |
|             billing_address_user_form.save()
 | |
| 
 | |
|         # Create Booking
 | |
|         booking_data = {
 | |
|             'start_date': start_date,
 | |
|             'end_date': end_date,
 | |
|             'start_date': start_date,
 | |
|             'free_days': free_days,
 | |
|             'price': normal_price,
 | |
|             'final_price': final_price,
 | |
|         }
 | |
|         booking = Booking.create(booking_data)
 | |
| 
 | |
|         # Create Booking order
 | |
|         order_data = {
 | |
|             'booking': booking,
 | |
|             'customer': customer,
 | |
|             'billing_address': billing_address,
 | |
|             'stripe_charge': charge,
 | |
|             'amount': final_price,
 | |
|             'original_price': normal_price,
 | |
|             'special_month_price': BookingPrice.objects.last().special_month_price,
 | |
|         }
 | |
|         order = BookingOrder.create(order_data)
 | |
| 
 | |
|         context = {
 | |
|             'booking': booking,
 | |
|             'order': order,
 | |
|             'base_url': "{0}://{1}".format(self.request.scheme, self.request.get_host())
 | |
|         }
 | |
| 
 | |
|         email_data = {
 | |
|             'subject': 'Your booking order has been placed',
 | |
|             'to': self.request.user.email,
 | |
|             'context': context,
 | |
|             'template_name': 'booking_order_email',
 | |
|             'template_path': 'digitalglarus/emails/'
 | |
|         }
 | |
|         email = BaseEmail(**email_data)
 | |
|         email.send()
 | |
| 
 | |
|         return HttpResponseRedirect(self.get_success_url(order.id))
 | |
| 
 | |
| 
 | |
| class MembershipPricingView(TemplateView):
 | |
|     template_name = "digitalglarus/membership_pricing.html"
 | |
| 
 | |
|     def get_context_data(self, **kwargs):
 | |
|         context = super(MembershipPricingView, self).get_context_data(**kwargs)
 | |
|         membership_type = MembershipType.objects.last()
 | |
|         context.update({
 | |
|             'membership_type': membership_type
 | |
|         })
 | |
|         return context
 | |
| 
 | |
| 
 | |
| class MembershipPaymentView(LoginRequiredMixin, IsNotMemberMixin, FormView):
 | |
|     template_name = "digitalglarus/membership_payment.html"
 | |
|     login_url = reverse_lazy('digitalglarus:signup')
 | |
|     form_class = MembershipBillingForm
 | |
|     already_member_redirect_url = reverse_lazy('digitalglarus:membership_orders_list')
 | |
| 
 | |
|     def get_form_kwargs(self):
 | |
|         self.membership_type = MembershipType.objects.get(name='standard')
 | |
|         form_kwargs = super(MembershipPaymentView, self).get_form_kwargs()
 | |
|         form_kwargs.update({
 | |
|             'initial': {
 | |
|                 'membership_type': self.membership_type.id
 | |
|             }
 | |
|         })
 | |
|         return form_kwargs
 | |
| 
 | |
|     def get_context_data(self, **kwargs):
 | |
|         context = super(MembershipPaymentView, self).get_context_data(**kwargs)
 | |
|         context.update({
 | |
|             'stripe_key': settings.STRIPE_API_PUBLIC_KEY,
 | |
|             'membership_type': self.membership_type
 | |
|         })
 | |
|         return context
 | |
| 
 | |
|     def post(self, request, *args, **kwargs):
 | |
|         form = self.get_form()
 | |
| 
 | |
|         if form.is_valid():
 | |
|             data = form.cleaned_data
 | |
|             context = self.get_context_data()
 | |
|             token = data.get('token')
 | |
|             membership_type = data.get('membership_type')
 | |
| 
 | |
|             # Get or create stripe customer
 | |
|             customer = StripeCustomer.get_or_create(email=self.request.user.email,
 | |
|                                                     token=token)
 | |
|             if not customer:
 | |
|                 form.add_error("__all__", "Invalid credit card")
 | |
|                 return self.render_to_response(self.get_context_data(form=form))
 | |
| 
 | |
|             # Make stripe charge to a customer
 | |
|             stripe_utils = StripeUtils()
 | |
|             charge_response = stripe_utils.make_charge(amount=membership_type.first_month_price,
 | |
|                                                        customer=customer.stripe_id)
 | |
|             charge = charge_response.get('response_object')
 | |
| 
 | |
|             # Check if the payment was approved
 | |
|             if not charge:
 | |
|                 context.update({
 | |
|                     'paymentError': charge_response.get('error'),
 | |
|                     'form': form
 | |
|                 })
 | |
|                 return render(request, self.template_name, context)
 | |
| 
 | |
|             charge = charge_response.get('response_object')
 | |
| 
 | |
|             # Create Billing Address
 | |
|             billing_address = form.save()
 | |
| 
 | |
|             # Create Billing Address for User if he does not have one
 | |
|             if not customer.user.billing_addresses.count():
 | |
|                 data.update({
 | |
|                     'user': customer.user.id
 | |
|                 })
 | |
|                 billing_address_user_form = UserBillingAddressForm(data)
 | |
|                 billing_address_user_form.is_valid()
 | |
|                 billing_address_user_form.save()
 | |
| 
 | |
|             # Get membership dates
 | |
|             membership_start_date, membership_end_date = membership_type.first_month_range
 | |
| 
 | |
|             # Create or update membership plan
 | |
|             membership_data = {
 | |
|                 'type': membership_type,
 | |
|                 'active': True,
 | |
|                 'start_date': membership_start_date,
 | |
|                 'end_date': membership_end_date
 | |
|             }
 | |
|             membership = Membership.activate_or_crete(membership_data, self.request.user)
 | |
| 
 | |
|             # Create membership order
 | |
|             order_data = {
 | |
|                 'membership': membership,
 | |
|                 'customer': customer,
 | |
|                 'billing_address': billing_address,
 | |
|                 'stripe_charge': charge,
 | |
|                 'amount': membership_type.first_month_price,
 | |
|                 'start_date': membership_start_date,
 | |
|                 'end_date': membership_end_date
 | |
|             }
 | |
| 
 | |
|             membership_order = MembershipOrder.create(order_data)
 | |
| 
 | |
|             request.session.update({
 | |
|                 'membership_price': membership.type.first_month_price,
 | |
|                 'membership_dates': membership.type.first_month_formated_range
 | |
|             })
 | |
| 
 | |
|             context = {
 | |
|                 'membership': membership,
 | |
|                 'order': membership_order,
 | |
|                 'membership_start_date': membership_start_date,
 | |
|                 'membership_end_date': membership_end_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()
 | |
| 
 | |
|             return HttpResponseRedirect(reverse('digitalglarus:membership_activated'))
 | |
| 
 | |
|         else:
 | |
|             return self.form_invalid(form)
 | |
| 
 | |
| 
 | |
| class MembershipActivatedView(TemplateView):
 | |
|     template_name = "digitalglarus/membership_activated.html"
 | |
| 
 | |
|     def get_context_data(self, **kwargs):
 | |
|         context = super(MembershipActivatedView, self).get_context_data(**kwargs)
 | |
|         membership_price = self.request.session.get('membership_price')
 | |
|         membership_dates = self.request.session.get('membership_dates')
 | |
|         context.update({
 | |
|             'membership_price': membership_price,
 | |
|             'membership_dates': membership_dates,
 | |
|         })
 | |
|         return context
 | |
| 
 | |
| 
 | |
| class MembershipDeactivateView(LoginRequiredMixin, UpdateView):
 | |
|     template_name = "digitalglarus/membership_deactivated.html"
 | |
|     model = Membership
 | |
|     success_message = "Your membership has been deactivated :("
 | |
|     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()
 | |
| 
 | |
|         messages.add_message(self.request, messages.SUCCESS, self.success_message)
 | |
| 
 | |
|         return HttpResponseRedirect(self.success_url)
 | |
| 
 | |
| 
 | |
| class MembershipReactivateView(ChangeMembershipStatusMixin):
 | |
|     success_message = "Your membership has been reactivate :)"
 | |
|     template_name = "digitalglarus/membership_orders_list.html"
 | |
| 
 | |
|     def post(self, request, *args, **kwargs):
 | |
|         membership = self.get_object()
 | |
|         membership.activate()
 | |
|         return super(MembershipReactivateView, self).post(request, *args, **kwargs)
 | |
| 
 | |
| 
 | |
| class UserBillingAddressView(LoginRequiredMixin, UpdateView):
 | |
|     model = UserBillingAddress
 | |
|     form_class = UserBillingAddressForm
 | |
|     template_name = "digitalglarus/user_billing_address.html"
 | |
|     success_url = reverse_lazy('digitalglarus:user_billing_address')
 | |
|     success_message = "Billing Address Updated"
 | |
| 
 | |
|     def get_success_url(self):
 | |
|         next_url = self.request.POST.get('next') if self.request.POST.get('next')\
 | |
|             else self.success_url
 | |
| 
 | |
|         return next_url
 | |
| 
 | |
|     def get_context_data(self, **kwargs):
 | |
|         context = super(UserBillingAddressView, self).get_context_data(**kwargs)
 | |
|         current_billing_address = self.request.user.billing_addresses.all().first()
 | |
|         context.update({
 | |
|             'current_billing_address': current_billing_address
 | |
|         })
 | |
|         return context
 | |
| 
 | |
|     def form_valid(self, form):
 | |
|         """
 | |
|         If the form is valid, save the associated model.
 | |
|         """
 | |
|         messages.add_message(self.request, messages.SUCCESS, self.success_message)
 | |
|         self.object = form.save()
 | |
|         return super(UserBillingAddressView, self).form_valid(form)
 | |
| 
 | |
|     def get_form_kwargs(self):
 | |
|         current_billing_address = self.request.user.billing_addresses.first()
 | |
|         form_kwargs = super(UserBillingAddressView, self).get_form_kwargs()
 | |
| 
 | |
|         if not current_billing_address:
 | |
|             return form_kwargs
 | |
| 
 | |
|         form_kwargs.update({
 | |
|             'initial': {
 | |
|                 'street_address': current_billing_address.street_address,
 | |
|                 'city': current_billing_address.city,
 | |
|                 'postal_code': current_billing_address.postal_code,
 | |
|                 'country': current_billing_address.country,
 | |
|             }
 | |
|         })
 | |
|         return form_kwargs
 | |
| 
 | |
|     def get_object(self):
 | |
|         current_billing_address = self.request.user.\
 | |
|             billing_addresses.filter(current=True).last()
 | |
|         # if not current_billing_address:
 | |
|         #     raise AttributeError("Billing Address does not exists")
 | |
|         return current_billing_address
 | |
| 
 | |
| 
 | |
| class MembershipDeactivateSuccessView(LoginRequiredMixin, TemplateView):
 | |
|     template_name = "digitalglarus/membership_deactivated_success.html"
 | |
| 
 | |
| 
 | |
| class MembershipOrdersListView(LoginRequiredMixin, ListView):
 | |
|     template_name = "digitalglarus/membership_orders_list.html"
 | |
|     context_object_name = "orders"
 | |
|     login_url = reverse_lazy('digitalglarus:login')
 | |
|     model = MembershipOrder
 | |
|     paginate_by = 10
 | |
| 
 | |
|     def get_context_data(self, **kwargs):
 | |
|         context = super(MembershipOrdersListView, self).get_context_data(**kwargs)
 | |
|         current_membership = Membership.get_current_membership(self.request.user)
 | |
|         start_date, end_date = (current_membership.start_date, current_membership.end_date)\
 | |
|             if current_membership else [None, None]
 | |
| 
 | |
|         next_start_date, next_end_date = MembershipOrder.next_membership_dates(self.request.user)
 | |
|         current_billing_address = self.request.user.billing_addresses.filter(current=True).last()
 | |
|         context.update({
 | |
|             'membership_start_date': start_date,
 | |
|             'membership_end_date': end_date,
 | |
|             'current_membership': current_membership,
 | |
|             'next_membership_start_date': next_start_date,
 | |
|             'next_membership_end_date': next_end_date,
 | |
|             'billing_address': current_billing_address
 | |
|         })
 | |
|         return context
 | |
| 
 | |
|     def get_queryset(self):
 | |
|         queryset = super(MembershipOrdersListView, self).get_queryset()
 | |
|         queryset = queryset.filter(customer__user=self.request.user)
 | |
|         return queryset
 | |
| 
 | |
| 
 | |
| class OrdersMembershipDetailView(LoginRequiredMixin, DetailView):
 | |
|     template_name = "digitalglarus/membership_orders_detail.html"
 | |
|     context_object_name = "order"
 | |
|     login_url = reverse_lazy('digitalglarus:login')
 | |
|     # permission_required = ['view_hostingorder']
 | |
|     model = MembershipOrder
 | |
| 
 | |
|     def get_context_data(self, **kwargs):
 | |
|         context = super(OrdersMembershipDetailView, self).get_context_data(**kwargs)
 | |
|         start_date, end_date = self.object.get_membership_range_date()
 | |
|         context.update({
 | |
|             'membership_start_date': start_date,
 | |
|             'membership_end_date': end_date,
 | |
|         })
 | |
|         return context
 | |
| 
 | |
| 
 | |
| class OrdersBookingDetailView(LoginRequiredMixin, UpdateView):
 | |
|     template_name = "digitalglarus/booking_orders_detail.html"
 | |
|     context_object_name = "order"
 | |
|     login_url = reverse_lazy('digitalglarus:login')
 | |
|     form_class = CancelBookingForm
 | |
|     success_message = "You booking has been cancelled"
 | |
|     # permission_required = ['view_hostingorder']
 | |
|     model = BookingOrder
 | |
| 
 | |
|     def get_success_url(self):
 | |
|         pk = self.kwargs.get(self.pk_url_kwarg)
 | |
|         return reverse_lazy('digitalglarus:booking_orders_detail', kwargs={'pk': pk})
 | |
| 
 | |
|     def form_valid(self, form):
 | |
| 
 | |
|         booking_order = self.get_object()
 | |
|         booking_order.cancel()
 | |
|         request = self.request
 | |
| 
 | |
|         BookingCancellation.create(booking_order)
 | |
| 
 | |
|         context = {
 | |
|             'order': booking_order,
 | |
|             'booking': booking_order.booking,
 | |
|             'base_url': "{0}://{1}".format(request.scheme, request.get_host()),
 | |
|             'user': request.user
 | |
| 
 | |
|         }
 | |
| 
 | |
|         email_data = {
 | |
|             'subject': 'A cancellation has been requested',
 | |
|             'to': 'info@ungleich.ch',
 | |
|             'context': context,
 | |
|             'template_name': 'booking_cancellation_notification',
 | |
|             'template_path': 'digitalglarus/emails/'
 | |
|         }
 | |
| 
 | |
|         email = BaseEmail(**email_data)
 | |
|         email.send()
 | |
| 
 | |
|         context = {
 | |
|             'order': booking_order,
 | |
|             'booking': booking_order.booking,
 | |
|             'base_url': "{0}://{1}".format(request.scheme, request.get_host())
 | |
| 
 | |
|         }
 | |
|         email_data = {
 | |
|             'subject': 'Your booking has been cancelled',
 | |
|             'to': request.user.email,
 | |
|             'context': context,
 | |
|             'template_name': 'booking_cancellation',
 | |
|             'template_path': 'digitalglarus/emails/'
 | |
|         }
 | |
|         email = BaseEmail(**email_data)
 | |
|         email.send()
 | |
| 
 | |
|         messages.add_message(self.request, messages.SUCCESS, self.success_message)
 | |
| 
 | |
|         return HttpResponseRedirect(self.get_success_url())
 | |
| 
 | |
|     def get_context_data(self, **kwargs):
 | |
| 
 | |
|         context = super(OrdersBookingDetailView, self).get_context_data(**kwargs)
 | |
| 
 | |
|         bookig_order = self.object
 | |
|         booking = bookig_order.booking
 | |
| 
 | |
|         start_date = booking.start_date
 | |
|         end_date = booking.end_date
 | |
|         free_days = booking.free_days
 | |
| 
 | |
|         booking_days = (end_date - start_date).days + 1
 | |
|         original_price = booking.price
 | |
|         final_price = booking.final_price
 | |
| 
 | |
|         context.update({
 | |
|             'original_price': original_price,
 | |
|             'total_discount': original_price - final_price,
 | |
|             'final_price': final_price,
 | |
|             'booking_days': booking_days,
 | |
|             'free_days': free_days,
 | |
|             'start_date': start_date.strftime('%m/%d/%Y'),
 | |
|             'end_date': end_date.strftime('%m/%d/%Y'),
 | |
|             'booking_required': bookig_order.refund_required(),
 | |
|         })
 | |
| 
 | |
|         return context
 | |
| 
 | |
| 
 | |
| class BookingOrdersListView(LoginRequiredMixin, ListView):
 | |
|     template_name = "digitalglarus/booking_orders_list.html"
 | |
|     context_object_name = "orders"
 | |
|     login_url = reverse_lazy('digitalglarus:login')
 | |
|     model = BookingOrder
 | |
|     paginate_by = 10
 | |
| 
 | |
|     def get_context_data(self, **kwargs):
 | |
|         context = super(BookingOrdersListView, self).get_context_data(**kwargs)
 | |
|         current_billing_address = self.request.user.billing_addresses.filter(current=True).last()
 | |
|         context.update({
 | |
|             'billing_address': current_billing_address
 | |
|         })
 | |
|         return context
 | |
| 
 | |
|     def get_queryset(self):
 | |
|         queryset = super(BookingOrdersListView, self).get_queryset()
 | |
|         queryset = queryset.filter(customer__user=self.request.user)
 | |
|         return queryset
 | |
| 
 | |
| 
 | |
| class ContactView(FormView):
 | |
|     template_name = 'contact.html'
 | |
|     form_class = ContactUsForm
 | |
|     success_url = reverse_lazy('digitalglarus:contact')
 | |
|     success_message = _('Message Successfully Sent')
 | |
| 
 | |
|     def form_valid(self, form):
 | |
|         form.save()
 | |
|         form.send_email()
 | |
|         messages.add_message(self.request, messages.SUCCESS, self.success_message)
 | |
|         return super(ContactView, self).form_valid(form)
 | |
| 
 | |
| ############## OLD VIEWS 
 | |
| 
 | |
| def blog(request):
 | |
|     tags = ["digitalglarus"]
 | |
|     posts = Post.objects.filter(tags__name__in=tags, publish=True).translated(get_language())
 | |
|     # posts = Post.objects.filter_by_language(get_language()).filter(tags__name__in=tags, publish=True)
 | |
|     context = {
 | |
|         'post_list': posts,
 | |
|     }
 | |
|     return render(request, 'glarus_blog/post_list.html', context)
 | |
| 
 | |
| 
 | |
| def blog_detail(request, slug):
 | |
|     # post = Post.objects.filter_by_language(get_language()).filter(slug=slug).first()
 | |
| 
 | |
|     post = Post.objects.translated(get_language(), slug=slug).first()
 | |
|     context = {
 | |
|         'post': post,
 | |
|     }
 | |
|     return render(request, 'glarus_blog/post_detail.html', context)
 | |
| 
 | |
| 
 | |
| def support(request):
 | |
|     return render(request, 'support.html')
 | |
| 
 | |
| 
 | |
| def supporters(request):
 | |
|     context = {
 | |
|         'supporters': Supporter.objects.order_by('name')
 | |
|     }
 | |
|     return render(request, 'supporters.html', context)
 | |
| 
 | |
| 
 | |
| 
 |