Fakultas Ilmu Komputer UI

views.py 7.37 KB
Newer Older
1
from django.core.exceptions import PermissionDenied
2
from django.http import HttpResponseRedirect
3
from django.shortcuts import get_object_or_404, render
4
from django.views.generic import TemplateView
5
6

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

9
from .forms import CategoryForm, VerificationSettingForm
10
from .models import VerificationSetting, VerificationReport
11
12
13


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

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

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

34

35
36
37
38
39
40
41
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)
42

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

    def post(self, request, *args, **kwargs):
        materi = get_object_or_404(Materi, pk=kwargs["pk"])
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
        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 != "":
77
78
79
            materi.status = "APPROVE"
            materi.feedback = feedback
            materi.save()
80
        elif action == "disapprove" and feedback != "":
81
82
83
84
85
86
87
            materi.status = "DISAPPROVE"
            materi.feedback = feedback
            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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192

class ContributorListView(TemplateView):
    template_name = "daftar_kontributor.html"

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

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

    def get_context_data(self, **kwargs):
        context = super(ContributorListView, self).get_context_data(**kwargs)
        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)

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"])
        return self.render_to_response(context=context)