Completed
Push — master ( d169a3...4714ad )
by Vijay
59s
created

OrganisationDeactive.get_object()   A

Complexity

Conditions 1

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 3
rs 10
cc 1
1
from django.conf import settings
2
from django.core.urlresolvers import reverse_lazy
3
from django.http.response import HttpResponseRedirect
4
from django.shortcuts import redirect, render
5
from django.template import Context, loader
6
from django.views import generic
7
8
from braces import views
9
from wye.base.emailer_html import send_email_to_id, send_email_to_list
10
from wye.profiles.models import Profile
11
from wye.regions.models import RegionalLead
12
from .forms import OrganisationForm
13
from .models import Organisation
14
15
16
class OrganisationList(views.LoginRequiredMixin, generic.ListView):
17
    model = Organisation
18
    template_name = 'organisation/list.html'
19
20
    def dispatch(self, request, *args, **kwargs):
21
        user_profile, created = Profile.objects.get_or_create(
22
            user__id=self.request.user.id)
23
        if not user_profile.get_user_type:
24
            return redirect('profiles:profile-edit', slug=request.user.username)
25
        return super(OrganisationList, self).dispatch(request, *args, **kwargs)
26
27
    def get_queryset(self):
28
        return Organisation.objects.filter(active=True)
29
30
    def get_context_data(self, *args, **kwargs):
31
        context = super(OrganisationList, self).get_context_data(
32
            *args, **kwargs)
33
        if Profile.is_organiser(self.request.user):
34
            context['org_created_list'] = self.get_queryset().filter(
35
                created_by=self.request.user)
36
            context['org_belongs_list'] = self.get_queryset().exclude(
37
                created_by=self.request.user).filter(
38
                user=self.request.user)
39
        elif Profile.is_regional_lead(self.request.user):
40
            regions = RegionalLead.objects.filter(leads=self.request.user)
41
            context['regional_org_list'] = self.get_queryset().filter(
42
                location__id__in=[x.location.id for x in regions])
43
        context['user'] = self.request.user
44
        # need to improve the part
45
        context['is_not_tutor'] = False
46
        # as user can be tutor and regional lead hence we need to verify like
47
        # this
48
        if (Profile.is_regional_lead(self.request.user) or
49
                Profile.is_organiser(self.request.user) or
50
                Profile.is_admin(self.request.user)):
51
            context['is_not_tutor'] = True
52
        return context
53
54
55
class OrganisationCreate(views.LoginRequiredMixin, generic.CreateView):
56
    model = Organisation
57
    form_class = OrganisationForm
58
    template_name = 'organisation/create.html'
59
    success_url = reverse_lazy('organisations:organisation_list')
60
61
    def post(self, request, *args, **kwargs):
62
        form = OrganisationForm(data=request.POST)
63
        if form.is_valid():
64
            form.instance.modified_by = request.user
65
            form.instance.created_by = request.user
66
            form.instance.save()
67
            form.instance.user.add(request.user)
68
            form.instance.save()
69
            host = '{}://{}'.format(settings.SITE_PROTOCOL,
70
                                    request.META['HTTP_HOST'])
71
            email_context = Context({
72
                'full_name': '%s %s' % (request.user.first_name,
73
                                        request.user.last_name),
74
                'org_id': form.instance.id,
75
                'host': host
76
77
            })
78
            subject = "%s organisation for region %s is created" % (
79
                form.instance.name, form.instance.location.name)
80
            email_body = loader.get_template(
81
                'email_messages/organisation/new.html').render(email_context)
82
            text_body = loader.get_template(
83
                'email_messages/organisation/new.txt').render(email_context)
84
85
            regional_lead = Profile.objects.filter(
86
                interested_locations=form.instance.location,
87
                usertype__slug='lead').values_list('user__email', flat=True)
88
            send_email_to_id(subject,
89
                             body=email_body,
90
                             email_id=request.user.email,
91
                             text_body=text_body)
92
93
            send_email_to_list(subject,
94
                               body=email_body,
95
                               users_list=regional_lead,
96
                               text_body=text_body)
97
98
            return HttpResponseRedirect(self.success_url)
99
        else:
100
            return render(request, self.template_name, {'form': form})
101
102
103
class OrganisationDetail(views.LoginRequiredMixin, generic.DetailView):
104
    model = Organisation
105
    template_name = 'organisation/detail.html'
106
    success_url = reverse_lazy('organisations:organisation_list')
107
108
    def get_queryset(self):
109
        return Organisation.objects.filter(
110
            user=self.request.user,
111
            id=self.kwargs['pk'])
112
113
114
class OrganisationUpdate(views.LoginRequiredMixin, generic.UpdateView):
115
    model = Organisation
116
    form_class = OrganisationForm
117
    template_name = 'organisation/edit.html'
118
    success_url = reverse_lazy('organisations:organisation_list')
119
120
    def get_object(self, queryset=None):
121
        return Organisation.objects.get(user=self.request.user, id=self.kwargs['pk'])
122
123
124
class OrganisationDeactive(views.CsrfExemptMixin,
125
                           views.LoginRequiredMixin,
126
                           views.JSONResponseMixin,
127
                           generic.UpdateView):
128
    model = Organisation
129
    fields = ('active', 'id')
130
131
    def get_object(self, queryset=None):
132
        return Organisation.objects.get(user=self.request.user,
133
                                        id=self.kwargs['pk'])
134
135
    def post(self, request, *args, **kwargs):
136
        self.object = self.get_object()
137
        response = self.object.toggle_active(request.user, **kwargs)
138
        return self.render_json_response(response)
139