From 94d9428ddd6aaadc08033a2e11ebe15308b2ee38 Mon Sep 17 00:00:00 2001
From: Bornyto Hamonangen <t-bornyto.hamonangan@virgoku.id>
Date: Mon, 5 Jun 2023 18:34:25 +0700
Subject: [PATCH 01/11] make publisher app

---
 ppi/settings.py                      |  1 +
 ppi/urls.py                          |  1 +
 publisher/__init__.py                |  0
 publisher/admin.py                   |  4 ++
 publisher/apps.py                    |  6 +++
 publisher/forms.py                   |  9 +++++
 publisher/migrations/0001_initial.py | 26 ++++++++++++
 publisher/migrations/__init__.py     |  0
 publisher/models.py                  | 19 +++++++++
 publisher/tests.py                   |  3 ++
 publisher/urls.py                    | 13 ++++++
 publisher/views.py                   | 45 +++++++++++++++++++++
 templates/baseAdmin.html             |  7 +++-
 templates/publisherPage.html         | 59 ++++++++++++++++++++++++++++
 14 files changed, 191 insertions(+), 2 deletions(-)
 create mode 100644 publisher/__init__.py
 create mode 100644 publisher/admin.py
 create mode 100644 publisher/apps.py
 create mode 100644 publisher/forms.py
 create mode 100644 publisher/migrations/0001_initial.py
 create mode 100644 publisher/migrations/__init__.py
 create mode 100644 publisher/models.py
 create mode 100644 publisher/tests.py
 create mode 100644 publisher/urls.py
 create mode 100644 publisher/views.py
 create mode 100644 templates/publisherPage.html

diff --git a/ppi/settings.py b/ppi/settings.py
index e8f3cc9..15b4859 100644
--- a/ppi/settings.py
+++ b/ppi/settings.py
@@ -46,6 +46,7 @@ INSTALLED_APPS = [
     'sm.apps.SmConfig',
     'pi.apps.PiConfig',
     'proceeding.apps.ProceedingConfig',
+    'publisher.apps.PublisherConfig',
     'semester.apps.SemesterConfig',
     'django_filters',
     'widget_tweaks'
diff --git a/ppi/urls.py b/ppi/urls.py
index 09fec1b..a975dc6 100644
--- a/ppi/urls.py
+++ b/ppi/urls.py
@@ -22,5 +22,6 @@ urlpatterns = [
     path('sm/', include('sm.urls')),
     path('pi/', include('pi.urls')),
     path('proceeding/', include('proceeding.urls')),
+    path('publisher/', include('publisher.urls')),
     path('semester/', include('semester.urls')),
 ]
diff --git a/publisher/__init__.py b/publisher/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/publisher/admin.py b/publisher/admin.py
new file mode 100644
index 0000000..1487e51
--- /dev/null
+++ b/publisher/admin.py
@@ -0,0 +1,4 @@
+from django.contrib import admin
+from .models import Publisher
+# Register your models here.
+admin.site.register(Publisher)
diff --git a/publisher/apps.py b/publisher/apps.py
new file mode 100644
index 0000000..7d29520
--- /dev/null
+++ b/publisher/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class PublisherConfig(AppConfig):
+    default_auto_field = 'django.db.models.BigAutoField'
+    name = 'publisher'
diff --git a/publisher/forms.py b/publisher/forms.py
new file mode 100644
index 0000000..b66bc49
--- /dev/null
+++ b/publisher/forms.py
@@ -0,0 +1,9 @@
+from django import forms
+from .models import Publisher
+
+
+class PublisherAddForm(forms.ModelForm):
+    class Meta:
+        model = Publisher
+        fields = ['nama', 'tipe']
+
diff --git a/publisher/migrations/0001_initial.py b/publisher/migrations/0001_initial.py
new file mode 100644
index 0000000..8933f3b
--- /dev/null
+++ b/publisher/migrations/0001_initial.py
@@ -0,0 +1,26 @@
+# Generated by Django 3.2.8 on 2023-06-05 11:30
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Publisher',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('nama', models.CharField(max_length=500, unique=True)),
+                ('tipe', models.CharField(choices=[('Jurnal', 'Jurnal'), ('Konferensi', 'Konferensi')], max_length=100)),
+                ('is_active', models.BooleanField(default=True)),
+            ],
+            options={
+                'ordering': ['nama'],
+            },
+        ),
+    ]
diff --git a/publisher/migrations/__init__.py b/publisher/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/publisher/models.py b/publisher/models.py
new file mode 100644
index 0000000..853450a
--- /dev/null
+++ b/publisher/models.py
@@ -0,0 +1,19 @@
+from django.db import models
+
+TYPE_CHOICES = [
+    ('Jurnal', 'Jurnal'),
+    ('Konferensi', 'Konferensi'),
+]
+
+
+# Create your models here.
+class Publisher(models.Model):
+    nama = models.CharField(max_length=500, unique=True)
+    tipe = models.CharField(choices=TYPE_CHOICES, max_length=100)
+    is_active = models.BooleanField(default=True)
+
+    def __str__(self):
+        return self.nama
+
+    class Meta:
+        ordering = ['nama']
diff --git a/publisher/tests.py b/publisher/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/publisher/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/publisher/urls.py b/publisher/urls.py
new file mode 100644
index 0000000..0703eb7
--- /dev/null
+++ b/publisher/urls.py
@@ -0,0 +1,13 @@
+from . import views
+from django.urls import path
+from django.conf import settings
+from django.conf.urls import url
+from django.conf.urls.static import static
+
+urlpatterns = [
+    path('', views.publisher_page, name='publisher_page'),
+    path('soft_delete', views.soft_delete_publisher, name='soft_delete_publisher'),
+]
+
+if settings.DEBUG:
+    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
diff --git a/publisher/views.py b/publisher/views.py
new file mode 100644
index 0000000..9e14dda
--- /dev/null
+++ b/publisher/views.py
@@ -0,0 +1,45 @@
+from django.shortcuts import render, redirect
+from authentication.decorators import admin_required
+from .models import Publisher
+from .forms import PublisherAddForm
+
+
+@admin_required
+def publisher_page(request):
+    if request.method == "POST":
+        form = PublisherAddForm(request.POST)
+        if form.is_valid():
+            form_object = form.save(commit=False)
+            try:
+                exist = Publisher.objects.get(nama=form_object.nama)
+                exist.is_active = True
+                exist.save()
+            except Publisher.DoesNotExist:
+                form_object.is_active = True
+                form_object.save()
+
+            return redirect("/publisher")
+    jurnal_list = get_active_jurnal()
+    konferensi_list = get_active_konferensi()
+    return render(request, 'publisherPage.html', context={'jurnal_list':jurnal_list, 'konferensi_list':konferensi_list})
+
+
+@admin_required
+def soft_delete_publisher(request):
+    nama = request.GET.get("nama")
+    if request.method == "GET":
+        try:
+            exist = Publisher.objects.get(nama=nama)
+            exist.is_active = False
+            exist.save()
+        except Publisher.DoesNotExist:
+            pass
+    return redirect("/publisher")
+
+
+def get_active_jurnal():
+    return Publisher.objects.filter(is_active=True, tipe="Jurnal")
+
+
+def get_active_konferensi():
+    return Publisher.objects.filter(is_active=True, tipe="Konferensi")
diff --git a/templates/baseAdmin.html b/templates/baseAdmin.html
index 8da8779..7984d9a 100644
--- a/templates/baseAdmin.html
+++ b/templates/baseAdmin.html
@@ -32,9 +32,12 @@
     <div class="navbar navbar-right d-flex flex-row" id="navbarSupportedContent">
       <ul class="navbar-nav d-flex flex-row">
         <li class="nav-item active px-4">
-          <a class="nav-link" href="/semester/add">Atur Semester</a>
+          <a class="nav-link" href="/semester/add">Kelola Semester</a>
         </li>
-        <li class="nav-item active px-4">
+        <li class="nav-item active">
+          <a class="nav-link" href="/publisher">Kelola Nama Jurnal/Konferensi</a>
+        </li>
+        <li class="nav-item px-4">
           <a class="nav-link" href="/pi/search_pi_admin">Publikasi Ilmiah</a>
         </li>
         <li class="nav-item">
diff --git a/templates/publisherPage.html b/templates/publisherPage.html
new file mode 100644
index 0000000..b12fd83
--- /dev/null
+++ b/templates/publisherPage.html
@@ -0,0 +1,59 @@
+{% extends 'baseAdmin.html' %}
+{% block content %}
+<div class="container mt-5 mb-5">
+  <div class="row justify-content-center">
+    <div class="col-md-8 col-lg-7">
+      <div class="card">
+        <div class="card-header">
+          <h5 class="card-title mb-0">Kelola Jurnal dan Konferensi</h5>
+        </div>
+        <div class="card-body">
+          <form method="post" enctype="multipart/form-data">
+            {% csrf_token %}
+
+            <h5>Tambah Nama Jurnal/Konferensi:</h5>
+            <div class="form-group row">
+                <div class="input-group">
+                  <div class="input-group-prepend">
+                    <label class="input-group-text" for="tipe">Tipe:</label>
+                  </div>
+                  <select class="custom-select form-control" id="tipe" name="tipe">
+                    <option>Jurnal</option>
+                    <option>Konferensi</option>
+                  </select>
+                </div>
+            </div>
+
+            <div class="form-group row">
+                <label for="nama" class="col-sm-3 col-form-label">Nama</label>
+                <div class="col-sm-9">
+                    <input type="text" class="form-control" id="nama" name="nama" required oninvalid="this.setCustomValidity('Please fill out this field')" oninput="this.setCustomValidity('')">
+                </div>
+            </div>
+
+            <div class="form-group row mt-3">
+              <div class="col-sm-9 ml-auto">
+                <button type="submit" class="btn btn-primary">Submit</button>
+              </div>
+            </div>
+            <hr>
+
+          </form>
+
+          <div class="mt-4">
+              <h5>Daftar Nama Jurnal:</h5>
+              {% for jurnal in jurnal_list %}
+                <p>{{ jurnal.nama }} - <a href="/publisher/soft_delete?nama={{ jurnal.nama }}">Delete</a></p>
+              {% endfor %}
+              <h5>Daftar Nama Konferensi:</h5>
+              {% for konferensi in konferensi_list %}
+                <p>{{ konferensi.nama }} - <a href="/publisher/soft_delete?nama={{ konferensi.nama }}">Delete</a></p>
+              {% endfor %}
+          </div>
+
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+{% endblock content %}
-- 
GitLab


From 652c6b6b624771004f6975b82cab3873bc848bb5 Mon Sep 17 00:00:00 2001
From: Bornyto Hamonangen <t-bornyto.hamonangan@virgoku.id>
Date: Mon, 5 Jun 2023 21:12:38 +0700
Subject: [PATCH 02/11] integrate publisher to pi/proceeding forms

---
 pi/views.py                                   | 13 +++---
 proceeding/views.py                           |  8 ++--
 templates/updateStatusPi.html                 | 24 +++++++----
 templates/updateStatusPiDosen.html            | 37 +++++++++-------
 templates/updateStatusProceeding.html         | 41 +++++++++++-------
 templates/updateStatusProceedingDosen.html    | 36 +++++++++-------
 templates/updateStatusToPublishedPi.html      | 43 +++++++++++--------
 templates/updateStatusToPublishedPiDosen.html | 43 +++++++++++--------
 .../updateStatusToPublishedProceeding.html    | 37 +++++++++-------
 ...pdateStatusToPublishedProceedingDosen.html | 37 +++++++++-------
 10 files changed, 190 insertions(+), 129 deletions(-)

diff --git a/pi/views.py b/pi/views.py
index 7f66f4a..c8425b2 100644
--- a/pi/views.py
+++ b/pi/views.py
@@ -23,6 +23,7 @@ from dotenv import load_dotenv
 load_dotenv('.env')
 import smtplib
 from semester.views import get_active_semester
+from publisher.views import get_active_jurnal
 
 publikasiIlmiahMahasiswa = 'search_pi_mahasiswa'
 homeDosenCreate = '/home/dosen/create'
@@ -154,6 +155,7 @@ def update_pi_dosen(request, id):
 
 def update_pi_status(request, pi, form_template, success_url):
     form = PiUpdateStatusForm()
+    jurnal_list = get_active_jurnal()
     if request.method == "POST":
         form = PiUpdateStatusForm(request.POST, request.FILES, instance=pi)
         if form.is_valid():
@@ -173,8 +175,8 @@ def update_pi_status(request, pi, form_template, success_url):
             form_object.save()
             return redirect(success_url)
         else:
-            return render(request, form_template, {'error': True, 'form': form, "pi": pi})
-    context = {'form': form, "pi": pi}
+            return render(request, form_template, {'error': True, 'form': form, "pi": pi, "jurnal_list": jurnal_list})
+    context = {'form': form, "pi": pi, "jurnal_list": jurnal_list}
     if dosen.objects.filter(user=request.user).exists():
         pi_total = Pi.objects.filter(dosen=request.user.dosen.nama_lengkap, status=9)
         proceeding_total = Proceeding.objects.filter(dosen=request.user.dosen.nama_lengkap, status=9)
@@ -201,7 +203,8 @@ def update_status_pi_dosen(request, id):
 
 @require_http_methods(["GET", "POST"])
 def update_status_to_published_pi(request, id, template_name, redirect_url):
-    pi = Pi.objects.get(id=id)  
+    pi = Pi.objects.get(id=id)
+    jurnal_list = get_active_jurnal()
     form = PiUpdateStatusToPublishedForm()
 
     if request.method == "POST":
@@ -216,10 +219,10 @@ def update_status_to_published_pi(request, id, template_name, redirect_url):
             return redirect(redirect_url)
 
         else:
-            return render(request, template_name, {'error': True, 'form': form, "pi": pi})  
+            return render(request, template_name, {'error': True, 'form': form, "pi": pi, "jurnal_list": jurnal_list})
 
     # GET request
-    context = {'form': form, "pi": pi}
+    context = {'form': form, "pi": pi, "jurnal_list": jurnal_list}
     if dosen.objects.filter(user=request.user).exists():
         pi_total = Pi.objects.filter(dosen=request.user.dosen.nama_lengkap, status=9)
         proceeding_total = Proceeding.objects.filter(dosen=request.user.dosen.nama_lengkap, status=9)
diff --git a/proceeding/views.py b/proceeding/views.py
index 0a93e02..2915e65 100644
--- a/proceeding/views.py
+++ b/proceeding/views.py
@@ -19,6 +19,7 @@ from dotenv import load_dotenv
 load_dotenv('.env')
 import smtplib
 from semester.views import get_active_semester
+from publisher.views import get_active_konferensi
 
 publikasiIlmiahMahasiswa = 'search_pi_mahasiswa'
 homeDosenCreate = '/home/dosen/create'
@@ -148,6 +149,7 @@ def update_proceeding_dosen(request, id):
 def update_proceeding_status(request, id, success_url, template_name):
     proceeding = Proceeding.objects.get(id=id)
     form = ProceedingUpdateStatusForm()
+    konferensi_list = get_active_konferensi()
 
     if request.method == "POST":
         form = ProceedingUpdateStatusForm(request.POST, request.FILES, instance=proceeding)
@@ -170,9 +172,9 @@ def update_proceeding_status(request, id, success_url, template_name):
             form_object.save()
             return redirect(success_url)
         else:
-            return render(request, template_name, {'error':True,'form':form, "proceeding":proceeding})
+            return render(request, template_name, {'error':True,'form':form, "proceeding":proceeding, 'konferensi_list': konferensi_list})
     
-    context = {'form':form, "proceeding":proceeding}
+    context = {'form':form, "proceeding":proceeding, 'konferensi_list': konferensi_list}
     return render(request, template_name, context)
 
 
@@ -207,7 +209,7 @@ def update_status_to_published_proceeding(request, id, template_name, success_ur
             return render(request, template_name, {'error': True, 'form': form, 'proceeding': proceeding})  
 
     # GET request
-    context = {'form': form, 'proceeding': proceeding}
+    context = {'form': form, 'proceeding': proceeding, 'konferensi_list': get_active_konferensi()}
     return render(request, template_name, context)
 
 @require_http_methods(["GET", "POST"])
diff --git a/templates/updateStatusPi.html b/templates/updateStatusPi.html
index a7b903a..f2cea1c 100644
--- a/templates/updateStatusPi.html
+++ b/templates/updateStatusPi.html
@@ -37,13 +37,14 @@
         </div>
         <div class="form-group">
           <label for="nama_jurnal">Nama Jurnal:</label>
-          <select class="custom-select form-control mb-2" id="nama_jurnal" name="nama_jurnal">
-            <option selected>Pilih salah satu...</option>
-            <option value="Jurnal B">Jurnal B</option>
-            <option value="Jurnal Sistem Informasi - Next Generation (JSI-NG)">Jurnal Sistem Informasi - Next Generation (JSI-NG)</option>
+          <select class="custom-select form-control mb-2" id="nama_jurnal_select" name="nama_jurnal_select">
+            <option selected value="">Pilih salah satu...</option>
+            {% for jurnal in jurnal_list %}
+              <option {% if pi.nama_jurnal == jurnal.nama %}selected{% endif %}>{{ jurnal.nama }}</option>
+            {% endfor %}
             <option value="Lainnya">Lainnya</option>
           </select>
-          <input type="text" class="form-control" id="nama_jurnal" name="nama_jurnal" value="{{ pi.nama_jurnal }}" disabled>
+          <input type="text" class="form-control" id="nama_jurnal" name="nama_jurnal" value="{{ pi.nama_jurnal }}">
         </div>
         <div class="form-group">
           <label for="deskripsi_jurnal">Deskripsi Jurnal:</label>
@@ -62,14 +63,19 @@
 </div>
 
 <script>
-   $("select[name='nama_jurnal']").change(function(){
+   $(window).on('load', function(){
+      $('input[name="nama_jurnal"]').hide();
+      $('input[name="nama_jurnal"]').val("{{ pi.nama_jurnal }}");
+   })
+   $("select[name='nama_jurnal_select']").change(function(){
     new_value = $(this).val();
     if (new_value !== "Lainnya") {
-      $('input[name="nama_jurnal"]').attr('disabled','disabled');
       $('input[name="nama_jurnal"]').val(new_value);
+      $('input[name="nama_jurnal"]').hide();
+
     } else {
-      $('input[name="nama_jurnal"]').removeAttr('disabled');
-      $('input[name="nama_jurnal"]').val("");
+      $('input[name="nama_jurnal"]').show();
+      $('input[name="nama_jurnal"]').val("{{ pi.nama_jurnal }}");
     }
   });
 </script>
diff --git a/templates/updateStatusPiDosen.html b/templates/updateStatusPiDosen.html
index 7b703ca..ef8db26 100644
--- a/templates/updateStatusPiDosen.html
+++ b/templates/updateStatusPiDosen.html
@@ -37,13 +37,14 @@
           </div>
         <div class="form-group">
           <label for="nama_jurnal">Nama Jurnal:</label>
-          <select class="custom-select form-control mb-2" id="nama_jurnal" name="nama_jurnal">
-            <option selected>Pilih salah satu...</option>
-            <option value="Jurnal B">Jurnal B</option>
-            <option value="Jurnal Sistem Informasi - Next Generation (JSI-NG)">Jurnal Sistem Informasi - Next Generation (JSI-NG)</option>
+          <select class="custom-select form-control mb-2" id="nama_jurnal_select" name="nama_jurnal_select">
+            <option selected value="">Pilih salah satu...</option>
+            {% for jurnal in jurnal_list %}
+              <option {% if pi.nama_jurnal == jurnal.nama %}selected{% endif %}>{{ jurnal.nama }}</option>
+            {% endfor %}
             <option value="Lainnya">Lainnya</option>
           </select>
-          <input type="text" class="form-control" id="nama_jurnal" name="nama_jurnal" value="{{ pi.nama_jurnal }}" disabled>
+          <input type="text" class="form-control" id="nama_jurnal" name="nama_jurnal" value="{{ pi.nama_jurnal }}">
         </div>
         <div class="form-group">
           <label for="deskripsi_jurnal">Deskripsi Jurnal:</label>
@@ -62,15 +63,21 @@
 </div>
 
 <script>
-  $("select[name='nama_jurnal']").change(function(){
-   new_value = $(this).val();
-   if (new_value !== "Lainnya") {
-     $('input[name="nama_jurnal"]').attr('disabled','disabled');
-     $('input[name="nama_jurnal"]').val(new_value);
-   } else {
-     $('input[name="nama_jurnal"]').removeAttr('disabled');
-     $('input[name="nama_jurnal"]').val("");
-   }
- });
+   $(window).on('load', function(){
+      $('input[name="nama_jurnal"]').hide();
+      $('input[name="nama_jurnal"]').val("{{ pi.nama_jurnal }}");
+   })
+   $("select[name='nama_jurnal_select']").change(function(){
+    new_value = $(this).val();
+    if (new_value !== "Lainnya") {
+      $('input[name="nama_jurnal"]').val(new_value);
+      $('input[name="nama_jurnal"]').hide();
+
+    } else {
+      $('input[name="nama_jurnal"]').show();
+      $('input[name="nama_jurnal"]').val("{{ pi.nama_jurnal }}");
+    }
+  });
 </script>
+
 {% endblock %}
diff --git a/templates/updateStatusProceeding.html b/templates/updateStatusProceeding.html
index 7ba5b17..5c620ef 100644
--- a/templates/updateStatusProceeding.html
+++ b/templates/updateStatusProceeding.html
@@ -5,7 +5,7 @@
   <div class="row mb-5">
     <div class="col-md-8 mx-auto mt-3 text-center">
       {% if proceeding.judul %}
-        <h3>Update Status - {{ pi.judul }}</h3>
+        <h3>Update Status - {{ proceeding.judul }}</h3>
       {% else %}
         <h3>Update Status Publikasi</h3>
       {% endif %}
@@ -37,12 +37,14 @@
           </div>
         <div class="form-group">
           <label for="nama_konferensi">Nama Konferensi:</label>
-          <select class="custom-select form-control mb-2" id="nama_konferensi" name="nama_konferensi">
-            <option selected value="Lainnya">Lainnya</option>
-            <option value="Konferensi B">Konferensi B</option>
-            <option value="Konferensi Sistem Informasi - Next Generation (JSI-NG)">Konferensi Sistem Informasi - Next Generation (JSI-NG)</option>
+          <select class="custom-select form-control mb-2" id="nama_konferensi_select" name="nama_konferensi_select">
+            <option selected value="">Pilih salah satu...</option>
+            {% for konferensi in konferensi_list %}
+              <option {% if proceeding.nama_konferensi == konferensi.nama %}selected{% endif %}>{{ konferensi.nama }}</option>
+            {% endfor %}
+            <option value="Lainnya">Lainnya</option>
           </select>
-          <input type="text" class="form-control" id="nama_konferensi" name="nama_konferensi" value="{{ pi.nama_konferensi }}">
+          <input type="text" class="form-control" id="nama_konferensi" name="nama_konferensi" value="{{ proceeding.nama_konferensi }}">
         </div>
         <div class="form-group">
           <label for="deskripsi_konferensi">Deskripsi Konferensi:</label>
@@ -60,15 +62,22 @@
 </div>
 
 <script>
-  $("select[name='nama_konferensi']").change(function(){
-   new_value = $(this).val();
-   if (new_value !== "Lainnya") {
-     $('input[name="nama_konferensi"]').attr('disabled','disabled');
-     $('input[name="nama_konferensi"]').val(new_value);
-   } else {
-     $('input[name="nama_konferensi"]').removeAttr('disabled');
-     $('input[name="nama_konferensi"]').val("");
-   }
- });
+   $(window).on('load', function(){
+      $('input[name="nama_konferensi"]').hide();
+      $('input[name="nama_konferensi"]').val("{{ proceeding.nama_konferensi }}");
+   })
+   $("select[name='nama_konferensi_select']").change(function(){
+    new_value = $(this).val();
+    if (new_value !== "Lainnya") {
+      $('input[name="nama_konferensi"]').val(new_value);
+      $('input[name="nama_konferensi"]').hide();
+
+    } else {
+      $('input[name="nama_konferensi"]').show();
+      $('input[name="nama_konferensi"]').val("{{ proceeding.nama_konferensi }}");
+    }
+  });
 </script>
+
+
 {% endblock %}
diff --git a/templates/updateStatusProceedingDosen.html b/templates/updateStatusProceedingDosen.html
index ed8b40d..8b4a62f 100644
--- a/templates/updateStatusProceedingDosen.html
+++ b/templates/updateStatusProceedingDosen.html
@@ -37,13 +37,14 @@
         </div>
         <div class="form-group">
           <label for="nama_konferensi">Nama Konferensi:</label>
-          <select class="custom-select form-control mb-2" id="nama_konferensi" name="nama_konferensi">
-            <option selected>Pilih salah satu...</option>
-            <option value="Konferensi B">Konferensi B</option>
-            <option value="Konferensi Sistem Informasi - Next Generation (JSI-NG)">Konferensi Sistem Informasi - Next Generation (JSI-NG)</option>
+          <select class="custom-select form-control mb-2" id="nama_konferensi_select" name="nama_konferensi_select">
+            <option selected value="">Pilih salah satu...</option>
+            {% for konferensi in konferensi_list %}
+              <option {% if proceeding.nama_konferensi == konferensi.nama %}selected{% endif %}>{{ konferensi.nama }}</option>
+            {% endfor %}
             <option value="Lainnya">Lainnya</option>
           </select>
-          <input type="text" class="form-control" id="nama_konferensi" name="nama_konferensi" value="{{ pi.nama_konferensi }}" disabled>
+          <input type="text" class="form-control" id="nama_konferensi" name="nama_konferensi" value="{{ proceeding.nama_konferensi }}">
         </div>
         <div class="form-group">
           <label for="deskripsi_konferensi">Deskripsi Konferensi:</label>
@@ -62,15 +63,20 @@
 </div>
 
 <script>
-  $("select[name='nama_konferensi']").change(function(){
-   new_value = $(this).val();
-   if (new_value !== "Lainnya") {
-     $('input[name="nama_konferensi"]').attr('disabled','disabled');
-     $('input[name="nama_konferensi"]').val(new_value);
-   } else {
-     $('input[name="nama_konferensi"]').removeAttr('disabled');
-     $('input[name="nama_konferensi"]').val("");
-   }
- });
+   $(window).on('load', function(){
+      $('input[name="nama_konferensi"]').hide();
+      $('input[name="nama_konferensi"]').val("{{ proceeding.nama_konferensi }}");
+   })
+   $("select[name='nama_konferensi_select']").change(function(){
+    new_value = $(this).val();
+    if (new_value !== "Lainnya") {
+      $('input[name="nama_konferensi"]').val(new_value);
+      $('input[name="nama_konferensi"]').hide();
+
+    } else {
+      $('input[name="nama_konferensi"]').show();
+      $('input[name="nama_konferensi"]').val("{{ proceeding.nama_konferensi }}");
+    }
+  });
 </script>
 {% endblock %}
diff --git a/templates/updateStatusToPublishedPi.html b/templates/updateStatusToPublishedPi.html
index a1e4a19..81ea593 100644
--- a/templates/updateStatusToPublishedPi.html
+++ b/templates/updateStatusToPublishedPi.html
@@ -31,13 +31,14 @@
         </div>
         <div class="form-group">
           <label for="nama_jurnal">Nama Jurnal:</label>
-          <select class="custom-select form-control mb-2" id="nama_jurnal" name="nama_jurnal">
-            <option selected>Pilih salah satu...</option>
-            <option value="Jurnal B">Jurnal B</option>
-            <option value="Jurnal Sistem Informasi - Next Generation (JSI-NG)">Jurnal Sistem Informasi - Next Generation (JSI-NG)</option>
+          <select class="custom-select form-control mb-2" id="nama_jurnal_select" name="nama_jurnal_select">
+            <option selected value="">Pilih salah satu...</option>
+            {% for jurnal in jurnal_list %}
+              <option {% if pi.nama_jurnal == jurnal.nama %}selected{% endif %}>{{ jurnal.nama }}</option>
+            {% endfor %}
             <option value="Lainnya">Lainnya</option>
           </select>
-          <input type="text" class="form-control" id="nama_jurnal" name="nama_jurnal" value="{{ pi.nama_jurnal }}" disabled>
+          <input type="text" class="form-control" id="nama_jurnal" name="nama_jurnal" value="{{ pi.nama_jurnal }}">
         </div>
         <div class="form-group">
           <label for="deskripsi_jurnal">Deskripsi Jurnal:</label>
@@ -60,17 +61,17 @@
         </div>
         <div class="form-group">
           <label for="doi_jurnal">DOI Jurnal:</label>
-          <input type="text" class="form-control" id="doi_jurnal" name="doi_jurnal" value="" required>
+          <input type="text" class="form-control" id="doi_jurnal" name="doi_jurnal" value="{{ pi.doi_jurnal }}" required>
           <small id="quarterHelp" class="form-text text-muted">Contoh: https://doi.org/10.35792/zot.32.5.2013.982</small>
         </div>
         <div class="form-group">
           <label for="issue_jurnal">Issue Jurnal:</label>
-          <input type="text" class="form-control" id="issue_jurnal" name="issue_jurnal" value="" required>
+          <input type="text" class="form-control" id="issue_jurnal" name="issue_jurnal" value="{{ pi.issue_jurnal }}" required>
           <small id="quarterHelp" class="form-text text-muted">Contoh: 2</small>
         </div>
         <div class="form-group">
           <label for="link_jurnal">Link Website Jurnal:</label>
-          <input type="text" class="form-control" id="link_jurnal" name="link_jurnal" value="" required>
+          <input type="text" class="form-control" id="link_jurnal" name="link_jurnal" value="{{ pi.link_jurnal }}" required>
           <small id="quarterHelp" class="form-text text-muted">Contoh: https://jurnalabc.com</small>
         </div>
         <div class="form-group">
@@ -85,15 +86,21 @@
 </div>
 
 <script>
-  $("select[name='nama_jurnal']").change(function(){
-   new_value = $(this).val();
-   if (new_value !== "Lainnya") {
-     $('input[name="nama_jurnal"]').attr('disabled','disabled');
-     $('input[name="nama_jurnal"]').val(new_value);
-   } else {
-     $('input[name="nama_jurnal"]').removeAttr('disabled');
-     $('input[name="nama_jurnal"]').val("");
-   }
- });
+   $(window).on('load', function(){
+      $('input[name="nama_jurnal"]').hide();
+      $('input[name="nama_jurnal"]').val("{{ pi.nama_jurnal }}");
+   })
+   $("select[name='nama_jurnal_select']").change(function(){
+    new_value = $(this).val();
+    if (new_value !== "Lainnya") {
+      $('input[name="nama_jurnal"]').val(new_value);
+      $('input[name="nama_jurnal"]').hide();
+
+    } else {
+      $('input[name="nama_jurnal"]').show();
+      $('input[name="nama_jurnal"]').val("{{ pi.nama_jurnal }}");
+    }
+  });
 </script>
+
 {% endblock %}
diff --git a/templates/updateStatusToPublishedPiDosen.html b/templates/updateStatusToPublishedPiDosen.html
index 5abdb28..0494661 100644
--- a/templates/updateStatusToPublishedPiDosen.html
+++ b/templates/updateStatusToPublishedPiDosen.html
@@ -31,13 +31,14 @@
         </div>
         <div class="form-group">
           <label for="nama_jurnal">Nama Jurnal:</label>
-          <select class="custom-select form-control mb-2" id="nama_jurnal" name="nama_jurnal">
-            <option selected>Pilih salah satu...</option>
-            <option value="Jurnal B">Jurnal B</option>
-            <option value="Jurnal Sistem Informasi - Next Generation (JSI-NG)">Jurnal Sistem Informasi - Next Generation (JSI-NG)</option>
+          <select class="custom-select form-control mb-2" id="nama_jurnal_select" name="nama_jurnal_select">
+            <option selected value="">Pilih salah satu...</option>
+            {% for jurnal in jurnal_list %}
+              <option {% if pi.nama_jurnal == jurnal.nama %}selected{% endif %}>{{ jurnal.nama }}</option>
+            {% endfor %}
             <option value="Lainnya">Lainnya</option>
           </select>
-          <input type="text" class="form-control" id="nama_jurnal" name="nama_jurnal" value="{{ pi.nama_jurnal }}" disabled>
+          <input type="text" class="form-control" id="nama_jurnal" name="nama_jurnal" value="{{ pi.nama_jurnal }}">
         </div>
         <div class="form-group">
           <label for="deskripsi_jurnal">Deskripsi Jurnal:</label>
@@ -56,17 +57,17 @@
         </div>
         <div class="form-group">
           <label for="doi_jurnal">DOI Jurnal:</label>
-          <input type="text" class="form-control" id="doi_jurnal" name="doi_jurnal" value="" required>
+          <input type="text" class="form-control" id="doi_jurnal" name="doi_jurnal" value="{{ pi.doi_jurnal }}" required>
           <small id="quarterHelp" class="form-text text-muted">Contoh: https://doi.org/10.35792/zot.32.5.2013.982</small>
         </div>
         <div class="form-group">
           <label for="issue_jurnal">Issue Jurnal:</label>
-          <input type="text" class="form-control" id="issue_jurnal" name="issue_jurnal" value="" required>
+          <input type="text" class="form-control" id="issue_jurnal" name="issue_jurnal" value="{{ pi.issue_jurnal }}" required>
           <small id="quarterHelp" class="form-text text-muted">Contoh: 2</small>
         </div>
         <div class="form-group">
           <label for="link_jurnal">Link Website Jurnal:</label>
-          <input type="text" class="form-control" id="link_jurnal" name="link_jurnal" value="" required>
+          <input type="text" class="form-control" id="link_jurnal" name="link_jurnal" value="{{ pi.link_jurnal }}" required>
           <small id="quarterHelp" class="form-text text-muted">Contoh: https://jurnalabc.com</small>
         </div>
         <div class="form-group">
@@ -85,15 +86,21 @@
 </div>
 
 <script>
-  $("select[name='nama_jurnal']").change(function(){
-   new_value = $(this).val();
-   if (new_value !== "Lainnya") {
-     $('input[name="nama_jurnal"]').attr('disabled','disabled');
-     $('input[name="nama_jurnal"]').val(new_value);
-   } else {
-     $('input[name="nama_jurnal"]').removeAttr('disabled');
-     $('input[name="nama_jurnal"]').val("");
-   }
- });
+   $(window).on('load', function(){
+      $('input[name="nama_jurnal"]').hide();
+      $('input[name="nama_jurnal"]').val("{{ pi.nama_jurnal }}");
+   })
+   $("select[name='nama_jurnal_select']").change(function(){
+    new_value = $(this).val();
+    if (new_value !== "Lainnya") {
+      $('input[name="nama_jurnal"]').val(new_value);
+      $('input[name="nama_jurnal"]').hide();
+
+    } else {
+      $('input[name="nama_jurnal"]').show();
+      $('input[name="nama_jurnal"]').val("{{ pi.nama_jurnal }}");
+    }
+  });
 </script>
+
 {% endblock %}
diff --git a/templates/updateStatusToPublishedProceeding.html b/templates/updateStatusToPublishedProceeding.html
index dcd7775..04a8f8e 100644
--- a/templates/updateStatusToPublishedProceeding.html
+++ b/templates/updateStatusToPublishedProceeding.html
@@ -31,13 +31,14 @@
         </div>
         <div class="form-group">
           <label for="nama_konferensi">Nama Konferensi:</label>
-          <select class="custom-select form-control mb-2" id="nama_konferensi" name="nama_konferensi">
-            <option selected>Pilih salah satu...</option>
-            <option value="Konferensi B">Konferensi B</option>
-            <option value="Konferensi Sistem Informasi - Next Generation (JSI-NG)">Konferensi Sistem Informasi - Next Generation (JSI-NG)</option>
+          <select class="custom-select form-control mb-2" id="nama_konferensi_select" name="nama_konferensi_select">
+            <option selected value="">Pilih salah satu...</option>
+            {% for konferensi in konferensi_list %}
+              <option {% if proceeding.nama_konferensi == konferensi.nama %}selected{% endif %}>{{ konferensi.nama }}</option>
+            {% endfor %}
             <option value="Lainnya">Lainnya</option>
           </select>
-          <input type="text" class="form-control" id="nama_konferensi" name="nama_konferensi" value="{{ pi.nama_konferensi }}" disabled>
+          <input type="text" class="form-control" id="nama_konferensi" name="nama_konferensi" value="{{ proceeding.nama_konferensi }}">
         </div>
         <div class="form-group">
           <label for="deskripsi_konferensi">Deskripsi Konferensi:</label>
@@ -60,15 +61,21 @@
 </div>
 
 <script>
-  $("select[name='nama_konferensi']").change(function(){
-   new_value = $(this).val();
-   if (new_value !== "Lainnya") {
-     $('input[name="nama_konferensi"]').attr('disabled','disabled');
-     $('input[name="nama_konferensi"]').val(new_value);
-   } else {
-     $('input[name="nama_konferensi"]').removeAttr('disabled');
-     $('input[name="nama_konferensi"]').val("");
-   }
- });
+   $(window).on('load', function(){
+      $('input[name="nama_konferensi"]').hide();
+      $('input[name="nama_konferensi"]').val("{{ proceeding.nama_konferensi }}");
+   })
+   $("select[name='nama_konferensi_select']").change(function(){
+    new_value = $(this).val();
+    if (new_value !== "Lainnya") {
+      $('input[name="nama_konferensi"]').val(new_value);
+      $('input[name="nama_konferensi"]').hide();
+
+    } else {
+      $('input[name="nama_konferensi"]').show();
+      $('input[name="nama_konferensi"]').val("{{ proceeding.nama_konferensi }}");
+    }
+  });
 </script>
+
 {% endblock %}
diff --git a/templates/updateStatusToPublishedProceedingDosen.html b/templates/updateStatusToPublishedProceedingDosen.html
index 4d491c6..63a07f1 100644
--- a/templates/updateStatusToPublishedProceedingDosen.html
+++ b/templates/updateStatusToPublishedProceedingDosen.html
@@ -31,13 +31,14 @@
         </div>
         <div class="form-group">
           <label for="nama_konferensi">Nama Konferensi:</label>
-          <select class="custom-select form-control mb-2" id="nama_konferensi" name="nama_konferensi">
-            <option selected>Pilih salah satu...</option>
-            <option value="Konferensi B">Konferensi B</option>
-            <option value="Konferensi Sistem Informasi - Next Generation (JSI-NG)">Konferensi Sistem Informasi - Next Generation (JSI-NG)</option>
+          <select class="custom-select form-control mb-2" id="nama_konferensi_select" name="nama_konferensi_select">
+            <option selected value="">Pilih salah satu...</option>
+            {% for konferensi in konferensi_list %}
+              <option {% if proceeding.nama_konferensi == konferensi.nama %}selected{% endif %}>{{ konferensi.nama }}</option>
+            {% endfor %}
             <option value="Lainnya">Lainnya</option>
           </select>
-          <input type="text" class="form-control" id="nama_konferensi" name="nama_konferensi" value="{{ pi.nama_konferensi }}" disabled>
+          <input type="text" class="form-control" id="nama_konferensi" name="nama_konferensi" value="{{ proceeding.nama_konferensi }}">
         </div>
         <div class="form-group">
           <label for="deskripsi_konferensi">Deskripsi Konferensi:</label>
@@ -60,15 +61,21 @@
 </div>
 
 <script>
-  $("select[name='nama_konferensi']").change(function(){
-   new_value = $(this).val();
-   if (new_value !== "Lainnya") {
-     $('input[name="nama_konferensi"]').attr('disabled','disabled');
-     $('input[name="nama_konferensi"]').val(new_value);
-   } else {
-     $('input[name="nama_konferensi"]').removeAttr('disabled');
-     $('input[name="nama_konferensi"]').val("");
-   }
- });
+   $(window).on('load', function(){
+      $('input[name="nama_konferensi"]').hide();
+      $('input[name="nama_konferensi"]').val("{{ proceeding.nama_konferensi }}");
+   })
+   $("select[name='nama_konferensi_select']").change(function(){
+    new_value = $(this).val();
+    if (new_value !== "Lainnya") {
+      $('input[name="nama_konferensi"]').val(new_value);
+      $('input[name="nama_konferensi"]').hide();
+
+    } else {
+      $('input[name="nama_konferensi"]').show();
+      $('input[name="nama_konferensi"]').val("{{ proceeding.nama_konferensi }}");
+    }
+  });
 </script>
+
 {% endblock %}
-- 
GitLab


From 436a91ef6f691e7dcd0d6852500a5b18ec0e90b9 Mon Sep 17 00:00:00 2001
From: Bornyto Hamonangen <t-bornyto.hamonangan@virgoku.id>
Date: Mon, 5 Jun 2023 21:29:07 +0700
Subject: [PATCH 03/11] refactor semester to align with publisher view/template

---
 semester/tests.py                                |  4 ++--
 semester/urls.py                                 |  3 +--
 semester/views.py                                | 12 ++++--------
 templates/baseAdmin.html                         |  2 +-
 .../{addSemester.html => semesterPage.html}      | 16 +++++++---------
 5 files changed, 15 insertions(+), 22 deletions(-)
 rename templates/{addSemester.html => semesterPage.html} (81%)

diff --git a/semester/tests.py b/semester/tests.py
index 2691cd0..d6bd82f 100644
--- a/semester/tests.py
+++ b/semester/tests.py
@@ -11,8 +11,8 @@ from .views import get_active_semester_choices
 # Create your tests here.
 class AddSemesterTest(TestCase):
     def setUp(self) -> None:
-        self.url = reverse('add_semester')
-        self.template_name = 'addSemester.html'
+        self.url = reverse('semester_page')
+        self.template_name = 'semesterPage.html'
         self.form_class = SemesterAddForm
         self.admin = User.objects.create_superuser(
             username="admin",
diff --git a/semester/urls.py b/semester/urls.py
index db1bb0b..2252341 100644
--- a/semester/urls.py
+++ b/semester/urls.py
@@ -5,8 +5,7 @@ from django.conf.urls import url
 from django.conf.urls.static import static
 
 urlpatterns = [
-    path('add', views.add_semester, name='add_semester'),
-    path('soft_delete_form', views.soft_delete_semester_form, name='soft_delete_semester_form'),
+    path('', views.semester_page, name='semester_page'),
     path('soft_delete', views.soft_delete_semester, name='soft_delete_semester'),
 ]
 
diff --git a/semester/views.py b/semester/views.py
index 8797df1..a256ef7 100644
--- a/semester/views.py
+++ b/semester/views.py
@@ -6,7 +6,7 @@ from .forms import SemesterAddForm
 
 
 @admin_required
-def add_semester(request):
+def semester_page(request):
     if request.method == "POST":
         form = SemesterAddForm(request.POST)
         if form.is_valid():
@@ -22,13 +22,9 @@ def add_semester(request):
                 form_object.is_active = True
                 form_object.save()
 
-            return render(request, 'addSemester.html', context={'success': True})
-    return render(request, 'addSemester.html')
-
-@admin_required
-def soft_delete_semester_form(request):
+            return redirect("/semester")
     semester_list = get_active_semester()
-    return render(request, 'softDeleteSemester.html', context={'semester_list': semester_list})
+    return render(request, 'semesterPage.html', context={'semester_list': semester_list})
 
 @admin_required
 def soft_delete_semester(request):
@@ -40,7 +36,7 @@ def soft_delete_semester(request):
             exist.save()
         except Semester.DoesNotExist:
             pass
-    return redirect("/semester/soft_delete_form")
+    return redirect("/semester")
 
 
 def get_active_semester():
diff --git a/templates/baseAdmin.html b/templates/baseAdmin.html
index 7984d9a..1f0e601 100644
--- a/templates/baseAdmin.html
+++ b/templates/baseAdmin.html
@@ -32,7 +32,7 @@
     <div class="navbar navbar-right d-flex flex-row" id="navbarSupportedContent">
       <ul class="navbar-nav d-flex flex-row">
         <li class="nav-item active px-4">
-          <a class="nav-link" href="/semester/add">Kelola Semester</a>
+          <a class="nav-link" href="/semester">Kelola Semester</a>
         </li>
         <li class="nav-item active">
           <a class="nav-link" href="/publisher">Kelola Nama Jurnal/Konferensi</a>
diff --git a/templates/addSemester.html b/templates/semesterPage.html
similarity index 81%
rename from templates/addSemester.html
rename to templates/semesterPage.html
index 170e52f..7206519 100644
--- a/templates/addSemester.html
+++ b/templates/semesterPage.html
@@ -10,14 +10,6 @@
         <div class="card-body">
           <form method="post" enctype="multipart/form-data">
             {% csrf_token %}
-
-            <div class="form-group row">
-              <div class="col-sm-12 text-right">
-                <p class="mb-0">Jika ingin hapus semester</p>
-                <a href="{% url 'soft_delete_semester_form' %}" class="btn btn-primary">klik disini &rarr;</a>
-              </div>
-            </div>
-
             <div class="form-group row">
                 <div class="input-group">
                   <div class="input-group-prepend">
@@ -41,12 +33,18 @@
             <div class="form-group row mt-3">
               <div class="col-sm-9 ml-auto">
                 <button type="submit" class="btn btn-primary">Submit</button>
-                <a href="{% url 'add_semester' %}" class="btn btn-secondary">Back</a>
               </div>
             </div>
             <hr>
 
           </form>
+
+          <div class="mt-4">
+              <h5>Daftar Semester:</h5>
+              {% for semester in semester_list %}
+                <p>{{ semester.semester }} - <a href="/semester/soft_delete?semester={{ semester.semester }}">Delete</a></p>
+              {% endfor %}
+          </div>
         </div>
       </div>
     </div>
-- 
GitLab


From 44dfc101478d21dd1fb4e9d8c0f77588e67329ae Mon Sep 17 00:00:00 2001
From: Bornyto Hamonangen <t-bornyto.hamonangan@virgoku.id>
Date: Mon, 5 Jun 2023 21:33:38 +0700
Subject: [PATCH 04/11] add publisher test

---
 publisher/tests.py | 89 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 89 insertions(+)

diff --git a/publisher/tests.py b/publisher/tests.py
index 7ce503c..d8246eb 100644
--- a/publisher/tests.py
+++ b/publisher/tests.py
@@ -1,3 +1,92 @@
 from django.test import TestCase
+from django.contrib.auth.models import User
+from django.urls import reverse
+from http import HTTPStatus
+from django.http.request import HttpRequest
+from .forms import PublisherAddForm
+from .models import Publisher
+
 
 # Create your tests here.
+class AddPublisherTest(TestCase):
+    def setUp(self) -> None:
+        self.url = reverse('publisher_page')
+        self.template_name = 'publisherPage.html'
+        self.form_class = PublisherAddForm
+        self.admin = User.objects.create_superuser(
+            username="admin",
+            email="admin@email.com",
+            password="password99",
+        )
+        self.admin.save()
+
+        self.nama = "ICACSIS"
+        self.tipe = "Konferensi"
+
+    def test_add_publisher_page(self):
+        self.client.login(username="admin", password="password99")
+        response = self.client.get(self.url)
+        self.assertEqual(response.status_code, HTTPStatus.OK)
+        self.assertTemplateUsed(response, self.template_name)
+
+    def test_add_publisher_post(self):
+        self.client.login(username="admin", password="password99")
+        publisher_request = HttpRequest()
+        publisher_data = {
+            'nama': self.nama,
+            'tipe': self.tipe
+        }
+        response = self.client.post(self.url, data=publisher_data)
+        self.assertEqual(response.status_code, HTTPStatus.OK)
+
+        publisher_request.POST = publisher_data
+        form = self.form_class(publisher_request.POST)
+        self.assertTrue(form.is_valid())
+        publisher_object = form.save(commit=False)
+        self.assertIsInstance(publisher_object, Publisher)
+
+    def test_add_publisher_post_not_valid(self):
+        self.client.login(username="admin", password="password99")
+        publisher_request = HttpRequest()
+        publisher_data = {
+            'nama': "jurnal",
+            'term': 123,
+        }
+
+        publisher_request.POST = publisher_data
+        form = self.form_class(publisher_request.POST)
+        self.assertFalse(form.is_valid())
+        self.assertEqual(Publisher.objects.count(), 0)
+
+
+class SoftDeletePublisherTest(TestCase):
+    def setUp(self) -> None:
+        self.admin = User.objects.create_superuser(
+            username="admin",
+            email="admin@email.com",
+            password="password99",
+        )
+        self.admin.save()
+
+        self.publisher = Publisher.objects.create(
+            nama="Jurnal Risa",
+            tipe="Jurnal",
+        )
+        self.publisher.save()
+
+        self.url = "/publisher/soft_delete?publisher=" + self.publisher.nama
+        self.template_name = 'softDeletePublisher.html'
+
+    def test_soft_delete_publisher(self):
+        self.client.login(username="admin", password="password99")
+        response = self.client.get(self.url)
+        self.assertEqual(response.status_code, 302)
+
+        current_publisher_state = Publisher.objects.get(publisher=self.publisher.nama)
+        self.assertFalse(current_publisher_state.is_active)
+
+    def test_soft_delete_publisher_not_found(self):
+        self.client.login(username="admin", password="password99")
+        response = self.client.get("/publisher/soft_delete?publisher=not-exist")
+        self.assertEqual(response.status_code, 302)
+
-- 
GitLab


From f81199651287699a6247271c92e1333fac31e720 Mon Sep 17 00:00:00 2001
From: Bornyto Hamonangen <t-bornyto.hamonangan@virgoku.id>
Date: Mon, 5 Jun 2023 21:55:36 +0700
Subject: [PATCH 05/11] fix publisher failed test

---
 publisher/tests.py | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

diff --git a/publisher/tests.py b/publisher/tests.py
index d8246eb..b878ad5 100644
--- a/publisher/tests.py
+++ b/publisher/tests.py
@@ -31,19 +31,15 @@ class AddPublisherTest(TestCase):
 
     def test_add_publisher_post(self):
         self.client.login(username="admin", password="password99")
-        publisher_request = HttpRequest()
         publisher_data = {
             'nama': self.nama,
             'tipe': self.tipe
         }
         response = self.client.post(self.url, data=publisher_data)
-        self.assertEqual(response.status_code, HTTPStatus.OK)
+        self.assertEqual(response.status_code, 302)
 
-        publisher_request.POST = publisher_data
-        form = self.form_class(publisher_request.POST)
-        self.assertTrue(form.is_valid())
-        publisher_object = form.save(commit=False)
-        self.assertIsInstance(publisher_object, Publisher)
+        publisher_object = Publisher.objects.get(nama=self.nama, tipe=self.tipe)
+        self.assertTrue(publisher_object.is_active)
 
     def test_add_publisher_post_not_valid(self):
         self.client.login(username="admin", password="password99")
@@ -74,7 +70,7 @@ class SoftDeletePublisherTest(TestCase):
         )
         self.publisher.save()
 
-        self.url = "/publisher/soft_delete?publisher=" + self.publisher.nama
+        self.url = "/publisher/soft_delete?nama=" + self.publisher.nama
         self.template_name = 'softDeletePublisher.html'
 
     def test_soft_delete_publisher(self):
@@ -82,7 +78,7 @@ class SoftDeletePublisherTest(TestCase):
         response = self.client.get(self.url)
         self.assertEqual(response.status_code, 302)
 
-        current_publisher_state = Publisher.objects.get(publisher=self.publisher.nama)
+        current_publisher_state = Publisher.objects.get(nama=self.publisher.nama)
         self.assertFalse(current_publisher_state.is_active)
 
     def test_soft_delete_publisher_not_found(self):
-- 
GitLab


From e2fdcae8dfad3de4a87211da1bfb21071f824779 Mon Sep 17 00:00:00 2001
From: Bornyto Hamonangen <t-bornyto.hamonangan@virgoku.id>
Date: Mon, 5 Jun 2023 21:55:53 +0700
Subject: [PATCH 06/11] make semester tests align with publisher

---
 semester/tests.py | 37 +++----------------------------------
 1 file changed, 3 insertions(+), 34 deletions(-)

diff --git a/semester/tests.py b/semester/tests.py
index d6bd82f..e84fc1b 100644
--- a/semester/tests.py
+++ b/semester/tests.py
@@ -32,19 +32,15 @@ class AddSemesterTest(TestCase):
 
     def test_add_semester_post(self):
         self.client.login(username="admin", password="password99")
-        semester_request = HttpRequest()
         semester_data = {
             'tahun': self.tahun,
             'term': self.term
         }
         response = self.client.post(self.url, data=semester_data)
-        self.assertEqual(response.status_code, HTTPStatus.OK)
+        self.assertEqual(response.status_code, 302)
 
-        semester_request.POST = semester_data
-        form = self.form_class(semester_request.POST)
-        self.assertTrue(form.is_valid())
-        semester_object = form.save(commit=False)
-        self.assertIsInstance(semester_object, Semester)
+        semester_object = Semester.objects.get(tahun=self.tahun, term=self.term)
+        self.assertTrue(semester_object.is_active)
 
     def test_add_semester_post_not_valid(self):
         self.client.login(username="admin", password="password99")
@@ -60,33 +56,6 @@ class AddSemesterTest(TestCase):
         self.assertEqual(Semester.objects.count(), 0)
 
 
-class SoftDeleteSemesterFormTest(TestCase):
-    def setUp(self) -> None:
-        self.url = reverse('soft_delete_semester_form')
-        self.template_name = 'softDeleteSemester.html'
-        self.admin = User.objects.create_superuser(
-            username="admin",
-            email="admin@email.com",
-            password="password99",
-        )
-        self.admin.save()
-
-        self.semester = Semester.objects.create(
-            semester="2022-23/Genap",
-            tahun=2022,
-            term="Genap",
-            is_active=True
-        )
-        self.semester.save()
-
-    def test_soft_delete_semester_page(self):
-        self.client.login(username="admin", password="password99")
-        response = self.client.get(self.url)
-        self.assertEqual(response.status_code, HTTPStatus.OK)
-        self.assertTemplateUsed(response, self.template_name)
-        self.assertContains(response, self.semester.semester)
-
-
 class SoftDeleteSemesterTest(TestCase):
     def setUp(self) -> None:
         self.admin = User.objects.create_superuser(
-- 
GitLab


From 90d89fa4409bc23efa0eaec991fd2339714b76cb Mon Sep 17 00:00:00 2001
From: Bornyto Hamonangen <t-bornyto.hamonangan@virgoku.id>
Date: Mon, 5 Jun 2023 22:18:23 +0700
Subject: [PATCH 07/11] fix bug konferensi list not showing

---
 proceeding/views.py | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/proceeding/views.py b/proceeding/views.py
index 2915e65..da08d7d 100644
--- a/proceeding/views.py
+++ b/proceeding/views.py
@@ -191,7 +191,8 @@ def update_status_proceeding_dosen(request, id):
 
 
 def update_status_to_published_proceeding(request, id, template_name, success_url):
-    proceeding = Proceeding.objects.get(id=id)  
+    proceeding = Proceeding.objects.get(id=id)
+    konferensi_list = get_active_konferensi()
     form = ProceedingUpdateStatusToPublishedForm()
 
     if request.method == "POST":
@@ -206,10 +207,10 @@ def update_status_to_published_proceeding(request, id, template_name, success_ur
             return redirect(success_url)
 
         else:
-            return render(request, template_name, {'error': True, 'form': form, 'proceeding': proceeding})  
+            return render(request, template_name, {'error': True, 'form': form, 'proceeding': proceeding, 'konferensi_list': konferensi_list})
 
     # GET request
-    context = {'form': form, 'proceeding': proceeding, 'konferensi_list': get_active_konferensi()}
+    context = {'form': form, 'proceeding': proceeding, 'konferensi_list': konferensi_list}
     return render(request, template_name, context)
 
 @require_http_methods(["GET", "POST"])
-- 
GitLab


From 75fe8e75ca6f520ca0c57453c608a02500a2dbb8 Mon Sep 17 00:00:00 2001
From: Bornyto Hamonangen <t-bornyto.hamonangan@virgoku.id>
Date: Mon, 5 Jun 2023 22:35:33 +0700
Subject: [PATCH 08/11] fix templates

---
 semester/tests.py                             |  1 -
 templates/detailPiAdmin.html                  |  1 +
 templates/detailProceedingAdmin.html          |  1 +
 templates/softDeleteSemester.html             | 29 -------------------
 templates/updateStatusPi.html                 |  3 +-
 templates/updateStatusPiDosen.html            |  3 +-
 templates/updateStatusProceeding.html         |  2 +-
 templates/updateStatusProceedingDosen.html    |  3 +-
 templates/updateStatusToPublishedPi.html      |  9 +++---
 templates/updateStatusToPublishedPiDosen.html |  5 ++--
 .../updateStatusToPublishedProceeding.html    |  5 ++--
 ...pdateStatusToPublishedProceedingDosen.html |  3 +-
 12 files changed, 15 insertions(+), 50 deletions(-)
 delete mode 100644 templates/softDeleteSemester.html

diff --git a/semester/tests.py b/semester/tests.py
index e84fc1b..1566877 100644
--- a/semester/tests.py
+++ b/semester/tests.py
@@ -74,7 +74,6 @@ class SoftDeleteSemesterTest(TestCase):
         self.semester.save()
 
         self.url = "/semester/soft_delete?semester=" + self.semester.semester
-        self.template_name = 'softDeleteSemester.html'
 
     def test_soft_delete_semester(self):
         self.client.login(username="admin", password="password99")
diff --git a/templates/detailPiAdmin.html b/templates/detailPiAdmin.html
index 65a0e25..15eec46 100644
--- a/templates/detailPiAdmin.html
+++ b/templates/detailPiAdmin.html
@@ -37,6 +37,7 @@
                         <p class="card-text">PDF Publikasi: <a href="/pi/viewpdf/{{ pi.pdf }}">{{ pi.pdf }}</a></p>
                         <p class="card-text">Created at: {{ pi.created_at }}</p>
                         <p class="card-text">Modified at: {{ pi.modified_at }}</p>
+                        <a href="{{request.META.HTTP_REFERER}}" class="btn btn-secondary">Back</a>
                     </div>
                 </div>
             </div>
diff --git a/templates/detailProceedingAdmin.html b/templates/detailProceedingAdmin.html
index ea9a399..86120ff 100644
--- a/templates/detailProceedingAdmin.html
+++ b/templates/detailProceedingAdmin.html
@@ -32,6 +32,7 @@
                         <p class="card-text">PDF Publikasi: <a href="/proceeding/viewpdf/{{ proceeding.pdf }}">{{ proceeding.pdf }}</a></p>
                         <p class="card-text">Created at: {{ proceeding.created_at }}</p>
                         <p class="card-text">Modified at: {{ proceeding.modified_at }}</p>
+                        <a href="{{request.META.HTTP_REFERER}}" class="btn btn-secondary">Back</a>
                     </div>
                 </div>
             </div>
diff --git a/templates/softDeleteSemester.html b/templates/softDeleteSemester.html
deleted file mode 100644
index 54d2264..0000000
--- a/templates/softDeleteSemester.html
+++ /dev/null
@@ -1,29 +0,0 @@
-{% extends 'baseAdmin.html' %}
-{% block content %}
-<div class="container mt-5 mb-5">
-  <div class="row justify-content-center">
-    <div class="col-md-8 col-lg-7">
-      <div class="card">
-        <div class="card-header">
-          <h5 class="card-title mb-0">Hapus Semester</h5>
-        </div>
-
-
-        <div class="card-body">
-
-            <div class="form-group row">
-              <div class="col-sm-12 text-right">
-                <p class="mb-0">Jika ingin tambah semester</p>
-                <a href="{% url 'add_semester' %}" class="btn btn-primary">klik disini &rarr;</a>
-              </div>
-            </div>
-
-            {% for semester in semester_list %}
-                <p>{{ semester.semester }} - <a href="/semester/soft_delete?semester={{ semester.semester }}">Delete</a></p>
-            {% endfor %}
-        </div>
-      </div>
-    </div>
-  </div>
-</div>
-{% endblock content %}
diff --git a/templates/updateStatusPi.html b/templates/updateStatusPi.html
index f2cea1c..7009a56 100644
--- a/templates/updateStatusPi.html
+++ b/templates/updateStatusPi.html
@@ -48,8 +48,7 @@
         </div>
         <div class="form-group">
           <label for="deskripsi_jurnal">Deskripsi Jurnal:</label>
-          <textarea class="form-control" id="deskripsi_jurnal" name="deskripsi_jurnal">{{ pi.deskripsi_jurnal }}
-          </textarea>
+          <textarea class="form-control" id="deskripsi_jurnal" name="deskripsi_jurnal">{{ pi.deskripsi_jurnal }}</textarea>
         </div>
         <div class="form-group">
           <label for="latest_bukti">Bukti Perubahan Status (jpeg/png):</label>
diff --git a/templates/updateStatusPiDosen.html b/templates/updateStatusPiDosen.html
index ef8db26..c88ab5a 100644
--- a/templates/updateStatusPiDosen.html
+++ b/templates/updateStatusPiDosen.html
@@ -48,8 +48,7 @@
         </div>
         <div class="form-group">
           <label for="deskripsi_jurnal">Deskripsi Jurnal:</label>
-          <textarea class="form-control" id="deskripsi_jurnal" name="deskripsi_jurnal">{{ pi.deskripsi_jurnal }}
-          </textarea>
+          <textarea class="form-control" id="deskripsi_jurnal" name="deskripsi_jurnal">{{ pi.deskripsi_jurnal }}</textarea>
         </div>
         <div class="form-group">
           <label for="latest_bukti">Bukti Perubahan Status (jpeg/png):</label>
diff --git a/templates/updateStatusProceeding.html b/templates/updateStatusProceeding.html
index 5c620ef..e698755 100644
--- a/templates/updateStatusProceeding.html
+++ b/templates/updateStatusProceeding.html
@@ -48,7 +48,7 @@
         </div>
         <div class="form-group">
           <label for="deskripsi_konferensi">Deskripsi Konferensi:</label>
-          <input type="text" class="form-control" id="deskripsi_konferensi" name="deskripsi_konferensi" value="{{ proceeding.deskripsi_konferensi }}">
+          <textarea class="form-control" id="deskripsi_konferensi" name="deskripsi_konferensi">{{ proceeding.deskripsi_konferensi }}</textarea>
         </div>
         <div class="form-group">
           <label for="latest_bukti">Bukti Perubahan Status (jpeg/png):</label>
diff --git a/templates/updateStatusProceedingDosen.html b/templates/updateStatusProceedingDosen.html
index 8b4a62f..3da2c6d 100644
--- a/templates/updateStatusProceedingDosen.html
+++ b/templates/updateStatusProceedingDosen.html
@@ -48,8 +48,7 @@
         </div>
         <div class="form-group">
           <label for="deskripsi_konferensi">Deskripsi Konferensi:</label>
-          <textarea class="form-control" id="deskripsi_konferensi" name="deskripsi_konferensi">{{ proceeding.deskripsi_konferensi }}
-          </textarea> 
+          <textarea class="form-control" id="deskripsi_konferensi" name="deskripsi_konferensi">{{ proceeding.deskripsi_konferensi }}</textarea>
         </div>
         <div class="form-group">
           <label for="latest_bukti">Bukti Perubahan Status (jpeg/png):</label>
diff --git a/templates/updateStatusToPublishedPi.html b/templates/updateStatusToPublishedPi.html
index 81ea593..6956798 100644
--- a/templates/updateStatusToPublishedPi.html
+++ b/templates/updateStatusToPublishedPi.html
@@ -42,17 +42,16 @@
         </div>
         <div class="form-group">
           <label for="deskripsi_jurnal">Deskripsi Jurnal:</label>
-          <textarea class="form-control" id="deskripsi_jurnal" name="deskripsi_jurnal">{{ pi.deskripsi_jurnal }}
-          </textarea>
+          <textarea class="form-control" id="deskripsi_jurnal" name="deskripsi_jurnal">{{ pi.deskripsi_jurnal }}</textarea>
         </div>
         <div class="form-group">
           <label for="volume_jurnal">Volume Jurnal:</label>
-          <input type="text" class="form-control" id="volume_jurnal" name="volume_jurnal" value="" required>
+          <input type="text" class="form-control" id="volume_jurnal" name="volume_jurnal" value="{{ pi.volume_jurnal }}" required>
           <small id="volumeHelp" class="form-text text-muted">Contoh: 1, 2, 3, 4</small>
         </div>
         <div class="form-group">
           <label for="quarter_jurnal">Quarter Jurnal:</label>
-          <input type="text" class="form-control" id="quarter_jurnal" name="quarter_jurnal" value="" required>
+          <input type="text" class="form-control" id="quarter_jurnal" name="quarter_jurnal" value="{{ pi.quarter_jurnal }}" required>
           <small id="quarterHelp" class="form-text text-muted">Contoh: Q1, Q2, Q3, Q4</small>
         </div>
         <div class="form-group">
@@ -79,7 +78,7 @@
           <input type="file" class="form-control-file" id="latest_bukti" name="latest_bukti" accept="image/png, image/jpeg, image/jpg">
         </div>
         <button type="submit" class="btn btn-primary">Submit</button>
-        <a href="{% url 'publikasi ilmiah' %}" class="btn btn-secondary">Back</a>
+        <a href="{% url 'search_pi_mahasiswa' %}" class="btn btn-secondary">Back</a>
       </form>
     </div>
   </div>
diff --git a/templates/updateStatusToPublishedPiDosen.html b/templates/updateStatusToPublishedPiDosen.html
index 0494661..d4d6a34 100644
--- a/templates/updateStatusToPublishedPiDosen.html
+++ b/templates/updateStatusToPublishedPiDosen.html
@@ -42,8 +42,7 @@
         </div>
         <div class="form-group">
           <label for="deskripsi_jurnal">Deskripsi Jurnal:</label>
-          <textarea class="form-control" id="deskripsi_jurnal" name="deskripsi_jurnal">{{ pi.deskripsi_jurnal }}
-          </textarea>
+          <textarea class="form-control" id="deskripsi_jurnal" name="deskripsi_jurnal">{{ pi.deskripsi_jurnal }}</textarea>
         </div>
         <div class="form-group">
           <label for="volume_jurnal">Volume Jurnal:</label>
@@ -79,7 +78,7 @@
           <input type="file" class="form-control-file" id="latest_bukti" name="latest_bukti" accept="image/png, image/jpeg, image/jpg">
         </div>
         <button type="submit" class="btn btn-primary">Submit</button>
-        <a href="{% url 'publikasi ilmiah' %}" class="btn btn-secondary">Back</a>
+        <a href="{% url 'search_pi_dosen' %}" class="btn btn-secondary">Back</a>
       </form>
     </div>
   </div>
diff --git a/templates/updateStatusToPublishedProceeding.html b/templates/updateStatusToPublishedProceeding.html
index 04a8f8e..4aa629c 100644
--- a/templates/updateStatusToPublishedProceeding.html
+++ b/templates/updateStatusToPublishedProceeding.html
@@ -42,8 +42,7 @@
         </div>
         <div class="form-group">
           <label for="deskripsi_konferensi">Deskripsi Konferensi:</label>
-          <textarea class="form-control" id="deskripsi_konferensi" name="deskripsi_konferensi">{{ proceeding.deskripsi_konferensi }}
-          </textarea> 
+          <textarea class="form-control" id="deskripsi_konferensi" name="deskripsi_konferensi">{{ proceeding.deskripsi_konferensi }}</textarea>
         </div>
         <div class="form-group">
           <label for="tanggal_konferensi">Tanggal Konferensi:</label>
@@ -54,7 +53,7 @@
           <input type="file" class="form-control-file" id="latest_bukti" name="latest_bukti" accept="image/png, image/jpeg, image/jpg">
         </div>
         <button type="submit" class="btn btn-primary">Submit</button>
-        <a href="{% url 'publikasi ilmiah' %}" class="btn btn-secondary">Back</a>
+        <a href="{% url 'search_pi_mahasiswa' %}" class="btn btn-secondary">Back</a>
       </form>
     </div>
   </div>
diff --git a/templates/updateStatusToPublishedProceedingDosen.html b/templates/updateStatusToPublishedProceedingDosen.html
index 63a07f1..7b658bf 100644
--- a/templates/updateStatusToPublishedProceedingDosen.html
+++ b/templates/updateStatusToPublishedProceedingDosen.html
@@ -42,8 +42,7 @@
         </div>
         <div class="form-group">
           <label for="deskripsi_konferensi">Deskripsi Konferensi:</label>
-          <textarea class="form-control" id="deskripsi_konferensi" name="deskripsi_konferensi">{{ proceeding.deskripsi_konferensi }}
-          </textarea> 
+          <textarea class="form-control" id="deskripsi_konferensi" name="deskripsi_konferensi">{{ proceeding.deskripsi_konferensi }}</textarea>
         </div>
         <div class="form-group">
           <label for="tanggal_konferensi">Tanggal Konferensi:</label>
-- 
GitLab


From dbb6e8da9a1aa5fff41480c0e65a58cb6748623a Mon Sep 17 00:00:00 2001
From: Bornyto Hamonangen <t-bornyto.hamonangan@virgoku.id>
Date: Mon, 5 Jun 2023 22:41:10 +0700
Subject: [PATCH 09/11] add back button in detail sm

---
 templates/detailSmAdmin.html | 1 +
 1 file changed, 1 insertion(+)

diff --git a/templates/detailSmAdmin.html b/templates/detailSmAdmin.html
index 8d6aaf9..fa68318 100644
--- a/templates/detailSmAdmin.html
+++ b/templates/detailSmAdmin.html
@@ -17,6 +17,7 @@
                         <p class="card-text">PDF Studi: <a href="/sm/viewpdf/{{ sm.pdf }}">{{ sm.pdf }}</a></p>
                         <p class="card-text">Created at: {{ sm.created_at }}</p>
                         <p class="card-text">Modified at: {{ sm.modified_at }}</p>
+                        <a href="{{request.META.HTTP_REFERER}}" class="btn btn-secondary">Back</a>
                     </div>
                 </div>
             </div>
-- 
GitLab


From c0e0365807063161247557c6c8277eb7b412c751 Mon Sep 17 00:00:00 2001
From: Bornyto Hamonangen <t-bornyto.hamonangan@virgoku.id>
Date: Mon, 5 Jun 2023 22:44:13 +0700
Subject: [PATCH 10/11] remove dibuat word from admin page

---
 templates/searchResultSmAdmin.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/templates/searchResultSmAdmin.html b/templates/searchResultSmAdmin.html
index 65b8dfc..d3ed00a 100644
--- a/templates/searchResultSmAdmin.html
+++ b/templates/searchResultSmAdmin.html
@@ -39,7 +39,7 @@ box-shadow: 0 0 40px rgba(51, 51, 51, .1);
 <div class="container-fluid">
     <div class="mx-md-5">
       <div class="d-flex justify-content-between align-items-center">
-        <h1 class="display-4 mb-0">Studi Mandiri Dibuat</h1>
+        <h1 class="display-4 mb-0">Studi Mandiri</h1>
       </div>
   </div>
 
-- 
GitLab


From bef05d8f4c5ee05abd08a71f965289874bfe5121 Mon Sep 17 00:00:00 2001
From: Bornyto Hamonangen <t-bornyto.hamonangan@virgoku.id>
Date: Tue, 13 Jun 2023 06:44:16 +0700
Subject: [PATCH 11/11] improve name clarity updateSM

---
 templates/updateSm.html | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/templates/updateSm.html b/templates/updateSm.html
index 5e8b72d..fb2b843 100644
--- a/templates/updateSm.html
+++ b/templates/updateSm.html
@@ -40,11 +40,11 @@
           <input type="text" class="form-control" id="topik" name="topik" value="{{ sm.topik }}">
         </div>
         <div class="form-group">
-          <label for="nama">Nama:</label>
+          <label for="nama">Nama Lengkap:</label>
           <input type="text" class="form-control" id="nama" name="nama" value="{{ sm.nama }}">
         </div>
         <div id="autocomplete" class="form-group">
-          <label for="dosen">Dosen:</label>
+          <label for="dosen">Dosen Pembimbing:</label>
           <input  type="text" class="form-control" id="dosen" name="dosen" value="{{ sm.dosen }}">
           <ul class="autocomplete-result-list" ></ul>
       </div>
-- 
GitLab