diff --git a/data/db.sql b/data/db.sql
index de6ba3c7ae4613c1c95555bda5cbd758dca7300c..0dd0f26fdbe3229b1cb209b6283747c7ccf9c444 100644
--- a/data/db.sql
+++ b/data/db.sql
@@ -33,13 +33,12 @@ DROP TABLE IF EXISTS `acara`;
 CREATE TABLE `acara` (
   `id_acara` int(11) NOT NULL AUTO_INCREMENT,
   `nama_acara` varchar(255) NOT NULL,
-  `video_introduksi` varchar(255) DEFAULT NULL,
-  `syarat_pendaftaran` text DEFAULT NULL,
-  `kuota_pendaftar` int(11) DEFAULT NULL,
-  `deskripsi` text DEFAULT NULL,
+  `syarat_pendaftaran` text DEFAULT "" NOT NULL,
+  `kuota_pendaftar` int(11) DEFAULT 0 NOT NULL,
+  `deskripsi` text DEFAULT "" NOT NULL,
   `waktu` datetime NOT NULL,
-  `harga` int(11) DEFAULT NULL,
-  `link` varchar(255) DEFAULT NULL,
+  `harga` int(11) DEFAULT 0 NOT NULL,
+  `link` varchar(255) DEFAULT "" NOT NULL,
   `id_penyelenggara` int(11) NOT NULL,
   PRIMARY KEY (`id_acara`),
   KEY `fk_penyelenggara_acara` (`id_penyelenggara`),
diff --git a/data/mock_data.sql b/data/mock_data.sql
index e06801b21e197a296e209fecba1b0697697fe998..d70bbd44314eaddc7980c02e3087c2547c4419a0 100644
--- a/data/mock_data.sql
+++ b/data/mock_data.sql
@@ -19,7 +19,6 @@ INSERT INTO penyelenggara (
 INSERT INTO acara (
         id_acara,
         nama_acara,
-        video_introduksi,
         syarat_pendaftaran,
         kuota_pendaftar,
         deskripsi,
@@ -29,7 +28,6 @@ INSERT INTO acara (
    ) VALUES (
         1,
         'Tubes Bareng',
-        'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
         'Ga ilang',
         100,
         'Skuy la PBO bareng yahahahah',
diff --git a/src/app/modules/tambah_acara.py b/src/app/modules/tambah_acara.py
index 26721de17835fb9a2c634ce17bfbd7b70ec16835..646bb7196da8c3555c47a3a6c6f4506d83290ad6 100644
--- a/src/app/modules/tambah_acara.py
+++ b/src/app/modules/tambah_acara.py
@@ -107,15 +107,15 @@ def remove_category(id_acara, kateg, conn) -> bool:
 
 def tambah_acara(id_penyelenggara,
                  nama_acara,
-                 kuota_pendaftar,
                  waktu,
                  harga,
                  kategori,
                  conn,
+                 kuota_pendaftar=0,
+                 link="",
+                 deskripsi="",
+                 syarat="",
                  foto=None,
-                 link=None,
-                 deskripsi=None,
-                 syarat=None,
                  id_acara=None) -> bool:
     '''
     Fungsi untuk menambahkan sebuah acara baru ke database atau mengubah
@@ -127,8 +127,6 @@ def tambah_acara(id_penyelenggara,
         id penyelenggara yang melaksanakan acara
     nama_acara : str
         nama acara
-    kuota_pendaftar : int
-        kuota pendaftar acara
     waktu : datetime | str
         waktu acara diadakan. Jika str akan otomatis diubah ke datetime, str
         dalam format YYYY-MM-DD HH:MM:SS
@@ -138,6 +136,8 @@ def tambah_acara(id_penyelenggara,
         kategori-kategori acara
     conn : mariadb._mariadb.connection
         koneksi ke database
+    kuota_pendaftar : int (optional)
+        kuota pendaftar acara, kalo None artinya ga ada kuota
     foto : list[bytes] (optional)
         Sekumpulan path ke file foto
     link : str (optional)
@@ -158,7 +158,7 @@ def tambah_acara(id_penyelenggara,
     '''
     if isinstance(waktu, str):
         try:
-            waktu = datetime.strptime(waktu, "%Y-%m-%d %H:%M:%S")
+            waktu = datetime.strptime(waktu, "%Y-%m-%d %H:%M")
         except ValueError:
             return False
 
@@ -192,7 +192,7 @@ def tambah_acara(id_penyelenggara,
                 ))
 
             # Dapetin id acara
-            cur.execute('''SELECT * FROM acara WHERE
+            cur.execute('''SELECT id_acara FROM acara WHERE
                     nama_acara = ? AND
                     kuota_pendaftar = ? AND
                     waktu  = ? AND
diff --git a/src/app/ui/assets/no-image-available.jpeg b/src/app/ui/assets/no-image-available.jpeg
new file mode 100755
index 0000000000000000000000000000000000000000..28b5b93702fdef2fc50fec7bb2fbad9fa7cc064a
Binary files /dev/null and b/src/app/ui/assets/no-image-available.jpeg differ
diff --git a/src/app/ui/linimasa_ui.py b/src/app/ui/linimasa_ui.py
index d9815a6592d346b5f02fc7e4ee82c58519a14e06..d1fea7dbb1906f1343ce58615e994239e0ab3e30 100644
--- a/src/app/ui/linimasa_ui.py
+++ b/src/app/ui/linimasa_ui.py
@@ -1,17 +1,14 @@
 import sys
-import uiui
 from PyQt5.QtWidgets import (
   QApplication, QDialog, QMainWindow, QMessageBox, QLabel, QVBoxLayout,
   QHBoxLayout, QWidget, QPushButton
 )
 from PyQt5.uic import loadUi
 
-from uiui import Ui_MainWindow
-
 from app.modules import linimasa
 from app import main
 
-class LinimasaPenggunaWindow(QMainWindow, Ui_MainWindow):
+class LinimasaPenggunaWindow(QMainWindow):
   def __init__(self, parent=None):
     super().__init__(parent)
     loadUi('linimasa_pengguna_ui.ui', self)
@@ -20,7 +17,7 @@ class LinimasaPenggunaWindow(QMainWindow, Ui_MainWindow):
 
   def connectSignalsSlots(self):
     self.searchbutton.clicked.connect(self.attemptSearch)
-  
+
   # ini
   def attemptSearch(self):
     kategs = ['motivasi', 'teknologi', 'ekonomi', 'kompetisi']
@@ -49,7 +46,7 @@ class LinimasaPenggunaWindow(QMainWindow, Ui_MainWindow):
   def showDetails(self, id):
     pass
 
-class LinimasaPenyelenggaraWindow(QMainWindow, Ui_MainWindow):
+class LinimasaPenyelenggaraWindow(QMainWindow):
   def __init__(self, parent=None):
     super().__init__(parent)
     loadUi('linimasa_penyelenggara_ui.ui', self)
@@ -58,7 +55,7 @@ class LinimasaPenyelenggaraWindow(QMainWindow, Ui_MainWindow):
 
   def connectSignalsSlots(self):
     self.searchbutton.clicked.connect(self.attemptSearch)
-  
+
   # ini
   def attemptSearch(self):
     ended = None
@@ -96,4 +93,4 @@ if __name__ == '__main__':
   app = QApplication(sys.argv)
   win = LinimasaPenyelenggaraWindow()
   win.show()
-  sys.exit(app.exec())
\ No newline at end of file
+  sys.exit(app.exec())
diff --git a/src/app/ui/tambah_acara.ui b/src/app/ui/tambah_acara.ui
index 345f32f37d64cb88ef81982be2edc56cabe07b66..7f288942d282b9a3f51496e4b0751c1a78842f97 100644
--- a/src/app/ui/tambah_acara.ui
+++ b/src/app/ui/tambah_acara.ui
@@ -51,12 +51,12 @@
          </property>
          <layout class="QVBoxLayout" name="verticalLayout_4">
           <item>
-           <layout class="QHBoxLayout" name="ImageArea">
+           <layout class="QHBoxLayout" name="area_image">
             <property name="topMargin">
              <number>0</number>
             </property>
             <item>
-             <widget class="QToolButton" name="ImagePrev">
+             <widget class="QToolButton" name="button_image_prev">
               <property name="sizePolicy">
                <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
                 <horstretch>0</horstretch>
@@ -116,7 +116,7 @@
              </spacer>
             </item>
             <item>
-             <widget class="QLabel" name="Image">
+             <widget class="QLabel" name="image">
               <property name="sizePolicy">
                <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
                 <horstretch>0</horstretch>
@@ -172,7 +172,7 @@
              </spacer>
             </item>
             <item>
-             <widget class="QToolButton" name="ImageNext">
+             <widget class="QToolButton" name="button_image_next">
               <property name="sizePolicy">
                <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
                 <horstretch>0</horstretch>
@@ -218,7 +218,7 @@
            </layout>
           </item>
           <item>
-           <layout class="QHBoxLayout" name="horizontalLayout_4">
+           <layout class="QHBoxLayout" name="area_add_image">
             <property name="topMargin">
              <number>0</number>
             </property>
@@ -236,7 +236,7 @@
              </spacer>
             </item>
             <item>
-             <widget class="QPushButton" name="pushButton">
+             <widget class="QPushButton" name="button_add_image">
               <property name="sizePolicy">
                <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
                 <horstretch>0</horstretch>
@@ -262,7 +262,7 @@
              </widget>
             </item>
             <item>
-             <widget class="QLabel" name="label_13">
+             <widget class="QLabel" name="catatan_image">
               <property name="font">
                <font>
                 <pointsize>10</pointsize>
@@ -318,27 +318,27 @@
                <x>0</x>
                <y>0</y>
                <width>1387</width>
-               <height>425</height>
+               <height>388</height>
               </rect>
              </property>
              <layout class="QGridLayout" name="gridLayout_2">
-              <item row="1" column="2">
-               <widget class="QLabel" name="label">
+              <item row="6" column="2">
+               <widget class="QLabel" name="label_deskripsi">
                 <property name="font">
                  <font>
                   <pointsize>12</pointsize>
                  </font>
                 </property>
                 <property name="text">
-                 <string>Nama Acara</string>
+                 <string>Deskripsi</string>
                 </property>
                 <property name="alignment">
                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
                 </property>
                </widget>
               </item>
-              <item row="1" column="6">
-               <spacer name="horizontalSpacer_11">
+              <item row="1" column="0">
+               <spacer name="horizontalSpacer_10">
                 <property name="orientation">
                  <enum>Qt::Horizontal</enum>
                 </property>
@@ -347,14 +347,14 @@
                 </property>
                 <property name="sizeHint" stdset="0">
                  <size>
-                  <width>500</width>
+                  <width>40</width>
                   <height>20</height>
                  </size>
                 </property>
                </spacer>
               </item>
-              <item row="3" column="3">
-               <widget class="QLabel" name="label_18">
+              <item row="2" column="3">
+               <widget class="QLabel" name="wajib_waktu">
                 <property name="font">
                  <font>
                   <pointsize>12</pointsize>
@@ -368,67 +368,61 @@
                 </property>
                </widget>
               </item>
-              <item row="4" column="3">
-               <widget class="QLabel" name="label_19">
+              <item row="2" column="5">
+               <widget class="QDateTimeEdit" name="input_waktu">
                 <property name="font">
                  <font>
                   <pointsize>12</pointsize>
                  </font>
                 </property>
-                <property name="styleSheet">
-                 <string notr="true">color: rgb(255, 0, 0);</string>
-                </property>
-                <property name="text">
-                 <string>*</string>
+                <property name="displayFormat">
+                 <string>yyyy/MM/dd HH:mm</string>
                 </property>
                </widget>
               </item>
-              <item row="3" column="5">
-               <widget class="QSpinBox" name="spinBox_2">
+              <item row="5" column="5">
+               <widget class="QLineEdit" name="input_link">
                 <property name="font">
                  <font>
                   <pointsize>12</pointsize>
                  </font>
                 </property>
-                <property name="maximum">
-                 <number>1000000000</number>
-                </property>
                </widget>
               </item>
-              <item row="10" column="2">
-               <widget class="QLabel" name="label_15">
+              <item row="3" column="5">
+               <widget class="QSpinBox" name="input_harga">
                 <property name="font">
                  <font>
                   <pointsize>12</pointsize>
                  </font>
                 </property>
-                <property name="text">
-                 <string>Link ke Video Introduksi Acara</string>
-                </property>
-                <property name="alignment">
-                 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+                <property name="maximum">
+                 <number>1000000000</number>
                 </property>
                </widget>
               </item>
-              <item row="4" column="5">
-               <widget class="QSpinBox" name="spinBox">
+              <item row="3" column="3">
+               <widget class="QLabel" name="wajib_harga">
                 <property name="font">
                  <font>
                   <pointsize>12</pointsize>
                  </font>
                 </property>
-                <property name="maximum">
-                 <number>1000000000</number>
+                <property name="styleSheet">
+                 <string notr="true">color: rgb(255, 0, 0);</string>
+                </property>
+                <property name="text">
+                 <string>*</string>
                 </property>
                </widget>
               </item>
-              <item row="1" column="0">
-               <spacer name="horizontalSpacer_10">
+              <item row="1" column="4">
+               <spacer name="horizontalSpacer_12">
                 <property name="orientation">
                  <enum>Qt::Horizontal</enum>
                 </property>
                 <property name="sizeType">
-                 <enum>QSizePolicy::Expanding</enum>
+                 <enum>QSizePolicy::Fixed</enum>
                 </property>
                 <property name="sizeHint" stdset="0">
                  <size>
@@ -438,8 +432,8 @@
                 </property>
                </spacer>
               </item>
-              <item row="8" column="5">
-               <widget class="QPlainTextEdit" name="plainTextEdit_2">
+              <item row="1" column="5">
+               <widget class="QLineEdit" name="input_nama_acara">
                 <property name="font">
                  <font>
                   <pointsize>12</pointsize>
@@ -447,92 +441,81 @@
                 </property>
                </widget>
               </item>
-              <item row="4" column="2">
-               <widget class="QLabel" name="label_4">
-                <property name="font">
-                 <font>
-                  <pointsize>12</pointsize>
-                 </font>
-                </property>
-                <property name="text">
-                 <string>Kuota</string>
+              <item row="1" column="6">
+               <spacer name="horizontalSpacer_11">
+                <property name="orientation">
+                 <enum>Qt::Horizontal</enum>
                 </property>
-                <property name="alignment">
-                 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+                <property name="sizeType">
+                 <enum>QSizePolicy::Expanding</enum>
                 </property>
-               </widget>
-              </item>
-              <item row="6" column="5">
-               <widget class="QPlainTextEdit" name="plainTextEdit">
-                <property name="font">
-                 <font>
-                  <pointsize>12</pointsize>
-                 </font>
+                <property name="sizeHint" stdset="0">
+                 <size>
+                  <width>500</width>
+                  <height>20</height>
+                 </size>
                 </property>
-               </widget>
+               </spacer>
               </item>
-              <item row="2" column="3">
-               <widget class="QLabel" name="label_17">
+              <item row="5" column="2">
+               <widget class="QLabel" name="label_link">
                 <property name="font">
                  <font>
                   <pointsize>12</pointsize>
                  </font>
                 </property>
-                <property name="styleSheet">
-                 <string notr="true">color: rgb(255, 0, 0);</string>
-                </property>
                 <property name="text">
-                 <string>*</string>
+                 <string>Link ke Conference</string>
+                </property>
+                <property name="alignment">
+                 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
                 </property>
                </widget>
               </item>
-              <item row="8" column="2">
-               <widget class="QLabel" name="label_6">
+              <item row="4" column="2">
+               <widget class="QLabel" name="label_kuota">
                 <property name="font">
                  <font>
                   <pointsize>12</pointsize>
                  </font>
                 </property>
                 <property name="text">
-                 <string>Syarat</string>
+                 <string>Kuota</string>
                 </property>
                 <property name="alignment">
                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
                 </property>
                </widget>
               </item>
-              <item row="6" column="2">
-               <widget class="QLabel" name="label_5">
+              <item row="3" column="2">
+               <widget class="QLabel" name="label_harga">
                 <property name="font">
                  <font>
                   <pointsize>12</pointsize>
                  </font>
                 </property>
                 <property name="text">
-                 <string>Deskripsi</string>
+                 <string>Harga</string>
                 </property>
                 <property name="alignment">
                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
                 </property>
                </widget>
               </item>
-              <item row="1" column="3">
-               <widget class="QLabel" name="label_16">
+              <item row="4" column="5">
+               <widget class="QSpinBox" name="input_kuota">
                 <property name="font">
                  <font>
                   <pointsize>12</pointsize>
                  </font>
                 </property>
-                <property name="styleSheet">
-                 <string notr="true">color: rgb(255, 0, 0);</string>
-                </property>
-                <property name="text">
-                 <string>*</string>
+                <property name="maximum">
+                 <number>1000000000</number>
                 </property>
                </widget>
               </item>
               <item row="2" column="2">
-               <widget class="QLabel" name="label_2">
+               <widget class="QLabel" name="label_waktu">
                 <property name="font">
                  <font>
                   <pointsize>12</pointsize>
@@ -546,89 +529,67 @@
                 </property>
                </widget>
               </item>
-              <item row="10" column="5">
-               <widget class="QLineEdit" name="lineEdit_3">
+              <item row="8" column="2">
+               <widget class="QLabel" name="label_syarat">
                 <property name="font">
                  <font>
                   <pointsize>12</pointsize>
                  </font>
                 </property>
-               </widget>
-              </item>
-              <item row="1" column="4">
-               <spacer name="horizontalSpacer_12">
-                <property name="orientation">
-                 <enum>Qt::Horizontal</enum>
-                </property>
-                <property name="sizeType">
-                 <enum>QSizePolicy::Fixed</enum>
-                </property>
-                <property name="sizeHint" stdset="0">
-                 <size>
-                  <width>40</width>
-                  <height>20</height>
-                 </size>
+                <property name="text">
+                 <string>Syarat</string>
                 </property>
-               </spacer>
-              </item>
-              <item row="1" column="5">
-               <widget class="QLineEdit" name="lineEdit">
-                <property name="font">
-                 <font>
-                  <pointsize>12</pointsize>
-                 </font>
+                <property name="alignment">
+                 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
                 </property>
                </widget>
               </item>
-              <item row="2" column="5">
-               <widget class="QDateTimeEdit" name="dateTimeEdit">
+              <item row="1" column="2">
+               <widget class="QLabel" name="label_nama_acara">
                 <property name="font">
                  <font>
                   <pointsize>12</pointsize>
                  </font>
                 </property>
-                <property name="displayFormat">
-                 <string>yyyy/MM/dd HH:mm</string>
+                <property name="text">
+                 <string>Nama Acara</string>
+                </property>
+                <property name="alignment">
+                 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
                 </property>
                </widget>
               </item>
-              <item row="3" column="2">
-               <widget class="QLabel" name="label_3">
+              <item row="8" column="5">
+               <widget class="QPlainTextEdit" name="input_syarat">
                 <property name="font">
                  <font>
                   <pointsize>12</pointsize>
                  </font>
                 </property>
-                <property name="text">
-                 <string>Harga</string>
-                </property>
-                <property name="alignment">
-                 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-                </property>
                </widget>
               </item>
-              <item row="5" column="2">
-               <widget class="QLabel" name="label_14">
+              <item row="6" column="5">
+               <widget class="QPlainTextEdit" name="input_deskripsi">
                 <property name="font">
                  <font>
                   <pointsize>12</pointsize>
                  </font>
                 </property>
-                <property name="text">
-                 <string>Link ke Conference</string>
-                </property>
-                <property name="alignment">
-                 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-                </property>
                </widget>
               </item>
-              <item row="5" column="5">
-               <widget class="QLineEdit" name="lineEdit_2">
+              <item row="1" column="3">
+               <widget class="QLabel" name="wajib_nama">
                 <property name="font">
                  <font>
                   <pointsize>12</pointsize>
                  </font>
                 </property>
+                <property name="styleSheet">
+                 <string notr="true">color: rgb(255, 0, 0);</string>
+                </property>
+                <property name="text">
+                 <string>*</string>
+                </property>
                </widget>
               </item>
              </layout>
@@ -636,7 +597,7 @@
            </widget>
           </item>
           <item>
-           <layout class="QGridLayout" name="KategoriArea">
+           <layout class="QGridLayout" name="area_kategori">
             <property name="leftMargin">
              <number>50</number>
             </property>
@@ -669,7 +630,7 @@
              </spacer>
             </item>
             <item row="2" column="1">
-             <widget class="QCheckBox" name="Kompetisi">
+             <widget class="QCheckBox" name="kompetisi">
               <property name="font">
                <font>
                 <pointsize>11</pointsize>
@@ -694,7 +655,7 @@
              </spacer>
             </item>
             <item row="1" column="2">
-             <widget class="QCheckBox" name="Motivasi">
+             <widget class="QCheckBox" name="motivasi">
               <property name="font">
                <font>
                 <pointsize>11</pointsize>
@@ -706,7 +667,7 @@
              </widget>
             </item>
             <item row="2" column="2">
-             <widget class="QCheckBox" name="Ekonomi">
+             <widget class="QCheckBox" name="ekonomi">
               <property name="font">
                <font>
                 <pointsize>11</pointsize>
@@ -718,7 +679,7 @@
              </widget>
             </item>
             <item row="1" column="1">
-             <widget class="QCheckBox" name="Teknologi">
+             <widget class="QCheckBox" name="teknologi">
               <property name="font">
                <font>
                 <pointsize>11</pointsize>
@@ -756,7 +717,7 @@
              </spacer>
             </item>
             <item row="0" column="1" colspan="2">
-             <widget class="QLabel" name="KategoriAreaText">
+             <widget class="QLabel" name="kategori_area_text">
               <property name="font">
                <font>
                 <pointsize>14</pointsize>
@@ -781,7 +742,7 @@
            </layout>
           </item>
           <item>
-           <layout class="QHBoxLayout" name="ButtonArea">
+           <layout class="QHBoxLayout" name="area_button">
             <property name="topMargin">
              <number>25</number>
             </property>
@@ -802,7 +763,7 @@
              </spacer>
             </item>
             <item>
-             <widget class="QPushButton" name="Simpan">
+             <widget class="QPushButton" name="button_simpan">
               <property name="sizePolicy">
                <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
                 <horstretch>0</horstretch>
@@ -848,7 +809,7 @@
              </spacer>
             </item>
             <item>
-             <widget class="QPushButton" name="Batal">
+             <widget class="QPushButton" name="button_batal">
               <property name="sizePolicy">
                <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
                 <horstretch>0</horstretch>
diff --git a/src/app/ui/tambah_acara_ui.py b/src/app/ui/tambah_acara_ui.py
new file mode 100644
index 0000000000000000000000000000000000000000..fd333f56d81e9b4bad699e3ed4d7809bc3e3ee42
--- /dev/null
+++ b/src/app/ui/tambah_acara_ui.py
@@ -0,0 +1,195 @@
+from PyQt5 import uic, QtWidgets, QtGui, QtCore
+import sys
+from app.modules.tambah_acara import *
+from app.db import init_db
+
+class TambahAcaraWindow(QtWidgets.QMainWindow):
+    def __init__(self, conn, data=None):
+        '''
+        Asumsi `data` valid, memiliki key:
+            - id_penyelenggara: int
+            - nama_acara: str
+            - kuota_pendaftar: int
+            - waktu: datetime (year, month, date, hour, minute)
+            - harga: int
+            - kategori: list[str], nilai yang boleh: Teknologi, Motivasi, Ekonomi, Kompetisi
+            - foto: list[bytes] isi file foto
+            - link: str
+            - syarat: str
+            - id_acara: str
+        '''
+        super(TambahAcaraWindow, self).__init__()
+        uic.loadUi('tambah_acara.ui', self)
+
+        default_img_content = b''
+        with open('assets/no-image-available.jpeg', 'rb') as f:
+            default_img_content = f.read()
+
+        self.__conn = conn
+        data_acara = dict(
+            id_penyelenggara=None,
+            nama_acara=None,
+            kuota_pendaftar=None,
+            waktu=None,
+            harga=None,
+            kategori=None,
+            foto=None,
+            link=None,
+            deskripsi=None,
+            syarat=None,
+            id_acara=None,
+        ) if data is None else data
+        self.__current_image_counter = 0
+        self.__photos = list() if data_acara['foto'] is None else data_acara['foto']
+        # self.__penyelenggara = data_acara['id_penyelenggara'] # ga boleh None
+        self.__penyelenggara = 1
+        self.__id_acara = data_acara['id_acara']
+
+        # setting default image
+        self.__default_img = QtGui.QImage()
+        assert self.__default_img.loadFromData(default_img_content)
+
+        self.__fill_data(data_acara)
+        self.__init_button()
+
+        self.show()
+
+    def __set_image(self):
+        self.image.setPixmap(
+            QtGui.QPixmap.fromImage(
+                self.__photos[self.__current_image_counter]
+            )
+        )
+
+    def __next_image(self):
+        try:
+            self.__current_image_counter += 1
+            self.__current_image_counter %= len(self.__photos)
+            self.__set_image()
+        except Exception:
+            pass
+
+    def __prev_image(self):
+        try:
+            self.__current_image_counter -= 1
+            self.__current_image_counter %= len(self.__photos)
+            self.__set_image()
+        except Exception:
+            pass
+
+    def __fill_data(self, data_acara):
+        '''
+        Fungsi untuk mengisi form data, foto, serta kategori acara
+        '''
+        # Ngeset foto
+        if data_acara['foto'] is None:
+            self.image.setPixmap(QtGui.QPixmap.fromImage(self.__default_img))
+        else:
+            self.__set_image
+
+        # Ngeset isi form
+        if data_acara['nama_acara'] is not None:
+            self.input_nama_acara.setText(data_acara['nama_acara'])
+
+        if data_acara['kuota_pendaftar'] is not None:
+            self.input_kuota.setValue(data_acara['kuota_pendaftar'])
+
+        self.input_waktu.setMinimumDateTime(QtCore.QDateTime.currentDateTime())
+        if data_acara['waktu'] is not None:
+            # ex: self.input_waktu.setDateTime(datetime.strptime('2100-05-12 23:59', '%Y-%m-%d %H:%M'))
+            # asumsi udah pasti date time
+            self.input_waktu.setDateTime(data_acara['waktu'])
+        else:
+            self.input_waktu.setDateTime(QtCore.QDateTime.currentDateTime())
+
+        if data_acara['harga'] is not None:
+            self.input_harga.setValue(100)
+
+        if data_acara['link'] is not None:
+            self.input_link.setText(data_acara['link'])
+
+        if data_acara['deskripsi'] is not None:
+            self.input_deskripsi.insertPlainText(
+                data_acara['deskripsi'])
+
+        if data_acara['syarat'] is not None:
+            self.input_deskripsi.insertPlainText(data_acara['syarat'])
+
+        # Ngeset kategori
+        if data_acara['kategori'] is not None:
+            # Teknologi, Motivasi, Kompetisi, Ekonomi
+            for kategori in self.data_acara['kategori']:
+                if kategori == 'Teknologi':
+                    self.teknologi.setChecked(True)
+                elif kategori == 'Motivasi':
+                    self.motivasi.setChecked(True)
+                elif kategori == 'Kompetisi':
+                    self.kompetisi.setChecked(True)
+                elif kategori == 'Ekonomi':
+                    self.ekonommi.setChecked(True)
+
+    def __init_button(self):
+        '''
+        Fungsi untuk menyiapkan tombol-tombol
+        '''
+        self.button_image_next.clicked.connect(self.__next_image)
+        self.button_image_prev.clicked.connect(self.__prev_image)
+        self.button_batal.clicked.connect(self.close)
+        self.button_simpan.clicked.connect(self.__save_data)
+        self.button_add_image.clicked.connect(self.__input_image)
+
+    def __get_checked_kategori(self):
+        kategs = ['motivasi', 'teknologi', 'ekonomi', 'kompetisi']
+        return [x for x in kategs if getattr(self, x).isChecked()]
+
+    def __get_form_data(self):
+        return dict(
+            id_penyelenggara=self.__penyelenggara,
+            id_acara=self.__id_acara,
+            foto=self.__photos,
+            kategori=self.__get_checked_kategori(),
+            nama_acara=self.input_nama_acara.text(),
+            kuota_pendaftar=self.input_kuota.value(),
+            waktu=self.input_waktu.dateTime().toPyDateTime().replace(microsecond=0),
+            harga=self.input_harga.value(),
+            link=self.input_link.text(),
+            deskripsi=self.input_deskripsi.toPlainText(),
+            syarat=self.input_syarat.toPlainText(),
+        )
+
+    def __save_data(self):
+        if self.__is_form_valid():
+            if tambah_acara(**self.__get_form_data(), conn=self.__conn):
+                self.close() # sekarang exit aja dlu
+            else:
+                self.__alert(text="Gagal menambahkan data.",
+                             info="Silakan hubungi pembuat aplikasi.",
+                             title="Terjadi kegagalan")
+        else:
+            self.__alert(text="Ada data yang belum diisi.",
+                         info="Perhatikan, data dengan * merah adalah wajib dan minimal sebuah kategori terpilih.",
+                         title="Data acara kurang")
+
+    def __input_image(self):
+        pass
+
+    def __is_form_valid(self):
+        return self.input_nama_acara is not None and self.input_nama_acara.text() != ""\
+               and self.input_waktu is not None\
+               and self.input_harga is not None\
+               and len(self.__get_checked_kategori()) != 0
+
+    def __alert(self, text, info, title):
+        msg = QtWidgets.QMessageBox()
+        msg.setIcon(QtWidgets.QMessageBox.Warning)
+        msg.setText(text)
+        msg.setInformativeText(info)
+        msg.setWindowTitle(title)
+        msg.setStandardButtons(QtWidgets.QMessageBox.Ok)
+        msg.exec_()
+
+if __name__ == '__main__':
+    app = QtWidgets.QApplication(sys.argv)
+    window = TambahAcaraWindow(conn=init_db())
+    window.show()
+    app.exec()