Fakultas Ilmu Komputer UI

views.py 11.9 KB
Newer Older
1
from django.core.exceptions import PermissionDenied
2
from django.contrib.auth.hashers import make_password
3
from django.http import HttpResponseRedirect
4
from django.shortcuts import get_object_or_404, render
5
from django.views.generic import TemplateView
6
from django.contrib import messages
7
8

from app.models import Category, Materi
Samuel Dimas Partogi's avatar
Samuel Dimas Partogi committed
9
from authentication.models import User
10

11
from administration.forms import CategoryForm, VerificationSettingForm, RegistrasiAdminForm
12
from administration.models import VerificationReport, VerificationSetting
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"] = "Pengaturan 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
141
        context["items"] = Category.objects.all()
        context["page_title"] = "Pengaturan 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
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)

233

234
235
236
237
238
239
240
241
242
243
244
245
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
246

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

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

265
266
267
268
269
270
271
272
273
274
275

class EditVerificationView(TemplateView):
    template_name = "edit_verifikasi.html"

    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)
276
277
278
        context["page_title"] = "Edit Verifikasi"
        context["item"] = VerificationSetting.objects.get(id=kwargs["pk"])
        context["form"] = VerificationSettingForm(instance=context["item"])
279
280
281
282
283
284
        return context

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

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

297

298
299
300
301
def delete_admin(request, *args, **kwargs):
    User.objects.filter(pk=kwargs["pk"]).delete()
    return HttpResponseRedirect("/administration/kelola-admin/")

302

303
304
def delete_contributor(request, *args, **kwargs):
    User.objects.filter(pk=kwargs["pk"]).delete()
305
    return HttpResponseRedirect("/administration/kelola-kontributor/")
306
307
308
309
310
311
312


def delete_verification(request, *args, **kwargs):
    get_object_or_404(VerificationSetting,
                      pk=kwargs["pk_verification"]).delete()
    print("lewat")
    return HttpResponseRedirect("/administration/setting/verification/")