diff --git a/app/templates/app/detail_materi.html b/app/templates/app/detail_materi.html
index c489843d40314a994c7a4e39dba192316ed30e46..c8141efc4c138a413ee78ea550542de8e96f0823 100644
--- a/app/templates/app/detail_materi.html
+++ b/app/templates/app/detail_materi.html
@@ -284,6 +284,11 @@ div.review {
                         <em class="align-self-center far fa-square" id="readLaterText"></em> Baca Nanti
                 </button>
                 {% endif %}
+                <button class="btn btn-book shadow-sm p-2 mr-2 bg-white rounded align-self-center"
+                    type="button" aria-haspopup="true" aria-expanded="false" data-toggle="modal"
+                    data-target="#reportModal">
+                    <em></em>Laporkan
+                </button>
             </div>
         </div>
     </div>
@@ -469,6 +474,51 @@ div.review {
         </div>
     </div>
 </div>
+
+<div class="modal fade" id="reportModal" tabindex="-1" role="dialog" aria-labelledby="reportModal"
+    aria-hidden="true">
+    <div class="modal-dialog" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title" id="reportModal">
+                    {% if user.is_authenticated %}
+                        Laporkan Materi
+                    {% else %}
+                        Belum Login
+                    {% endif %}
+                </h5>
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">&times;</span>
+                </button>
+            </div>
+            <form method="POST">
+            <div class="modal-body">
+                {% if user.is_authenticated %}
+                    <p>Judul materi: <b>{{ materi_data.title }}</b><br></p>
+                        {% csrf_token %}
+                        <div class="form-group">
+                            <textarea placeholder="Alasan laporan..." class="form-control" id="exampleFormControlTextarea1"
+                                rows="3" name="report" required></textarea>
+                        </div>
+                {% else %}
+                    Login untuk melaporkan materi
+                {% endif %}
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">Batal</button>
+                    {% if user.is_authenticated %}
+                        <button type="submit" class="btn btn-primary">
+                            Laporkan Materi
+                    {% else %}
+                        <button type="button" class="btn btn-primary" onclick="window.location.href = '/login';">
+                        Login
+                    {% endif %}
+                </button>
+            </div>
+            </form>
+        </div>
+    </div>
+</div>
 {% endblock content %}
 {% block extra_scripts %}
 <script src="https://kit.fontawesome.com/bc2cedd6b2.js" crossorigin="anonymous"></script>
diff --git a/app/tests.py b/app/tests.py
index c71588983703b869f038359fd35eb75e12ff58cd..c05ae60365035454cf98941d84f012b76dd48040 100644
--- a/app/tests.py
+++ b/app/tests.py
@@ -49,6 +49,7 @@ from .views import (DaftarKatalog, DashboardKontributorView, DetailMateri,
                     KatalogPerKontributorView, MateriFavorite,
                     PasswordChangeViews, PostsView, ProfilView, ReqMateriView,
                     RevisiMateriView, SuksesLoginAdminView,
+                    LaporanMateri,
                     SuksesLoginKontributorView, SuntingProfilView,
                     UploadMateriExcelView, UploadMateriView, password_success)
 
@@ -527,6 +528,14 @@ class DetailMateriTest(TestCase):
         self.assertIn("Anda belum menuliskan komentar",
                       response.context["error_message"])
 
+    def test_post_blank_report(self):
+        url = self.url
+        self.client.login(**self.anonymous_credential)
+        response = self.client.post(url, {"report": ""})
+        self.assertIn("error_message", response.context)
+        self.assertIn("Anda belum menuliskan komentar",
+                      response.context["error_message"])
+
     def test_comment_rendered_to_template(self):
         url = self.url
         self.client.login(**self.contributor_credential)
@@ -534,6 +543,13 @@ class DetailMateriTest(TestCase):
         response = Client().get(url)
         self.assertContains(response, "This is my new comment")
 
+    def test_report_rendered_to_template(self):
+        url = self.url
+        self.client.login(**self.contributor_credential)
+        self.client.post(url, {"report": "This is my new comment"})
+        response = Client().get(url)
+        self.assertEqual(response.status_code, 200)
+
     def test_comment_by_admin(self):
         url = self.url
         self.client.login(**self.admin_credential)
diff --git a/app/views.py b/app/views.py
index cd6be9c991ea2acdaaece401b16d1959f7a2a8db..18dc1f83a52254611a1978cb144e53b4f2cc8696 100644
--- a/app/views.py
+++ b/app/views.py
@@ -30,6 +30,7 @@ from app.models import (
     Comment,
     Review,
     Materi,
+    LaporanMateri,
     ReqMaterial,
     Rating, RatingContributor,
     SubmitVisitor,
@@ -190,7 +191,10 @@ class DetailMateri(TemplateView):
     def post(self, request, *args, **kwargs):
         comment_text = request.POST.get("comment", None)
         review_text  = request.POST.get("review", None)
-        if ((comment_text == None or comment_text == "" )and (review_text == None or review_text == "")):
+        report_text = request.POST.get("report", None)
+        if ((comment_text == None or comment_text == "" ) and \
+            (review_text == None or review_text == "") and \
+            (report_text == None or report_text == "")):
             context = self.get_context_data(*args, **kwargs)
             context["error_message"] = "Anda belum menuliskan komentar"
             context["materi_data"] = get_object_or_404(Materi, pk=kwargs["pk"])
@@ -226,6 +230,11 @@ class DetailMateri(TemplateView):
                     review=review_text, username=DetailMateriService.get_user_name(request), materi=materi, user=user_obj
                 )
                 review.save()
+            elif (report_text != None):
+                laporan_materi = LaporanMateri.objects.create(
+                    materi=materi, laporan=report_text, user=user_obj
+                )
+                laporan_materi.save()
         return HttpResponseRedirect(request.path)