From d8240448c226f3ee3d4c558d131c2c284ad76ff5 Mon Sep 17 00:00:00 2001 From: n9-baker <nathan2.baker@live.uwe.ac.uk> Date: Mon, 31 Mar 2025 15:10:02 +0100 Subject: [PATCH] working on createBooking.. --- src/__pycache__/constants.cpython-38.pyc | Bin 507 -> 507 bytes src/__pycache__/dbfunc.cpython-38.pyc | Bin 4544 -> 4550 bytes src/__pycache__/staffUser.cpython-38.pyc | Bin 4136 -> 5260 bytes src/dbfunc.py | 7 ++-- src/staffUser.py | 47 ++++++++++++++++++++++- 5 files changed, 48 insertions(+), 6 deletions(-) diff --git a/src/__pycache__/constants.cpython-38.pyc b/src/__pycache__/constants.cpython-38.pyc index 5407becad84724af1ad69cce59b95785cada7604..5ea3abf5d9a57105ebe07c9c1a834cae2e71d7a8 100644 GIT binary patch delta 20 bcmey({F|9Ol$V!_fq{WxLjS9c+#eVLJ>~{C delta 20 bcmey({F|9Ol$V!_fq{X++5W~x?hlLrIgtg3 diff --git a/src/__pycache__/dbfunc.cpython-38.pyc b/src/__pycache__/dbfunc.cpython-38.pyc index 80583cd309f5cd688e9e7ee73e1aeaff4cfd8f09..8346d03f6a931ec3d5de2fd06882ba260d0076ca 100644 GIT binary patch delta 544 zcmX@0d`y`)l$V!_fq{YH>HJsewi9_}87EEDE>uh9OBG1rox_yEm%`t|5+#@-kRsT^ z5G9l%lp@^15G9<#7|ft4vT;`(tH=Qc28I%bW`<hk8s=iYbcSGts)ETrY&s?>>~onH zGBPsMuq<GyVTH0-7c$hc)vy(3l`t(}PT>HFhBKsa1~Y*9T$5L^Nn7q>WT<6lWT=uV zVOqeM!d=5Yn_(^!L}etyA{LP96wX@qI`#;LNQOM72(W%lp2WGE|FQKmPM*i1&COm| znp#w8tNx2oeewm4TgF^$j4X^SOiWBXjAD#Jj9iQyj4X^?jBJbojBJb|i~@{B+6)W~ znoLEC3=9mnSW*&85+`5aloGoI^BhwRQ!yXN*Hv4p@+NV4@YFCaU|-0vkcp9@hH3I* zK2^qjlTY$lPTtP7V6v5f=;R!3!O1P$CQ?N@3=9lK!XQExWHftneokp_UU8AZ<TJc- zx|w;!sYNC6nRzAo@g<2#IjP|c3=G9epa@}tIGKf!gOQI>gi(S~V6z-gB_pHZ<Qcrl zjCq^?@E&1g?4Ep(zh7JrWV}4cc-E5Af}GSM1CRhnq0(f3PIg9}$^8PZjLnm;3TU!f ng8V5mnME*14CLioEGe1EB}K*{4JIJMa&m*9HLH?<IEN?zcL0Lp delta 552 zcmX@6d_b8ul$V!_fq{YHM(mAruZg^}j9nA83*}OHQ}|jKq6AX-Qv_NVq6AX}Q-oR= zqJ&ZygBdi1Hy)~E71_tYz)-@_%uvf*!(7al&JfH{l{YzrO{ab?(?Ui@h8mUyEH$i9 z7VAQWTDBUt;*1ie1<WbzAklD!6pmm9FrTxAZ8if`7h5<(Farxi30oF>7DqN$(GEt2 zT6RW;Dyb5t1)M2dHS92z;S7-si&#Krq;S--*Re-1L^9+tMKGkWa|APJawo3a%)#Ez zIQb=u^5m5qlI(1SrKv@gwv*3t+*0FaV`O1uVPaz9VH9H&VB})tU}RzBVq{|!U}R$y zVH992(qdp>n0$*<O6(rYlT0;C#e5*&SM8`On#{%J;Z(w2!?=KBAwx6cLMBFr8m0xD z3mF(0O1Ktqr*J?#7|yWBBZU*}9iA-SEWT{6qC-&c$dzy{;GaB!>nx+d<T!3sHrA5T zf}GUJP28r^w^&jVOA?EO85kIfWEmJ3Zm}ol=alB=6&LAGzR0c57%`cVM~YEovkXrq zBcs9OX}rmd`I~?79${qcnY^FBUsMOAQ65C-fe3vN0aB*K!BM0L;uucu7jR{4nS511 llg)yGfk9JvGK*l20Lafp#vlbIAi`pDo1itTGKV;aC;)|YfQJA8 diff --git a/src/__pycache__/staffUser.cpython-38.pyc b/src/__pycache__/staffUser.cpython-38.pyc index 343e76504ab6456f938f01a09af3c61b5601119a..f2c28d2f5ea35cd2431b03f79b2148e91e4e7a19 100644 GIT binary patch delta 1523 zcmZ3X(4)y0%FD~ez`(%ZH~&?7i_Av8XPouy3=9k)?99NxP@Koez)-@F!r08n$WX#q z!j!_)%-GCW3t}-hGuATIFs86%Gf!YFN~mFiu}YXzSX0<i*lQSPGt6a5;pk<qWv*dP z;gn>kWiDY^z*@pq!`#fc5M(0D0@f6+8fK6>5Wj{wg{2;BTv!d$0`?T{g^aaKAT238 zHB2x?DZD9sEethGE({<CfMxj+vL(zZ0x5ziLN&}O!jcRiJzxj0)UbdYkRm9_P|E_= zBT~Zxk_A~?!coK2%vi!$!_v%{UC%gyvB;-{6C{+vnau*?)i9@sN-~sify6`@YFSIT zYZ$V4YM4{RBpGU$YFKNSQ^X}1QY3m=YuUhtOV+T#4d+dfs$ol!?qy<RNMQ*Eg{BNB zH1jx07*b?GtU{2O9E6p^!V=7&DL+}7%c))}ASX4kI8`Atub{L<At^sUJ2Nj`Au}&6 zU$2UXD>x&+9K`o@v8vMM3QkQdDOSkLQ%K7%%1ta$P&ZUp$S+b*H&ifEFjiO4$jetq zDJ@7X*0l1w#a)t=1Jzwz#KOS9P{mygF)Tha#a5HKNRfeo;TC6oacWL#a!F=>UXc<5 z149ubNF^^!WlCa6qU|q6g({w6kkxv{1v!}|w#gtxp!5X7ObiSRAmf8U2}y*3fgzot zh9Q=xma&APhOwD(B2yttFhh|50|SF5<1OaQyb?{OTTFTew-_tHf~sJ$ND$;0E}NXp z;*#Y2+yc8~kZB-e*%+7@s<bEX<r1&gv&qR%PRuE`(?h7M;(|CVGq1!piVNiB<f7En zyy7SUka%WZdVF$XL1J=dNo5sRF<1)Z`zTI08{#vlLfc!c1x1<3skgXb0g#yz#R+1^ zmt@xGrfRYl@qhx!9OPPXki_Se<|d^U72o16$uCLFiHB(CfktC|N@7WB6;EbfacWTs zh?8gwju$6LEEj7sfn%Xa9u(+Oo_S@7IhiR6P?syfV@9t^*fX!J9wG^kL%k|_-^}7- zQ0joBodQTgDk-W|NK8-6%+u541N$ehq{s;5U{<iQTjCIN<I{@rbK^@AlX6ny%QI4o zQj4TOUXuo?WGSgENWH}hj_q5_xrr6Gm~%5z@@_Hbq~_gXNy$tu0f$4BAk=4>c_sM} zqcquz_(8^iLMVzA<dfnk9#8;+LKu{qqPRhVAYO7}L6I2)149%y)D)2P<Oy8LZcd<d z#md3N!^puX!o<SJ#K`fFjhTayk5Pb$i;0U-0K{ShiSztpW9DHLU{YWbV3c7L0Ezu) zV`5?AV&-C=yqjwgYmqer1H<GjZhywQ$-B7q`HMgfE3yDN(UO6IVY2`a3!^BiSdkS- z)_SrLZ-4;0%;ZVD+Kg?J_wm+o%PY92mJ}<1{5DyMTW4}CAHQIcK1iz@h;RoHo|9Yo z6c}er-o>pjIhK!O@;N?TR&ZQQ;@6jV1*vcW5niA$XHCn=Pb?|&1qt|p9Q~1BWO6dU wJfq>{X8srfe^5xVmKLWL85Y?<q?N^l7#J7?7&#b00mZ|@SI?lx!NkT00JWZ!!vFvP delta 405 zcmeCtT%o`h%FD~ez`($;Ht9xsqtHgaXPoMc3=9m+3=9m;3=9m#A`A=+B@7D~Qy3RA zGBT7fH8V6ZrZ5FFXfjVO<#y7RPEO3pNlj5mE=o--Np;H4&(6$CSIA8*$;eOf(_}7^ zVqjn>k_HhXljn0vOn$^C%)tV(kC}^cvNiuA-do%yNjXq`#giZL`!fbl<`!0%e2$+( zSd*oQhk=3N7FTgbetBkIdVFTe<T_sI%>@E1jB;imL(M^i1xO7~62$KKl*E$MB7@1D zf&l`kN{TEezZBGFjGiniRL96Uc^$vP<WoZYl3)h}Lo6sRG6WfD1R_i(3kpbZ!X$Dh za|?&E-eS(oE18@stS_q%vXdnxGr6S56vSjr%gIkHDY60Sw41y^*o={F@^j%B5qky( whA7t3;?yF;TdV~|nRz8e0+R&=gePZ+@QDa8Ffa%(axn6MFbiKP2NN4307~6wr~m)} diff --git a/src/dbfunc.py b/src/dbfunc.py index 11ee058..828e58a 100644 --- a/src/dbfunc.py +++ b/src/dbfunc.py @@ -58,7 +58,6 @@ def select_from_table_where(table:str, condition:str, selection:str): condition (str): condition string in SQL format, eg; "WHERE username = %s AND password_hash = %s" *columns: excepts all aditinal arguments and converts them into SQL query following SELECT as arguments, if none SQL statemnt uses *. Returns: - Returns: list(dict()) """ conn = get_connection() @@ -69,7 +68,7 @@ def select_from_table_where(table:str, condition:str, selection:str): #logging.debug(table, condition, selection) cursor = conn.cursor(dictionary=True) query = f"SELECT {selection} FROM {table} WHERE {condition}" - logging.debug(f"query={query}") + logging.debug(f"query='{query}'") cursor.execute(query) results = cursor.fetchall() # returns string in format str(dict(key:values)) if not results: @@ -85,7 +84,7 @@ def select_from_table_where(table:str, condition:str, selection:str): # conn.close() # Function to INSERT data into any table -def insert_into_table(table, data): +def insert_into_table(table:str, data:dict): """Inserts data into a specified table.""" conn = get_connection() if not conn: @@ -96,7 +95,7 @@ def insert_into_table(table, data): columns = ', '.join(data.keys()) values = ', '.join(['%s'] * len(data)) query = f"INSERT INTO {table} ({columns}) VALUES ({values})" - cursor.execute(query, tuple(data.values())) + cursor.execute(query, data.values()) conn.commit() logging.info("Data inserted successfully.") return True diff --git a/src/staffUser.py b/src/staffUser.py index 03edb2a..2d9b4e4 100644 --- a/src/staffUser.py +++ b/src/staffUser.py @@ -77,8 +77,51 @@ class StaffUser: def createBooking(self): """ Adds booking to db and returns ticket if succsessful. """ - logging.debug("called createBooking method") - raise NotImplementedError() + # input data and validation loop + while True: + print("Please input booking info.") + + showing_id = int(input("\nShowing ID:")) + seats = input("\nSeats in format '1' or '1 2 3' (no dupes):") + if showing_id != None and seats != None: + # import showing data + showing_data = select_from_table_where(table="tblShowings", + selection="*", + condition=f"showing_id={showing_id}") + showing_data = showing_data[0] + logging.debug(type(showing_data)) + logging.debug(f"showing_data={showing_data}") + # check if showing_data was returned from db + if showing_data != None: + # validate selected seats + seats = seats.split(" ") + logging.debug(f"seats.split={seats}") + seats = [int(x) for x in seats] # use while seats are int, remove when seats are str. + logging.debug(f"seats.int={seats}") + seating_cap = select_from_table_where(table="tblScreens", + selection="seating_capacity", + condition=f"screen_id={showing_data['screen_id']}") + seating_cap = seating_cap[0]['seating_capacity'] + logging.debug(f"seating_cap={seating_cap}") + # check if seat selection in range + if max(seats) <= int(seating_cap) and min(seats) > 0: + # showing_id and seats exist, and seat selection is in range now save to tblBookings + price = showing_data['price'] * len(seats) + insert_data=dict(user_id=self.user_id, showing_id=showing_data['showing_id'], seat_numbers=seats, total_price=price, booking_date=showing_data['show_time']) + logging.debug(f"insert_data={insert_data}") + insert_into_table(table="tblBookings", + data=insert_data) + return + + print("Invalid seating selection.") + + else: + print("Invalid showing_id.") + + else: + print("Missing input please try again.") + + def veiwBookings(self) -> dict: """ Gets bookings from db -- GitLab