From a04638f557add64b9dd1c3fb287712f0443f7d7b Mon Sep 17 00:00:00 2001 From: ggeerraarrdd Date: Tue, 19 Dec 2023 03:56:10 -0600 Subject: [PATCH] Improve ability to include extra info on showings --- app.py | 44 +++++++++++- form.py | 142 +++++++++++++++++++++++++++++++++++++++ lafs.db | Bin 6504448 -> 6504448 bytes queries.py | 20 +++++- templates/cms_index.html | 2 +- templates/cms_view.html | 109 +++++++++++++++++------------- 6 files changed, 269 insertions(+), 48 deletions(-) diff --git a/app.py b/app.py index 1f97668..ac03869 100644 --- a/app.py +++ b/app.py @@ -6,7 +6,7 @@ import sqlite3 import queries -from form import get_dicts, get_query +from form import get_dicts, get_query, get_dicts_updates, get_query_update_series, get_query_update_schedules # Configure application @@ -290,6 +290,48 @@ def cms_view(): if request.method == "POST": + post = request.form.to_dict() + + # print(json.dumps(post, indent=4)) + + dicts = get_dicts_updates(post) + dict_series = dicts[0] + dict_schedule = dicts[1] + # dict_films = dicts[2] + # dict_colors = dicts[3] + + # print(json.dumps(dict_series, indent=4)) + # print(json.dumps(dict_schedule, indent=4)) + # print(json.dumps(dict_films, indent=4)) + # print(json.dumps(dict_colors, indent=4)) + + # + # FILM SERIES + # + # 1. Translate dict into SQL query + query_series = get_query_update_series(dict_series) + # 2. Execute query + if query_series is not None: + print(query_series) + queries.update_records(db, query_series) + else: + print("Series: nothing to update") + + # + # SCHEDULE + # + # 0. Update dictionary + for film in dict_schedule: + if "id" in dict_schedule[film]: + dict_schedule[film]["film_id"] = dict_schedule[film].pop("id") + # 1. Translate dict into SQL query + query_schedule = get_query_update_schedules(dict_schedule) + print(query_schedule) + # 2. Execute query + if query_schedule is not None: + for query in query_schedule: + queries.update_records(db, query) + return redirect("/cms") else: diff --git a/form.py b/form.py index 206dd43..30eae56 100644 --- a/form.py +++ b/form.py @@ -155,3 +155,145 @@ def get_query(dict): query = f"INSERT INTO {table_name} ({columns}) VALUES ({values});" return query + + +def get_dicts_updates(post): + + keys_series = [ + "series_number", + "series_semester", + "series_year", + "series_title", + "series_brief", + "series_poster" + ] + + keys_schedule = [ + "schedule_id", + "series_id", + "imdb", + "schedule", + "notes" + ] + + keys_films = [ + "id", + "imdb", + "film_title", + "film_director", + "film_year", + "film_runtime", + "film_description", + "wiki", + ] + + keys_colors = [ + "color1", + "color2", + "color3" + ] + + # PART 1 + # Create series dict + dict_series = {k.lstrip('new_'): post[k] for k in keys_series if k in post} + + # INTERIM + # Process post to create dictionary for schedule and films keys + dict_all = {} + + for key, value in post.items(): + if key not in keys_series and key not in keys_colors: + num = 'film' + key[-1] + if key[-2].isdigit(): + num = 'film' + key[-2:] + key = key.rstrip('0123456789') + if num not in dict_all: + dict_all[num] = {} + key = key.rstrip('0123456789') + dict_all[num][key] = value + + # PART 2 + # Only schedule keys in dict_all + dict_schedule = {} + + for key, value in dict_all.items(): + film_values = {} + for k, v in value.items(): + if k in keys_schedule: + film_values[k] = v + dict_schedule[key] = film_values + + # PART 3 + # Only film keys in dict_all + dict_films = {} + + for key, value in dict_all.items(): + film_values = {} + for k, v in value.items(): + if k in keys_films: + film_values[k] = v + dict_films[key] = film_values + + # PART 4 + # Create films dict + dict_colors = {k: post[k] for k in keys_colors if k in post} + + # RETURN + return dict_series, dict_schedule, dict_films, dict_colors + + +def get_query_update_series(dict): + + series_number = dict.get("series_number") + + set_values = [] + + count = 0 + for key, value in dict.items(): + if key != "series_number": + if value: + set_values.append(f"{key} = '{value}'") + count += 1 + + set_values = ", ".join(set_values) + + if count == 0: + query = None + else: + query = f"UPDATE series SET {set_values} WHERE series_id = {series_number};" + + return query + + +def get_query_update_schedules(dict): + + count = 0 + query = [] + + for key, value in dict.items(): + + set_values = [] + set_condition = [] + + if value["notes"]: + for inner_key, inner_value in value.items(): + if inner_key != "schedule_id": + if inner_key == "imdb": + set_values.append(f"film_id = '{inner_value}'") + else: + set_values.append(f"{inner_key} = '{inner_value}'") + elif inner_key == "schedule_id": + set_condition.append(f"{inner_key} = '{inner_value}'") + + set_values = ", ".join(set_values) + set_condition = " AND ".join(set_condition) + + query.append(f"UPDATE schedules SET {set_values} WHERE {set_condition};") + + count += 1 + + if count == 0: + query = None + + return query + diff --git a/lafs.db b/lafs.db index 9b46a1ed064e089cd979707860536a73dfe872b9..1d410f12bc780bdc1dc608db9ee605b958ba8748 100644 GIT binary patch delta 2516 zcmbW3T})eL9L7)iXnRh3S{Sg>7Z_)-F}_ZD&wD<4&V~-yK=vtYDCp+40taYhK-wa@ zEDoH>cA;ilO|}c;mZ*tWx~K_W%!!GKUU*^RjZ1dnyjkK*mY5m6FpJOWfwuF~CcpOd zJpcE3{~vEpy1e{$=`y%fSNVYByc)-OKEmgAj^hR{cd88!xY*QhqHv4z`71d8ec{j0 zem)~Mhpzc6eATPH3(__3pm59cQ>3xc^F}(87@xJ%GxJNC#^!JYROC!B~ z2m7V`ZGmqU`1Hh#J-Ik*pG;0>hy6{#w4F-YX?){(DSK0_&QhMwej-M)kAuGK(Li3=1q|2L@>p~M%dtn{p$bCa4#Pn15<1nk(9y&XLE`80pQ;|ZOAD6BpdJT;3YT=?o` zS|zUzEl72K=lwI^IgzjDcKJn5_)hqC_=E7puo-R$mxS(zehA$Ry&HNpbUf4(+7|MQ zzl%SLUx?Slv*Ianuh=RE{eSqs555;%4o(IKgPp;Oz@xy=fm?wafj0v)fr9}Ws22Vf z?h0$dhr&f+Rv7Y63AKKa|AqgS|CoP^U*Jc0lUwauklyi)k7_>7)3|k|+?&ZzYM6@2 z7-gDFnXG67^Ru(_OZKER{+g7KhFf~2rDSGCN-x+G$;7NQy=bR1ozi47Wlv=0Q_`rN znzK{Vpq)B1KYfb1#*r%>)%ylgwk<6r&zwo5rNrE%G?_}yy_}X7QuD7QC*ePZ)tQ-O zTAE6x(iyzZo|fjPaLbnF>?O%PKCN|LE_*_5DQhLTh_$tp@&9o3mwRg^vdilf!J!5g zw@eEaRIshW$j zh~k=;JDREKiUAGtuw-fyTF?~5QZ-bX*ScVSr~}!>3PIFR4X3<(kX+E16*oU66``a1N-sVL&y~=xWaVn5L<@86gvA&}563yCP$KLm>vU(oCmN z#3-_2k@|v0ErT-0+tnDJ(IeU6?}oZbv?$1AmQpw*jMNrsMqJBv5e8INbP_=YUpX0U z&Id6?jhluu>|794NKIa&R96)oK}W+WLp!Ts5Q@Q|swjx5Mj?o*WRt6vZ|tG#b0$AQ&WE(5MkNE$5g*LxL6w6>H33Zt0H3h*+fQs-ZZi z6YJ1>iv)``mc0`bkC8ypJxx*K>t0NzIuVLA6-{#IKoyx;QQpg~|Bw|$w{p$H9*}6% z?@HO-T{U=?Y(!DjLaMo+yCPE~>di~kFtl9roCAUe9WF z)Oga)JsuC(bJ4QGYTZPIt}zB|L`w^j7FVtHJt=w+Epesny{@XdsHYI8z`(U|Mr>Yq zbln3=Kq)8#<-iMkzz=vJfB*;r5rjY(RDepb2~>e}`oREr1`L9IU_Uqj x4uV7AFnAUWfnjh290eobIq*Cf1!Ld^@FF+{j)RxL32+je0*TeN!SSBI{sjUSjCTM4 delta 5486 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 R& - {{ next.note }} + {{ next.notes }} diff --git a/templates/cms_view.html b/templates/cms_view.html index a43a07b..e07c98a 100644 --- a/templates/cms_view.html +++ b/templates/cms_view.html @@ -22,7 +22,7 @@ -
+
@@ -30,9 +30,13 @@
- Film Series + + Film Series #{{ cms_series.series_id }} +
+
Status: {% if cms_status.status == 1 -%} @@ -53,15 +57,15 @@

-
- Semester
+


-
- Year
+

@@ -69,15 +73,13 @@

-

-
- -
+
+


@@ -104,22 +106,28 @@
-
+
{{- loop.index -}}

-
-
+ + + +
+

+
-
-
+
+
+
+

+ +
-
- Director
+

+
-
-
+
+

+
-
- Runtime
+

-
- -
+ +
+

+
-

-
- -

@@ -311,21 +326,25 @@


- +


- +


- +
@@ -394,7 +413,7 @@
-