step 13 : add rekap kehadiran homescreen

This commit is contained in:
sindhu
2024-02-02 17:07:17 +07:00
parent cadeeb6740
commit ab05382876
5 changed files with 700 additions and 5 deletions

View File

@@ -22,6 +22,8 @@ type TransAbsensiResponse model.TransAbsensiResponse
type TransAbsensiCheckTimeAttendanceResponse model.TransAbsensiCheckTimeAttendanceResponse
type RekapKehadiranHomeScreen model.RekapKehadiranHomeScreen
// fungsi untuk Check Distance antara kantor dengan current user location
func (transabsensi *TransAbsensiCheckDistanceResponse) CheckDistance(M_StaffID string, M_CompanyID string, CurrentLatitude string, CurrentLongitude string) (*model.TransAbsensiCheckDistanceResponse, error) {
// inisialisasi
@@ -672,3 +674,215 @@ func (transabsensi *TransAbsensiCheckTimeAttendanceResponse) CheckTimeAttendance
return &ret, err
}
// fungsi untuk rekap kehadiran home screen
func (transabsensi *RekapKehadiranHomeScreen) RekapKehadiranHomeScreen(M_StaffID string, M_CompanyID string, token string) (*model.RekapKehadiranHomeScreen, error) {
// inisialisasi
var err error
var ret model.RekapKehadiranHomeScreen
var jumlah_saturday int = 0
var jumlah_sunday int = 0
var jumlah_hari_bulan_ini int = 0
var jumlah_hari_sampai_hari_ini_point_a int = 0
var jumlah_hari_libur_sampai_hari_ini_point_b int = 0
var jumlah_absen_sampai_hari_ini_point_c int = 0
var total_ketidakhadiran int = 0
var total_lembur_sampai_hari_ini int = 0
// clear memory address
ret.Kehadiran = new(string)
ret.Lembur = new(string)
ret.TidakHadir = new(string)
ret.Status = new(string)
ret.Message = new(string)
// set value
*ret.TidakHadir = "0"
*ret.Kehadiran = "0"
*ret.Lembur = "0"
// query rekap lembur
qLembur := `SELECT COUNT(T_TransactionLemburID) as total_lembur_sampai_hari_ini
FROM t_transaction_lembur
WHERE
T_TransactionLemburIsActive = 'Y'
AND T_TransactionLemburM_StaffID = ?
AND T_TransactionLemburM_CompanyID = ?
AND T_TransactionLemburM_AbsensiTypeID = 5
AND MONTH(T_TransactionTglLembur) = MONTH(CURDATE())`
rowQLembur := db.Handle.QueryRow(
qLembur,
M_StaffID,
M_CompanyID,
)
if err != nil {
log.Printf("Error select count lembur: %v", err)
log.Printf("Executing query: %s\n", qLembur)
return nil, err
}
db.LogSQL(qLembur)
err = rowQLembur.Scan(
&total_lembur_sampai_hari_ini,
)
// query point A : jumlah hari sampai hari ini ( dalam bulan ini ) selain sabtu dan minggu
qCountSaturday := `WITH RECURSIVE offdays as(
SELECT
LAST_DAY(CURDATE()-INTERVAL 1 MONTH) + INTERVAL 1 DAY AS Date,
DAYNAME(LAST_DAY(CURDATE()-INTERVAL 1 MONTH) + INTERVAL 1 DAY) AS DayName
UNION ALL
SELECT Date + INTERVAL 1 DAY, DAYNAME(Date + INTERVAL 1 DAY)
FROM offdays WHERE DATE < LAST_DAY(CURDATE())
) SELECT count(*) as countSaturday FROM offdays where DAYNAME(DATE) = 'Saturday'`
rowQCountSaturday := db.Handle.QueryRow(
qCountSaturday,
)
if err != nil {
log.Printf("Error select count jumlah saturday : %v", err)
log.Printf("Executing query: %s\n", qCountSaturday)
return nil, err
}
db.LogSQL(qCountSaturday)
err = rowQCountSaturday.Scan(
&jumlah_saturday,
)
qCountSunday := `WITH RECURSIVE offdays as(
SELECT
LAST_DAY(CURDATE()-INTERVAL 1 MONTH) + INTERVAL 1 DAY AS Date,
DAYNAME(LAST_DAY(CURDATE()-INTERVAL 1 MONTH) + INTERVAL 1 DAY) AS DayName
UNION ALL
SELECT Date + INTERVAL 1 DAY, DAYNAME(Date + INTERVAL 1 DAY)
FROM offdays WHERE DATE < LAST_DAY(CURDATE())
) SELECT count(*) as countSaturday FROM offdays where DAYNAME(DATE) = 'Sunday'`
rowQCountSunday := db.Handle.QueryRow(
qCountSunday,
)
if err != nil {
log.Printf("Error select count jumlah saturday : %v", err)
log.Printf("Executing query: %s\n", qCountSunday)
return nil, err
}
db.LogSQL(qCountSunday)
err = rowQCountSunday.Scan(
&jumlah_sunday,
)
qJumlahHariBulanIni := `select timestampdiff(day,
concat(year(now()),'-',month(now()),'-01'),
date_add( concat(year(now()),'-',month(now()),'-01'), interval 1 month)) as jumlah_hari_bulan_ini`
rowQJumlahHariBulanIni := db.Handle.QueryRow(
qJumlahHariBulanIni,
)
if err != nil {
log.Printf("Error select count jumlah_hari_bulan_ini: %v", err)
log.Printf("Executing query: %s\n", qJumlahHariBulanIni)
return nil, err
}
db.LogSQL(qJumlahHariBulanIni)
err = rowQJumlahHariBulanIni.Scan(
&jumlah_hari_bulan_ini,
)
// hitung point A
jumlah_hari_sampai_hari_ini_point_a = jumlah_hari_bulan_ini - jumlah_sunday - jumlah_saturday
// query point B : jumlah hari libur selain sabtu dan minggu sampai hari ini
qPointB := `SELECT COUNT(M_LiburID) as jumlah_hari_libur_sampai_hari_ini_point_b
FROM m_libur
WHERE
M_LiburIsActive = 'Y'
AND M_LiburDate <= CURDATE()
AND DAYOFWEEK(CURDATE()) BETWEEN 2 AND 6
AND MONTH(M_LiburDate) = MONTH(CURDATE())`
rowQPointB := db.Handle.QueryRow(
qPointB,
)
if err != nil {
log.Printf("Error select count jumlah_hari_libur_sampai_hari_ini_point_b: %v", err)
log.Printf("Executing query: %s\n", qPointB)
return nil, err
}
db.LogSQL(qPointB)
err = rowQPointB.Scan(
&jumlah_hari_libur_sampai_hari_ini_point_b,
)
// query point C : jumlah absen sampai hari ini ( bisa di lihat dari clock in )
qPointC := `SELECT COUNT(T_TransactionID) as jumlah_absen_sampai_hari_ini_point_c
FROM t_transaction
WHERE
T_TransactionIsActive = 'Y'
AND T_TransactionM_StaffID = ?
AND T_TransactionM_CompanyID = ?
AND (
T_TransactionDate >= DATE_FORMAT(CURDATE(), '%Y-%m-01')
OR T_TransactionDate = CURDATE()
)
AND (
T_TransactionM_AbsensiTypeID = 1
AND (T_TransactionClockAbsensi != '00:00:00' OR T_TransactionClockAbsensi IS NOT NULL)
)`
rowQPointC := db.Handle.QueryRow(
qPointC,
M_StaffID,
M_CompanyID,
)
if err != nil {
log.Printf("Error select count jumlah_absen_sampai_hari_ini_point_c: %v", err)
log.Printf("Executing query: %s\n", qPointC)
return nil, err
}
db.LogSQL(qPointC)
err = rowQPointC.Scan(
&jumlah_absen_sampai_hari_ini_point_c,
)
total_ketidakhadiran = jumlah_hari_sampai_hari_ini_point_a - jumlah_hari_libur_sampai_hari_ini_point_b - jumlah_absen_sampai_hari_ini_point_c
log.Printf("Executing jumlah_saturday: %s\n", strconv.Itoa(jumlah_saturday))
log.Printf("Executing jumlah_sunday: %s\n", strconv.Itoa(jumlah_sunday))
log.Printf("Executing jumlah_hari_bulan_ini: %s\n", strconv.Itoa(jumlah_hari_bulan_ini))
log.Printf("Executing jumlah_hari_sampai_hari_ini_point_a: %s\n", strconv.Itoa(jumlah_hari_sampai_hari_ini_point_a))
log.Printf("Executing jumlah_hari_libur_sampai_hari_ini_point_b: %s\n", strconv.Itoa(jumlah_hari_libur_sampai_hari_ini_point_b))
log.Printf("Executing jumlah_absen_sampai_hari_ini_point_c: %s\n", strconv.Itoa(jumlah_absen_sampai_hari_ini_point_c))
if total_ketidakhadiran != 0 {
*ret.TidakHadir = strconv.Itoa(total_ketidakhadiran)
}
if jumlah_absen_sampai_hari_ini_point_c != 0 {
*ret.Kehadiran = strconv.Itoa(jumlah_absen_sampai_hari_ini_point_c)
}
if total_lembur_sampai_hari_ini != 0 {
*ret.Lembur = strconv.Itoa(total_lembur_sampai_hari_ini)
}
*ret.Status = "OK"
*ret.Message = "Rekap Kehadiran Muncul"
return &ret, err
}