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

WorkshopUpdate.get_initial()   A

Complexity

Conditions 1

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 1
dl 0
loc 3
rs 10
1
from django.contrib.auth.decorators import login_required
2
from django.core.urlresolvers import reverse, reverse_lazy
3
from django.db.models import Q
4
from django.shortcuts import redirect
5
from django.utils.decorators import method_decorator
6
from django.views import generic
7
8
from braces import views
9
from wye.profiles.models import Profile
10
from wye.regions.models import RegionalLead
11
from wye.social.sites.twitter import send_tweet
12
13
from .forms import WorkshopForm, WorkshopEditForm, WorkshopFeedbackForm
14
from .mixins import WorkshopEmailMixin, WorkshopAccessMixin, \
15
    WorkshopRestrictMixin
16
from .models import Workshop
17
18
19
class WorkshopList(views.LoginRequiredMixin, generic.ListView):
20
    model = Workshop
21
    template_name = 'workshops/workshop_list.html'
22
23
    @method_decorator(login_required)
24
    def dispatch(self, request, *args, **kwargs):
25
        user_profile, created = Profile.objects.get_or_create(
26
            user__id=self.request.user.id)
27
        if not user_profile.get_user_type:
28
            return redirect('profiles:profile-edit', slug=request.user.username)
29
        return super(WorkshopList, self).dispatch(request, *args, **kwargs)
30
31
    def get_context_data(self, *args, **kwargs):
32
        context = super(
33
            WorkshopList, self).get_context_data(*args, **kwargs)
34
        workshop_list = Workshop.objects.all().order_by('-expected_date')
35
        if Profile.is_organiser(self.request.user):
36
            workshop_list = workshop_list.filter(
37
                requester__user=self.request.user)
38
        elif Profile.is_presenter(self.request.user):
39
            workshop_list = workshop_list.filter(
40
                Q(presenter=self.request.user) | Q
41
                (requester__location__id__in=[
42
                    x.id for x in
43
                    self.request.user.profile.interested_locations.all()]))
44
        elif Profile.is_regional_lead(self.request.user):
45
            regions = RegionalLead.objects.filter(leads=self.request.user)
46
            workshop_list = workshop_list.filter(
47
                location__id__in=[x.location.id for x in regions])
48
49
        context['workshop_list'] = workshop_list
50
        context['user'] = self.request.user
51
        # need to improve the part
52
        context['is_not_tutor'] = False
53
        # as user can be tutor and regional lead hence we need to verify like
54
        # this
55
        if (Profile.is_regional_lead(self.request.user) or
56
                Profile.is_organiser(self.request.user) or
57
                Profile.is_admin(self.request.user)):
58
            context['is_not_tutor'] = True
59
        return context
60
61
62
class WorkshopDetail(generic.DetailView):
63
    model = Workshop
64
    context_object_name = "workshop"
65
    template_name = 'workshops/workshop_detail.html'
66
67
68
class WorkshopCreate(views.LoginRequiredMixin, WorkshopRestrictMixin,
69
                     WorkshopEmailMixin, generic.CreateView):
70
    model = Workshop
71
    email_dir = 'email_messages/workshop/create_workshop/'
72
    form_class = WorkshopForm
73
    template_name = 'workshops/workshop_create.html'
74
    success_url = reverse_lazy('workshops:workshop_list')
75
76
    def form_valid(self, form):
77
        response = super(WorkshopCreate, self).form_valid(form)
78
        workshop = self.object
79
        context = {
80
            'workshop': workshop,
81
            'date': workshop.expected_date,
82
            'workshop_url': self.request.build_absolute_uri(reverse(
83
                'workshops:workshop_detail', args=[workshop.pk]
84
            ))
85
        }
86
        send_tweet(context)
87
        self.send_mail_to_group(context)
88
        return response
89
90
    def get_form_kwargs(self):
91
        kwargs = super(WorkshopCreate, self).get_form_kwargs()
92
        kwargs.update({'user': self.request.user})
93
        return kwargs
94
95
96
class WorkshopUpdate(views.LoginRequiredMixin, WorkshopAccessMixin,
97
                     generic.UpdateView):
98
    model = Workshop
99
    form_class = WorkshopEditForm
100
    template_name = 'workshops/workshop_update.html'
101
102
    def get_success_url(self):
103
        # pk = self.kwargs.get(self.pk_url_kwarg, None)
104
        self.success_url = reverse("workshops:workshop_list")
105
        return super(WorkshopUpdate, self).get_success_url()
106
107
    def get_initial(self):
108
        return {
109
            "requester": self.object.requester.name,
110
        }
111
112
    def get_form_kwargs(self):
113
        kwargs = super(WorkshopUpdate, self).get_form_kwargs()
114
        kwargs['request'] = self.request
115
        return kwargs
116
117
118
class WorkshopToggleActive(views.LoginRequiredMixin, views.CsrfExemptMixin,
119
                           views.JSONResponseMixin, WorkshopAccessMixin,
120
                           generic.UpdateView):
121
    model = Workshop
122
    fields = ('is_active', 'id')
123
124
    def post(self, request, *args, **kwargs):
125
        self.object = self.get_object()
126
        response = self.object.toggle_active(request.user, **kwargs)
127
        return self.render_json_response(response)
128
129
130
class WorkshopAction(views.CsrfExemptMixin, views.LoginRequiredMixin,
131
                     views.JSONResponseMixin, WorkshopEmailMixin,
132
                     generic.UpdateView):
133
134
    model = Workshop
135
    email_dir = 'email_messages/workshop/assign_me/'
136
137
    def post(self, request, *args, **kwargs):
138
        self.object = self.get_object()
139
        response = self.object.manage_action(request.user, **kwargs)
140
141
        if response['status'] and response.get('notify') is not None:
142
            self.send_mail(request.user, response['assigned'])
143
            del response['notify']
144
        return self.render_json_response(response)
145
146
    def send_mail(self, user, assigned):
147
        """Send email to presenter and org users."""
148
149
        workshop = self.object
150
        context = {
151
            'presenter': True,
152
            'assigned': assigned,
153
            'date': workshop.expected_date,
154
            'presenter_name': user.username,
155
            'workshop_organization': workshop.requester,
156
            'workshop_url': self.request.build_absolute_uri(reverse(
157
                'workshops:workshop_detail', args=[workshop.pk]
158
            ))
159
        }
160
        # email to presenter and group
161
        self.send_mail_to_presenter(user, context)
162
        context['presenter'] = False
163
        self.send_mail_to_group(context, exclude_emails=[user.email])
164
165
166
class WorkshopFeedbackView(views.LoginRequiredMixin,
167
                           generic.FormView):
168
    form_class = WorkshopFeedbackForm
169
    template_name = "workshops/workshop_feedback.html"
170
    success_url = reverse_lazy('workshops:workshop_list')
171
172
    def form_valid(self, form):
173
        workshop_id = self.kwargs.get('pk')
174
        form.save(self.request.user, workshop_id)
175
        return super(WorkshopFeedbackView, self).form_valid(form)
176
177
    def get_context_data(self, *args, **kwargs):
178
        context = super(WorkshopFeedbackView, self).get_context_data(
179
            *args, **kwargs)
180
        context['workshop'] = Workshop.objects.get(pk=self.kwargs.get('pk'))
181
        return context
182