Fakultas Ilmu Komputer UI

views.py 15.6 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
from datetime import datetime
14

15
16

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

20
21
22
23
24
25
26
    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)
27
28
29
30
        context["materi_list_pending"] = Materi.objects.filter(
            status='PENDING')
        context["materi_list_history"] = Materi.objects.exclude(
            status='PENDING')
31
32
        return context

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

37

38
39
40
41
42
43
44
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)
45

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

    def post(self, request, *args, **kwargs):
        materi = get_object_or_404(Materi, pk=kwargs["pk"])
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
        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 != "":
80
81
            materi.status = "APPROVE"
            materi.save()
82
        elif action == "disapprove" and feedback != "":
83
84
85
86
87
88
            materi.status = "DISAPPROVE"
            materi.save()
        else:
            context = self.get_context_data(**kwargs)
            context["error"] = True
            return self.render_to_response(context=context)
89
90
91
        verif_report = VerificationReport(
            report=report, materi=materi, user=self.request.user, status=materi.get_status_display())
        verif_report.save()
92
        return HttpResponseRedirect("/administration/")
93

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

98
99

class VerificationSettingView(TemplateView):
100
101
102
103
104
105
    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)
106
107

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

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

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

132

133
class CategorySettingView(TemplateView):
134
135
136
137
138
139
    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)
140
141

    def get_context_data(self, **kwargs):
142
        context = super(CategorySettingView, self).get_context_data(**kwargs)
143
144
        context["items"] = Category.objects.filter(archived=False)
        context["items_archived"] = Category.objects.filter(archived=True)
145
        context["page_title"] = "Kategori Materi"
146
147
148
        return context

    def get(self, request, *args, **kwargs):
149
150
151
        context = self.get_context_data(**kwargs)
        context["form"] = CategoryForm()
        return self.render_to_response(context=context)
152
153

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

163

164
165
class KelolaKontributorView(TemplateView):
    template_name = "kelola_kontributor.html"
Samuel Dimas Partogi's avatar
Samuel Dimas Partogi committed
166
167
168
169
170

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

171
        return super(KelolaKontributorView, self).dispatch(request, *args, **kwargs)
Samuel Dimas Partogi's avatar
Samuel Dimas Partogi committed
172
173

    def get_context_data(self, **kwargs):
174
        context = super(KelolaKontributorView, self).get_context_data(**kwargs)
Samuel Dimas Partogi's avatar
Samuel Dimas Partogi committed
175
176
177
178
179
180
181
        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)

182

183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
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)
200

201

Samuel Dimas Partogi's avatar
Samuel Dimas Partogi committed
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
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"])
217
        return self.render_to_response(context=context)
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
244
245
246
247
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)


248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
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)

265

266
267
268
269
270
271
272
273
274
275
276
277
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
278

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

283
284
285
286
287
288
289
290
291
292
293
294
295
296
    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)

297
298

class EditVerificationView(TemplateView):
299
    template_name = "edit_settings.html"
300
301
302
303
304
305
306
307

    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)
308
        context["page_title"] = "Verifikasi Materi"
309
310
        context["item"] = VerificationSetting.objects.get(id=kwargs["pk"])
        context["form"] = VerificationSettingForm(instance=context["item"])
311
312
313
314
315
316
        return context

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

317
318
319
320
321
322
323
324
325
326
327
328
    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)

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
358
359
360
361
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)


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

368

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


def delete_verification(request, *args, **kwargs):
377
378
    if not request.user.is_authenticated or not request.user.is_admin:
        raise PermissionDenied(request)
379
380
381
382
383
384
385
    queryObject = get_object_or_404(VerificationSetting,
                                    pk=kwargs["pk_verification"])
    queryObject.archived = True
    queryObject.description = "Telah dihapus oleh " + \
        request.user.name + " pada tanggal " + \
        str(datetime.now().strftime("%m/%d/%Y, %H:%M:%S")) + "WIB"
    queryObject.save()
386
    messages.success(request, "Point verifikasi berhasil dihapus")
387
    return HttpResponseRedirect("/administration/setting/verification/")
388
389
390
391
392
393
394


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
395
396
397
398
399
400
401
402
    queryObject = get_object_or_404(Category,
                                    pk=kwargs["pk_category"])
    queryObject.archived = True
    queryObject.description = "Telah dihapus oleh " + \
        request.user.name + " pada tanggal " + \
        str(datetime.now().strftime("%m/%d/%Y, %H:%M:%S")) + "WIB"
    queryObject.save()
    messages.success(request, "Kategori " +
403
404
                     category_name + " berhasil dihapus")
    return HttpResponseRedirect("/administration/setting/category/")