Skip to content

Clone Attendance Management Program Application using CustomTkinter #708

@yhia2135

Description

@yhia2135

Overview

Need to clone the Attendance Management Program application shown in the screenshot using CustomTkinter framework.

Features Implementation Details

1. Employee Management Module

class EmployeeManagement(ctk.CTkFrame):
    def __init__(self, master, **kwargs):
        super().__init__(master, **kwargs)
        
        # Employee Form Fields
        self.employee_id = ctk.CTkEntry(self, placeholder_text="Employee ID")
        self.name = ctk.CTkEntry(self, placeholder_text="Full Name")
        self.department = ctk.CTkComboBox(self, values=["HR", "IT", "Finance"])
        
        # Fingerprint Registration
        self.fp_button = ctk.CTkButton(self, text="Register Fingerprint")
        
        # Employee List
        self.employee_table = ctk.CTkTable(self, headers=["ID", "Name", "Department"])

2. Attendance Logging System

class AttendanceLogger(ctk.CTkFrame):
    def __init__(self, master, **kwargs):
        super().__init__(master, **kwargs)
        
        # Real-time Log Display
        self.log_table = ctk.CTkTable(
            self, 
            headers=["Time", "ID", "Name", "Status"]
        )
        
        # Device Connection Status
        self.status_label = ctk.CTkLabel(self, text="Device Status: Disconnected")
        self.connect_button = ctk.CTkButton(self, text="Connect Device")

3. Device Management Interface

class DeviceManager(ctk.CTkFrame):
    def __init__(self, master, **kwargs):
        super().__init__(master, **kwargs)
        
        # Connection Settings
        self.connection_type = ctk.CTkComboBox(
            self, 
            values=["Serial Port", "Ethernet", "USB"]
        )
        self.baud_rate = ctk.CTkComboBox(
            self, 
            values=["9600", "115200", "38400"]
        )
        self.ip_address = ctk.CTkEntry(self, placeholder_text="IP Address")
        self.port = ctk.CTkEntry(self, placeholder_text="Port")

4. Database Management

class DatabaseManager:
    def __init__(self):
        self.db_path = "attendance.db"
        
    def create_tables(self):
        # Employee Table
        self.execute_query("""
            CREATE TABLE IF NOT EXISTS employees (
                id INTEGER PRIMARY KEY,
                name TEXT,
                department TEXT,
                fingerprint_data BLOB
            )
        """)
        
        # Attendance Table
        self.execute_query("""
            CREATE TABLE IF NOT EXISTS attendance (
                id INTEGER PRIMARY KEY,
                employee_id INTEGER,
                timestamp DATETIME,
                status TEXT,
                FOREIGN KEY (employee_id) REFERENCES employees (id)
            )
        """)

5. Report Generation System

class ReportGenerator(ctk.CTkFrame):
    def __init__(self, master, **kwargs):
        super().__init__(master, **kwargs)
        
        # Report Options
        self.report_type = ctk.CTkComboBox(
            self, 
            values=["Daily", "Weekly", "Monthly", "Custom"]
        )
        
        # Date Selection
        self.start_date = ctk.CTkDatePicker(self)
        self.end_date = ctk.CTkDatePicker(self)
        
        # Export Options
        self.export_format = ctk.CTkComboBox(
            self, 
            values=["PDF", "Excel", "CSV"]
        )

6. Schedule Management

class ScheduleManager(ctk.CTkFrame):
    def __init__(self, master, **kwargs):
        super().__init__(master, **kwargs)
        
        # Shift Definition
        self.shift_name = ctk.CTkEntry(self, placeholder_text="Shift Name")
        self.start_time = ctk.CTkEntry(self, placeholder_text="Start Time")
        self.end_time = ctk.CTkEntry(self, placeholder_text="End Time")
        
        # Schedule Calendar
        self.calendar = ctk.CTkCalendar(self)
        
        # Employee Assignment
        self.employee_selector = ctk.CTkComboBox(self)

Main Application Integration

class AttendanceManagementSystem(ctk.CTk):
    def __init__(self):
        super().__init__()
        
        # Window Setup
        self.title("Attendance Management Program")
        self.geometry("1200x800")
        
        # Theme Configuration
        ctk.set_appearance_mode("light")
        ctk.set_default_color_theme("blue")
        
        # Menu Bar
        self.menu_bar = self.create_menu_bar()
        
        # Main Toolbar
        self.toolbar = self.create_toolbar()
        
        # Module Initialization
        self.employee_module = EmployeeManagement(self)
        self.attendance_logger = AttendanceLogger(self)
        self.device_manager = DeviceManager(self)
        self.report_generator = ReportGenerator(self)
        self.schedule_manager = ScheduleManager(self)
        
        # Database Setup
        self.db = DatabaseManager()
        self.db.create_tables()
    
    def create_menu_bar(self):
        menu_bar = ctk.CTkFrame(self)
        # Add menu items
        data_menu = ctk.CTkButton(menu_bar, text="Data")
        attendance_menu = ctk.CTkButton(menu_bar, text="Attendance")
        search_menu = ctk.CTkButton(menu_bar, text="Search/Print")
        maintenance_menu = ctk.CTkButton(menu_bar, text="Maintenance/Options")
        device_menu = ctk.CTkButton(menu_bar, text="Device management")
        help_menu = ctk.CTkButton(menu_bar, text="Help")
        return menu_bar

    def create_toolbar(self):
        toolbar = ctk.CTkFrame(self)
        # Add toolbar buttons
        employees_btn = ctk.CTkButton(toolbar, text="Employees")
        ac_log_btn = ctk.CTkButton(toolbar, text="AC Log")
        report_btn = ctk.CTkButton(toolbar, text="Report")
        device_btn = ctk.CTkButton(toolbar, text="Device")
        del_device_btn = ctk.CTkButton(toolbar, text="Del Device")
        connect_btn = ctk.CTkButton(toolbar, text="Connect")
        disconnect_btn = ctk.CTkButton(toolbar, text="Disconnect")
        exit_btn = ctk.CTkButton(toolbar, text="Exit system")
        return toolbar

Required Dependencies

# requirements.txt
customtkinter==5.2.0
Pillow==10.0.0  # For image handling
pyserial==3.5   # For serial communication
sqlite3         # For database (built into Python)
pandas          # For data manipulation and export
reportlab       # For PDF generation
openpyxl        # For Excel file handling

Screenshot Reference

image1

Next Steps

  1. Set up the development environment with all required dependencies
  2. Implement the database schema and migration system
  3. Create the user interface components following the original design
  4. Implement device communication protocols
  5. Add data validation and error handling
  6. Create automated tests for critical functionality
  7. Add user authentication and authorization
  8. Implement reporting and export features

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions