diff --git a/src/app/main.py b/src/app/main.py index c8f6cd83486e7bf471625d03ebc3cd152bbac56c..075a70fa4bd1d30fc0ab6e589698fee5c376c606 100644 --- a/src/app/main.py +++ b/src/app/main.py @@ -1,13 +1,92 @@ from app.ui.main_window_ui import * from app.db import init_db +import datetime +import sys + +from PyQt5.QtWidgets import ( + QApplication, QDialog, QMainWindow, QMessageBox +) +from PyQt5.uic import loadUi + +from app.ui.detail_acara_window_ui import Ui_DetailAcaraWindow + +class Window(QMainWindow, Ui_DetailAcaraWindow): + def __init__(self, content, kategori, isMember, parent=None): + super().__init__(parent) + self.setupUi(self,content,kategori,isMember) + + def about(self): + QMessageBox.about( + self, + "About Sample Editor", + "<p>A sample text editor app built with:</p>" + "<p>- PyQt</p>" + "<p>- Qt Designer</p>" + "<p>- Python</p>", + ) + +def write_file(data, filename): + # Convert binary data to proper format and write it on Hard Disk + with open(filename, 'wb') as file: + file.write(data) + +def get_image(filename): + with open(filename, 'rb') as file: + return file.read() if __name__ == '__main__': conn = init_db() cur = conn.cursor() - app = QtWidgets.QApplication(sys.argv) - YesManagement = QtWidgets.QMainWindow() - ui = Ui_YesManagement(conn) - ui.setupUi(YesManagement) - YesManagement.show() - sys.exit(app.exec_()) \ No newline at end of file + ################### + # BUAT DETAIL ACARA + # Ini tinggal diganti aja + PATH = "./ui/assets/" + currIDUser = 2 + currIDAcara = 1 + isMember = True + + # execute SQL query + # lengkapnya: https://mariadb.com/resources/blog/how-to-connect-python-programs-to-mariadb/ + cur.execute('SELECT * FROM acara WHERE id_acara = {0} LIMIT 1'.format(currIDAcara)) + # ngeprint hasil eksekusi + content = cur.fetchone() + + cur.execute("SELECT penanggung_jawab,no_wa FROM penyelenggara WHERE id_penyelenggara = "+str(content[9])) + val = cur.fetchone() + contact = val[0] + ": " + val[1] + contact = (contact,) + content = tuple([content[i] for i in range(9)]) + content += contact + + # Buat insert image + # img = get_image("D:\Tugas\Others\\redpanda.jpg") + # cur.execute("INSERT INTO foto_acara(id_acara,foto) VALUES (%s,%s)", (currIDAcara,img)) + # conn.commit() + + cur.execute("SELECT id_foto,foto FROM foto_acara WHERE id_acara ="+str(content[0])) + files = cur.fetchall() + images = [] + for aFile in files: + images.append(aFile[1]) + + cur.execute("SELECT nama_kategori FROM kategori_acara WHERE id_acara = "+str(content[0])) + query = cur.fetchall() + kategori = () + for val in query: + kategori += val + + cur.execute("SELECT SUM(jumlah) FROM mengikuti WHERE id_acara = "+str(currIDAcara)) + jmlPesanan = cur.fetchone() + jmlPesanan = jmlPesanan[0] + content += (currIDUser,images,jmlPesanan) + + # (idacara, nama, linkvideo, syarat, kuota, desc, time, harga, link, penyelenggara: no WA) + app = QApplication(sys.argv) + #print(content) + win = Window(content,kategori,isMember) + win.show() + sys.exit(app.exec()) + ################# + + conn.close() diff --git a/src/app/ui/detail_acara_window_ui.py b/src/app/ui/detail_acara_window_ui.py new file mode 100644 index 0000000000000000000000000000000000000000..efc51ea637bcbcc015a8e8531d4faa5279d24f41 --- /dev/null +++ b/src/app/ui/detail_acara_window_ui.py @@ -0,0 +1,319 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file './ui/main_window.ui' +# +# Created by: PyQt5 UI code generator 5.15.2 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets +import datetime +from app import db +from app.modules import pesan + +class Ui_Dialog(object): + def setupUi(self, Dialog, first): + Dialog.setObjectName("Dialog") + Dialog.resize(311, 79) + self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) + self.buttonBox.setGeometry(QtCore.QRect(210, 10, 81, 241)) + self.buttonBox.setOrientation(QtCore.Qt.Vertical) + self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) + self.buttonBox.setObjectName("buttonBox") + self.horizontalLayoutWidget = QtWidgets.QWidget(Dialog) + self.horizontalLayoutWidget.setGeometry(QtCore.QRect(20, 20, 161, 41)) + self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget") + self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget) + self.horizontalLayout.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout.setSpacing(80) + self.horizontalLayout.setObjectName("horizontalLayout") + self.label = QtWidgets.QLabel(self.horizontalLayoutWidget) + self.label.setObjectName("label") + self.horizontalLayout.addWidget(self.label) + self.spinBox = QtWidgets.QSpinBox(self.horizontalLayoutWidget) + self.spinBox.setObjectName("spinBox") + self.horizontalLayout.addWidget(self.spinBox) + + if first: + self.retranslateUi(Dialog) + else: + self.revalidationUi(Dialog) + + self.buttonBox.accepted.connect(Dialog.accept) + self.buttonBox.rejected.connect(Dialog.reject) + QtCore.QMetaObject.connectSlotsByName(Dialog) + + def retranslateUi(self, Dialog): + _translate = QtCore.QCoreApplication.translate + Dialog.setWindowTitle(_translate("Dialog", "Dialog")) + self.label.setText(_translate("Dialog", "Jumlah")) + + def revalidationUi(self, Dialog): + _translate = QtCore.QCoreApplication.translate + Dialog.setWindowTitle(_translate("Dialog", "Pemesanan gagal")) + self.label.setText(_translate("Dialog", "Jumlah")) + + def getQuantity(self): + return self.spinBox.value() + +class Ui_DetailAcaraWindow(object): + def setupUi(self, MainWindow, content, kategori, isMember): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(813, 600) + + self.idAcara = content[0] + self.idMember = content[10] + self.isMember = isMember + + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + + self.frame = QtWidgets.QFrame(self.centralwidget) + self.frame.setGeometry(QtCore.QRect(10, 310, 781, 261)) + self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.frame.setFrameShadow(QtWidgets.QFrame.Raised) + self.frame.setObjectName("frame") + + self.textBrowser = QtWidgets.QTextBrowser(self.frame) + self.textBrowser.setGeometry(QtCore.QRect(10, 50, 256, 192)) + self.textBrowser.setObjectName("textBrowser") + + self.label_2 = QtWidgets.QLabel(self.frame) + self.label_2.setGeometry(QtCore.QRect(10, 10, 241, 31)) + font = QtGui.QFont() + font.setPointSize(20) + self.label_2.setFont(font) + self.label_2.setObjectName("label_2") + + self.scrollArea = QtWidgets.QScrollArea(self.frame) + self.scrollArea.setGeometry(QtCore.QRect(290, 10, 481, 231)) + self.scrollArea.setWidgetResizable(True) + self.scrollArea.setObjectName("scrollArea") + self.scrollAreaWidgetContents = QtWidgets.QWidget() + self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 479, 229)) + self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") + + self.textBrowser_2 = QtWidgets.QTextBrowser(self.scrollAreaWidgetContents) + self.textBrowser_2.setGeometry(QtCore.QRect(0, 0, 481, 231)) + self.textBrowser_2.setObjectName("textBrowser_2") + self.scrollArea.setWidget(self.scrollAreaWidgetContents) + + self.idxPhoto = 0 + self.photos = content[11] + self.label_5 = QtWidgets.QLabel(self.centralwidget) + if len(self.photos)!=0: + self.label_5.setGeometry(QtCore.QRect(230, 10, 311, 211)) + self.label_5.setText("") + img = QtGui.QImage() + img.loadFromData(self.photos[self.idxPhoto]) + self.label_5.setPixmap(QtGui.QPixmap.fromImage(img)) + self.label_5.setScaledContents(True) + self.label_5.setObjectName("label_5") + else: + self.label_5.setGeometry(QtCore.QRect(340, 10, 311, 211)) + font = QtGui.QFont() + font.setPointSize(16) + self.label_5.setText("No Photos") + self.label_5.setFont(font) + + self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget) + self.pushButton_2.setGeometry(QtCore.QRect(20, 10, 75, 23)) + self.pushButton_2.setObjectName("pushButton_2") + + self.frame_2 = QtWidgets.QFrame(self.centralwidget) + self.frame_2.setGeometry(QtCore.QRect(10, 230, 781, 81)) + self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised) + self.frame_2.setObjectName("frame_2") + + self.pushButton = QtWidgets.QPushButton(self.frame_2) + self.pushButton.setGeometry(QtCore.QRect(660, 20, 111, 41)) + self.pushButton.setObjectName("pushButton") + self.pushButton.clicked.connect(self.loadPesanDialog) + + self.label_3 = QtWidgets.QLabel(self.frame_2) + self.label_3.setGeometry(QtCore.QRect(520, 22, 120, 20)) + self.label_3.setObjectName("label_3") + + self.label_4 = QtWidgets.QLabel(self.frame_2) + self.label_4.setGeometry(QtCore.QRect(540, 45, 81, 20)) + self.label_4.setObjectName("label_4") + + self.label = QtWidgets.QLabel(self.frame_2) + self.label.setGeometry(QtCore.QRect(10, 20, 211, 41)) + font = QtGui.QFont() + font.setPointSize(24) + self.label.setFont(font) + self.label.setObjectName("label") + + self.widget = QtWidgets.QWidget(self.frame_2) + self.widget.setGeometry(QtCore.QRect(240, 35, 281, 16)) + self.widget.setObjectName("widget") + + self.label_6 = QtWidgets.QLabel(self.widget) + self.label_6.setGeometry(QtCore.QRect(10, 0, 61, 16)) + font = QtGui.QFont() + font.setPointSize(10) + self.label_6.setFont(font) + self.label_6.setObjectName("label_6") + + self.label_7 = QtWidgets.QLabel(self.widget) + self.label_7.setGeometry(QtCore.QRect(80, 0, 61, 16)) + font = QtGui.QFont() + font.setPointSize(10) + self.label_7.setFont(font) + self.label_7.setObjectName("label_7") + + self.label_8 = QtWidgets.QLabel(self.widget) + self.label_8.setGeometry(QtCore.QRect(150, 0, 61, 16)) + font = QtGui.QFont() + font.setPointSize(10) + self.label_8.setFont(font) + self.label_8.setObjectName("label_8") + + self.label_9 = QtWidgets.QLabel(self.widget) + self.label_9.setGeometry(QtCore.QRect(220, 0, 61, 16)) + font = QtGui.QFont() + font.setPointSize(10) + self.label_9.setFont(font) + self.label_9.setObjectName("label_9") + + self.line = QtWidgets.QFrame(self.frame_2) + self.line.setObjectName(u"line") + self.line.setGeometry(QtCore.QRect(0, 70, 781, 16)) + self.line.setFrameShape(QtWidgets.QFrame.HLine) + self.line.setFrameShadow(QtWidgets.QFrame.Sunken) + + self.line_2 = QtWidgets.QFrame(self.frame_2) + self.line_2.setObjectName(u"line_2") + self.line_2.setGeometry(QtCore.QRect(0, 0, 781, 16)) + self.line_2.setFrameShape(QtWidgets.QFrame.HLine) + self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken) + + self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget) + self.pushButton_3.setObjectName(u"pushButton_3") + self.pushButton_3.setGeometry(QtCore.QRect(580, 110, 75, 23)) + self.pushButton_3.clicked.connect(self.nextPicture) + + self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget) + self.pushButton_4.setObjectName(u"pushButton_4") + self.pushButton_4.setGeometry(QtCore.QRect(130, 110, 75, 23)) + self.pushButton_4.clicked.connect(self.prevPicture) + + self.widget.raise_() + self.pushButton.raise_() + self.label_3.raise_() + self.label_4.raise_() + self.label.raise_() + self.line.raise_() + self.line_2.raise_() + + self.line_3 = QtWidgets.QFrame(self.centralwidget) + self.line_3.setObjectName(u"line_3") + self.line_3.setGeometry(QtCore.QRect(10, 560, 781, 16)) + self.line_3.setFrameShape(QtWidgets.QFrame.HLine) + self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken) + MainWindow.setCentralWidget(self.centralwidget) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar.setObjectName("statusbar") + MainWindow.setStatusBar(self.statusbar) + + self.retranslateUi(MainWindow,content,kategori) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow, content, kategori): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) + + syarat = content[3] if content[3] != None else "Tidak ada syarat" + htmlSyarat = '''<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n +<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n +p, li {0}\n +</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n +<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:12pt;\">{val}</span></p></body></html>'''.format("{white-space: pre-wrap;}",val=syarat) + self.textBrowser.setHtml(_translate("MainWindow", htmlSyarat)) + + self.label_2.setText(_translate("MainWindow", "Syarat")) + + desc = content[5] if content[5] != None else "-" + contact = content[9] + htmlInfo = """<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n +<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n +p, li {0}\n +</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n +<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:20pt;\">Deskripsi</span></p>\n +<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:12pt;\">{descVal}</span></p>\n +<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt;\"><br /></p>\n +<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt;\"><br /></p>\n +<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt;\"><br /></p>\n +<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:20pt;\">Contact Person</span></p>\n +<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:12pt;\">{contactVal}</span></p></body></html>""".format("{ white-space: pre-wrap; }",descVal=desc,contactVal=contact) + self.textBrowser_2.setHtml(_translate("MainWindow", htmlInfo)) + + self.pushButton_2.setText(_translate("MainWindow", "Back")) + + if not self.isMember: + self.pushButton.setEnabled(False) + self.pushButton.setText(_translate("MainWindow", "Edit Acara")) + else: + self.pushButton.setText(_translate("MainWindow", "Pesan Tiket")) + + tanggal = content[6].strftime("%d %b %Y %H:%M:%S") + self.label_3.setText(_translate("MainWindow", tanggal)) + + kuota = "Kuota: " + str(content[12]) + "/" + str(content[4]) + self.label_4.setText(_translate("MainWindow", kuota)) + + nama = content[1] + self.label.setText(_translate("MainWindow", nama)) + + kat1 = kategori[0] + self.label_6.setText(_translate("MainWindow", kat1)) + + kat2 = kategori[1] if len(kategori) > 1 else "" + self.label_7.setText(_translate("MainWindow", kat2)) + + kat3 = kategori[2] if len(kategori) > 2 else "" + self.label_8.setText(_translate("MainWindow", kat3)) + + kat4 = kategori[3] if len(kategori) > 3 else "" + self.label_9.setText(_translate("MainWindow", kat4)) + + self.pushButton_3.setText(_translate("MainWindow", u"Next", None)) + self.pushButton_4.setText(_translate("MainWindow", u"Prev", None)) + + def nextPicture(self): + self.idxPhoto = self.idxPhoto +1 if self.idxPhoto +1<len(self.photos) else 0 + img = QtGui.QImage() + img.loadFromData(self.photos[self.idxPhoto]) + self.label_5.setPixmap(QtGui.QPixmap.fromImage(img)) + + def prevPicture(self): + self.idxPhoto = self.idxPhoto -1 if self.idxPhoto -1>=0 else len(self.photos)-1 + img = QtGui.QImage() + img.loadFromData(self.photos[self.idxPhoto]) + self.label_5.setPixmap(QtGui.QPixmap.fromImage(img)) + + def loadPesanDialog(self): + first = True + pesan_dialog = PesanDialog(first) + + while pesan_dialog.exec(): + self.quantity = pesan_dialog.getQuantity() + conn = db.init_db() + + if self.quantity>0 and pesan.pesanTiket(conn,self.idAcara,self.idMember,self.quantity): + _translate = QtCore.QCoreApplication.translate + self.pushButton.setEnabled(False) + self.pushButton.setText(_translate("MainWindow", "Pemesanan Berhasil!")) + break + else: + first = False + pesan_dialog = PesanDialog(first) + +class PesanDialog(QtWidgets.QDialog, Ui_Dialog): + def __init__(self,first,parent=None): + super().__init__(parent) + self.setupUi(self, first)