Dialog專案-打卡請假系統

普遍小企業傳統打卡系統需要在公司裡面放置打卡機器,而且需要使用相對應的紙本卡片,才能夠完成打卡,也可能面臨突如其來的故障,致使人資管理上不容易。透過本專案的簡易打卡請假系統,人資除了方便管理差勤外,打卡資料都會直接被儲存在MariaDB資料庫內,可以保證資料的完整性和安全性。


HackMD筆記


環境需求

1.Ubuntu Server 22.04.4

2.Dialog  1.3-20210324


功能

1.員工透過簡易系統打卡上下班、請假(事病假及補休)為主
2.相關數據導入MariaDB(若無資料表則自動建立),透過資料表可以查看


環境設定安裝

  • Dialog 安裝
    • 下載/安裝Dialog
      sudo apt install dialog
  • MariaDB 安裝/創建使用者帳號
    • 1.下載/安裝MariaDB
      sudo apt install mariadb-server
    • 2.進入MariaDB,建立一個管理權限的使用者帳號,給shellscript使用
      • GRANT ALL
      • ON .
      • TO ‘admin’@’localhost’
      • IDENTIFIED BY ‘123456’
      • WITH GRANT OPTION;
  • LOGSTASH 離線安裝
    • 1.下載/安裝LOGSTASH
      sudo wget https://artifacts.elastic.co/downloads/logstash/logstash-8.5.3-amd64.deb
      *如沒有安裝則使用:sudo dpkg -i logstash-8.5.3-amd64.deb
    • 2.重啟
      sudo systemctl restart elasticsearch

建立SH檔

  • 建立一個名為HR的sh檔:
    • vi HR.sh
    • 內容(僅供參考):
#!/bin/bash

#引入Dialog庫
source /usr/share/dialog/functions

#設置連接mysql參數
DB_USER="環境變數"
DB_PASSWORD="環境變數"
DB_HOST="localhost"
DB_NAME="HR"

#如果資料表不存在則建立
function create_tables_if_not_exists() {
    mysql -u$DB_USER -p$DB_PASSWORD -h$DB_HOST -e "CREATE DATABASE IF NOT EXISTS $DB_NAME;"
    mysql -u$DB_USER -p$DB_PASSWORD -h$DB_HOST $DB_NAME -e "CREATE TABLE IF NOT EXISTS work (id INT AUTO_INCREMENT PRIMARY KEY, employee_id INT, employee_name VARCHAR(10), punch_time DATETIME, punch_out DATETIME);"
    mysql -u$DB_USER -p$DB_PASSWORD -h$DB_HOST $DB_NAME -e "CREATE TABLE IF NOT EXISTS work3 (id INT AUTO_INCREMENT PRIMARY KEY, employee_id INT, employee_name VARCHAR(10), leave_type VARCHAR(20), leave_hours INT, leave_time DATETIME);"
}

#員工打上班卡
function work_punch_clock() {
    datetime=$(date +"%Y-%m-%d %H:%M:%S")
    dialog --title "上班打卡" --inputbox "請輸入員工姓名:" 8 40 2>/tmp/employee_name
    employee_name=$(cat /tmp/employee_name)
    dialog --title "上班打卡" --inputbox "請輸入員工編號:" 8 40 2>/tmp/employee_id
    employee_id=$(cat /tmp/employee_id)
    mysql -u$DB_USER -p$DB_PASSWORD -h$DB_HOST $DB_NAME -e "INSERT INTO work (employee_id, employee_name, punch_time) VALUES ('$employee_id', '$employee_name', '$datetime');"
    dialog --title "打卡成功" --msgbox "員工 $employee_name ($employee_id) 已成功上班打卡,打卡時間為:$datetime" 10 60
}

#員工打下班卡
function off_punch_clock() {
    datetime=$(date +"%Y-%m-%d %H:%M:%S")
    dialog --title "下班打卡" --inputbox "請輸入員工姓名:" 8 40 2>/tmp/employee_name
    employee_name=$(cat /tmp/employee_name)
    dialog --title "下班打卡" --inputbox "請輸入員工編號:" 8 40 2>/tmp/employee_id
    employee_id=$(cat /tmp/employee_id)
    mysql -u$DB_USER -p$DB_PASSWORD -h$DB_HOST $DB_NAME -e "INSERT INTO work (employee_id, employee_name, punch_out) VALUES ('$employee_id', '$employee_name', '$datetime');"
    dialog --title "打卡成功" --msgbox "員工 $employee_name ($employee_id) 已成功下班打卡,打卡時間為:$datetime" 10 60
}

#員工請假
function leave_request() {
    datetime=$(date +"%Y-%m-%d %H:%M:%S")
    dialog --title "請假" --inputbox "請輸入員工姓名:" 8 40 2>/tmp/employee_name
    employee_name=$(cat /tmp/employee_name)
    dialog --title "請假" --inputbox "請輸入員工編號:" 8 40 2>/tmp/employee_id
    employee_id=$(cat /tmp/employee_id)
    dialog --title "請假類型" --menu "請選擇請假假別:" 15 40 3 \
    1 "事假" \
    2 "病假" \
    3 "補休" 2> /tmp/leave_type

    leave_type=$(cat /tmp/leave_type)
    case $leave_type in
         1)
            #事假
            leave_type="事假"
            ;;
        2)
            #病假
            leave_type="病假"
            ;;
        3)
            #補休
            leave_type="補休"
            ;;
    esac

    #顯示選項選擇請假時數
    dialog --title "請假時數" --menu "請選擇請假時數(可輸入數字鍵):" 15 40 8 \
    1 "1 小時" \
    2 "2 小時" \
    3 "3 小時" \
    4 "4 小時" \
    5 "5 小時" \
    6 "6 小時" \
    7 "7 小時" \
    8 "8 小時" 2> /tmp/leave_hours

    leave_hours=$(cat /tmp/leave_hours)
    mysql -u$DB_USER -p$DB_PASSWORD -h$DB_HOST $DB_NAME -e "INSERT INTO work3 (employee_id, employee_name, leave_type, leave_hours, leave_time) VALUES ('$employee_id', '$employee_name', '$leave_type', '$leave_hours', '$datetime');"
    dialog --title "請假成功" --msgbox "員工 $employee_name ($employee_id) 已成功完成請假,假別類型為:$leave_type,請假時數為:$leave_hours 小時,申請時間為:$datetime" 10 80
}

#主選單
while true; do
    create_tables_if_not_exists
    dialog --title "員工差勤管理系統" --menu "請選擇下列選項:" 15 40 4 \
    1 "上班打卡" \
    2 "下班打卡" \
    3 "請假" \
    4 "退出" 2> /tmp/choice

    choice=$(cat /tmp/choice)
    case $choice in
        1)
            #上班打卡
            work_punch_clock
            ;;
        2)
            #下班打卡
            off_punch_clock
            ;;
        3)
            #請假
            leave_request
            ;;
        4)
            #退出
            clear
            exit 0
            ;;
    esac
done

Dialog畫面呈現(上班打卡):


Dialog畫面呈現(下班打卡):


Dialog畫面呈現(請假-以事假為例):


MariaDB資料寫入畫面(顯示全部員工上下班打卡及請假情況):


MariaDB資料寫入畫面(顯示特定員工打卡及請假情況):

CATEGORIES:

Comments are closed