diff --git a/backend/internal/transabsensi/transabsensi.go b/backend/internal/transabsensi/transabsensi.go index 1319c2c..d355874 100644 --- a/backend/internal/transabsensi/transabsensi.go +++ b/backend/internal/transabsensi/transabsensi.go @@ -676,7 +676,7 @@ func (transabsensi *TransAbsensiCheckTimeAttendanceResponse) CheckTimeAttendance } // fungsi untuk rekap kehadiran home screen -func (transabsensi *RekapKehadiranHomeScreen) RekapKehadiranHomeScreen(M_StaffID string, M_CompanyID string, token string) (*model.RekapKehadiranHomeScreen, error) { +func (transabsensi *RekapKehadiranHomeScreen) RekapKehadiranHomeScreenV1(M_StaffID string, M_CompanyID string, token string) (*model.RekapKehadiranHomeScreen, error) { // inisialisasi var err error @@ -684,7 +684,7 @@ func (transabsensi *RekapKehadiranHomeScreen) RekapKehadiranHomeScreen(M_StaffID var jumlah_saturday int = 0 var jumlah_sunday int = 0 - var jumlah_hari_bulan_ini int = 0 + var jumlah_hari_sampai_hari_ini int = 0 var jumlah_hari_sampai_hari_ini_point_a int = 0 var jumlah_hari_libur_sampai_hari_ini_point_b int = 0 @@ -780,27 +780,27 @@ func (transabsensi *RekapKehadiranHomeScreen) RekapKehadiranHomeScreen(M_StaffID &jumlah_sunday, ) - qJumlahHariBulanIni := `select timestampdiff(day, + qJumlahHariSampaiHariIni := `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` + date_add( concat(year(now()),'-',month(now()),'-01'), interval 1 month)) as jumlah_hari_sampai_hari_ini` - rowQJumlahHariBulanIni := db.Handle.QueryRow( - qJumlahHariBulanIni, + rowqJumlahHariSampaiHariIni := db.Handle.QueryRow( + qJumlahHariSampaiHariIni, ) if err != nil { - log.Printf("Error select count jumlah_hari_bulan_ini: %v", err) - log.Printf("Executing query: %s\n", qJumlahHariBulanIni) + log.Printf("Error select count jumlah_hari_sampai_hari_ini: %v", err) + log.Printf("Executing query: %s\n", qJumlahHariSampaiHariIni) return nil, err } - db.LogSQL(qJumlahHariBulanIni) - err = rowQJumlahHariBulanIni.Scan( - &jumlah_hari_bulan_ini, + db.LogSQL(qJumlahHariSampaiHariIni) + err = rowqJumlahHariSampaiHariIni.Scan( + &jumlah_hari_sampai_hari_ini, ) // hitung point A - jumlah_hari_sampai_hari_ini_point_a = jumlah_hari_bulan_ini - jumlah_sunday - jumlah_saturday + jumlah_hari_sampai_hari_ini_point_a = jumlah_hari_sampai_hari_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 @@ -863,7 +863,7 @@ func (transabsensi *RekapKehadiranHomeScreen) RekapKehadiranHomeScreen(M_StaffID 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: %s\n", strconv.Itoa(jumlah_hari_sampai_hari_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)) @@ -886,3 +886,195 @@ func (transabsensi *RekapKehadiranHomeScreen) RekapKehadiranHomeScreen(M_StaffID return &ret, err } + +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_sampai_hari_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(DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 1 MONTH) + INTERVAL 1 DAY AS Date, + DAYNAME(LAST_DAY(DATE_FORMAT(CURDATE(), '%Y-%m-01') - 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' + AND Date BETWEEN DATE_FORMAT(CURDATE(), '%Y-%m-01') AND CURDATE()` + + 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(DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 1 MONTH) + INTERVAL 1 DAY AS Date, + DAYNAME(LAST_DAY(DATE_FORMAT(CURDATE(), '%Y-%m-01') - 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 countSunday + FROM offdays + WHERE DAYNAME(Date) = 'Sunday' AND Date BETWEEN DATE_FORMAT(CURDATE(), '%Y-%m-01') AND CURDATE()` + + 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, + ) + + qJumlahHariSampaiHariIni := `SELECT DATEDIFF(CURDATE(), DATE_FORMAT(CURDATE(), '%Y-%m-01') ) + 1 AS total_hari` + + rowqJumlahHariSampaiHariIni := db.Handle.QueryRow( + qJumlahHariSampaiHariIni, + ) + + if err != nil { + log.Printf("Error select count jumlah_hari_sampai_hari_ini: %v", err) + log.Printf("Executing query: %s\n", qJumlahHariSampaiHariIni) + return nil, err + } + + db.LogSQL(qJumlahHariSampaiHariIni) + err = rowqJumlahHariSampaiHariIni.Scan( + &jumlah_hari_sampai_hari_ini, + ) + + // hitung point A + jumlah_hari_sampai_hari_ini_point_a = jumlah_hari_sampai_hari_ini - jumlah_sunday - jumlah_saturday + + // 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_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_sampai_hari_ini: %s\n", strconv.Itoa(jumlah_hari_sampai_hari_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 +} diff --git a/backend/server b/backend/server index 0e2ffdd..be74f6b 100644 Binary files a/backend/server and b/backend/server differ