devorah-ai-2016 commited on
Commit
4f66619
·
verified ·
1 Parent(s): 6f11003

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +81 -0
app.py ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import sqlite3
3
+ import random
4
+ import tempfile
5
+ from io import BytesIO
6
+ from datetime import date, datetime
7
+
8
+ import pandas as pd
9
+ import streamlit as st
10
+ from openpyxl import Workbook
11
+ from openpyxl.styles import Font, Alignment, Border, Side, PatternFill
12
+ from openpyxl.utils import get_column_letter
13
+ from openpyxl.drawing.image import Image as XLImage
14
+
15
+
16
+ # =========================================================
17
+ # 급여제공지침 교육일지 통합연동 생성기
18
+ # - Client Center DB와 같은 clients.db 사용
19
+ # - 기관정보/참석자(직종별 입력)/강사/교육자료 첨부/교육결과/평가 적합도 점검
20
+ # - 결재라인 담당자/시설장 2칸, 지저분한 빈칸 없이 출력
21
+ # =========================================================
22
+
23
+ st.set_page_config(
24
+ page_title="급여제공지침 교육일지",
25
+ page_icon="📘",
26
+ layout="wide"
27
+ )
28
+
29
+ CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
30
+
31
+ DB_CANDIDATES = [
32
+ os.path.join(CURRENT_DIR, "data", "clients.db"),
33
+ os.path.join(CURRENT_DIR, "..", "Client Center", "data", "clients.db"),
34
+ os.path.join(CURRENT_DIR, "..", "ClientCenter", "data", "clients.db"),
35
+ os.path.join(CURRENT_DIR, "..", "Client_Center", "data", "clients.db"),
36
+ ]
37
+
38
+ DB_PATH = None
39
+ for p in DB_CANDIDATES:
40
+ if os.path.exists(p):
41
+ DB_PATH = p
42
+ break
43
+
44
+ if DB_PATH is None:
45
+ os.makedirs(os.path.join(CURRENT_DIR, "data"), exist_ok=True)
46
+ DB_PATH = os.path.join(CURRENT_DIR, "data", "clients.db")
47
+
48
+
49
+ # -----------------------------
50
+ # 디자인
51
+ # -----------------------------
52
+ st.markdown("""
53
+ <style>
54
+ .block-container { padding-top: 2rem; }
55
+ .hero {
56
+ background: linear-gradient(135deg, #7C2D12, #EA580C);
57
+ padding: 30px;
58
+ border-radius: 22px;
59
+ text-align: center;
60
+ margin-bottom: 22px;
61
+ }
62
+ .hero h1 { color: white; margin: 0; font-size: 36px; }
63
+ .hero p { color: white; margin-top: 10px; font-size: 18px; }
64
+ .notice {
65
+ background: #fff8e1;
66
+ border-left: 7px solid #f9a825;
67
+ padding: 15px;
68
+ border-radius: 12px;
69
+ margin-bottom: 18px;
70
+ }
71
+ .okbox {
72
+ background: #e8f5e9;
73
+ border-left: 7px solid #43a047;
74
+ padding: 14px;
75
+ border-radius: 12px;
76
+ margin-bottom: 14px;
77
+ }
78
+ .warnbox {
79
+ background: #fff3e0;
80
+ border-left: 7px solid #fb8c00;
81
+ padding: