Completed
Push — master ( 4b90e6...b14212 )
by Vijay
01:01
created

profile_view()   A

Complexity

Conditions 2

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 2
dl 0
loc 6
rs 9.4285
1
from django.core.exceptions import PermissionDenied
2
from django.core.urlresolvers import reverse
3
from django.shortcuts import redirect, render
4
from django.template import Context, loader
5
from django.views.generic import UpdateView, DetailView
6
from django.views.generic.edit import FormView
7
from django.views.generic.list import ListView
8
9
from wye.base.constants import WorkshopStatus
10
from wye.base.emailer_html import send_email_to_list, send_email_to_id
11
from wye.organisations.models import Organisation
12
from wye.profiles.models import Profile
13
from wye.workshops.models import Workshop
14
15
from .forms import UserProfileForm, ContactUsForm
16
17
18
def profile_view(request, slug):
19
    try:
20
        p = Profile.objects.get(user__username=slug)
21
    except Profile.DoesNotExist:
22
        return render(request, 'error.html', {"message": "Profile does not exist"})
23
    return render(request, 'profile/index.html', {'object': p})
24
25
26
# class ProfileView(DetailView):
27
#     model = Profile
28
#     template_name = 'profile/index.html'
29
#     slug_field = 'user__username'
30
#
31
#     def get_context_data(self, *args, **kwargs):
32
#         slug = self.kwargs['slug']
33
#         self.object = self.model.objects.get(user__username=slug)
34
#         context = super(
35
#             ProfileView, self).get_context_data(*args, **kwargs)
36
#         return context
37
38
39
class UserDashboard(ListView):
40
    model = Profile
41
    template_name = 'profile/dashboard.html'
42
43
    def dispatch(self, request, *args, **kwargs):
44
        user_profile = Profile.objects.get(
45
            user__id=self.request.user.id)
46
        if not user_profile.get_user_type:
47
            return redirect('profiles:profile-edit', slug=request.user.username)
48
        return super(UserDashboard, self).dispatch(request, *args, **kwargs)
49
50
    def get_context_data(self, **kwargs):
51
        context = super(UserDashboard, self).get_context_data(**kwargs)
52
        user_profile = Profile.objects.get(user=self.request.user)
53
        workshop_all = Workshop.objects.all()
54
        accept_workshops = workshop_all.filter(
55
            status=WorkshopStatus.ACCEPTED)
56
        requested_workshops = workshop_all.filter(
57
            status=WorkshopStatus.REQUESTED)
58
        organisation_all = Organisation.objects.all()
59
        for each_type in user_profile.get_user_type:
60
            if each_type == 'tutor':
61
                context['is_tutor'] = True
62
                context['workshop_requested_tutor'] = accept_workshops.filter(
63
                    presenter=self.request.user)
64
                context['workshop_completed_tutor'] = requested_workshops.filter(
65
                    presenter=self.request.user)
66
            if each_type == 'lead':
67
                context['is_regional_lead'] = True
68
                context['workshops_accepted_under_rl'] = accept_workshops
69
                context['workshops_pending_under_rl'] = requested_workshops
70
                context['interested_tutors'] = Profile.objects.filter(
71
                    usertype__slug='tutor',
72
                    interested_locations__name__in=user_profile.get_interested_locations).exclude(
73
                    user=self.request.user).count()
74
                context['interested_locations'] = organisation_all.filter(
75
                    location__name__in=user_profile.get_interested_locations).count()
76
77
            if each_type == 'poc':
78
                context['is_college_poc'] = True
79
                context['users_organisation'] = organisation_all.filter(
80
                    user=self.request.user)
81
                context['workshop_requested_under_poc'] = workshop_all.filter(
82
                    requester__id__in=organisation_all.values_list(
83
                        'id', flat=True))
84
                context['workshops_accepted_under_poc'] = workshop_all.filter(
85
                    status=WorkshopStatus.ACCEPTED,
86
                    requester__id__in=organisation_all.values_list(
87
                        'id', flat=True))
88
89
            if each_type == 'admin':
90
                context['is_admin'] = True
91
                context['workshops_by_status'] = workshop_all.order_by(
92
                    'status')
93
                context['workshops_by_region'] = workshop_all.order_by(
94
                    'location')
95
96
        return context
97
98
99
class ProfileEditView(UpdateView):
100
    model = Profile
101
    template_name = 'profile/update.html'
102
    form_class = UserProfileForm
103
    slug_field = 'user__username'
104
105
    def form_valid(self, form):
106
        return super(ProfileEditView, self).form_valid(form)
107
108
    def get_success_url(self):
109
        return reverse('profiles:profile-page', kwargs={'slug': self.object.slug})
110
111
    def dispatch(self, *args, **kwargs):
112
        if self.request.user.pk == self.get_object().pk:
113
            return super(ProfileEditView, self).dispatch(*args, **kwargs)
114
        else:
115
            raise PermissionDenied
116
117
118
class ContactFormView(FormView):
119
    form_class = ContactUsForm
120
    template_name = 'contact.html'
121
    success_url = '/thankyou'
122
123
    def form_valid(self, form):
124
125
        email_context = Context({
126
            'contact_name': form.cleaned_data['name'],
127
            'contact_email': form.cleaned_data['email'],
128
            'comments': form.cleaned_data['comments'],
129
            'conatct_number': form.cleaned_data['contact_number'],
130
            'feedback_type': form.cleaned_data['feedback_type']
131
        })
132
133
        subject = "PythonExpress Feedback by %s" % (form.cleaned_data['name'])
134
        text_body = loader.get_template(
135
            'email_messages/contactus/message.txt').render(email_context)
136
        email_body = loader.get_template(
137
            'email_messages/contactus/message.html').render(email_context)
138
        user_subject = '[PythonExpress] Feedback Received'
139
        user_text_body = loader.get_template(
140
            'email_messages/contactus/message_user.txt').render(email_context)
141
        user_email_body = loader.get_template(
142
            'email_messages/contactus/message_user.html').render(email_context)
143
144
        try:
145
            regional_lead = Profile.objects.filter(
146
                usertype__slug__in=['lead', 'admin']).values_list(
147
                'user__email', flat=True)
148
            send_email_to_list(
149
                subject,
150
                users_list=regional_lead,
151
                body=email_body,
152
                text_body=text_body)
153
154
            send_email_to_id(
155
                user_subject,
156
                body=user_email_body,
157
                email_id=form.cleaned_data['email'],
158
                text_body=user_text_body)
159
        except Exception as e:
160
            print(e)
161
162
        return super(ContactFormView, self).form_valid(form)
163