Commit 9fcd2f74 by Alfiro Pratama

sync noidentitas operator

parent 12e69c7d
...@@ -60,12 +60,17 @@ class SyncNoidentitasController extends Controller ...@@ -60,12 +60,17 @@ class SyncNoidentitasController extends Controller
return response()->json(['success' => false, 'message' => 'User/email tidak ditemukan.']); return response()->json(['success' => false, 'message' => 'User/email tidak ditemukan.']);
} }
$nidnOrNuptk = $this->isdmRepo->getNidnOrNuptkByEmail($user->email); $data = $this->isdmRepo->getBiodataByEmail($user->email);
if ($nidnOrNuptk === null || $nidnOrNuptk === '') { if (!$data || ($data['nidn_or_nuptk'] ?? '') === '') {
return response()->json(['success' => false, 'message' => 'Data tidak ditemukan di i-sdm untuk email ini.']); return response()->json(['success' => false, 'message' => 'Data tidak ditemukan di i-sdm untuk email ini.']);
} }
return response()->json(['success' => true, 'nidn_or_nuptk' => $nidnOrNuptk]); return response()->json([
'success' => true,
'userid' => $data['userid'] ?? '',
'nidn' => $data['nidn'] ?? '',
'nidn_or_nuptk' => $data['nidn_or_nuptk'],
]);
} }
/** /**
...@@ -96,7 +101,20 @@ class SyncNoidentitasController extends Controller ...@@ -96,7 +101,20 @@ class SyncNoidentitasController extends Controller
$isdm = $this->isdmRepo->getByNidnOrNip($request->identifier); $isdm = $this->isdmRepo->getByNidnOrNip($request->identifier);
if (empty($isdm) || !isset($isdm[0])) { if (empty($isdm) || !isset($isdm[0])) {
Alert::error('Data tidak ditemukan di i-sdm. Pastikan NIDN atau NUPTK benar.'); $isdm = $this->isdmRepo->getByNidnOrNip($request->nip);
if (empty($isdm) || !isset($isdm[0])) {
$isdm = $this->isdmRepo->getByNidnOrNip($request->nidn);
}
}
if (trim($request->identifier) !== trim($isdm[0]->nuptk)) {
Alert::error('NUPTK yg diinput tidak sesuai dengan NUPTK di i-sdm.');
return redirect()->route('operator.sync-noidentitas.index');
}
if (empty($isdm) || !isset($isdm[0])) {
Alert::error('Data tidak ditemukan di i-sdm. Pastikan NIDN atau NUPTK atau NIPbenar.');
return redirect()->route('operator.sync-noidentitas.index'); return redirect()->route('operator.sync-noidentitas.index');
} }
......
...@@ -36,6 +36,15 @@ class IsdmRepository ...@@ -36,6 +36,15 @@ class IsdmRepository
return $isdm; return $isdm;
} }
public function nuptk($nuptk)
{
$client = new GuzzleHttpClient();
$apiRequest = $client->request('GET', 'https://i-sdm.unesa.ac.id/api/biodataumum/' . $nuptk);
$isdm = json_decode($apiRequest->getBody()->getContents());
return $isdm;
}
/** /**
* Get data from i-sdm by NIDN or NIP (untuk NUPTK). * Get data from i-sdm by NIDN or NIP (untuk NUPTK).
* Coba NIDN dulu, jika gagal coba NIP. * Coba NIDN dulu, jika gagal coba NIP.
...@@ -68,18 +77,38 @@ class IsdmRepository ...@@ -68,18 +77,38 @@ class IsdmRepository
return null; return null;
} }
try {
$isdm = $this->nuptk($value);
if (!empty($isdm) && isset($isdm[0])) {
return $isdm;
}
} catch (\Exception $e) {
return null;
}
return null; return null;
} }
/** /**
* Ambil NIDN atau NUPTK berdasarkan email: API SSO userid/{email} → userid → i-sdm biodataumum/{userid}. * Ambil NIDN atau NUPTK berdasarkan email: API SSO userid/{email} → userid → i-sdm biodataumum/{userid}.
* Sama seperti alur login (LoginController + BiodataRepository::isdm).
* *
* @param string $email * @param string $email
* @return string|null NIDN atau NUPTK, null jika tidak ditemukan * @return string|null NIDN atau NUPTK, null jika tidak ditemukan
*/ */
public function getNidnOrNuptkByEmail($email) public function getNidnOrNuptkByEmail($email)
{ {
$data = $this->getBiodataByEmail($email);
return $data ? $data['nidn_or_nuptk'] : null;
}
/**
* Ambil userid (untuk nip), nidn, dan nidn_or_nuptk berdasarkan email: SSO userid/{email} → i-sdm biodataumum/{userid}.
*
* @param string $email
* @return array|null ['userid' => ..., 'nidn' => ..., 'nidn_or_nuptk' => ...] atau null
*/
public function getBiodataByEmail($email)
{
$email = trim($email); $email = trim($email);
if ($email === '') { if ($email === '') {
return null; return null;
...@@ -106,7 +135,13 @@ class IsdmRepository ...@@ -106,7 +135,13 @@ class IsdmRepository
$isdm = $this->nip($userid); $isdm = $this->nip($userid);
if (!empty($isdm) && isset($isdm[0])) { if (!empty($isdm) && isset($isdm[0])) {
$row = $isdm[0]; $row = $isdm[0];
return $row->nidn ?? $row->nuptk ?? $row->nip ?? null; $nidn = $row->nidn ?? null;
$nidnOrNuptk = $row->nidn ?? $row->nuptk ?? $row->nip ?? null;
return [
'userid' => $userid,
'nidn' => $nidn,
'nidn_or_nuptk' => $nidnOrNuptk,
];
} }
} catch (\Exception $e) { } catch (\Exception $e) {
return null; return null;
......
...@@ -54,6 +54,8 @@ ...@@ -54,6 +54,8 @@
@csrf @csrf
<input type="hidden" name="biodata_id" value="{{ Crypt::encrypt($item->id) }}" class="row-biodata-id"> <input type="hidden" name="biodata_id" value="{{ Crypt::encrypt($item->id) }}" class="row-biodata-id">
<input type="text" name="identifier" class="form-control form-control-sm row-identifier" placeholder="Klik Sync untuk ambil dari i-sdm" maxlength="50" required style="max-width: 180px;"> <input type="text" name="identifier" class="form-control form-control-sm row-identifier" placeholder="Klik Sync untuk ambil dari i-sdm" maxlength="50" required style="max-width: 180px;">
<input type="hidden" name="nip" class="row-nip" value="">
<input type="hidden" name="nidn" class="row-nidn" value="">
<button type="button" class="btn btn-sm btn-outline-primary btn-sync">Sync</button> <button type="button" class="btn btn-sm btn-outline-primary btn-sync">Sync</button>
<button type="submit" class="btn btn-sm btn-primary">Update</button> <button type="submit" class="btn btn-sm btn-primary">Update</button>
</form> </form>
...@@ -88,8 +90,10 @@ $(function() { ...@@ -88,8 +90,10 @@ $(function() {
data: { biodata_id: biodataId }, data: { biodata_id: biodataId },
dataType: 'json', dataType: 'json',
success: function(res) { success: function(res) {
if (res.success && res.nidn_or_nuptk) { if (res.success) {
$input.val(res.nidn_or_nuptk); $input.val(res.nidn_or_nuptk || '');
$row.find('.row-nip').val(res.userid || '');
$row.find('.row-nidn').val(res.nidn || '');
} else { } else {
alert(res.message || 'Data tidak ditemukan di i-sdm.'); alert(res.message || 'Data tidak ditemukan di i-sdm.');
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment