protae5544 commited on
Commit
29fb885
·
verified ·
1 Parent(s): 6830804

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +224 -178
app.py CHANGED
@@ -1,16 +1,45 @@
1
  import gradio as gr
2
  import sqlite3
 
3
  import os
4
  import time
5
  from reportlab.lib.pagesizes import A4
6
  from reportlab.pdfgen import canvas
7
  from reportlab.lib.units import cm
8
  import qrcode
9
- from huggingface_hub import upload_file
10
  import requests
11
 
12
  REPO_ID = "protae5544/WorkerManagement"
13
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  def setup_fonts():
15
  try:
16
  from reportlab.pdfbase import pdfmetrics
@@ -19,221 +48,238 @@ def setup_fonts():
19
  font_url = 'https://fonts.gstatic.com/s/sarabun/v13/DtVjJx26TKEqsc-lWcmw-wKE7wM.ttf'
20
  bold_url = 'https://fonts.gstatic.com/s/sarabun/v13/DtVmJx26TKEqsc-lWcmw5wq0hwOKBwXcb0A.ttf'
21
 
22
- if not os.path.exists('THSarabun.ttf'):
23
- response = requests.get(font_url, timeout=10)
24
- with open('THSarabun.ttf', 'wb') as f:
25
- f.write(response.content)
26
-
27
- if not os.path.exists('THSarabunBold.ttf'):
28
- response = requests.get(bold_url, timeout=10)
29
- with open('THSarabunBold.ttf', 'wb') as f:
30
- f.write(response.content)
31
 
32
  pdfmetrics.registerFont(TTFont('THSarabun', 'THSarabun.ttf'))
33
- pdfmetrics.registerFont(TTFont('THSarabunBold', 'THSarabunBold.ttf'))
 
34
  return True
35
- except:
 
36
  return False
37
 
38
- def init_db():
39
- conn = sqlite3.connect("workers.db")
40
- c = conn.cursor()
41
- c.execute('''CREATE TABLE IF NOT EXISTS workers (
42
- request_number TEXT PRIMARY KEY,
43
- english_name TEXT,
44
- foreign_reference_number TEXT,
45
- id_number TEXT,
46
- nationality TEXT,
47
- receipt_number TEXT,
48
- payment_number TEXT,
49
- created_at TEXT
50
- )''')
51
- conn.commit()
52
- conn.close()
53
-
54
- def create_pdf(request_number, english_name, foreign_reference_number, id_number, nationality, receipt_number, payment_number):
55
- filename = f"receipt_{request_number}.pdf"
56
-
57
- c = canvas.Canvas(filename, pagesize=A4)
58
- width, height = A4
59
-
60
- font_available = setup_fonts()
61
-
62
- # **หัวเอกสาร - เหมือนต้นฉบับ**
63
- if font_available:
64
- c.setFont("THSarabunBold", 52.284/2.83465) # ขนาดตามต้นฉบับ
65
- else:
66
- c.setFont("Helvetica-Bold", 18)
67
- c.drawString(2*cm, 28*cm, "กระทรวงแรงงาน")
68
-
69
- if font_available:
70
- c.setFont("THSarabun", 35.212/2.83465)
71
- else:
72
- c.setFont("Helvetica", 12)
73
- c.drawString(2*cm, 27.5*cm, "ใบเสร็จรับเงิน (ต้นฉบับ)")
74
- c.drawString(2*cm, 26*cm, f"เลขที่: {receipt_number}")
75
- c.drawString(2*cm, 25.5*cm, "ที่ทำการ: สำนักบริหารแรงงานต่างด้าว")
76
- c.drawString(2*cm, 25*cm, "วันที่: 01 เมษายน 2568")
77
- c.drawString(2*cm, 24.5*cm, f"เลขที่ใบชำระเงิน: {payment_number}")
78
- c.drawString(2*cm, 24*cm, f"เลขรับคำขอที่: {request_number}")
79
- c.drawString(2*cm, 23.5*cm, f"ชื่อผู้ชำระเงิน: {english_name}")
80
- c.drawString(2*cm, 23*cm, f"สัญชาติ: {nationality}")
81
- c.drawString(2*cm, 22.5*cm, f"เลขอ้างอิงคนต่างด้าว: {foreign_reference_number}")
82
- c.drawString(2*cm, 22*cm, f"หมายเลขประจำตัวคนต่างด้าว: {id_number}")
83
- c.drawString(2*cm, 21.5*cm, "ชื่อนายจ้าง / สถานประกอบการ: บริษัท บาน กง เอ็นจิเนียริ่ง จำกัด")
84
- c.drawString(2*cm, 21*cm, "เลขประจำตัวนายจ้าง: 0415567000061")
85
-
86
- # **รายการ - เหมือนต้นฉบับ**
87
- if font_available:
88
- c.setFont("THSarabunBold", 35.212/2.83465)
89
- else:
90
- c.setFont("Helvetica-Bold", 12)
91
- c.drawString(2*cm, 20*cm, "รายการ")
92
-
93
- if font_available:
94
- c.setFont("THSarabun", 35.212/2.83465)
95
- else:
96
- c.setFont("Helvetica", 12)
97
- c.drawString(2*cm, 19.5*cm, "1. ค่าธรรมเนียมในการยื่นคำขอ ฉบับละ 100 บาท: 100.00")
98
- c.drawString(2*cm, 19*cm, "2. ค่าธรรมเนียม: 900.00")
99
- c.drawString(2*cm, 18.5*cm, "รวมเป็นเงินทั้งสิ้น (บาท): (หนึ่งพันบาทถ้วน) 1,000.00")
100
- c.drawString(2*cm, 18*cm, "ได้รับเงินไว้เป็นการถูกต้องแล้ว")
101
- c.drawString(2*cm, 17.5*cm, "(ลงชื่อ) นางสาวอารีวรรณ โพธิ์นิ่มแดง (ผู้รับเงิน)")
102
- c.drawString(2*cm, 17*cm, "ตำแหน่ง: นักวิชาการแรงงานชำนาญการ")
103
-
104
- # **QR Code ที่ตำแหน่งเดิม**
105
- pdf_url = f"https://huggingface.co/spaces/{REPO_ID}/resolve/main/{filename}"
106
- try:
107
- qr = qrcode.make(pdf_url)
108
- qr.save("temp_qr.png")
109
- c.drawImage("temp_qr.png", 15*cm, 15*cm, width=3*cm, height=3*cm)
110
- except Exception as e:
111
- print(f"Error creating QR code: {e}")
112
-
113
- # **เพิ่ม print timestamp ด้านล่าง - เหมือนต้นฉบับ**
114
- if font_available:
115
- c.setFont("THSarabun", 20/2.83465)
116
- else:
117
- c.setFont("Helvetica", 7)
118
-
119
- # แปลงเวลาเป็นภาษาไทย
120
  months = {
121
  1: "มกราคม", 2: "กุมภาพันธ์", 3: "มีนาคม", 4: "เมษายน",
122
  5: "พฤษภาคม", 6: "มิถุนายน", 7: "กรกฎาคม", 8: "สิงหาคม",
123
  9: "กันยายน", 10: "ตุลาคม", 11: "พฤศจิกายน", 12: "ธันวาคม"
124
  }
125
- dt = time.localtime(time.time())
126
- thai_time = f"{dt.tm_mday:02d} {months[dt.tm_mon]} {dt.tm_year + 543} {dt.tm_hour:02d}:{dt.tm_min:02d} น"
127
-
128
- c.drawString(2*cm, 2*cm, f"พิมพ์เมื่อ: {thai_time}")
129
-
130
- c.showPage()
131
- c.save()
132
 
133
- # อัพโหลดไฟล์
134
  try:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  upload_file(
136
  path_or_fileobj=filename,
137
  path_in_repo=filename,
138
  repo_id=REPO_ID,
139
  repo_type="space"
140
  )
 
 
141
  return pdf_url
142
- except:
 
 
143
  return None
144
 
145
- def add_worker(english_name, foreign_reference_number, id_number, nationality, receipt_number, payment_number):
146
- if not all([english_name, foreign_reference_number, id_number, nationality, receipt_number, payment_number]):
147
- return "❌ กรุณากรอกข้อมูลให้ครบทุกช่อง"
148
-
149
- if not id_number.isdigit() or len(id_number) != 13:
150
- return "❌ หมายเลขประจำตัวต้องเป็นตัวเลข 13 หลักเท่านั้น"
 
 
 
 
 
 
 
 
 
151
 
152
- # สร้างเลขคำขอ
153
- conn = sqlite3.connect("workers.db")
154
- c = conn.cursor()
155
- c.execute("SELECT COUNT(*) FROM workers")
156
- count = c.fetchone()[0]
157
- conn.close()
158
 
159
- request_number = f"WP-68-366-{150 + count:03d}"
 
 
 
 
 
 
 
 
 
160
 
161
- # บันทึกข้อมูล
162
- conn = sqlite3.connect("workers.db")
163
- c = conn.cursor()
164
- c.execute('''INSERT INTO workers VALUES (?, ?, ?, ?, ?, ?, ?, ?)''',
165
- (request_number, english_name, foreign_reference_number, id_number,
166
- nationality, receipt_number, payment_number, str(time.time())))
167
- conn.commit()
168
- conn.close()
169
 
170
- # สร้าง PDF
171
- pdf_url = create_pdf(request_number, english_name, foreign_reference_number,
172
- id_number, nationality, receipt_number, payment_number)
173
 
174
- if pdf_url:
175
- result = f"""✅ สร้างใบเสร็จสำเร็จ!
 
 
 
176
 
177
- 📋 เลขคำขอ: {request_number}
178
- 👤 ชื่อ: {english_name}
179
- 🆔 หมายเลขประจำตัว: {id_number}
180
 
181
  📄 ดาวน์โหลด PDF: {pdf_url}
182
 
183
- 🔍 หน้าตาใบเสร็จจะเหมือนเดิมทุกประการ:
184
- - หัวเอกสาร "กระทรวงแรงงาน"
185
- - ข้อมูลเรียงตามต้นฉบับ
186
- - QR Code ที่มุมขวา
187
- - ลายเซ็นเจ้าหน้าที่
188
- - วันที่พิมพ์ด้านล่าง
189
-
190
- 📱 สแกน QR Code ในใบเสร็จเพื่อดาวน์โหลดอีกครั้ง"""
191
- return result
192
- else:
193
- return "❌ เกิดข้อผิดพลาดในการสร้าง PDF"
194
-
195
- def view_all():
196
- conn = sqlite3.connect("workers.db")
197
- c = conn.cursor()
198
- c.execute("SELECT request_number, english_name, nationality, id_number FROM workers ORDER BY request_number DESC")
199
- workers = c.fetchall()
200
- conn.close()
201
 
202
- if not workers:
203
- return "ยังไม่มีข้อมูลพนักงานในระบบ"
 
 
 
 
204
 
205
- result = f"📊 รายการพนักงานทั้งหมด ({len(workers)} คน)\n\n"
206
- for i, worker in enumerate(workers, 1):
207
- result += f"{i}. {worker[0]} | {worker[1]} | {worker[2]} | {worker[3]}\n"
208
 
209
  return result
210
 
211
- init_db()
212
-
213
- with gr.Blocks(title="ระบบจัดการพนักงาน") as app:
214
  gr.Markdown("# 🏢 ระบบจัดการข้อมูลพนักงานต่างด้าว")
215
  gr.Markdown("### บริษัท บาน กง เอ็นจิเนียริ่ง จำกัด")
216
- gr.Markdown("#### ✅ ใบเสร็จจะมีหน้���ตาเหมือนเอกสารต้นฉบับทุกประการ")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
217
 
218
- with gr.Tab("📝 เพิ่มพนักงานใหม่"):
219
- gr.Markdown("### กรอกข้อมูลพนักงาน")
220
-
221
- name = gr.Textbox(label="ชื่อภาษาอังกฤษ", placeholder="MR. AUNG KYAW")
222
- ref_num = gr.Textbox(label="หมายเลขอ้างอิงคนต่างด้าว", placeholder="2492102076212")
223
- id_num = gr.Textbox(label="หมายเลขประจำตัว (13 หลัก)", placeholder="6685490000472")
224
- nation = gr.Dropdown(["เมียนมา", "กัมพูชา", "ลาว", "เวียดนาม"],
225
- label="สัญชาติ", value="เมียนมา")
226
- receipt = gr.Textbox(label="เลขที่ใบเสร็จ", placeholder="2100680001130")
227
- payment = gr.Textbox(label="หมายเลขชำระเงิน", placeholder="IV680210/002350")
228
-
229
- submit = gr.Button("💾 สร้างใบเสร็จ (หน้าตาเหมือนเดิม)", variant="primary", size="lg")
230
- result = gr.Textbox(label="ผลลัพธ์", lines=12, interactive=False)
231
 
232
- with gr.Tab("📋 ดูรายการ"):
233
- view_btn = gr.Button("👥 ดูรายการพนักงานทั้งหมด")
234
- worker_list = gr.Textbox(label="รายการ", lines=15, interactive=False)
 
 
235
 
236
- submit.click(add_worker, [name, ref_num, id_num, nation, receipt, payment], result)
237
- view_btn.click(view_all, outputs=worker_list)
 
 
238
 
239
- app.launch()
 
 
1
  import gradio as gr
2
  import sqlite3
3
+ import json
4
  import os
5
  import time
6
  from reportlab.lib.pagesizes import A4
7
  from reportlab.pdfgen import canvas
8
  from reportlab.lib.units import cm
9
  import qrcode
10
+ from huggingface_hub import upload_file, hf_hub_download
11
  import requests
12
 
13
  REPO_ID = "protae5544/WorkerManagement"
14
 
15
+ # ดาวน์โหลดและโหลดข้อมูล JSON
16
+ def load_json_data():
17
+ try:
18
+ # ลองดาวน์โหลด JSON จาก Space เดิม
19
+ json_path = hf_hub_download(
20
+ repo_id="protae5544/worberkit2024poe",
21
+ filename="worker-database.json",
22
+ repo_type="space"
23
+ )
24
+ with open(json_path, 'r', encoding='utf-8') as f:
25
+ data = json.load(f)
26
+ print(f"โหลดข้อมูล JSON สำเร็จ: {len(data)} รายการ")
27
+ return data
28
+ except Exception as e:
29
+ print(f"ไม่สามารถโหลด JSON: {e}")
30
+ # ข้อมูลตัวอย่างถ้าไม่มี JSON
31
+ return [
32
+ {
33
+ "เลขคำขอ": "WP-68-366-150",
34
+ "ชื่อภาษาอังกฤษ": "MR. AUNG KYAW",
35
+ "หมายเลขอ้างอิงคนต่างด้าว": "2492102076212",
36
+ "หมายเลขประจำตัว": "6685490000472",
37
+ "สัญชาติ": "เมียนมา",
38
+ "เลขที่บนขวาใบเสร็จ": "2100680001130",
39
+ "หมายเลขชำระเงิน": "IV680210/002350"
40
+ }
41
+ ]
42
+
43
  def setup_fonts():
44
  try:
45
  from reportlab.pdfbase import pdfmetrics
 
48
  font_url = 'https://fonts.gstatic.com/s/sarabun/v13/DtVjJx26TKEqsc-lWcmw-wKE7wM.ttf'
49
  bold_url = 'https://fonts.gstatic.com/s/sarabun/v13/DtVmJx26TKEqsc-lWcmw5wq0hwOKBwXcb0A.ttf'
50
 
51
+ for filename, url in [('THSarabun.ttf', font_url), ('THSarabunBold.ttf', bold_url)]:
52
+ if not os.path.exists(filename):
53
+ response = requests.get(url, timeout=10)
54
+ if response.status_code == 200:
55
+ with open(filename, 'wb') as f:
56
+ f.write(response.content)
57
+ print(f"ดาวน์โหลดฟอนต์: {filename}")
 
 
58
 
59
  pdfmetrics.registerFont(TTFont('THSarabun', 'THSarabun.ttf'))
60
+ pdfmetrics.registerFont(TTSarabunBold', 'THSarabunBold.ttf'))
61
+ print("ลงทะเบียนฟอนต์สำเร็จ")
62
  return True
63
+ except Exception as e:
64
+ print(f"ไม่สามารถตั้งค่าฟอนต์: {e}")
65
  return False
66
 
67
+ def thai_date_time(timestamp):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  months = {
69
  1: "มกราคม", 2: "กุมภาพันธ์", 3: "มีนาคม", 4: "เมษายน",
70
  5: "พฤษภาคม", 6: "มิถุนายน", 7: "กรกฎาคม", 8: "สิงหาคม",
71
  9: "กันยายน", 10: "ตุลาคม", 11: "พฤศจิกายน", 12: "ธันวาคม"
72
  }
73
+ dt = time.localtime(timestamp)
74
+ return f"{dt.tm_mday:02d} {months[dt.tm_mon]} {dt.tm_year + 543} {dt.tm_hour:02d}:{dt.tm_min:02d} น"
75
+
76
+ def create_receipt_pdf(worker_data):
77
+ request_number = worker_data["เลขคำขอ"]
78
+ filename = f"receipt_{request_number}.pdf"
 
79
 
 
80
  try:
81
+ os.makedirs("pdfs", exist_ok=True)
82
+
83
+ c = canvas.Canvas(filename, pagesize=A4)
84
+ width, height = A4
85
+
86
+ font_available = setup_fonts()
87
+
88
+ # **หัวเอกสาร - ตำแหน่งเดิมทุกตัว**
89
+ if font_available:
90
+ c.setFont("THSarabunBold", 18)
91
+ else:
92
+ c.setFont("Helvetica-Bold", 18)
93
+ c.drawString(2*cm, 28*cm, "กระทรวงแรงงาน")
94
+
95
+ if font_available:
96
+ c.setFont("THSarabun", 14)
97
+ else:
98
+ c.setFont("Helvetica", 12)
99
+ c.drawString(2*cm, 27.5*cm, "ใบเสร็จรับเงิน (ต้นฉบับ)")
100
+ c.drawString(2*cm, 26*cm, f"เลขที่: {worker_data['เลขที่บนขวาใบเสร็จ']}")
101
+ c.drawString(2*cm, 25.5*cm, "ที่ทำการ: สำนักบริหารแรงงานต่างด้าว")
102
+ c.drawString(2*cm, 25*cm, "วันที่: 01 เมษายน 2568")
103
+ c.drawString(2*cm, 24.5*cm, f"เลขที่ใบชำระเงิน: {worker_data['หมายเลขชำระเงิน']}")
104
+ c.drawString(2*cm, 24*cm, f"เลขรับคำขอที่: {worker_data['เลขคำขอ']}")
105
+ c.drawString(2*cm, 23.5*cm, f"ชื่อผู้ชำระเงิน: {worker_data['ชื่อภาษาอังกฤษ']}")
106
+ c.drawString(2*cm, 23*cm, f"สัญชาติ: {worker_data['สัญชาติ']}")
107
+ c.drawString(2*cm, 22.5*cm, f"เลขอ้างอิงคนต่างด้าว: {worker_data['หมายเลขอ้างอิงคนต่างด้าว']}")
108
+ c.drawString(2*cm, 22*cm, f"หมายเลขประจำตัวคนต่างด้าว: {worker_data['หมายเลขประจำตัว']}")
109
+ c.drawString(2*cm, 21.5*cm, "ชื่อนายจ้าง / สถานประกอบการ: บริษัท บาน กง เอ็นจิเนียริ่ง จำกัด")
110
+ c.drawString(2*cm, 21*cm, "เลขประจำตัวนายจ้าง: 0415567000061")
111
+
112
+ # **รายการ - เดิมทุกบรรทัด**
113
+ if font_available:
114
+ c.setFont("THSarabunBold", 14)
115
+ else:
116
+ c.setFont("Helvetica-Bold", 12)
117
+ c.drawString(2*cm, 20*cm, "รายการ")
118
+
119
+ if font_available:
120
+ c.setFont("THSarabun", 12)
121
+ else:
122
+ c.setFont("Helvetica", 12)
123
+ c.drawString(2*cm, 19.5*cm, "1. ค่าธรรมเนียมในการยื่นคำขอ ฉบับละ 100 บาท: 100.00")
124
+ c.drawString(2*cm, 19*cm, "2. ค่าธรรมเนียม: 900.00")
125
+ c.drawString(2*cm, 18.5*cm, "รวมเป็นเงินทั้งสิ้น (บาท): (หนึ่งพันบาทถ้วน) 1,000.00")
126
+ c.drawString(2*cm, 18*cm, "ได้รับเงินไว้เป็นการถูกต้องแล้ว")
127
+ c.drawString(2*cm, 17.5*cm, "(ลงชื่อ) นางสาวอารีวรรณ โพธิ์นิ่มแดง (ผู้รับเงิน)")
128
+ c.drawString(2*cm, 17*cm, "ตำแหน่ง: นักวิชาการแรงงานชำนาญการ")
129
+
130
+ # **QR Code - ตำแหน่งเดิม**
131
+ pdf_url = f"https://huggingface.co/spaces/{REPO_ID}/resolve/main/{filename}"
132
+ try:
133
+ qr = qrcode.make(pdf_url)
134
+ qr.save("temp_qr.png")
135
+ c.drawImage("temp_qr.png", 15*cm, 15*cm, width=3*cm, height=3*cm)
136
+ except Exception as e:
137
+ print(f"ไม่สามารถสร้าง QR Code: {e}")
138
+
139
+ # **เวลาพิมพ์ - ตำแหน่งเดิม**
140
+ c.setFont("Helvetica", 8)
141
+ print_time = thai_date_time(time.time())
142
+ c.drawString(2*cm, 2*cm, f"พิมพ์เมื่อ: {print_time}")
143
+
144
+ c.showPage()
145
+ c.save()
146
+
147
+ # **อัพโหลดไฟล์**
148
  upload_file(
149
  path_or_fileobj=filename,
150
  path_in_repo=filename,
151
  repo_id=REPO_ID,
152
  repo_type="space"
153
  )
154
+
155
+ print(f"✅ สร้าง PDF สำเร็จ: {filename}")
156
  return pdf_url
157
+
158
+ except Exception as e:
159
+ print(f"❌ ข้อผิดพลาดในการสร้าง PDF: {e}")
160
  return None
161
 
162
+ # โหลดข้อมูล JSON
163
+ json_data = load_json_data()
164
+
165
+ def get_worker_names():
166
+ """ดึงรายชื่อพนักงานสำหรับ dropdown"""
167
+ names = []
168
+ for worker in json_data:
169
+ name_display = f"{worker['ชื่อภาษาอังกฤษ']} ({worker['เลขคำขอ']})"
170
+ names.append(name_display)
171
+ return names
172
+
173
+ def get_worker_by_selection(selected_name):
174
+ """ดึงข้อมูลพนักงานจากการเลือก"""
175
+ if not selected_name:
176
+ return "", "", "", "", "", ""
177
 
178
+ # แยกเลขคำขอจากชื่อที่เลือก
179
+ request_number = selected_name.split("(")[-1].replace(")", "")
 
 
 
 
180
 
181
+ for worker in json_data:
182
+ if worker['เล���คำขอ'] == request_number:
183
+ return (
184
+ worker['ชื่อภาษาอังกฤษ'],
185
+ worker['หมายเลขอ้างอิงคนต่างด้าว'],
186
+ worker['หมายเลขประจำตัว'],
187
+ worker['สัญชาติ'],
188
+ worker['เลขที่บนขวาใบเสร็จ'],
189
+ worker['หมายเลขชำระเงิน']
190
+ )
191
 
192
+ return "", "", "", "", "", ""
193
+
194
+ def generate_pdf_from_selection(selected_name):
195
+ """สร้าง PDF จากการเลือกพนักงาน"""
196
+ if not selected_name:
197
+ return "❌ กรุณาเลือกพนักงาน"
 
 
198
 
199
+ request_number = selected_name.split("(")[-1].replace(")", "")
 
 
200
 
201
+ for worker in json_data:
202
+ if worker['เลขคำขอ'] == request_number:
203
+ pdf_url = create_receipt_pdf(worker)
204
+ if pdf_url:
205
+ return f"""✅ สร้างใบเสร็จสำเร็จ!
206
 
207
+ 📋 เลขคำขอ: {worker['เลขคำขอ']}
208
+ 👤 ชื่อ: {worker['ชื่อภาษาอังกฤษ']}
209
+ 🆔 หมายเลขประจำตัว: {worker['หมายเลขประจำตัว']}
210
 
211
  📄 ดาวน์โหลด PDF: {pdf_url}
212
 
213
+ หน้าตาใบเสร็จเหมือนเดิม 100%
214
+ 📱 สแกน QR Code ในใบเสร็จเพื่อดาวน์โหลด"""
215
+ else:
216
+ return "❌ เกิดข้อผิดพลาดในการสร้าง PDF"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
217
 
218
+ return "❌ ไม่พบข้อมูลพนักงาน"
219
+
220
+ def show_all_workers():
221
+ """แสดงรายการพนักงานทั้งหมดจาก JSON"""
222
+ if not json_data:
223
+ return "ไม่มีข้อมูลพนักงาน"
224
 
225
+ result = f"📊 รายการพนักงานจากฐานข้อมูล ({len(json_data)} คน)\n\n"
226
+ for i, worker in enumerate(json_data, 1):
227
+ result += f"{i}. {worker['เลขคำขอ']} | {worker['ชื่อภาษาอังกฤษ']} | {worker['สัญชาติ']} | {worker['หมายเลขประจำตัว']}\n"
228
 
229
  return result
230
 
231
+ # สร้าง UI
232
+ with gr.Blocks(title="ระบบจัดการพนักงาน - เหมือนเดิม") as app:
 
233
  gr.Markdown("# 🏢 ระบบจัดการข้อมูลพนักงานต่างด้าว")
234
  gr.Markdown("### บริษัท บาน กง เอ็นจิเนียริ่ง จำกัด")
235
+ gr.Markdown("#### ✅ ดึงข้อมูลจาก JSON อัตโนมัติ | หน้าตาเอกสารเหมือนเดิม 100%")
236
+
237
+ with gr.Tab("📝 สร้างใบเสร็จจาก JSON"):
238
+ gr.Markdown("### เลือกพนักงานจากฐานข้อมูล")
239
+
240
+ worker_dropdown = gr.Dropdown(
241
+ choices=get_worker_names(),
242
+ label="🔍 เลือกพนักงาน",
243
+ interactive=True
244
+ )
245
+
246
+ gr.Markdown("**ข้อมูลที่เลือก:**")
247
+ with gr.Row():
248
+ name_display = gr.Textbox(label="ชื่อภาษาอังกฤษ", interactive=False)
249
+ ref_display = gr.Textbox(label="หมายเลขอ้างอิง", interactive=False)
250
+
251
+ with gr.Row():
252
+ id_display = gr.Textbox(label="หมายเลขประจำตัว", interactive=False)
253
+ nation_display = gr.Textbox(label="สัญชาติ", interactive=False)
254
+
255
+ with gr.Row():
256
+ receipt_display = gr.Textbox(label="เลขที่ใบเสร็จ", interactive=False)
257
+ payment_display = gr.Textbox(label="หมายเลขชำระเงิน", interactive=False)
258
+
259
+ generate_btn = gr.Button("🎯 สร้างใบเสร็จ (เหมือนเดิม 100%)", variant="primary", size="lg")
260
+ result_output = gr.Textbox(label="ผลลัพธ์", lines=10, interactive=False)
261
+
262
+ with gr.Tab("📋 ดูข้อมูลทั้งหมด"):
263
+ show_all_btn = gr.Button("👥 แสดงข้อมูลจาก JSON")
264
+ all_workers_output = gr.Textbox(label="รายการพนักงานทั้งหมด", lines=20, interactive=False)
265
 
266
+ # เชื่อมต่อ Events
267
+ worker_dropdown.change(
268
+ fn=get_worker_by_selection,
269
+ inputs=[worker_dropdown],
270
+ outputs=[name_display, ref_display, id_display, nation_display, receipt_display, payment_display]
271
+ )
 
 
 
 
 
 
 
272
 
273
+ generate_btn.click(
274
+ fn=generate_pdf_from_selection,
275
+ inputs=[worker_dropdown],
276
+ outputs=[result_output]
277
+ )
278
 
279
+ show_all_btn.click(
280
+ fn=show_all_workers,
281
+ outputs=[all_workers_output]
282
+ )
283
 
284
+ print("🚀 เริ่มต้นระบบ...")
285
+ app.launch(server_name="0.0.0.0", server_port=7860)