MetiMiester commited on
Commit
c6edf1b
Β·
verified Β·
1 Parent(s): d66fb93

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -80
app.py CHANGED
@@ -15,10 +15,6 @@ from src.ui.closing_ui import render_closing_tab
15
  from src.ui.admin_ui import render_admin_tab
16
 
17
 
18
- # =====================================================
19
- # Bootstrap database (schema + seed)
20
- # =====================================================
21
-
22
  def bootstrap():
23
  db_path, persistent = resolve_db_path()
24
 
@@ -29,11 +25,10 @@ def bootstrap():
29
  finally:
30
  conn.close()
31
 
32
- # Auto daily close (idempotent, safe)
33
  auto_close_if_needed(
34
  db_path=db_path,
35
  actor="system",
36
- note="Auto-close check on app startup",
37
  )
38
 
39
  return db_path, persistent
@@ -42,25 +37,13 @@ def bootstrap():
42
  DB_PATH, IS_PERSISTENT = bootstrap()
43
 
44
 
45
- # =====================================================
46
- # Gradio App
47
- # =====================================================
48
-
49
  with gr.Blocks(title="Venus Hotel Front Desk") as demo:
50
- # ---------------- Header ----------------
51
  gr.Markdown("# 🏨 Venus Hotel Front Desk")
52
 
53
  if not IS_PERSISTENT:
54
- gr.Markdown(
55
- "⚠️ **Persistent storage is NOT enabled.**\n\n"
56
- "Database is using fallback `./data/venus_hotel.db`.\n"
57
- "Enable Hugging Face Persistent Storage to keep data."
58
- )
59
-
60
- gr.Markdown(f"**Database:** `{DB_PATH}`")
61
 
62
- # ---------------- Global State ----------------
63
- auth_state = gr.State(None) # {"username":..., "role":...}
64
  selected_room_state = gr.State(None)
65
 
66
  header_user = gr.Markdown("πŸ”’ Not logged in")
@@ -68,77 +51,38 @@ with gr.Blocks(title="Venus Hotel Front Desk") as demo:
68
  def update_header(auth):
69
  if not auth:
70
  return "πŸ”’ Not logged in"
71
- return f"πŸ‘€ Logged in as **{auth['username']}** (`{auth['role']}`)"
72
 
73
- # ---------------- Login ----------------
74
- with gr.Row():
75
- login_panel, login_events = render_login(
76
- db_path=DB_PATH,
77
- auth_state=auth_state,
78
- )
79
 
80
- # Update header after login/logout
81
  auth_state.change(
82
- update_header,
83
- inputs=[auth_state],
84
- outputs=[header_user],
85
- )
86
-
87
-
88
- # ---------------- Main Tabs ----------------
89
- with gr.Tabs():
90
- with gr.Tab("🧱 Rooms"):
91
- render_rooms_tab(
92
- db_path=DB_PATH,
93
- auth_state=auth_state,
94
- selected_room_state=selected_room_state,
95
- )
96
-
97
- with gr.Tab("πŸ“‹ Reservations"):
98
- render_reservations_tab(
99
- db_path=DB_PATH,
100
- auth_state=auth_state,
101
- )
102
-
103
- with gr.Tab("πŸ’³ Payments"):
104
- render_payments_tab(
105
- db_path=DB_PATH,
106
- auth_state=auth_state,
107
- )
108
-
109
- with gr.Tab("πŸ“Š Income & Expenses"):
110
- render_income_expense_tab(
111
- db_path=DB_PATH,
112
- auth_state=auth_state,
113
- )
114
-
115
- with gr.Tab("πŸ—“ Daily Closing"):
116
- render_closing_tab(
117
- db_path=DB_PATH,
118
- auth_state=auth_state,
119
- )
120
-
121
- with gr.Tab("βš™οΈ Admin"):
122
- render_admin_tab(
123
- db_path=DB_PATH,
124
- auth_state=auth_state,
125
- )
126
-
127
- # Header refresh on page load
128
- demo.load(
129
  update_header,
130
  inputs=[auth_state],
131
  outputs=[header_user],
132
  )
133
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
134
 
135
- # =====================================================
136
- # Run (Local & Hugging Face compatible)
137
- # =====================================================
138
 
139
  if __name__ == "__main__":
140
- port = int(os.environ.get("PORT", "7860"))
141
  demo.queue(default_concurrency_limit=16).launch(
142
  server_name="0.0.0.0",
143
- server_port=port,
144
  )
 
15
  from src.ui.admin_ui import render_admin_tab
16
 
17
 
 
 
 
 
18
  def bootstrap():
19
  db_path, persistent = resolve_db_path()
20
 
 
25
  finally:
26
  conn.close()
27
 
 
28
  auto_close_if_needed(
29
  db_path=db_path,
30
  actor="system",
31
+ note="Auto-close on startup",
32
  )
33
 
34
  return db_path, persistent
 
37
  DB_PATH, IS_PERSISTENT = bootstrap()
38
 
39
 
 
 
 
 
40
  with gr.Blocks(title="Venus Hotel Front Desk") as demo:
 
41
  gr.Markdown("# 🏨 Venus Hotel Front Desk")
42
 
43
  if not IS_PERSISTENT:
44
+ gr.Markdown("⚠️ Persistent storage is NOT enabled.")
 
 
 
 
 
 
45
 
46
+ auth_state = gr.State(None)
 
47
  selected_room_state = gr.State(None)
48
 
49
  header_user = gr.Markdown("πŸ”’ Not logged in")
 
51
  def update_header(auth):
52
  if not auth:
53
  return "πŸ”’ Not logged in"
54
+ return f"πŸ‘€ Logged in as **{auth['username']}** ({auth['role']})"
55
 
56
+ render_login(DB_PATH, auth_state)
 
 
 
 
 
57
 
 
58
  auth_state.change(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  update_header,
60
  inputs=[auth_state],
61
  outputs=[header_user],
62
  )
63
 
64
+ with gr.Tabs():
65
+ with gr.Tab("Rooms"):
66
+ render_rooms_tab(DB_PATH, auth_state, selected_room_state)
67
+
68
+ with gr.Tab("Reservations"):
69
+ render_reservations_tab(DB_PATH, auth_state)
70
+
71
+ with gr.Tab("Payments"):
72
+ render_payments_tab(DB_PATH, auth_state)
73
+
74
+ with gr.Tab("Income & Expenses"):
75
+ render_income_expense_tab(DB_PATH, auth_state)
76
+
77
+ with gr.Tab("Daily Closing"):
78
+ render_closing_tab(DB_PATH, auth_state)
79
+
80
+ with gr.Tab("Admin"):
81
+ render_admin_tab(DB_PATH, auth_state)
82
 
 
 
 
83
 
84
  if __name__ == "__main__":
 
85
  demo.queue(default_concurrency_limit=16).launch(
86
  server_name="0.0.0.0",
87
+ server_port=int(os.environ.get("PORT", 7860)),
88
  )