UserDashboard   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 61
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 8
c 1
b 0
f 0
dl 0
loc 61
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
B get_context_data() 0 49 6
A dispatch() 0 7 2
1
# -*- coding: utf-8 -*-
2
from django.conf import settings
3
from django.core.exceptions import PermissionDenied
4
from django.core.urlresolvers import reverse
5
from django.http import HttpResponseRedirect
6
from django.shortcuts import redirect, render, get_object_or_404
7
from django.template import Context, loader
8
from django.views.generic import UpdateView
9
from django.views.generic.list import ListView
10
from django.contrib.auth import logout
11
from django.contrib.auth.decorators import login_required
12
from wye.base.constants import WorkshopStatus
13
from wye.base.emailer_html import send_email_to_id, send_email_to_list
14
from wye.organisations.models import Organisation
15
from wye.profiles.models import Profile
16
from wye.workshops.models import Workshop
17
18
from .forms import ContactUsForm, UserProfileForm, PartnerForm
19
20
21
@login_required
22
def account_redirect(request):
23
    return redirect('/profile/{}/'.format(request.user.profile.slug))
24
25
26
def profile_view(request, slug):
27
    try:
28
        p = Profile.objects.get(user__username=slug)
29
        workshops = Workshop.objects.filter(is_active=True).filter(
30
            presenter=p.user).filter(status__in=[
31
                WorkshopStatus.ACCEPTED,
32
                WorkshopStatus.REQUESTED,
33
                WorkshopStatus.FEEDBACK_PENDING,
34
                WorkshopStatus.COMPLETED]).order_by('-expected_date')
35
        return render(
36
            request, 'profile/index.html',
37
            {'object': p, 'workshops': workshops})
38
    except Profile.DoesNotExist:
39
        return render(request, 'error.html', {
40
            "message": "Profile does not exist"})
41
42
43
def user_dashboad(request):
44
    profile, created = Profile.objects.get_or_create(
45
        user__id=request.user.id)
46
    if not profile.is_profile_filled:
47
        return redirect('profiles:profile-edit', slug=request.user.username)
48
    workshop_all = Workshop.objects.filter(
49
        is_active=True).order_by('-expected_date')
50
51
    accept_workshops = workshop_all.filter(
52
        status=WorkshopStatus.ACCEPTED).filter(
53
            presenter__id__in=[request.user.id])
54
    requested_workshops = workshop_all.filter(
55
        status=WorkshopStatus.REQUESTED).filter(
56
            presenter__id__in=[request.user.id])
57
    requested_workshops = workshop_all.filter(
58
        status=WorkshopStatus.REQUESTED).filter(
59
            presenter__id__in=[request.user.id])
60
61
    organisation_all = Organisation.objects.all()
62
    context = {}
63
    for each_type in profile.get_user_type:
64
        if each_type == 'poc':
65
            context['is_college_poc'] = True
66
            context['users_organisation'] = organisation_all.filter(
67
                user=request.user)
68
            context['workshop_requested_under_poc'] = workshop_all.filter(
69
                requester__id__in=organisation_all.values_list(
70
                    'id', flat=True))
71
            context['workshops_accepted_under_poc'] = workshop_all.filter(
72
                status=WorkshopStatus.ACCEPTED,
73
                requester__id__in=organisation_all.values_list(
74
                    'id', flat=True))
75
        else:
76
            context['is_tutor'] = True
77
            context['workshop_requested_tutor'] = accept_workshops.filter(
78
                presenter=request.user)
79
            context['workshop_completed_tutor'] = \
80
                requested_workshops.filter(
81
                presenter=request.user)
82
83
84
class UserDashboard(ListView):
85
    model = Profile
86
    template_name = 'profile/dashboard.html'
87
88
    def dispatch(self, request, *args, **kwargs):
89
        user_profile = get_object_or_404(
90
            Profile, user__id=self.request.user.id)
91
        if not user_profile.get_user_type:
92
            return redirect('profiles:profile-edit',
93
                            slug=request.user.username)
94
        return super(UserDashboard, self).dispatch(request, *args, **kwargs)
95
96
    def get_context_data(self, **kwargs):
97
        context = super(UserDashboard, self).get_context_data(**kwargs)
98
        profile = Profile.objects.get(user=self.request.user)
99
        workshop_all = Workshop.objects.filter(is_active=True)
100
        accept_workshops = workshop_all.filter(
101
            status=WorkshopStatus.ACCEPTED)
102
        requested_workshops = workshop_all.filter(
103
            status=WorkshopStatus.REQUESTED)
104
        organisation_all = Organisation.objects.all()
105
        for each_type in profile.get_user_type:
106
            if each_type == 'tutor':
107
                context['is_tutor'] = True
108
                context['workshop_requested_tutor'] = accept_workshops.filter(
109
                    presenter=self.request.user)
110
                context['workshop_completed_tutor'] = \
111
                    requested_workshops.filter(
112
                    presenter=self.request.user)
113
            if each_type == 'lead':
114
                context['is_regional_lead'] = True
115
                context['workshops_accepted_under_rl'] = accept_workshops
116
                context['workshops_pending_under_rl'] = requested_workshops
117
                context['interested_tutors'] = Profile.objects.filter(
118
                    usertype__slug='tutor',
119
                    interested_locations__name__in=profile.get_interested_locations)\
120
                    .exclude(user=self.request.user).count()
121
                context['interested_locations'] = organisation_all.filter(
122
                    location__name__in=profile.get_interested_locations)\
123
                    .count()
124
125
            if each_type == 'poc':
126
                context['is_college_poc'] = True
127
                context['users_organisation'] = organisation_all.filter(
128
                    user=self.request.user)
129
                context['workshop_requested_under_poc'] = workshop_all.filter(
130
                    requester__id__in=organisation_all.values_list(
131
                        'id', flat=True))
132
                context['workshops_accepted_under_poc'] = workshop_all.filter(
133
                    status=WorkshopStatus.ACCEPTED,
134
                    requester__id__in=organisation_all.values_list(
135
                        'id', flat=True))
136
137
            if each_type == 'admin':
138
                context['is_admin'] = True
139
                context['workshops_by_status'] = workshop_all.order_by(
140
                    'status')
141
                context['workshops_by_region'] = workshop_all.order_by(
142
                    'location')
143
144
        return context
145
146
147
class ProfileEditView(UpdateView):
148
    model = Profile
149
    template_name = 'profile/update.html'
150
    form_class = UserProfileForm
151
    slug_field = 'user__username'
152
153
    def form_valid(self, form):
154
        return super(ProfileEditView, self).form_valid(form)
155
156
    def get_success_url(self):
157
        return reverse('profiles:profile-page', kwargs={
158
            'slug': self.object.slug})
159
160
    def dispatch(self, *args, **kwargs):
161
        if self.request.user.pk == self.get_object().pk:
162
            return super(ProfileEditView, self).dispatch(*args, **kwargs)
163
        else:
164
            raise PermissionDenied
165
166
167
def contact(request):
168
    if request.method == 'POST':
169
        form = ContactUsForm(request.POST)
170
        if form.is_valid():
171
            email_context = Context({
172
                'contact_name': form.cleaned_data['name'],
173
                'contact_email': form.cleaned_data['email'],
174
                'comments': form.cleaned_data['comments'],
175
                'conatct_number': form.cleaned_data['contact_number'],
176
                'feedback_type': form.cleaned_data['feedback_type']
177
            })
178
179
            subject = "PythonExpress Feedback by %s" % (
180
                form.cleaned_data['name'])
181
            text_body = loader.get_template(
182
                'email_messages/contactus/message.txt').render(email_context)
183
            email_body = loader.get_template(
184
                'email_messages/contactus/message.html').render(email_context)
185
            user_subject = '[PythonExpress] Feedback Received'
186
            user_text_body = loader.get_template(
187
                'email_messages/contactus/message_user.txt').render(
188
                email_context)
189
            user_email_body = loader.get_template(
190
                'email_messages/contactus/message_user.html').render(
191
                email_context)
192
            site_admins = [
193
                email for name, email in settings.MANAGERS]  # @UnusedVariable
194
            try:
195
                regional_lead = Profile.objects.filter(
196
                    usertype__slug__in=['lead', 'admin']).values_list(
197
                    'user__email', flat=True)
198
                regional_lead.extend(site_admins)
199
                send_email_to_list(
200
                    subject,
201
                    users_list=regional_lead,
202
                    body=email_body,
203
                    text_body=text_body)
204
205
                send_email_to_id(
206
                    user_subject,
207
                    body=user_email_body,
208
                    email_id=form.cleaned_data['email'],
209
                    text_body=user_text_body)
210
            except Exception as e:
211
                print(e)
212
            return HttpResponseRedirect('/thankyou')
213
    else:
214
        if request.user.is_authenticated():
215
            form = ContactUsForm(initial={'name': request.user.first_name +
216
                                          " " + request.user.last_name,
217
                                          'email': request.user.email
218
                                          })
219
        else:
220
            form = ContactUsForm()
221
    return render(request, 'contact.html', {'form': form})
222
223
224
def partner_view(request):
225
    if request.method == 'POST':
226
        form = PartnerForm(request.POST)
227
        if form.is_valid():
228
            email_context = Context({
229
                'org_name': form.cleaned_data['org_name'],
230
                'org_url': form.cleaned_data['org_url'],
231
                'partner_type': form.cleaned_data['partner_type'],
232
                'description': form.cleaned_data['description'],
233
                'python_use': form.cleaned_data['python_use'],
234
                'comments': form.cleaned_data['comments'],
235
                'name': form.cleaned_data['name'],
236
                'email': form.cleaned_data['email'],
237
                'contact_name': form.cleaned_data['name'],
238
                'contact_email': form.cleaned_data['email'],
239
                'conatct_number': form.cleaned_data['contact_number'],
240
241
            })
242
243
            subject = "[PythonExpress] Partnership request by %s" % (
244
                form.cleaned_data['org_name'])
245
            text_body = loader.get_template(
246
                'email_messages/partner/partner_message.txt').render(
247
                email_context)
248
            email_body = loader.get_template(
249
                'email_messages/partner/partner_message.html').render(
250
                email_context)
251
            user_subject = '[PythonExpress] Partnership request Received'
252
            user_text_body = loader.get_template(
253
                'email_messages/partner/message_user.txt').render(
254
                email_context)
255
            user_email_body = loader.get_template(
256
                'email_messages/partner/message_user.html').render(
257
                email_context)
258
259
            try:
260
                send_email_to_id(
261
                    subject,
262
                    email_id='[email protected]',
263
                    body=email_body,
264
                    text_body=text_body)
265
266
                send_email_to_id(
267
                    user_subject,
268
                    body=user_email_body,
269
                    email_id=form.cleaned_data['email'],
270
                    text_body=user_text_body)
271
            except Exception as e:
272
                print(e)
273
            return HttpResponseRedirect('/thankyou')
274
    else:
275
        form = PartnerForm()
276
    return render(request, 'partner.html', {'form': form})
277
278
279
def account_deactivate(request, slug):
280
    user = request.user
281
    user.is_active = False
282
    user.save()
283
    logout(request)
284
    return HttpResponseRedirect('/')
285