diff --git a/digitalglarus/mixins.py b/digitalglarus/mixins.py index 5392ad37..7c214e14 100644 --- a/digitalglarus/mixins.py +++ b/digitalglarus/mixins.py @@ -1,5 +1,11 @@ +from django.core.urlresolvers import reverse_lazy +from django.contrib.auth.mixins import LoginRequiredMixin +from django.views.generic import UpdateView from django.db import models from django.http import HttpResponseRedirect +from django.contrib import messages + + from membership.models import StripeCustomer from utils.models import BillingAddress @@ -50,3 +56,27 @@ class Ordereable(models.Model): instance.cc_brand = stripe_charge.source.brand instance.save() return instance + + +class ChangeMembershipStatusMixin(LoginRequiredMixin, UpdateView): + success_message = None + success_url = reverse_lazy('digitalglarus:membership_orders_list') + login_url = reverse_lazy('digitalglarus:login') + fields = '__all__' + + def get_object(self): + from .models import MembershipOrder + 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.activate() + + messages.add_message(self.request, messages.SUCCESS, self.success_message) + + return HttpResponseRedirect(self.success_url) diff --git a/digitalglarus/models.py b/digitalglarus/models.py index 876df6d7..a3b9dd9c 100644 --- a/digitalglarus/models.py +++ b/digitalglarus/models.py @@ -65,6 +65,19 @@ class Membership(models.Model): start_date = models.DateField() end_date = models.DateField() + @classmethod + def get_current_membership(cls, user): + + has_order_current_month = Q(membershiporder__customer__user=user, + membershiporder__created_at__month=datetime.today().month) + # import pdb;pdb.set_trace() + return cls.objects.\ + filter(has_order_current_month).last() + + # def get_current_active_membership(cls, user): + # membership = cls.get_current_membership(user) + # return membership if membership and membership.active else None + @classmethod def get_by_user(cls, user): return cls.objects.\ @@ -75,15 +88,22 @@ class Membership(models.Model): instance = cls.objects.create(**data) return instance + @classmethod + def activate_or_crete(cls, data, user): + membership = cls.get_by_user(user) + obj, created = cls.objects.update_or_create(id=membership.id, defaults=data) + return obj + @classmethod def is_digitalglarus_active_member(cls, user): - past_month = (datetime.today() - relativedelta(months=1)).month + # past_month = (datetime.today() - relativedelta(months=1)).month has_order_current_month = Q(membershiporder__customer__user=user, membershiporder__created_at__month=datetime.today().month) - has_order_past_month = Q(membershiporder__customer__user=user, - membershiporder__created_at__month=past_month) + # has_order_past_month = Q(membershiporder__customer__user=user, + # membershiporder__created_at__month=past_month) active_membership = Q(active=True) - return cls.objects.filter(has_order_past_month | has_order_current_month).\ + # return cls.objects.filter(has_order_past_month | has_order_current_month).\ + return cls.objects.filter(has_order_current_month).\ filter(active_membership).exists() def update_dates(self, start_date, end_date): @@ -95,6 +115,10 @@ class Membership(models.Model): self.active = False self.save() + def activate(self): + self.active = True + self.save() + class MembershipOrder(Ordereable, models.Model): membership = models.ForeignKey(Membership) diff --git a/digitalglarus/templates/digitalglarus/membership_orders_list.html b/digitalglarus/templates/digitalglarus/membership_orders_list.html index 57284121..b7ed582c 100644 --- a/digitalglarus/templates/digitalglarus/membership_orders_list.html +++ b/digitalglarus/templates/digitalglarus/membership_orders_list.html @@ -59,22 +59,40 @@ {% endif %}