Fakultas Ilmu Komputer UI

views.py 14.9 KB
Newer Older
1
2
import json

3
from django.core.exceptions import PermissionDenied
4
from django.contrib.auth.hashers import make_password
5
from django.http import HttpResponseRedirect, JsonResponse
6
from django.shortcuts import get_object_or_404, render
7
from django.views.generic import TemplateView, View
8
from django.contrib import messages
9
10
from administration.models import VerificationReport, VerificationSetting
from administration.forms import CategoryForm, VerificationSettingForm, RegistrasiAdminForm, PeriodForm
11
from app.models import Category, Materi
Samuel Dimas Partogi's avatar
Samuel Dimas Partogi committed
12
from authentication.models import User
13

14
15

# Create your views here.
16
17
18
class VerificationView(TemplateView):
    template_name = "verif.html"

19
20
21
22
23
24
25
    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated or not request.user.is_admin:
            raise PermissionDenied(request)
        return super(VerificationView, self).dispatch(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        context = super(VerificationView, self).get_context_data(**kwargs)
26
27
28
29
        context["materi_list_pending"] = Materi.objects.filter(
            status='PENDING')
        context["materi_list_history"] = Materi.objects.exclude(
            status='PENDING')
30
31
        return context

32
33
34
    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        return self.render_to_response(context)
35

36

37
38
39
40
41
42
43
class DetailVerificationView(TemplateView):
    template_name = "detail_verif.html"

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated or not request.user.is_admin:
            raise PermissionDenied(request)
        return super(DetailVerificationView, self).dispatch(request, *args, **kwargs)
44

45
46
47
    def get_context_data(self, **kwargs):
        context = super(DetailVerificationView,
                        self).get_context_data(**kwargs)
48
49
        materi = get_object_or_404(Materi, pk=kwargs["pk"])
        context["materi_data"] = materi
50
51
        context["kriteria_list"] = VerificationSetting.objects.filter(
            archived=False)
52
53
54
        riwayat = True if materi.status != "PENDING" else False
        context["riwayat"] = riwayat
        context["verification_report"] = materi.verificationreport_set.first()
55
56
57
58
        return context

    def post(self, request, *args, **kwargs):
        materi = get_object_or_404(Materi, pk=kwargs["pk"])
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
        feedback = request.POST.get("feedback", "")
        action = request.POST.get("action", None)

        report = {}
        kriteria = []
        for item in request.POST.items():
            if "kriteria" in item[0]:
                verification_item_id = item[0].split("-")[1]
                verif_obj = VerificationSetting.objects.get(
                    id=int(verification_item_id))
                kriteria_value = {
                    "title": verif_obj.title,
                    "status": True if item[1] == "1" else False
                }
                kriteria.append(kriteria_value)

        report["kriteria"] = kriteria
        report["feedback"] = feedback

        if action == "approve" and feedback != "":
79
80
            materi.status = "APPROVE"
            materi.save()
81
        elif action == "disapprove" and feedback != "":
82
83
84
85
86
87
            materi.status = "DISAPPROVE"
            materi.save()
        else:
            context = self.get_context_data(**kwargs)
            context["error"] = True
            return self.render_to_response(context=context)
88
89
90
        verif_report = VerificationReport(
            report=report, materi=materi, user=self.request.user, status=materi.get_status_display())
        verif_report.save()
91
        return HttpResponseRedirect("/administration/")
92

93
94
95
    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        return self.render_to_response(context=context)
96

97
98

class VerificationSettingView(TemplateView):
99
100
101
102
103
104
    template_name = "settings.html"

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated or not request.user.is_admin:
            raise PermissionDenied(request)
        return super(VerificationSettingView, self).dispatch(request, *args, **kwargs)
105
106

    def get_context_data(self, **kwargs):
107
108
        context = super(VerificationSettingView,
                        self).get_context_data(**kwargs)
109
        context["items"] = VerificationSetting.objects.filter(
110
            archived=False)
111
        context["page_title"] = "Point Verifikasi Materi"
112
113
114
        return context

    def get(self, request, *args, **kwargs):
115
116
117
        context = self.get_context_data(**kwargs)
        context["form"] = VerificationSettingForm()
        return self.render_to_response(context=context)
118
119

    def post(self, request, *args, **kwargs):
120
121
122
123
        form = VerificationSettingForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect("/administration/setting/verification/")
124
        else:
125
126
127
            context = self.get_context_data(**kwargs)
            context["form"] = form
            return self.render_to_response(context)
128

129

130
class CategorySettingView(TemplateView):
131
132
133
134
135
136
    template_name = "settings.html"

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated or not request.user.is_admin:
            raise PermissionDenied(request)
        return super(CategorySettingView, self).dispatch(request, *args, **kwargs)
137
138

    def get_context_data(self, **kwargs):
139
        context = super(CategorySettingView, self).get_context_data(**kwargs)
140
        context["items"] = Category.objects.all()
141
        context["page_title"] = "Kategori Materi"
142
143
144
        return context

    def get(self, request, *args, **kwargs):
145
146
147
        context = self.get_context_data(**kwargs)
        context["form"] = CategoryForm()
        return self.render_to_response(context=context)
148
149

    def post(self, request, *args, **kwargs):
150
151
152
153
        form = CategoryForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect("/administration/setting/category/")
154
        else:
155
156
157
            context = self.get_context_data(**kwargs)
            context["form"] = form
            return self.render_to_response(context)
Samuel Dimas Partogi's avatar
Samuel Dimas Partogi committed
158

159

160
161
class KelolaKontributorView(TemplateView):
    template_name = "kelola_kontributor.html"
Samuel Dimas Partogi's avatar
Samuel Dimas Partogi committed
162
163
164
165
166

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated or not request.user.is_admin:
            raise PermissionDenied(request)

167
        return super(KelolaKontributorView, self).dispatch(request, *args, **kwargs)
Samuel Dimas Partogi's avatar
Samuel Dimas Partogi committed
168
169

    def get_context_data(self, **kwargs):
170
        context = super(KelolaKontributorView, self).get_context_data(**kwargs)
Samuel Dimas Partogi's avatar
Samuel Dimas Partogi committed
171
172
173
174
175
176
177
        context["users"] = User.objects.filter(is_contributor=True)
        return context

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        return self.render_to_response(context)

178

179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
class KelolaAdminView(TemplateView):
    template_name = "kelola_admin.html"

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated or not request.user.is_admin:
            raise PermissionDenied(request)

        return super(KelolaAdminView, self).dispatch(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        context = super(KelolaAdminView, self).get_context_data(**kwargs)
        context['users_list'] = User.objects.filter(is_admin=True)
        return context

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        return self.render_to_response(context)
196

197

Samuel Dimas Partogi's avatar
Samuel Dimas Partogi committed
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
class ProfileContributorAdminView(TemplateView):
    template_name = "detail_kontri_admin.html"

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated or not request.user.is_admin:
            raise PermissionDenied(request)

        return super(ProfileContributorAdminView, self).dispatch(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        return super().get_context_data(**kwargs)

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        context["user"] = get_object_or_404(User, pk=kwargs["pk"])
213
        return self.render_to_response(context=context)
214

215

216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
class StatisticsView(TemplateView):
    template_name = "administration/data_statistik.html"

    def get_context_data(self, **kwargs):
        context = super(StatisticsView, self).get_context_data(**kwargs)
        context["page_title"] = "Statistik"
        context["periodForm"] = PeriodForm(self.request.GET)
        return context

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        form = context["periodForm"]

        return self.render_to_response(context=context)


class StatisticApiView(View):
    def get_context_data(self, **kwargs):
        context = {}
        context["success"] = True
        context["period"] = self.request.GET.get("period", "default")
        return context

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        return JsonResponse(context)


244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
class ProfileAdminAdministrationView(TemplateView):
    template_name = "detail_admin.html"

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated or not request.user.is_admin:
            raise PermissionDenied(request)

        return super(ProfileAdminAdministrationView, self).dispatch(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        return super().get_context_data(**kwargs)

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        context["user"] = get_object_or_404(User, pk=kwargs["pk"])
        return self.render_to_response(context=context)

261

262
263
264
265
266
267
268
269
270
271
272
273
class RegistrasiAdminView(TemplateView):
    template_name = "registrasi_admin.html"

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated or not request.user.is_admin:
            raise PermissionDenied(request)
        return super(RegistrasiAdminView, self).dispatch(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        context = super(RegistrasiAdminView, self).get_context_data(**kwargs)
        context["form"] = RegistrasiAdminForm
        return context
274

275
276
277
    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        return self.render_to_response(context=context)
278

279
280
281
282
283
284
285
286
287
288
289
290
291
292
    def post(self, request, *args, **kwargs):
        data = request.POST.copy()
        form = RegistrasiAdminForm(request.POST)
        if form.is_valid():
            new_user = form.save(commit=False)
            new_user.password = make_password(data["password"])
            new_user.is_admin = True
            new_user.save()
            return HttpResponseRedirect("/administration/kelola-admin/")
        else:
            context = self.get_context_data(**kwargs)
            context["form"] = form
            return self.render_to_response(context)

293
294

class EditVerificationView(TemplateView):
295
    template_name = "edit_settings.html"
296
297
298
299
300
301
302
303

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated or not request.user.is_admin:
            raise PermissionDenied(request)
        return super(EditVerificationView, self).dispatch(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        context = super(EditVerificationView, self).get_context_data(**kwargs)
304
        context["page_title"] = "Verifikasi Materi"
305
306
        context["item"] = VerificationSetting.objects.get(id=kwargs["pk"])
        context["form"] = VerificationSettingForm(instance=context["item"])
307
308
309
310
311
312
        return context

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        return self.render_to_response(context=context)

313
314
315
316
317
318
319
320
321
322
323
324
    def post(self, request, *args, **kwargs):
        verification_object = self.get_context_data(**kwargs)["item"]
        form = VerificationSettingForm(
            request.POST, instance=verification_object)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect("/administration/setting/verification/")
        else:
            context = self.get_context_data(**kwargs)
            context["form"] = form
            return self.render_to_response(context)

325

326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
class EditCategoryView(TemplateView):
    template_name = "edit_settings.html"

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated or not request.user.is_admin:
            raise PermissionDenied(request)
        return super(EditCategoryView, self).dispatch(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        context = super(EditCategoryView, self).get_context_data(**kwargs)
        context["page_title"] = "Kategori Materi"
        context["item"] = Category.objects.get(id=kwargs["pk"])
        context["form"] = CategoryForm(instance=context["item"])
        return context

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        return self.render_to_response(context=context)

    def post(self, request, *args, **kwargs):
        category_object = self.get_context_data(**kwargs)["item"]
        form = CategoryForm(
            request.POST, instance=category_object)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect("/administration/setting/category/")
        else:
            context = self.get_context_data(**kwargs)
            context["form"] = form
            return self.render_to_response(context)


358
def delete_admin(request, *args, **kwargs):
359
360
    if not request.user.is_authenticated or not request.user.is_admin:
        raise PermissionDenied(request)
361
362
363
    User.objects.filter(pk=kwargs["pk"]).delete()
    return HttpResponseRedirect("/administration/kelola-admin/")

364

365
def delete_contributor(request, *args, **kwargs):
366
367
    if not request.user.is_authenticated or not request.user.is_admin:
        raise PermissionDenied(request)
368
    User.objects.filter(pk=kwargs["pk"]).delete()
369
    return HttpResponseRedirect("/administration/kelola-kontributor/")
370
371
372


def delete_verification(request, *args, **kwargs):
373
374
    if not request.user.is_authenticated or not request.user.is_admin:
        raise PermissionDenied(request)
375
376
    get_object_or_404(VerificationSetting,
                      pk=kwargs["pk_verification"]).delete()
377
    messages.success(request, "Point verifikasi berhasil dihapus")
378
    return HttpResponseRedirect("/administration/setting/verification/")
379
380
381
382
383
384
385
386
387
388
389
390


def delete_category(request, *args, **kwargs):
    if not request.user.is_authenticated or not request.user.is_admin:
        raise PermissionDenied(request)
    category_name = get_object_or_404(Category,
                                      pk=kwargs["pk_category"]).name
    get_object_or_404(Category,
                      pk=kwargs["pk_category"]).delete()
    messages.success(request, "Kategoryi " +
                     category_name + " berhasil dihapus")
    return HttpResponseRedirect("/administration/setting/category/")