Untitled
import tkinter as tk from tkinter import ttk, messagebox, filedialog, PhotoImage import sqlite3 def initialize_database(): conn = sqlite3.connect("sms_system.db") cursor = conn.cursor() cursor.execute(""" CREATE TABLE IF NOT EXISTS recipients ( id INTEGER PRIMARY KEY AUTOINCREMENT, phone_number TEXT NOT NULL UNIQUE, category TEXT, strand TEXT, section TEXT ); """) cursor.execute(""" CREATE TABLE IF NOT EXISTS message ( id INTEGER PRIMARY KEY AUTOINCREMENT, content TEXT NOT NULL, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP ) """) conn.commit() conn.close() initialize_database() def send_sms(): recipients = numbers_list.get(0, tk.END) message = message_text.get("1.0", tk.END).strip() if not recipients: messagebox.showerror("Error", "Recipient list is empty.") return if not message: messagebox.showerror("Error", "Message cannot be empty.") return for recipient in recipients: print(f"Sending SMS to {recipient}") messagebox.showinfo("Success", "Messages sent successfully!") def load_contacts(): file_path = filedialog.askopenfilename(filetypes=[["Text Files", "*.txt"]]) if file_path: with open(file_path, "r") as file: for line in file: numbers_list.insert(tk.END, line.strip()) def save_template(): template = message_text.get("1.0", tk.END).strip() if not template: messagebox.showerror("Error", "Message cannot be empty.") return with open("messages.txt", "a") as file: file.write(template + "\n\n") messagebox.showinfo("Success", "Template saved successfully!") def refresh_recipient_list(): try: conn = sqlite3.connect("sms_system.db") cursor = conn.cursor() cursor.execute("SELECT phone_number, category, strand, section FROM recipients") numbers_list.delete(0, tk.END) for row in cursor.fetchall(): display_text = f"{row[0]} - Category: {row[1]} - Strand: {row[2]}, - Section: {row[3]}" numbers_list.insert(tk.END, display_text) conn.close() except sqlite3.Error as e: messagebox.showerror("Database error", f"Error: {e}") def add_recipients_to_db(phone_number, category, strand, section): conn = sqlite3.connect("sms_system.db") cursor = conn.cursor() cursor.execute(""" INSERT INTO recipients (phone_number, category, strand, section) VALUES (?, ?, ?, ?) """, (phone_number, category, strand, section) ) conn.commit() refresh_recipient_list() update_total_recipients_count() messagebox.showinfo("Success", "Recipient added successfully!") conn.close() def save_message_to_db(content): conn = sqlite3.connect("sms_system.db") cursor = conn.cursor() cursor.execute("INSERT INTO message (content) VALUES (?)", (content,)) conn.commit() conn.close() def load_recipients(): conn = sqlite3.connect("sms_system.db") cursor = conn.cursor() cursor.execute("SELECT phone_number, category, strand, section from recipients") rows = cursor.fetchall() conn.close() return [row[0] for row in rows] def load_templates(): conn = sqlite3.connect("sms_system.db") cursor = conn.cursor() cursor.execute("SELECT content FROM messages") rows = cursor.fetchall() conn.close() return[row[0] for row in rows] def reset_recipients(): if not messagebox.askyesno("Confirmation", "Are you sure you want to delete all recipients?"): return conn = sqlite3.connect("sms_system.db") cursor = conn.cursor() cursor.execute("DELETE FROM recipients") conn.commit() conn.close() numbers_list.delete(0, tk.END) messagebox.showinfo("Reset Successful", "All recipients have been deleted.") def update_total_recipients_count(): conn = sqlite3.connect("sms_system.db") cursor = conn.cursor() cursor.execute("SELECT COUNT(*) FROM recipients") total_count = cursor.fetchone()[0] conn.close() total_label.config(text=f"Total Recipients: {total_count}") root = tk.Tk() root.title("PLMar SHS - SMS Announcement System") root.geometry("610x620") root.iconbitmap(r"e:\plmars.ico") canvas = tk.Canvas(root) scrollbar = tk.Scrollbar(root, orient="vertical", command=canvas.yview) scrollable_frame = tk.Frame(canvas) scrollable_frame.bind( "<Configure>", lambda e: canvas.configure(scrollregion=canvas.bbox("all")) ) canvas.create_window((0, 0), window=scrollable_frame, anchor="n") canvas.configure(yscrollcommand=scrollbar.set) scrollbar.pack(side="right", fill="y") canvas.pack(side="left", fill="both", expand=True) header_frame = tk.Frame(scrollable_frame, bg="#4CAAD8", height=85) header_frame.pack(fill=tk.X, pady=10) try: logo = PhotoImage(file="e:\plmarsnobg.png") resized_logo = logo.subsample(3,3) logo_label = tk.Label(header_frame, image=resized_logo, bg="#4CAAD8") logo_label.image = resized_logo logo_label.pack(side=tk.LEFT, padx=10) except Exception as e: print("Error loading logo", e) header_label = tk.Label(header_frame, text="PAMANTASAN NG LUNGSOD NG MARIKINA\nSENIOR HIGH SCHOOL\nSMS ANNOUNCEMENT SYSTEM", bg="#4CAAD8", fg="white", font=("Arial", 14, "bold")) header_label.pack(side="top", fill="x", padx=10, pady=10, expand=True) details_frame = tk.Frame(scrollable_frame, padx=5, pady=5) details_frame.pack(fill=tk.X, expand=True) recipient_label = tk.Label(details_frame, text="Enter Recipient Number:", font=("Arial", 10)) recipient_label.grid(row=0, column=0, sticky="e", padx=5, pady=5) recipient_entry = tk.Entry(details_frame, width=25) recipient_entry.grid(row=0, column=1, sticky="w", padx=5, pady=5) category_label = tk.Label(details_frame, text="Category:", font=("Arial", 10)) category_label.grid(row=1, column=0, sticky="e", padx=5, pady=5) category_var = tk.StringVar() category_menu = ttk.Combobox(details_frame, textvariable=category_var, state="readonly", values=["Student", "Teacher"], width=22) category_menu.grid(row=1, column=1, sticky="w", padx=5, pady=5) strand_label = tk.Label(details_frame, text="Strand:", font=("Arial", 10)) strand_label.grid(row=2, column=0, sticky="e", padx=5, pady=5) strand_entry = tk.Entry(details_frame, width=25) strand_entry.grid(row=2, column=1, sticky="w", padx=5, pady=5) section_label = tk.Label(details_frame, text="Section:", font=("Arial", 10)) section_label.grid(row=3, column=0, sticky="e", padx=5, pady=5) section_entry = tk.Entry(details_frame, width=25) section_entry.grid(row=3, column=1, sticky="w", padx=5, pady=5) input_frame = tk.Frame(scrollable_frame, padx=10, pady=10) input_frame.pack(fill=tk.X, expand=True) add_button = tk.Button( details_frame, text="Add", width=10, command=lambda: add_recipients_to_db( recipient_entry.get(), strand_entry.get(), section_entry.get(), category_var.get(), ), ) add_button.grid(row=0, column=5, sticky="w", padx=5, pady=5) load_button = tk.Button(details_frame, text="Load Contacts From File", width=20, command=load_contacts) load_button.grid(row=0, column=6, sticky="w", padx=5, pady=5) total_label = tk.Label(input_frame, text="Total Numbers:", font=("Arial", 10, "bold")) total_label.grid(row=1, column=0, sticky="w", pady=10) numbers_list = tk.Listbox(input_frame, width=95, height=8) numbers_list.grid(row=2, column=0, columnspan=4, pady=1, sticky="nsew") recipients = load_recipients() for recipient in recipients: numbers_list.insert(tk.END, recipient) message_frame = tk.Frame(scrollable_frame, padx=10, pady=10) message_frame.pack(fill=tk.X, expand=True) message_label = tk.Label(message_frame, text="Message:", font=("Arial", 10)) message_label.pack(anchor="w") message_text = tk.Text(message_frame, height=8, width=50) message_text.pack(fill=tk.BOTH, pady=1) example_message = """PLMARS:Announcement!""" message_text.insert(tk.END, example_message) options_frame = tk.Frame(scrollable_frame, padx=10, pady=10) options_frame.pack(fill=tk.X, expand=True) one_time_radio = tk.Radiobutton(options_frame, text="One-Time Execution", value=1) one_time_radio.grid(row=2, column=0, sticky="w", pady=5) one_by_one_radio = tk.Radiobutton(options_frame, text="One-by-One Execution Mode", value=2) one_by_one_radio.grid(row=3, column=0, sticky="w") delay_checkbox = tk.Checkbutton(options_frame, text="Delayed Delivery:") delay_checkbox.grid(row=4, column=0, sticky="w") delay_frame = tk.Frame(options_frame) delay_frame.grid(row=4, column=1, sticky="w") delay_sms_spinbox = tk.Spinbox(delay_frame, from_=1, to=10, width=5) delay_sms_spinbox.pack(side=tk.LEFT) delay_sms_label = tk.Label(delay_frame, text="SMS") delay_sms_label.pack(side=tk.LEFT, padx=5) delay_time_spinbox = tk.Spinbox(delay_frame, from_=1, to=10, width=5) delay_time_spinbox.pack(side=tk.LEFT) delay_time_label = tk.Label(delay_frame, text="Sec.") delay_time_label.pack(side=tk.LEFT, padx=5) save_sent_checkbox = tk.Checkbutton(options_frame, text="Save Sent Messages") save_sent_checkbox.grid(row=5, column=0, sticky="w", pady=5) save_templates_checkbox = tk.Checkbutton(options_frame, text="Save sent message to Templates", command=save_template) save_templates_checkbox.grid(row=6, column=0, sticky="w") view_templates_button = tk.Button(options_frame, text="View Templates", width=15, command=lambda: messagebox.showinfo("Templates", "Templates saved to messages.txt")) view_templates_button.grid(row=6, column=1, sticky="w") button_frame = tk.Frame(scrollable_frame, padx=10, pady=10) button_frame.pack(fill=tk.X, expand=True) send_items_button = tk.Button(button_frame, text="SEND ITEMS", width=15, bg="green", fg="white", command=lambda: [ send_sms(), save_message_to_db(message_text("1.0", tk.END).strip()) ]) send_items_button.pack(side=tk.LEFT, padx=5) send_button = tk.Button(button_frame, text="SEND", width=15, bg="blue", fg="white", command=lambda: [ send_sms(), save_message_to_db(message_text("1.0", tk.END).strip()) ]) send_button.pack(side=tk.LEFT, padx=5) reset_button = tk.Button( button_frame, text="RESET", width=15, bg="red", fg="white", command=lambda: [ reset_recipients(), message_text.delete("1.0", tk.END), update_total_recipients_count(), ], ) reset_button.pack(side=tk.LEFT, padx=5) footer_frame = tk.Frame(scrollable_frame, padx=10, pady=10) footer_frame.pack(fill=tk.X, expand=True) about_button = tk.Button(footer_frame, text="ABOUT", width=10, command=lambda: messagebox.showinfo("About", "PLMar SHS SMS Announcement System\nVersion 1.0")) about_button.pack(side=tk.LEFT, padx=5) help_button = tk.Button(footer_frame, text="HELP", width=10, command=lambda: messagebox.showinfo("Help", "For assistance, contact support@plmar.edu.ph")) help_button.pack(side=tk.LEFT, padx=5) root.mainloop()
Leave a Comment