step 10 : fungsi cek presensi clock in dan clock out
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user