step 14 : rekap kehadiran query resolve

This commit is contained in:
sindhu
2024-02-05 17:23:55 +07:00
parent ab05382876
commit b74437abc7
2 changed files with 205 additions and 13 deletions

View File

@@ -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
}

Binary file not shown.