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()