Hidayatmahar commited on
Commit
d39acea
Β·
verified Β·
1 Parent(s): aab92d2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +99 -43
app.py CHANGED
@@ -1,20 +1,57 @@
1
  import streamlit as st
 
 
2
  from reportlab.lib.pagesizes import A4
3
  from reportlab.pdfgen import canvas
4
- import datetime
5
 
6
- # Function to create PDF Work Permit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  def generate_pdf(data):
8
- pdf_filename = "work_permit.pdf"
9
  c = canvas.Canvas(pdf_filename, pagesize=A4)
10
  c.setFont("Helvetica", 12)
11
 
12
- # Title
13
- c.drawString(200, 800, "WORK PERMIT FORM")
14
-
15
- # Permit Details
16
- y = 780
17
- for key, value in data.items():
18
  c.drawString(50, y, f"{key}: {value}")
19
  y -= 20
20
 
@@ -22,14 +59,14 @@ def generate_pdf(data):
22
  return pdf_filename
23
 
24
  # Streamlit UI
25
- st.title("πŸ—οΈ Work Permit System")
26
 
27
- # Select permit type
28
  permit_types = [
29
- "Hot Work (Red)", "Cold Work (Blue)", "Electrical Work (Orange/Yellow)",
30
- "Confined Space Entry (Green)", "Working at Heights (Yellow)",
31
- "Lockout/Tagout (White/Red)", "Excavation/Trenching (Brown)",
32
- "Radiation Work (Purple)", "Chemical Handling (Orange/Yellow)",
33
  "Marine Work (Blue/Green)"
34
  ]
35
  permit_type = st.selectbox("Select Work Permit Type:", permit_types)
@@ -48,37 +85,56 @@ contact_number = st.text_input("Emergency Contact Number")
48
 
49
  # Safety Checklist
50
  st.subheader("βœ… Safety Checklist")
51
- ppe = st.checkbox("PPE Worn")
52
- hazard_inspection = st.checkbox("Area Inspected for Hazards")
53
- fire_extinguisher = st.checkbox("Fire Extinguisher Available")
54
- loto = st.checkbox("Lockout/Tagout Applied (if needed)")
55
- atmospheric_testing = st.checkbox("Atmospheric Testing Completed (for confined spaces)")
56
-
57
- # Submit Button
58
- if st.button("Generate Work Permit PDF"):
59
- permit_data = {
60
- "Permit Type": permit_type,
61
- "Job Description": job_description,
62
- "Work Location": location,
63
- "Start Date": start_date,
64
- "End Date": end_date,
65
- "Equipment Used": equipment,
66
- "Worker Name": worker_name,
67
- "Supervisor Name": supervisor_name,
68
- "Emergency Contact": contact_number,
69
- "PPE Worn": "Yes" if ppe else "No",
70
- "Hazard Inspection": "Yes" if hazard_inspection else "No",
71
- "Fire Extinguisher Available": "Yes" if fire_extinguisher else "No",
72
- "Lockout/Tagout Applied": "Yes" if loto else "No",
73
- "Atmospheric Testing Done": "Yes" if atmospheric_testing else "No",
74
- "Generated On": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
75
- }
76
 
77
  # Generate PDF
78
  pdf_file = generate_pdf(permit_data)
79
-
80
  # Provide Download Link
81
  with open(pdf_file, "rb") as file:
82
- st.download_button(label="πŸ“₯ Download Work Permit", data=file, file_name="work_permit.pdf", mime="application/pdf")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
 
84
- st.success("Work Permit System Ready! βœ…")
 
1
  import streamlit as st
2
+ import sqlite3
3
+ from datetime import datetime
4
  from reportlab.lib.pagesizes import A4
5
  from reportlab.pdfgen import canvas
 
6
 
7
+ # Initialize Database
8
+ conn = sqlite3.connect("work_permits.db")
9
+ cursor = conn.cursor()
10
+ cursor.execute("""
11
+ CREATE TABLE IF NOT EXISTS permits (
12
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
13
+ permit_number TEXT UNIQUE,
14
+ permit_type TEXT,
15
+ job_description TEXT,
16
+ location TEXT,
17
+ start_date TEXT,
18
+ end_date TEXT,
19
+ equipment TEXT,
20
+ worker_name TEXT,
21
+ supervisor_name TEXT,
22
+ contact_number TEXT,
23
+ safety_checks TEXT,
24
+ generated_on TEXT
25
+ )
26
+ """)
27
+ conn.commit()
28
+
29
+ # Function to generate Permit Number
30
+ def generate_permit_number():
31
+ today = datetime.now().strftime("%Y%m%d")
32
+ cursor.execute("SELECT COUNT(*) FROM permits WHERE generated_on LIKE ?", (f"%{today}%",))
33
+ count = cursor.fetchone()[0] + 1
34
+ return f"WP-{today}-{str(count).zfill(3)}"
35
+
36
+ # Function to save permit to Database
37
+ def save_to_db(data):
38
+ cursor.execute("""
39
+ INSERT INTO permits (permit_number, permit_type, job_description, location, start_date, end_date,
40
+ equipment, worker_name, supervisor_name, contact_number, safety_checks, generated_on)
41
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
42
+ """, data)
43
+ conn.commit()
44
+
45
+ # Function to create PDF
46
  def generate_pdf(data):
47
+ pdf_filename = f"{data[0]}.pdf"
48
  c = canvas.Canvas(pdf_filename, pagesize=A4)
49
  c.setFont("Helvetica", 12)
50
 
51
+ y = 800
52
+ for key, value in zip(["Permit Number", "Permit Type", "Job Description", "Location", "Start Date",
53
+ "End Date", "Equipment", "Worker Name", "Supervisor Name", "Contact Number",
54
+ "Safety Checks", "Generated On"], data):
 
 
55
  c.drawString(50, y, f"{key}: {value}")
56
  y -= 20
57
 
 
59
  return pdf_filename
60
 
61
  # Streamlit UI
62
+ st.title("πŸ—οΈ Work Permit Management System")
63
 
64
+ # Select Permit Type
65
  permit_types = [
66
+ "Hot Work (Red)", "Cold Work (Blue)", "Electrical Work (Orange/Yellow)",
67
+ "Confined Space Entry (Green)", "Working at Heights (Yellow)",
68
+ "Lockout/Tagout (White/Red)", "Excavation/Trenching (Brown)",
69
+ "Radiation Work (Purple)", "Chemical Handling (Orange/Yellow)",
70
  "Marine Work (Blue/Green)"
71
  ]
72
  permit_type = st.selectbox("Select Work Permit Type:", permit_types)
 
85
 
86
  # Safety Checklist
87
  st.subheader("βœ… Safety Checklist")
88
+ safety_checks = []
89
+ if st.checkbox("PPE Worn"):
90
+ safety_checks.append("PPE Worn")
91
+ if st.checkbox("Hazard Inspection Done"):
92
+ safety_checks.append("Hazard Inspection Done")
93
+ if st.checkbox("Fire Extinguisher Available"):
94
+ safety_checks.append("Fire Extinguisher Available")
95
+ if st.checkbox("Lockout/Tagout Applied"):
96
+ safety_checks.append("Lockout/Tagout Applied")
97
+ if st.checkbox("Atmospheric Testing Completed"):
98
+ safety_checks.append("Atmospheric Testing Completed")
99
+
100
+ # Generate Work Permit
101
+ if st.button("Generate Work Permit"):
102
+ permit_number = generate_permit_number()
103
+ generated_on = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
104
+
105
+ # Save to database
106
+ permit_data = (permit_number, permit_type, job_description, location, str(start_date), str(end_date),
107
+ equipment, worker_name, supervisor_name, contact_number, ", ".join(safety_checks), generated_on)
108
+ save_to_db(permit_data)
 
 
 
 
109
 
110
  # Generate PDF
111
  pdf_file = generate_pdf(permit_data)
112
+
113
  # Provide Download Link
114
  with open(pdf_file, "rb") as file:
115
+ st.download_button(label="πŸ“₯ Download Work Permit", data=file, file_name=f"{permit_number}.pdf", mime="application/pdf")
116
+
117
+ st.success(f"βœ… Work Permit {permit_number} generated successfully!")
118
+
119
+ # View Saved Permits
120
+ st.subheader("πŸ“‹ View Saved Work Permits")
121
+ search_type = st.radio("Search by:", ("Date", "Permit Number"))
122
+ if search_type == "Date":
123
+ search_date = st.date_input("Select Date")
124
+ cursor.execute("SELECT * FROM permits WHERE generated_on LIKE ?", (f"%{search_date}%",))
125
+ elif search_type == "Permit Number":
126
+ permit_no = st.text_input("Enter Permit Number")
127
+ cursor.execute("SELECT * FROM permits WHERE permit_number = ?", (permit_no,))
128
+
129
+ results = cursor.fetchall()
130
+ if results:
131
+ for permit in results:
132
+ st.write(f"πŸ“„ **Permit Number:** {permit[1]}")
133
+ st.write(f"πŸ“Œ **Type:** {permit[2]}")
134
+ st.write(f"πŸ“ **Location:** {permit[4]}")
135
+ st.write(f"πŸ“… **Date:** {permit[11]}")
136
+ st.write("---")
137
+ else:
138
+ st.warning("No permits found.")
139
 
140
+ st.success("Work Permit System Ready βœ…")