step 10 : fungsi cek presensi clock in dan clock out

This commit is contained in:
sindhu
2024-01-23 16:47:04 +07:00
parent b65399e11e
commit b25eed90ea
6 changed files with 694 additions and 4 deletions

View File

@@ -20,6 +20,8 @@ type TransAbsensiCheckDistanceResponse model.TransAbsensiCheckDistanceResponse
type TransAbsensiResponse model.TransAbsensiResponse
type TransAbsensiCheckTimeAttendanceResponse model.TransAbsensiCheckTimeAttendanceResponse
// 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
@@ -519,3 +521,154 @@ func (transabsensi *TransAbsensiResponse) ClockOutAbsensi(T_TransactionM_StaffID
return &ret, err
}
// fungsi untuk get jam absen dan pulang
func (transabsensi *TransAbsensiCheckTimeAttendanceResponse) CheckTimeAttendance(M_StaffID string, M_CompanyID string, token string) (*model.TransAbsensiCheckTimeAttendanceResponse, error) {
// inisialisasi
var err error
var ret model.TransAbsensiCheckTimeAttendanceResponse
var var_jam_clock_in string
var var_jam_clock_out string
var var_is_absen_clock_in string = "FALSE"
var var_is_absen_clock_out string = "FALSE"
var varGetToken string
var resultsArrayAttendance []struct {
T_TransactionM_AbsensiTypeID string
T_TransactionClockAbsensi string
}
ret.Status = new(string)
ret.Message = new(string)
ret.JamClockIn = new(string)
ret.JamClockOut = new(string)
ret.IsAbsenClockIn = new(string)
ret.IsAbsenClockOut = new(string)
qCheckTokenStaff := `SELECT
M_StaffToken
FROM m_staff
WHERE M_StaffIsActive = 'Y'
AND M_StaffToken = ?
`
rowCheckTokenStaff := db.Handle.QueryRow(
qCheckTokenStaff,
token,
)
db.LogSQL(qCheckTokenStaff)
err = rowCheckTokenStaff.Scan(
&varGetToken,
)
if err != nil {
log.Printf("Error m_staff select token: %v", err)
log.Printf("Executing query: %s\n", qCheckTokenStaff)
return nil, err
}
// check varGetToken jk M_StaffToken kosong
if varGetToken == "" {
log.Printf("Error Token Kosong, Silahkan Login Dulu: %v", err)
log.Printf("Executing query: %s\n", qCheckTokenStaff)
return nil, err
}
// proses check attendance
if varGetToken != "" {
q := `SELECT T_TransactionM_AbsensiTypeID,
DATE_FORMAT(T_TransactionClockAbsensi,'%H:%i') as T_TransactionClockAbsensi
FROM t_transaction
WHERE T_TransactionIsActive = 'Y'
AND T_TransactionM_AbsensiTypeID IN (1, 2)
AND T_TransactionM_StaffID = ?
AND T_TransactionM_CompanyID = ?
AND T_TransactionDate BETWEEN DATE_FORMAT(NOW(), "%Y-%m-%d 01:00:00")
AND DATE_FORMAT(NOW(), "%Y-%m-%d 23:00:00")
ORDER BY T_TransactionM_AbsensiTypeID ASC`
db.LogSQL(q, M_StaffID,
M_CompanyID)
rows, err := db.Handle.Query(
q,
M_StaffID,
M_CompanyID)
if err != nil {
log.Printf("Error m_company select jam_clock_in dan jam_clock_out: %v", err)
log.Printf("Executing query: %s\n", q)
return nil, err
}
defer rows.Close()
for rows.Next() {
var resultTmp struct {
T_TransactionM_AbsensiTypeID string
T_TransactionClockAbsensi string
}
if err := rows.Scan(
&resultTmp.T_TransactionM_AbsensiTypeID,
&resultTmp.T_TransactionClockAbsensi,
); err != nil {
log.Printf("Error scanning row: %v", err)
return nil, err
}
// array push
resultsArrayAttendance = append(resultsArrayAttendance, resultTmp)
}
if err := rows.Err(); err != nil {
log.Printf("Error after iterating rows attendance : %v", err)
return nil, err
}
// check length resultsArrayAttendance
if len(resultsArrayAttendance) == 0 {
log.Printf("Error Data Tidak Ada: %v", err)
*ret.Status = "OK"
*ret.Message = "Belum Ada Absen"
*ret.JamClockIn = ""
*ret.JamClockOut = ""
*ret.IsAbsenClockIn = "FALSE"
*ret.IsAbsenClockOut = "FALSE"
}
if len(resultsArrayAttendance) > 0 {
for _, result := range resultsArrayAttendance {
// clock in (absen masuk)
if result.T_TransactionM_AbsensiTypeID == "1" {
var_jam_clock_in = result.T_TransactionClockAbsensi
if var_is_absen_clock_in != "" {
var_is_absen_clock_in = "TRUE"
}
}
// clock out (absen pulang)
if result.T_TransactionM_AbsensiTypeID == "2" {
var_jam_clock_out = result.T_TransactionClockAbsensi
if var_is_absen_clock_out != "" {
var_is_absen_clock_out = "TRUE"
}
}
}
*ret.Status = "OK"
*ret.Message = "Sudah Ada Absen"
*ret.JamClockIn = var_jam_clock_in
*ret.JamClockOut = var_jam_clock_out
*ret.IsAbsenClockIn = var_is_absen_clock_in
*ret.IsAbsenClockOut = var_is_absen_clock_out
}
}
return &ret, err
}