Skip to content

Commit b1e0c6c

Browse files
committed
admin ui, menu management
1 parent 87133d0 commit b1e0c6c

16 files changed

+586
-367
lines changed

AdminDAO.py

+19-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
1-
from Singleton import SingletonInstance
1+
from DAOTemplate import DAOTemplate
22

3-
class AdminDAO(SingletonInstance):
3+
class AdminDAO(DAOTemplate):
44
def __init__(self) -> None:
5-
pass
5+
super().__init__()
6+
7+
def getPassword(self):
8+
self.connectDB()
9+
10+
sql = "SELECT password FROM kookminkiosk.admin;"
11+
12+
self.cursor.execute(sql)
13+
res = self.cursor.fetchall()
14+
15+
self.disconnectDB()
16+
return res[0][0]
17+
18+
if __name__ == "__main__":
19+
dao = AdminDAO()
20+
print(dao.authenticate())
21+

AdminManager.py

+3-158
Original file line numberDiff line numberDiff line change
@@ -6,162 +6,7 @@ class AdminManager(SingletonInstance):
66
def __init__(self):
77
self.AdminDAO = AdminDAO.instance()
88

9-
def Authenticate(self, password):
10-
dbpassword = self.DBManager.getAdminDB()
11-
if password == dbpassword:
12-
return True
13-
else:
14-
print(f'테스트용 출력 - 현재 비밀번호는 {dbpassword}입니다.')
15-
return False
9+
def authenticate(self, password):
10+
return password == self.AdminDAO.getPassword()
1611

17-
def DisplayAvailableFunctions(self):
18-
# 관리자 모드: 다국어 필요 없음
19-
print('''
20-
*****************************************
21-
* 관리자 모드 *
22-
* 1. 메뉴 관리 *
23-
* 2. 통계 확인 *
24-
* 3. 비밀번호 변경 *
25-
* 4. 뒤로가기 *
26-
*****************************************
27-
''')
28-
n = input()
29-
try:
30-
n = int(n)
31-
except:
32-
print("잘못된 값을 입력했습니다.")
33-
self.DisplayAvailableFunctions()
34-
if n<0 or n>4:
35-
print("잘못된 값을 입력했습니다.")
36-
self.DisplayAvailableFunctions()
37-
return n
38-
39-
def ManageMenu(self):
40-
while True:
41-
print('''
42-
**************************************
43-
* 메뉴 관리 *
44-
* *
45-
* 1. 메뉴 추가 *
46-
* 2. 메뉴 수정 *
47-
* 3. 메뉴 제거 *
48-
* 4. 메인 화면으로 *
49-
* *
50-
**************************************
51-
''')
52-
n = input()
53-
try:
54-
n = int(n)
55-
except:
56-
print("잘못된 값을 입력했습니다.")
57-
time.sleep(1)
58-
continue
59-
if n<0 or n>4:
60-
print("잘못된 값을 입력했습니다.")
61-
time.sleep(1)
62-
continue
63-
64-
if n==1: #메뉴 추가
65-
print("메뉴를 추가합니다.")
66-
menutype = input("메뉴 타입을 입력하세요(Drink 또는 Food): ")
67-
if menutype.lower() != 'drink' and menutype.lower() != 'food':
68-
print("잘못된 메뉴 타입입니다.")
69-
time.sleep(1)
70-
continue
71-
menuname = input("메뉴 이름을 입력하세요: ")
72-
menuprice = input("메뉴 가격을 입력하세요: ")
73-
try:
74-
menuprice = int(menuprice)
75-
except:
76-
print("가격은 숫자여야 합니다.")
77-
time.sleep(1)
78-
continue
79-
menudesc = input("메뉴 설명을 입력하세요: ")
80-
81-
self.MenuManager.CreateMenu(menuname, menuprice, menudesc, menutype)
82-
83-
print("성공적으로 메뉴를 추가했습니다.")
84-
time.sleep(1)
85-
86-
elif n==2: #메뉴 수정
87-
print("현재 메뉴 리스트")
88-
self.MenuManager.DisplayMenu()
89-
idx = int(input("수정할 메뉴의 번호를 입력하세요: ")) - 1
90-
if idx<0 or idx>self.MenuManager.getMenuListLength()-1:
91-
print("잘못된 값을 입력했습니다.")
92-
else:
93-
print("수정할 메뉴: ")
94-
self.MenuManager.DisplayMenu(idx=idx)
95-
newmenutype = input("새로운 메뉴 타입을 입력하세요(Drink 또는 Food) (유지 원할 시 공백입력): ")
96-
if menutype.lower() != 'drink' and menutype.lower() != 'food':
97-
print("잘못된 메뉴 타입입니다.")
98-
time.sleep(1)
99-
continue
100-
newname = input("새로운 이름을 입력하세요. (유지 원할 시 공백입력): ")
101-
newprice = int(input("새로운 가격을 입력하세요. (유지 원할 시 공백입력): "))
102-
newdesc = input("새로운 설명을 입력하세요. (유지 원할 시 공백입력): ")
103-
self.MenuManager.EditMenu(idx, newname, newprice, newdesc, newmenutype)
104-
print("성공적으로 메뉴를 수정했습니다.")
105-
time.sleep(1)
106-
107-
108-
109-
elif n==3: # 메뉴 제거
110-
print("현재 메뉴 리스트")
111-
self.MenuManager.DisplayMenu()
112-
idx = int(input("제거할 메뉴의 번호를 입력하세요: ")) - 1
113-
if idx<0 or idx>self.MenuManager.getMenuListLength()-1:
114-
print("잘못된 값을 입력했습니다.")
115-
else:
116-
self.MenuManager.RemoveMenu(idx)
117-
print("성공적으로 메뉴를 제거했습니다.")
118-
time.sleep(1)
119-
120-
elif n==4:
121-
print("잠시 후 메인 화면으로 돌아갑니다...")
122-
time.sleep(1.5)
123-
break
124-
125-
def ViewStatistics(self):
126-
self.StatisticsManager.GenerateOrderStatistics()
127-
while True:
128-
print('''
129-
*************************************
130-
* *
131-
* 통계 확인 *
132-
* *
133-
* 1. 총 수익 확인 *
134-
* 2. 가장 많이 팔린 메뉴 확인 *
135-
* 3. 메인 화면으로 *
136-
* *
137-
*************************************
138-
''',)
139-
n = input()
140-
try:
141-
n = int(n)
142-
except:
143-
print("잘못된 값을 입력했습니다.")
144-
continue
145-
if n<0 or n>3:
146-
print("잘못된 값을 입력했습니다.")
147-
continue
148-
if n==1:
149-
print()
150-
self.StatisticsManager.DisplayDailyIncome()
151-
input("\n아무 텍스트를 입력하면 메인화면으로 돌아갑니다...")
152-
break
153-
154-
elif n==2:
155-
print()
156-
self.StatisticsManager.DisplayBestSellingMenu()
157-
input("\n아무 텍스트를 입력하면 메인화면으로 돌아갑니다...")
158-
break
159-
160-
else:
161-
break
162-
163-
164-
def UpdateAccount(self):
165-
newpass = input('새 비밀번호를 입력하세요: ')
166-
self.DBManager.UpdateAdminDB(newpass)
167-
print("비밀번호 변경에 성공했습니다! 잠시 후 메인 화면으로 돌아갑니다...")
12+

AdminPresenter.py

+126-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,133 @@
11
from MenuManager import MenuManager
22
from StatisticsManager import StatisticsManager
33
from AdminManager import AdminManager
4+
from CustomWidgetCreator import CustomWidgetCreator
5+
from AdminUI import AdminUI
6+
from functools import partial
47

58
class AdminPresenter():
6-
def __init__(self, ui) -> None:
7-
self.ui = ui
9+
def __init__(self, kioskpresenter) -> None:
10+
self.kioskpresenter = kioskpresenter
11+
self.ui = AdminUI()
12+
self.ui.assignPresenter(self)
13+
self.ui.initUI()
814
self.MenuManager = MenuManager.instance()
915
self.StatisticsManager = StatisticsManager.instance()
10-
self.AdminManager = AdminManager.instance()
16+
self.AdminManager = AdminManager.instance()
17+
self.WidgetCreator = CustomWidgetCreator()
18+
self.menutypelist = self.MenuManager.getMenutypeList()
19+
self.loadMenu()
20+
21+
# 관리자 도구 창 염
22+
def openUI(self):
23+
if not self.ui.isVisible():
24+
self.ui.stackedWidget.setCurrentIndex(0)
25+
self.ui.wrongpasswordlabel.setText("")
26+
self.ui.show()
27+
28+
# 비밀번호 인증
29+
def authenticate(self, password):
30+
success = self.AdminManager.authenticate(password)
31+
if success:
32+
self.ui.passwordlineedit.setText("")
33+
self.ui.changeUI(1)
34+
else:
35+
self.ui.wrongpasswordlabel.setText("잘못된 비밀번호입니다.")
36+
37+
# 주문 대기목록에 주문 추가
38+
def addOrderQueueItem(self, orderlist, ordernum, tprice):
39+
table = self.ui.orderqueuetable
40+
41+
current_row_count = table.rowCount()
42+
table.setRowCount(current_row_count + 1)
43+
orderstr = ''
44+
for i, data in enumerate(orderlist.values()):
45+
orderstr += f'{data["menu"].name} x {data["quantity"]}'
46+
if i != len(orderlist) - 1:
47+
orderstr += '\n'
48+
49+
table.setItem(current_row_count, 0, self.WidgetCreator.tableWidgetItem(str(ordernum)))
50+
table.setItem(current_row_count, 1, self.WidgetCreator.tableWidgetItem(orderstr))
51+
table.setItem(current_row_count, 2, self.WidgetCreator.tableWidgetItem(str(tprice)))
52+
removeButton = self.WidgetCreator.cartItemManageButton(managetype="remove")
53+
table.resizeRowToContents(current_row_count)
54+
removeButton.clicked.connect(lambda: self.removeOrderQueueItem(table, removeButton))
55+
table.setCellWidget(current_row_count, 3, removeButton)
56+
57+
# 주문 대기목록에서 주문 삭제
58+
def removeOrderQueueItem(self, table, button):
59+
row = self.getWidgetRow(table, 3, button)
60+
table.removeRow(row)
61+
62+
# 메뉴 관리 창에 현재 메뉴 목록 표시
63+
def loadMenu(self):
64+
table = self.ui.curmenutable
65+
menus = self.MenuManager.getMenuList()
66+
table.setRowCount(len(menus))
67+
68+
for i, menu in enumerate(menus):
69+
table.setItem(i, 0, self.WidgetCreator.tableWidgetItem(str(menu.id)))
70+
table.setItem(i, 1, self.WidgetCreator.tableWidgetItem(menu.name))
71+
table.setItem(i, 2, self.WidgetCreator.tableWidgetItem(str(menu.price)))
72+
table.setItem(i, 3, self.WidgetCreator.tableWidgetItem(str(menu.menutype)[9:]))
73+
74+
editButton = self.WidgetCreator.cartItemManageButton(managetype="edit")
75+
editButton.clicked.connect(partial(self.editMenu, menu.id, menu.name, str(menu.price), str(menu.menutype)[9:]))
76+
table.setCellWidget(i, 4, editButton)
77+
78+
removeButton = self.WidgetCreator.cartItemManageButton(managetype="remove")
79+
removeButton.clicked.connect(lambda: self.deleteMenu(menu.id))
80+
table.setCellWidget(i, 5, removeButton)
81+
82+
# 메뉴 수정
83+
def editMenu(self, id, name, price, menutype):
84+
original_values = [name, price, menutype]
85+
window = self.WidgetCreator.menuEditor(name, price, menutype, self.menutypelist)
86+
def sendsignal():
87+
newvalues = [window.menunameline.text(), window.menupriceline.text(), window.menutypecombobox.currentText()]
88+
for i in range(len(newvalues)):
89+
if newvalues[i] == '': newvalues[i] = original_values[i]
90+
self.MenuManager.editMenu(id, newvalues[0], newvalues[1], newvalues[2])
91+
window.close()
92+
window.okButton.clicked.connect(lambda: sendsignal())
93+
window.exec_()
94+
self.refresh()
95+
96+
# 메뉴 삭제
97+
def deleteMenu(self, id):
98+
self.MenuManager.deleteMenu(id)
99+
self.refresh()
100+
101+
# 메뉴 생성
102+
def createMenu(self):
103+
window = self.WidgetCreator.menuCreator(self.menutypelist)
104+
def sendsignal():
105+
newvalues = [window.menunameline.text(), window.menupriceline.text(), window.menutypecombobox.currentText()]
106+
for i in range(len(newvalues)):
107+
if newvalues[i] == '':
108+
window.errormessage.setText("입력하지 않은 정보가 있습니다.")
109+
return
110+
self.MenuManager.createMenu(newvalues[0], newvalues[1], newvalues[2])
111+
window.errormessage.setText("")
112+
window.close()
113+
window.okButton.clicked.connect(lambda: sendsignal())
114+
window.exec_()
115+
self.refresh()
116+
117+
# ui 새로고침
118+
def refresh(self):
119+
self.loadMenu()
120+
self.menutypelist = self.MenuManager.getMenutypeList()
121+
self.kioskpresenter.loadMenu()
122+
123+
# 위젯이 들어있는 행 찾음
124+
def getWidgetRow(self, table, column, widget):
125+
row = -1
126+
for i in range(table.rowCount()):
127+
if table.cellWidget(i, column) == widget:
128+
row = i
129+
if row == -1:
130+
print("Could not find row")
131+
return -1
132+
return row
133+

0 commit comments

Comments
 (0)