Commit 1549f96f by Martinus123S

init project Mobile

parent 0073a9e7
No related merge requests found
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
*.log
\ No newline at end of file
CIS
\ No newline at end of file
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<JetCodeStyleSettings>
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</JetCodeStyleSettings>
<codeStyleSettings language="XML">
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>ANDROID_ATTRIBUTE_ORDER</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
<codeStyleSettings language="kotlin">
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</codeStyleSettings>
</code_scheme>
</component>
\ No newline at end of file
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="1.8" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" addBOMForNewFiles="with NO BOM" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="PLATFORM" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
</GradleProjectSettings>
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="BintrayJCenter" />
<option name="name" value="BintrayJCenter" />
<option name="url" value="https://jcenter.bintray.com/" />
</remote-repository>
<remote-repository>
<option name="id" value="Google" />
<option name="name" value="Google" />
<option name="url" value="https://dl.google.com/dl/android/maven2/" />
</remote-repository>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
<component name="DesignSurface">
<option name="filePathToZoomLevelMap">
<map>
<entry key="..\:/SotardokFolder/CIS-Mobile/app/src/main/res/layout/activity_home.xml" value="0.13333333333333333" />
<entry key="..\:/SotardokFolder/CIS-Mobile/app/src/main/res/layout/fragment_beranda.xml" value="0.16799999999999998" />
<entry key="..\:/SotardokFolder/CIS-Mobile/app/src/main/res/layout/fragment_home.xml" value="0.1598731884057971" />
<entry key="..\:/SotardokFolder/CIS-Mobile/app/src/main/res/menu/navigation_menu.xml" value="0.175" />
<entry key="..\:/SotardokFolder/CIS-Mobile/app/src/main/res/menu/support_menu.xml" value="0.175" />
</map>
</option>
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
</set>
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
\ No newline at end of file
## Installation
- Import this project into your android studio
- Synchronize
- Run your android studio
- Don't Forget to start your backend in "Backend CIS" folder
- If you want to use your backend, change BASE_URL in "CIS-Mobile\app\src\main\java\ta1\cis\api" in Constants.kt File
\ No newline at end of file
/build
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 30
buildToolsVersion '30.0.3'
defaultConfig {
applicationId "TA1.CIS"
minSdkVersion 23
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility "1.8"
targetCompatibility "1.8"
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.core:core-ktx:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.android.material:material:1.2.0-alpha04'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.wear:wear:1.1.0'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
//Retrofit
implementation 'com.squareup.okhttp3:okhttp:3.12.1'
implementation 'com.squareup.retrofit2:retrofit:2.6.0'
implementation 'com.squareup.retrofit2:converter-gson:2.6.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.11.0'
// Coroutines
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.4"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0"
// ViewModel
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation "android.arch.lifecycle:viewmodel:2.2.0"
implementation 'com.google.android.material:material:1.1.0'
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.0'
implementation 'androidx.navigation:navigation-ui-ktx:2.3.0'
implementation 'de.hdodenhof:circleimageview:3.0.0'
//viewpager
implementation 'androidx.viewpager2:viewpager2:1.0.0'
// recycleview
implementation "androidx.cardview:cardview:1.0.0"
implementation "androidx.recyclerview:recyclerview:1.2.0"
implementation 'com.github.bumptech.glide:glide:4.11.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
implementation 'com.squareup.picasso:picasso:2.71828'
// Pusher
implementation 'com.pusher:pusher-java-client:2.2.1'
}
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
package ta1.cis
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.Assert.*
/**
* Instrumented test, which will execute on an Android device.
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Test
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("TA1.CIS", appContext.packageName)
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ta1.cis">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<application
android:allowBackup="true"
android:icon="@mipmap/logo_foreground"
android:label="@string/app_name"
android:roundIcon="@mipmap/logo_foreground"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true">
<activity android:name=".activity.PraktikumDetail"></activity>
<activity android:name=".activity.DetailMateriActivity" />
<activity android:name=".activity.DetailPraktikum" />
<activity
android:name=".activity.MatakuliahActivity"
android:theme="@style/Material" />
<activity
android:name=".activity.EditIzinKeluar"
android:theme="@style/Material" />
<activity
android:name=".activity.RequestIzinKeluarActivity"
android:theme="@style/Material" />
<activity android:name=".activity.DetailIzinKeluar" />
<activity
android:name=".activity.EditIzinBermalam"
android:theme="@style/Material" />
<service
android:name=".service.NotificationService"
android:enabled="true"
android:exported="true" />
<activity android:name=".activity.DetailPengumumanActivity" />
<activity android:name=".activity.IsiKuesionerActivity" />
<activity android:name=".activity.EditDataSekolahActivity" />
<activity android:name=".activity.EditDataOrangtuaActivity" />
<activity android:name=".activity.EditDataPribadiActivity" />
<activity android:name=".activity.DetailPaketActivity" />
<activity android:name=".activity.DetailIzinBermalam" />
<activity
android:name=".activity.RequestIzinBermalamActivity"
android:theme="@style/Material" />
<activity
android:name=".activity.HomeActivity"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".activity.LoginActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="preloaded_fonts"
android:resource="@array/preloaded_fonts" />
</application>
</manifest>
\ No newline at end of file
package fragment
import androidx.lifecycle.ViewModel
class PaketViewModel : ViewModel() {
// TODO: Implement the ViewModel
}
\ No newline at end of file
package ta1.cis.activity
import android.content.Context
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Toast
import ta1.cis.api.RetrofitInstance
import ta1.cis.helper.SharedPref
import kotlinx.android.synthetic.main.activity_detail_izin_bermalam.*
import kotlinx.android.synthetic.main.activity_detail_izin_bermalam.topAppBar
import kotlinx.android.synthetic.main.activity_request_izin_bermalam.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import ta1.cis.model.response.Data
import ta1.cis.model.response.DataIzin
import ta1.cis.model.response.ResponseDetailIzinBermalam
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.awaitResponse
import ta1.cis.R
class DetailIzinBermalam : AppCompatActivity() {
private lateinit var dataIzin : DataIzin
private lateinit var sharedPref: SharedPref
companion object{
const val DATA_IZIN = "data_izin"
}
override fun onStart() {
super.onStart()
init()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_detail_izin_bermalam)
setSupportActionBar(topAppBar)
dataIzin = intent.getParcelableExtra<DataIzin>(DATA_IZIN) as DataIzin
sharedPref = SharedPref(this)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
topAppBar.setNavigationOnClickListener {
onBackPressed()
}
init();
cancelIzin.setOnClickListener {
cancelIb()
}
editIzinBermalam.setOnClickListener {
sendData(baseContext,dataIzin)
}
}
fun sendData(context: Context,data: DataIzin) {
Intent(context,EditIzinBermalam::class.java).apply {
putExtra(EditIzinBermalam.dataIzin,data)
putExtra("tglBerangkat",rencana_berangkat.text.toString())
putExtra("tglKembali",rencana_kembali.text.toString())
}.also {
startActivity(it)
}
}
fun cancelIb(){
pb_detail.visibility = View.VISIBLE
RetrofitInstance.instanceRetrofit.cancelIzinBermalam(dataIzin.idIzin,"Bearer ${sharedPref.getTokenBearer()}")
.enqueue(object : Callback<Unit>{
override fun onResponse(call: Call<Unit>, response: Response<Unit>) {
Toast.makeText(this@DetailIzinBermalam,"Ib sudah berhasil di batalkan", Toast.LENGTH_LONG).show()
pb_detail.visibility = View.GONE
sharedPref.setStatusUpdate(2)
onBackPressed()
}
override fun onFailure(call: Call<Unit>, t: Throwable) {
pb_detail.visibility = View.GONE
Log.d("CancelError",t.message.toString())
Toast.makeText(this@DetailIzinBermalam,"Ada masalah tentang koneksi Anda",Toast.LENGTH_LONG).show()
sharedPref.setStatusUpdate(2)
onBackPressed()
}
})
}
fun init(){
var token = sharedPref.getTokenBearer()
var dimId = sharedPref.getDimId().toLong()
pb_detail.visibility = View.VISIBLE
RetrofitInstance.instanceRetrofit.getDetailIzinBermalam("Bearer $token",dimId,dataIzin.idIzin!!.toLong()).enqueue(object :
Callback<ResponseDetailIzinBermalam>{
override fun onFailure(call: Call<ResponseDetailIzinBermalam>, t: Throwable) {
Toast.makeText(this@DetailIzinBermalam,"Error",Toast.LENGTH_SHORT).show()
}
override fun onResponse(
call: Call<ResponseDetailIzinBermalam>,
response: Response<ResponseDetailIzinBermalam>
) {
var body = response.body();
nama_mahasiswa.text = body?.data?.nama_mahasiswa;
nim_mahasiswa.text = body?.data?.nim_mahasiswa;
rencana_berangkat.text = body?.data?.rencana_berangkat;
rencana_kembali.text = body?.data?.rencana_kembali;
realisasi_berangkat.text = body?.data?.realisasi_berangkat ?: "-";
realisasi_kembali.text = body?.data?.realisasi_kembali ?: "-"
keperluan_ib.text = body?.data?.keperluan_ib
tempat_tujuan.text = body?.data?.tujuan
when (body?.data?.request_id) {
1 -> {
status_request.text = "Menunggu"
cancelIzin.visibility = View.VISIBLE
editIzinBermalam.visibility = View.VISIBLE
}
2 -> {
status_request.text = "Disetujui"
}
3 -> {
status_request.text = "Ditolak"
}
else -> {
status_request.text = "Dibatalkan"
}
}
pb_detail.visibility = View.GONE
}
})
}
}
\ No newline at end of file
package ta1.cis.activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_detail_izin_keluar.*
import kotlinx.android.synthetic.main.activity_edit_izin_bermalam.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import retrofit2.awaitResponse
import ta1.cis.R
import ta1.cis.api.RetrofitInstance
import ta1.cis.helper.SharedPref
import ta1.cis.model.response.DataIzinKeluar
class DetailIzinKeluar : AppCompatActivity() {
private lateinit var sharedPref: SharedPref
private lateinit var izinKeluar: DataIzinKeluar
companion object{
var DATA_IZIN_KELUAR = "DATA_IZIN_KELUAR"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_detail_izin_keluar)
setSupportActionBar(topAppBarDetailIk)
sharedPref = SharedPref(this)
izinKeluar = intent.getParcelableExtra<DataIzinKeluar>(DATA_IZIN_KELUAR) as DataIzinKeluar
supportActionBar?.setDisplayHomeAsUpEnabled(true)
fetchDetail()
topAppBarDetailIk.setNavigationOnClickListener {
onBackPressed()
}
editIzinKeluar.setOnClickListener {
sendData()
}
cancelIzinKeluar.setOnClickListener {
cancelIK()
}
}
override fun onStart() {
super.onStart()
fetchDetail()
}
private fun sendData() {
Intent(this,EditIzinKeluar::class.java).apply {
putExtra(EditIzinKeluar.DATA_IZIN_KELUAR,izinKeluar)
}.also {
startActivity(it)
}
}
private fun cancelIK(){
pbDetailIk.visibility = View.VISIBLE
GlobalScope.launch(Dispatchers.IO) {
val response = RetrofitInstance.instanceRetrofit.cancelIk(izinKeluar.izinKeluarId!!.toLong(),"Bearer ${sharedPref.getTokenBearer()}").awaitResponse()
if(response.isSuccessful){
withContext(Dispatchers.Main){
pbDetailIk.visibility = View.GONE
Toast.makeText(baseContext,"IK Berhasil di batalkan",Toast.LENGTH_LONG).show()
onBackPressed()
}
}
}
}
private fun fetchDetail(){
pbDetailIk.visibility = View.VISIBLE
GlobalScope.launch(Dispatchers.IO) {
val response = RetrofitInstance.instanceRetrofit.getDetailIzinKeluar(sharedPref.getDimId().toLong()
,izinKeluar.izinKeluarId!!.toLong(),"Bearer ${sharedPref.getTokenBearer()}").awaitResponse()
if(response.isSuccessful){
withContext(Dispatchers.Main){
val data = response.body()?.data
pemohon.text = data?.pemohon
nimMahasiswa.text = data?.nimMahasiswa
keperluanIK.text = data?.keperluanIk
rencanaberangkat.text = data?.rencanaBerangkat
rencanakembali.text = data?.rencanaKembali
realisasiberangkat.text = data?.realisasiBerangkat ?: "-"
realisasikembali.text = data?.realisasiKembali ?: "-"
var statusDosen = data?.statusDosen
var statusBaak = data?.statusBaak
var statusKeasramaan = data?.statusKeasramaan
if(statusDosen == 3 || statusBaak == 3 || statusKeasramaan == 3){
if(statusDosen == 3){
status_request_dosen_wali.text = "Ditolak"
disetujuiwali.text = data?.namaDosen
}
if(statusBaak == 3){
status_request_baak.text = "Ditolak"
disetujuibaak.text = data?.namaBaak
}
if(statusKeasramaan == 3){
status_request_keasramaan.text = "Ditolak"
disetujuikeasramaan.text = data?.namaKeasramaan
}
}else if(statusDosen == 4 || statusBaak == 4 || statusKeasramaan == 4){
status_request_dosen_wali.text = "Dibatalkan"
status_request_baak.text = "Dibatalkan"
status_request_keasramaan.text = "Dibatalkan"
editIzinKeluar.visibility = View.GONE
cancelIzinKeluar.visibility = View.GONE
}else {
if(statusDosen == 1){
status_request_dosen_wali.text = "Menunggu"
editIzinKeluar.visibility = View.VISIBLE
cancelIzinKeluar.visibility = View.VISIBLE
}else{
status_request_dosen_wali.text = "Disetujui"
disetujuiwali.text = data?.namaDosen
}
if(statusBaak == 1){
status_request_baak.text = "Menunggu"
}else{
status_request_baak.text = "Disetujui"
disetujuibaak.text = data?.namaBaak
}
if(statusKeasramaan == 1){
status_request_keasramaan.text = "Menunggu"
}else{
status_request_keasramaan.text = "Disetujui"
disetujuikeasramaan.text = data?.namaKeasramaan
}
}
pbDetailIk.visibility = View.GONE
}
}else{
pbDetailIk.visibility = View.GONE
Log.d("ErrorFetchIk",response.errorBody().toString())
}
}
}
}
\ No newline at end of file
package ta1.cis.activity
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.Html
import android.text.method.LinkMovementMethod
import android.util.Log
import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.activity_detail_materi.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import retrofit2.awaitResponse
import ta1.cis.R
import ta1.cis.adapter.DetailFileAdapter
import ta1.cis.api.RetrofitInstance
import ta1.cis.helper.SharedPref
import ta1.cis.model.response.MateriItem
class DetailMateriActivity : AppCompatActivity() {
private lateinit var detailMateri: MateriItem
private lateinit var sharedPref: SharedPref
private lateinit var recyclerView: RecyclerView
companion object{
val DETAIL_MATAKULIAH = "DETAIL_MATAKULIAH"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_detail_materi)
setSupportActionBar(topAppBarDetailMatkul)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
detailMateri = intent.getParcelableExtra<MateriItem>(DETAIL_MATAKULIAH) as MateriItem
// Log.d("DetailM",detailMateri.toString())
sharedPref = SharedPref(this)
recyclerView = findViewById(R.id.rv_file)
setupFileRecycle()
}
private fun setupFileRecycle() {
GlobalScope.launch(Dispatchers.IO) {
val response = RetrofitInstance.instanceRetrofit.getFileMateri(detailMateri.materiId,"Bearer ${sharedPref.getTokenBearer()}").awaitResponse()
if(response.body()?.status == 200){
withContext(Dispatchers.Main){
val data = response?.body()?.data
judul_detail_materi.text = detailMateri.judul
tglSesi.text = "Tanggal Sesi ${detailMateri.tanggalSesi}"
isi.text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Html.fromHtml(detailMateri.isi, Html.FROM_HTML_MODE_COMPACT)
} else {
Html.fromHtml(detailMateri.isi)
}
isi.movementMethod = LinkMovementMethod.getInstance()
mingguSesi.text = "Minggu ke / Sesi : ${detailMateri.mingguKe} / ${detailMateri.sesi}"
rv_file.layoutManager = LinearLayoutManager(this@DetailMateriActivity,LinearLayoutManager.VERTICAL,false)
rv_file.adapter = DetailFileAdapter(this@DetailMateriActivity,data)
}
}else{
withContext(Dispatchers.Main){
Toast.makeText(this@DetailMateriActivity,"Ada masalah dengan Internet Anda",Toast.LENGTH_LONG).show()
}
}
}
}
}
\ No newline at end of file
package ta1.cis.activity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.google.gson.Gson
import kotlinx.android.synthetic.main.activity_detail_paket.*
import kotlinx.android.synthetic.main.activity_detail_paket.topAppBar
import kotlinx.android.synthetic.main.activity_request_izin_bermalam.*
import kotlinx.android.synthetic.main.paket_layout.*
import kotlinx.coroutines.*
import model.response.DataPaket
import model.response.DetailPaket
import model.response.Paket
import model.response.ResponseDetailPaket
import okhttp3.Dispatcher
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.awaitResponse
import ta1.cis.R
import ta1.cis.api.RetrofitInstance
import ta1.cis.helper.SharedPref
class DetailPaketActivity : AppCompatActivity() {
private lateinit var idpaket: Paket
private lateinit var sharedPref: SharedPref
companion object{
val DATA_PAKET : String = "DATA_PAKET"
val TAG = "Detail Paket"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_detail_paket)
setSupportActionBar(topAppBar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
sharedPref = SharedPref(this)
idpaket = intent.getParcelableExtra<DataPaket>("DATA_PAKET") as Paket
fetchDetailPaket()
topAppBar.setNavigationOnClickListener{
onBackPressed()
}
}
private fun fetchDetailPaket(){
GlobalScope.launch(Dispatchers.IO) {
val response = RetrofitInstance.instanceRetrofit.getDetailPaket("Bearer ${sharedPref.getTokenBearer()}", idpaket.id).awaitResponse()
if(response.isSuccessful){
val data = response.body()!!
withContext(Dispatchers.Main){
progressBar.visibility = View.GONE
data.data.forEach {
tagpaket.text = it.tag
pengirim.text = it.pengirim
wktu_kedatangan.text = it.waktuKedatangan
posisi_paket.text = it.posisiPaket
statuspaket.text = it.statusPaket
diambil.text = it.namaPenerima ?: "-"
wktu_ambil.text = it.waktuDiambil ?: "-"
deskripsi_paket.text = it.deskripsi
}
}
}
}
}
private fun showDetailPaket(detailpaket: DetailPaket){
namapenerima.text = detailpaket.deskripsi
Toast.makeText(this, detailpaket.deskripsi, Toast.LENGTH_LONG).show()
}
}
\ No newline at end of file
package ta1.cis.activity
import android.os.Build
import android.os.Bundle
import android.os.PersistableBundle
import android.text.Html
import android.text.method.LinkMovementMethod
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_detail_materi.*
import kotlinx.android.synthetic.main.detail_praktikum.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import ta1.cis.R
import ta1.cis.model.response.Item
class DetailPraktikum: AppCompatActivity() {
private lateinit var itemPraktikum: Item
companion object{
val DATA_PRAKTIKUM = "DATA_PRAKTIKUM"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.detail_praktikum)
itemPraktikum = intent.getParcelableExtra<Item>(DATA_PRAKTIKUM) as Item
bindData()
setupData()
}
private fun bindData() {
topikPraktikum.text = itemPraktikum.topik
tempatPenyerahan.text = "Tempat Penyerahan : ${itemPraktikum.tempatPenyerahan}"
tglSesiPrak.text = "Tanggal Sesi : ${itemPraktikum.tanggalSesi}"
aktifitas.text = "Aktifitas : ${itemPraktikum.aktifitas}"
batasAkhir.text = "Batas Akhir : ${itemPraktikum.batasAkhir}"
waktuPengerjaanPrak.text = "Waktu Pengerjaan : ${itemPraktikum.waktuPengerjaan}"
tujuanPrak.text = "Tujuan : ${itemPraktikum.tujuan}"
isiPrak.text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Html.fromHtml(itemPraktikum.isi, Html.FROM_HTML_MODE_COMPACT)
} else {
Html.fromHtml(itemPraktikum.isi)
}
isiPrak.movementMethod = LinkMovementMethod.getInstance()
}
private fun setupData() {
GlobalScope.launch(Dispatchers.IO) {
}
}
}
package ta1.cis.activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.*
import kotlinx.android.synthetic.main.activity_edit_data_sekolah.*
import kotlinx.android.synthetic.main.activity_edit_pribadi.*
import kotlinx.android.synthetic.main.detail_pengumuman.*
import kotlinx.coroutines.*
import retrofit2.Call
import retrofit2.Response
import retrofit2.awaitResponse
import ta1.cis.R
import ta1.cis.api.RetrofitInstance
import ta1.cis.fragment.tabitem.D_PribadiFragment
import ta1.cis.helper.SharedPref
import ta1.cis.model.request.RequestEditPribadi
import ta1.cis.model.response.DataAkademis
import ta1.cis.model.response.EditPribadi
import ta1.cis.model.response.ResponseEditPribadi
import javax.security.auth.callback.Callback
class EditDataPribadiActivity : AppCompatActivity() {
private lateinit var sharedPref: SharedPref
private lateinit var radioGroup: RadioGroup
private lateinit var btnEdit: Button
private lateinit var agamaSpin: Spinner
private lateinit var kabupatenSpin : Spinner
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_edit_pribadi)
sharedPref = SharedPref(this)
radioGroup = findViewById(R.id.radioGroupJk)
btnEdit = findViewById(R.id.saveEditPribadi)
setSupportActionBar(topAppBarEdit)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
val anakKe = intent.getStringExtra("Anak_ke")
var index = anakKe?.indexOf('/')
var length = anakKe?.length
var anak = ""
for (i in 0 until index!!){
anak+= anakKe?.get(i)
}
var jumlahTanggungan = ""
if (length != null) {
for(i in index+1 until length!! ){
jumlahTanggungan += anakKe?.get(i)
}
}
etAnakKe.setText(anak)
etJlhAnak.setText(jumlahTanggungan)
val NamaSiswa = intent.getStringExtra("Nama")
val EditNamaSiswa: EditText = findViewById(R.id.etnama)
EditNamaSiswa.setText(NamaSiswa)
val TglLahirSiswa = sharedPref.getTanggal()
val EditTglLahirSiswa: EditText = findViewById(R.id.etTglLahir)
EditTglLahirSiswa.setText(TglLahirSiswa)
val TempatLahirSiswa = sharedPref.getTempat()
val EditTempatLahirSiswa = findViewById<EditText>(R.id.etTmptLahir)
EditTempatLahirSiswa.setText(TempatLahirSiswa)
if (intent.getStringExtra("Jenis_Kelamin").equals("Laki-laki")){
radioGroup.check(R.id.etlakilaki)
}else{
radioGroup.check(R.id.etperempuan)
}
val AlamatSiswa = intent.getStringExtra("Alamat")
val EditAlamatSiswa: EditText = findViewById(R.id.etAlamatpribadi)
EditAlamatSiswa.setText(AlamatSiswa)
val KodePos = intent.getStringExtra("Kode_Pos")
val EditKodePos: EditText = findViewById(R.id.etKodePos)
EditKodePos.setText(KodePos)
val EmailSiswa = intent.getStringExtra("Email")
val EditEmailSiswa: EditText = findViewById(R.id.etEmail)
EditEmailSiswa.setText(EmailSiswa)
val Hp1Siswa = intent.getStringExtra("Hp1")
val EditHp1Siswa: EditText = findViewById(R.id.etHP1)
if(Hp1Siswa == ""){
EditHp1Siswa.setText("-")
}else{
EditHp1Siswa.setText(Hp1Siswa)
}
val Hp2Siswa = intent.getStringExtra("Hp2")
val EditHp2Siswa: EditText = findViewById(R.id.etHP2)
if(Hp2Siswa == ""){
EditHp2Siswa.setText("-")
}else{
EditHp2Siswa.setText(Hp2Siswa)
}
val agama = intent.getStringExtra("Agama")
agamaSpin = findViewById(R.id.agama_spinner)
ArrayAdapter.createFromResource(
this,
R.array.agama_list,
android.R.layout.simple_spinner_item
).also { adapter ->
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
// Apply the adapter to the spinner
agamaSpin.adapter = adapter
agamaSpin.setSelection(getIndex(agamaSpin,agama))
}
// if (intent.getStringExtra("Gol_Darah").equals("A")){
// radioGroup.check(R.id.etB)
// } else {
// radioGroup.check(R.id.etAB)
// }
var kabupaten = intent.getStringExtra("Kabupaten")
if(kabupaten == "" || kabupaten == "null" || kabupaten == null){
kabupaten = "Kabupaten"
}
kabupatenSpin = findViewById(R.id.kbptenPribadi)
ArrayAdapter.createFromResource(
this,
R.array.kabupaten_list,
android.R.layout.simple_spinner_item
).also { adapter ->
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
kabupatenSpin.adapter = adapter
// val apa = getIndex(kabupatenSpin,kabupaten)
kabupatenSpin.setSelection(getIndex(kabupatenSpin,kabupaten))
// kabupatenSpin.setSelection(getIndex(kabupatenSpin,kabupaten))
}
btnEdit.setOnClickListener {
pb_pribadi.visibility = View.VISIBLE
var jenis_kelamin = 0;
if(etlakilaki.isChecked){
jenis_kelamin = 1
}else{
jenis_kelamin = 2
}
var agama = agama_spinner.selectedItem.toString();
var agamaId = 0;
when(agama){
"Kristen"->{
agamaId = 1
}
"Katolik" -> {
agamaId = 2
}
"Islam" -> {
agamaId = 3
}
"Hindu" -> {
agamaId = 4
}
"Buddha" -> {
agamaId = 5
}
"Konghucu" -> {
agamaId = 6
}
}
var golDar = "";
if(etA.isChecked){
golDar = "1"
}
else if(etB.isChecked){
golDar = "2"
}
else if(etAB.isChecked){
golDar = "3"
}
else golDar = "4"
val data = RequestEditPribadi(
etnama.text.toString(),
etTglLahir.text.toString(),
etTmptLahir.text.toString(),
etAlamatpribadi.text.toString(),
etHP1.text.toString(),
etHP2.text.toString(),
etAnakKe.text.toString(),
etJlhAnak.text.toString(),
jenis_kelamin.toString(),
agamaId.toString(),
golDar,
kbptenPribadi.selectedItem.toString(),
etKodePos.text.toString(),
etEmail.text.toString(),
etTelepon.text.toString()
);
editData(data);
}
topAppBarEdit.setNavigationOnClickListener {
onBackPressed()
}
}
private fun getIndex(spinner: Spinner, data: String?): Int {
for (i in 0 until spinner.count){
if(spinner.getItemAtPosition(i).toString().equals(data)){
return i
}
}
return 0
}
private fun editData(datas:RequestEditPribadi){
GlobalScope.launch(Dispatchers.IO){
val response = RetrofitInstance.instanceRetrofit.updateDataPribadi("Bearer ${sharedPref.getTokenBearer()}",datas).awaitResponse()
if (response.isSuccessful){
var pribadi = response.body()?.data
withContext(Dispatchers.Main){
delay(2000L)
pb_pribadi.visibility = View.VISIBLE
sharedPref.setStatusUpdate(2)
Toast.makeText(applicationContext,"Data sudah berhasil di update",Toast.LENGTH_LONG).show()
onBackPressed()
}
}
}
}
}
\ No newline at end of file
package ta1.cis.activity
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_edit_data_sekolah.*
import kotlinx.android.synthetic.main.d__asal_sekolah.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import retrofit2.awaitResponse
import ta1.cis.R
import ta1.cis.api.RetrofitInstance
import ta1.cis.helper.SharedPref
import ta1.cis.model.request.EditSekolah
class EditDataSekolahActivity : AppCompatActivity() {
private lateinit var sharedPref: SharedPref
private lateinit var btnEdit:Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_edit_data_sekolah)
setSupportActionBar(topAppBar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
sharedPref = SharedPref(this)
val NoIjazah = intent.getStringExtra("No_Ijazah_SMA")
etNoIjazahSMA.setText(NoIjazah)
val NamaSMA = intent.getStringExtra("Nama_SMA")
etAsalSekolah.setText(NamaSMA)
saveEditSekolah.setOnClickListener {
pb_editDataSekolah.visibility = View.VISIBLE
var data = EditSekolah(
etNoIjazahSMA.text.toString(),
etAsalSekolah.text.toString()
)
Log.d("HalloButton",data.toString());
editDataAsalSekolah(data)
}
topAppBar.setNavigationOnClickListener {
onBackPressed()
}
}
fun editDataAsalSekolah(data: EditSekolah){
GlobalScope.launch(Dispatchers.IO) {
val response = RetrofitInstance.instanceRetrofit.updateDataSekolah("Bearer ${sharedPref.getTokenBearer()}",data.noIjazah.toString(),data.namaSma).awaitResponse()
if(response.isSuccessful){
withContext(Dispatchers.Main){
Log.d("Hallo",response.body()?.data.toString());
pb_editDataSekolah.visibility = View.GONE
sharedPref.setStatusUpdate(2)
Toast.makeText(baseContext,"Data berhasil di update",Toast.LENGTH_SHORT).show()
onBackPressed()
}
}
}
}
}
\ No newline at end of file
package ta1.cis.activity
import android.annotation.SuppressLint
import android.app.TimePickerDialog
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.format.DateFormat
import android.util.Log
import android.view.View
import android.widget.TimePicker
import android.widget.Toast
import androidx.annotation.RequiresApi
import com.google.android.material.datepicker.CalendarConstraints
import com.google.android.material.datepicker.DateValidatorPointForward
import com.google.android.material.datepicker.MaterialDatePicker
import kotlinx.android.synthetic.main.activity_edit_izin_bermalam.*
import kotlinx.android.synthetic.main.activity_request_izin_bermalam.*
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import ta1.cis.R
import ta1.cis.api.RetrofitInstance
import ta1.cis.helper.SharedPref
import ta1.cis.model.request.IBRequest
import ta1.cis.model.response.Data
import ta1.cis.model.response.DataIzin
import java.text.SimpleDateFormat
import java.time.LocalDateTime
import java.time.ZoneId
import java.time.format.DateTimeFormatter
import java.util.*
class EditIzinBermalam : AppCompatActivity() {
private lateinit var sharedPref: SharedPref;
private var waktuBerangkat : String = ""
private lateinit var dataIzinIntent : DataIzin;
private var waktuKembali : String = ""
companion object{
val dataIzin = "DATA_IZIN"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_edit_izin_bermalam)
dataIzinIntent = intent.getParcelableExtra<DataIzin>(dataIzin) as DataIzin
sharedPref = SharedPref(this)
var millis = 0L
btn_berangkat_edit.setOnClickListener {
// millis = getTimeInMillis(btn_berangkat_edit.text.toString())
// Log.d("Millis", millis.toString())
getDate(0)
}
btn_edit.setOnClickListener {
getDate(1)
}
bindData(dataIzinIntent)
editBtn.setOnClickListener {
var data = IBRequest(
tgl_berangkat_edit.text.toString(),
tgl_kembali_edit.text.toString(),
keperluanIbEdit.text.toString(),
tujuanEdit.text.toString()
)
editData(data)
}
}
private fun getDate(id : Int) {
val mcurrentDate: Calendar = Calendar.getInstance()
val mYear: Int = mcurrentDate.get(Calendar.YEAR)
val mMonth: Int = mcurrentDate.get(Calendar.MONTH)
val mDay: Int = mcurrentDate.get(Calendar.DAY_OF_MONTH)
mcurrentDate.add(Calendar.DATE, 1);
val constraintBuilder = CalendarConstraints.Builder().setValidator(DateValidatorPointForward.from(mcurrentDate.timeInMillis))
val picker = MaterialDatePicker.Builder
.datePicker()
.setTitleText("Pilih Waktu Berangkat")
.setSelection(mcurrentDate.timeInMillis)
.setCalendarConstraints(constraintBuilder.build())
.build()
picker.show(supportFragmentManager,"tag")
picker.addOnPositiveButtonClickListener { selection: Long ->
val timeZoneUTC = TimeZone.getDefault()
val offsetFromUTC = timeZoneUTC.getOffset(Date().time) * -1
val simpleFormat = SimpleDateFormat("yyyy-MM-dd", Locale.US)
val date = Date(selection + offsetFromUTC)
val mcurrentDate: Calendar = Calendar.getInstance()
// var waktuBerangkat :String = simpleFormat.format(date)
if(id == 0){
waktuBerangkat = simpleFormat.format(date)
}else{
waktuKembali = simpleFormat.format(date)
}
val timePicker = TimePickerDialog(this,
{ view, hourOfDay, minute ->
if (id == 0) {
waktuBerangkat += " ${hourOfDay}:${minute}:00"
tgl_berangkat_edit.setText(waktuBerangkat.toString())
} else {
waktuKembali += " ${hourOfDay}:${minute}:00"
tgl_kembali_edit.setText(waktuKembali.toString())
}
},mcurrentDate.get(Calendar.HOUR_OF_DAY), mcurrentDate.get(Calendar.MINUTE), DateFormat.is24HourFormat(this))
timePicker.show()
}
}
private fun getTimeInMillis(date: String): Long{
var sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
var date = sdf.parse(date)
var millis = date.time
return millis
}
fun bindData(data: DataIzin){
var tglBerangkat = intent.getStringExtra("tglBerangkat")
tgl_berangkat_edit.setText(tglBerangkat)
var tglKembali = intent.getStringExtra("tglKembali")
tgl_kembali_edit.setText(tglKembali)
keperluanIbEdit.setText(data.keperluanIb)
tujuanEdit.setText(data.tujuan)
}
fun editData(data: IBRequest){
pb_ibEdit.visibility = View.VISIBLE
RetrofitInstance.instanceRetrofit.editIzinBermalam(dataIzinIntent.idIzin!!.toLong(),sharedPref.getDimId().toLong(),data,"Bearer ${sharedPref.getTokenBearer()}")
.enqueue(object : Callback<Unit>{
override fun onResponse(call: Call<Unit>, response: Response<Unit>) {
Toast.makeText(this@EditIzinBermalam,"Data Berhasil di update",Toast.LENGTH_LONG).show()
sharedPref.setStatusUpdate(2)
pb_ibEdit.visibility = View.GONE
onBackPressed()
}
override fun onFailure(call: Call<Unit>, t: Throwable) {
pb_ibEdit.visibility = View.GONE
Toast.makeText(this@EditIzinBermalam,"Ada Masalah pada Internet",Toast.LENGTH_LONG).show()
}
}
)
}
}
\ No newline at end of file
package ta1.cis.activity
import android.app.TimePickerDialog
import android.os.Bundle
import android.text.format.DateFormat
import android.util.Log
import android.view.View
import android.widget.TimePicker
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.google.android.material.datepicker.CalendarConstraints
import com.google.android.material.datepicker.DateValidatorPointForward
import com.google.android.material.datepicker.MaterialDatePicker
import kotlinx.android.synthetic.main.activity_edit_izin_bermalam.*
import kotlinx.android.synthetic.main.activity_edit_izin_keluar.*
import kotlinx.android.synthetic.main.activity_request_izin_keluar.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import retrofit2.awaitResponse
import ta1.cis.R
import ta1.cis.api.RetrofitInstance
import ta1.cis.helper.SharedPref
import ta1.cis.model.request.IKRequest
import ta1.cis.model.response.DataIzinKeluar
import java.text.SimpleDateFormat
import java.util.*
class EditIzinKeluar : AppCompatActivity() {
companion object{
var DATA_IZIN_KELUAR = "DATA_IZIN_KELUAR"
}
private lateinit var waktuBerangkat :String
private lateinit var waktuKembali :String
private lateinit var dataIzinKeluar: DataIzinKeluar
private lateinit var sharedPref: SharedPref
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_edit_izin_keluar)
dataIzinKeluar = intent.getParcelableExtra<DataIzinKeluar>(DATA_IZIN_KELUAR) as DataIzinKeluar
sharedPref = SharedPref(this)
bindData()
btn_editBerangkatIK.setOnClickListener {
getDate(0)
}
btn_editKembaliIK.setOnClickListener {
getDate(1)
}
buatEditIk.setOnClickListener {
pb_editik.visibility = View.VISIBLE
editData()
}
batalEditIk.setOnClickListener {
cancelIk()
}
}
private fun cancelIk() {
GlobalScope.launch(Dispatchers.IO) {
var response = RetrofitInstance.instanceRetrofit.cancelIk(dataIzinKeluar.izinKeluarId!!.toLong(),"Bearer ${sharedPref.getTokenBearer()}").awaitResponse()
if(response.isSuccessful)
withContext(Dispatchers.Main){
Toast.makeText(baseContext,"IK sudah berhasil di update",Toast.LENGTH_LONG).show()
onBackPressed()
}else{
Log.d("ErrorCancel","Ada Bermasalah")
}
}
}
private fun editData() {
if(validateAllInput() == 1){
var data = IKRequest(
tgl_berangkat_editIK.text.toString(),
tgl_kembali_editIK.text.toString(),
keperluan_ik_edit.text.toString()
)
sendDataToServer(data)
}else{
}
}
private fun sendDataToServer(data: IKRequest) {
GlobalScope.launch(Dispatchers.IO) {
val response = RetrofitInstance.instanceRetrofit.editIk(
dataIzinKeluar.izinKeluarId!!.toLong(),
sharedPref.getDimId().toLong(),
data,"Bearer ${sharedPref.getTokenBearer()}").awaitResponse()
if(response.isSuccessful){
withContext(Dispatchers.Main){
Toast.makeText(baseContext,"IK Berhasil Di Update",Toast.LENGTH_LONG).show()
pb_editik.visibility = View.GONE
onBackPressed()
}
}else{
Log.d("EditError",response.errorBody().toString())
pb_editik.visibility = View.GONE
}
}
}
private fun validateAllInput() : Int{
if(tgl_berangkat_editIK.text.isNullOrBlank() || tgl_kembali_editIK.text.isNullOrBlank() || keperluan_ik_edit.text.isNullOrBlank()){
Toast.makeText(this@EditIzinKeluar,"Harap mengisi seluruh field",Toast.LENGTH_LONG).show()
pb_editik.visibility = View.GONE
return 0
}else{
var validateTgl = validate()
if(validateTgl == -1){
return 1
}
}
return 0
}
private fun bindData() {
tgl_berangkat_editIK.setText(dataIzinKeluar.rencanaBerangkat)
tgl_kembali_editIK.setText(dataIzinKeluar.rencanaKembali)
keperluan_ik_edit.setText(dataIzinKeluar.keperluanIk)
}
fun validate() : Int{
var cek_count = 0;
val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
var date1 = sdf.parse(tgl_berangkat_editIK.text.toString());
var date2 = sdf.parse(tgl_kembali_editIK.text.toString());
var compare = -2
var compareBerangkat = -2
if(date1 != null && date2 != null){
compare = date1.compareTo(date2)
compareBerangkat = date2.compareTo(date1)
}
Log.d("Compare",compare.toString())
if(compare == 1 || compare == 0){
Toast.makeText(applicationContext,"Tanggal Kembali sama atau kurang dari tanggal berangkat",
Toast.LENGTH_SHORT).show()
}else{
compare = -1
}
if(compareBerangkat == -1 || compareBerangkat == 0){
Toast.makeText(applicationContext,"Tanggal Berangkat sama atau lebih dari tanggal kembali",
Toast.LENGTH_SHORT).show()
}else{
compareBerangkat = 1
}
if(compare == -1 && compareBerangkat == 1){
pb_editik.visibility = View.GONE
return compare
}
return 0;
}
private fun getDate(jenis: Int) {
val mcurrentDate: Calendar = Calendar.getInstance()
val mYear: Int = mcurrentDate.get(Calendar.YEAR)
val mMonth: Int = mcurrentDate.get(Calendar.MONTH)
val mDay: Int = mcurrentDate.get(Calendar.DAY_OF_MONTH)
mcurrentDate.add(Calendar.DATE,0);
val constraintBuilder = CalendarConstraints.Builder().setValidator(DateValidatorPointForward.from(mcurrentDate.timeInMillis))
val picker = MaterialDatePicker.Builder
.datePicker()
.setTitleText("Pilih Waktu")
.setSelection(mcurrentDate.timeInMillis)
.setCalendarConstraints(constraintBuilder.build())
.build()
picker.show(supportFragmentManager,"tag")
picker.addOnPositiveButtonClickListener { selection: Long ->
val timeZoneUTC = TimeZone.getDefault()
val offsetFromUTC = timeZoneUTC.getOffset(Date().time) * -1
val simpleFormat = SimpleDateFormat("yyyy-MM-dd", Locale.US)
val date = Date(selection + offsetFromUTC)
val mcurrentDate: Calendar = Calendar.getInstance()
// var waktuBerangkat :String = simpleFormat.format(date)
if(jenis == 0){
waktuBerangkat = simpleFormat.format(date)
}else{
waktuKembali = simpleFormat.format(date)
}
val timePicker = TimePickerDialog(this,object : TimePickerDialog.OnTimeSetListener{
override fun onTimeSet(view: TimePicker?, hourOfDay: Int, minute: Int) {
if(jenis == 0){
waktuBerangkat += " ${hourOfDay}:${minute}:00"
tgl_berangkat_editIK.setText(waktuBerangkat.toString())
}else{
waktuKembali += " ${hourOfDay}:${minute}:00"
tgl_kembali_editIK.setText(waktuKembali.toString())
}
}
},mcurrentDate.get(Calendar.HOUR_OF_DAY), mcurrentDate.get(Calendar.MINUTE), DateFormat.is24HourFormat(this))
timePicker.show()
}
}
}
\ No newline at end of file
package ta1.cis.activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.appcompat.widget.Toolbar
import ta1.cis.R
import androidx.navigation.Navigation
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.NavigationUI
import androidx.navigation.ui.setupActionBarWithNavController
import ta1.cis.helper.SharedPref
import kotlinx.android.synthetic.main.activity_home.*
import ta1.cis.service.NotificationService
class HomeActivity : AppCompatActivity() {
private lateinit var sharedPref: SharedPref
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_home)
var toolbar = findViewById(R.id.toolbar) as Toolbar?
sharedPref = SharedPref(this)
supportActionBar?.setDisplayHomeAsUpEnabled(false)
setSupportActionBar(toolbar)
// Disini
val navController = Navigation.findNavController(this, R.id.fragment_container)
if(intent?.hasExtra("NotifType") == true){
if(intent?.getStringExtra("NotifType").equals("IB")){
navController.navigate(R.id.action_nav_beranda_to_nav_ib)
}
}
val appConfiguration = AppBarConfiguration(setOf(R.id.nav_profile
,R.id.nav_beranda
,R.id.nav_perkuliahan,R.id.nav_jadwal
,R.id.nav_krs,R.id.nav_ib, R.id.nav_ik,R.id.nav_pengumuman,R.id.nav_paket,R.id.nav_kuesioner),drawer_layout);
NavigationUI.setupWithNavController(nav_view, navController)
setupActionBarWithNavController(navController,appConfiguration)
val toggle = ActionBarDrawerToggle(this, drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
drawer_layout.addDrawerListener(toggle)
toggle.syncState()
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
val inflater : MenuInflater = menuInflater
inflater.inflate(R.menu.support_menu,menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if(item.itemId == R.id.logout){
sharedPref.clearAll()
val intent =Intent(this@HomeActivity,LoginActivity::class.java);
stopService(Intent(this@HomeActivity,NotificationService::class.java))
startActivity(intent)
finish()
}
return true
}
}
\ No newline at end of file
package ta1.cis.activity
import android.content.Intent
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.activity_isi_kuesioner.*
import kotlinx.android.synthetic.main.fragment_kuesioner.*
import kotlinx.android.synthetic.main.isikuesioner_layout.*
import kotlinx.coroutines.*
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.awaitResponse
import ta1.cis.R
import ta1.cis.adapter.IsiKuisionerAdapter
import ta1.cis.api.RetrofitInstance
import ta1.cis.helper.SharedPref
import ta1.cis.model.request.Answare
import ta1.cis.model.request.KuisionerAnsware
import ta1.cis.model.response.*
class IsiKuesionerActivity : AppCompatActivity() {
private lateinit var sharedPref: SharedPref
private lateinit var idkuesioner: DataKuesioner
var answare = mutableListOf<String>()
lateinit var rvQuestion: RecyclerView
lateinit var pertanyaan: List<DataItem>
companion object{
val DATA_KUESIONER : String = "DATA_KUESIONER"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_isi_kuesioner)
setSupportActionBar(kuesionerBar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
sharedPref = SharedPref(this)
idkuesioner = intent.getParcelableExtra<ResponseKuesioner>("DATA_KUESIONER") as DataKuesioner
findViewById<TextView>(R.id.JudulKuesioner).text = idkuesioner.nama
findViewById<TextView>(R.id.InstruksiPengisian).text = idkuesioner.keterangan
rvQuestion = findViewById(R.id.rvQuestion)
pbKuesioner.visibility = View.VISIBLE
fetchIsiKuesioner()
}
fun setAnsware(position:Int, selected:String){
if(this.answare.size < (position + 1)){
this.answare.add(position, selected)
}else{
selected.also { this.answare[position] = it }
}
}
fun sendAnsware(button:Button){
button.text= "Sedang mengirim data..."
var _answares = mutableListOf<Answare>()
var question = this.pertanyaan
this.answare.forEachIndexed { index, s ->
println(question[index])
if(question[index].tipeOpsi.equals("C", ignoreCase = false)){
val selected = s.split(",")
selected.forEach {
if(it.trim() != ""){
_answares.add(index, Answare(
it,
sharedPref.getUsername(),
sharedPref.getUserId(),
question[index]?.kuesionerPertanyaanId,
question[index]?.kuesionerId
))
}
}
}else if(question[index]?.tipeOpsi.equals("T", ignoreCase = false)
|| question[index]?.tipeOpsi.equals("R", ignoreCase = false)){
_answares.add(index, Answare(
s,
sharedPref.getUsername(),
sharedPref.getUserId(),
question[index]?.kuesionerPertanyaanId,
question[index]?.kuesionerId
))
}
}
var kuisionerAnsware = KuisionerAnsware(_answares)
CoroutineScope(Dispatchers.IO).launch {
val insert = RetrofitInstance.instanceRetrofit
.sendKuesionerAnsware(sharedPref.getTokenBearer(),kuisionerAnsware).awaitResponse()
if(insert.isSuccessful){
withContext(Dispatchers.Main){
Toast.makeText(this@IsiKuesionerActivity,
"Success to send answare.", Toast.LENGTH_LONG)
.show()
this@IsiKuesionerActivity.startActivity(Intent(this@IsiKuesionerActivity, HomeActivity::class.java))
this@IsiKuesionerActivity.finish()
}
}else{
withContext(Dispatchers.Main){
var kode = insert.errorBody().hashCode()
Toast.makeText(this@IsiKuesionerActivity,
"Kode Error : {$kode}", Toast.LENGTH_LONG)
.show()
}
}
}
}
private fun fetchIsiKuesioner(){
RetrofitInstance.instanceRetrofit.getPertanyaanKuesioner("Bearer ${sharedPref.getTokenBearer()}", idkuesioner.kuesionerId!!.toLong()).enqueue(object : Callback<ResponsePertanyaan>{
override fun onResponse(
call: Call<ResponsePertanyaan>,
response: Response<ResponsePertanyaan>
) {
val pertanyaan = response.body()
val lpertanyaan: List<DataItem> = pertanyaan?.data as List<DataItem>
this@IsiKuesionerActivity.pertanyaan = lpertanyaan
for (dataItem in lpertanyaan){
this@IsiKuesionerActivity.answare.add("")
}
rvQuestion.layoutManager = LinearLayoutManager(this@IsiKuesionerActivity, LinearLayoutManager.VERTICAL, false)
val adapter = IsiKuisionerAdapter(this@IsiKuesionerActivity, lpertanyaan, answare)
rvQuestion.adapter = adapter
pbKuesioner.visibility = View.GONE
pertanyaan?.let {
var mypertanyaan = it.data
}
}
override fun onFailure(call: Call<ResponsePertanyaan>, t: Throwable) {
Toast.makeText(this@IsiKuesionerActivity, t.message, Toast.LENGTH_LONG).show()
pbKuesioner.visibility = View.GONE
}
})
}
}
\ No newline at end of file
package ta1.cis.activity
import android.content.Context
import android.content.Intent
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Toast
import androidx.lifecycle.ViewModelProvider
import ta1.cis.api.RetrofitInstance
import ta1.cis.helper.Connectivity
import ta1.cis.helper.CustomDialog
import ta1.cis.helper.SharedPref
import kotlinx.android.synthetic.main.activity_login.*
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import ta1.cis.model.request.LoginRequest
import ta1.cis.model.response.ResponseModel
import retrofit2.Call
import retrofit2.Response
import ta1.cis.activity.HomeActivity
import ta1.cis.R
import ta1.cis.service.NotificationService
import kotlin.coroutines.CoroutineContext
class LoginActivity : AppCompatActivity() {
lateinit var sharedPref: SharedPref
lateinit var progressDialog: CustomDialog
override fun onCreate(savedInstanceState: Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
sharedPref = SharedPref(this)
if(sharedPref.getTokenBearer() != ""){
Log.d("LoginAcc1",sharedPref.getUserId().toString())
val intent = Intent(this@LoginActivity, HomeActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
startService(Intent(this,NotificationService::class.java))
startActivity(intent)
finish()
}
btn_login.setOnClickListener {
login()
}
}
fun login(){
if (edt_username.text!!.isEmpty()){
edt_username.error = "Kolom Username tidak boleh kosong"
edt_username.requestFocus()
} else if (edt_password.text!!.isEmpty()){
edt_password.error = "Kolom Password tidak boleh kosong"
edt_password.requestFocus()
}
pb_login.visibility = View.VISIBLE
val requestLogin = LoginRequest(
edt_username.text.toString(),
edt_password.text.toString()
)
if(Connectivity.isNetworkAvailable(this as Context)) {
RetrofitInstance.instanceRetrofit.login(requestLogin)
.enqueue(object : retrofit2.Callback<ResponseModel> {
override fun onFailure(call: Call<ResponseModel>, t: Throwable) {
pb_login.visibility = View.GONE
Toast.makeText(
this@LoginActivity,
"Error " + t.message,
Toast.LENGTH_SHORT
).show()
}
override fun onResponse(
call: Call<ResponseModel>,
response: Response<ResponseModel>
) {
pb_login.visibility = View.GONE
if (response.isSuccessful) {
val respon = response.body()!!
Log.d("Status", respon.status.toString());
sharedPref.setStatusLogin(true)
sharedPref.setToken(respon.data?.token)
sharedPref.setDimId(respon.data?.user?.dimId)
sharedPref.setUserId(respon.data?.user?.userId)
sharedPref.setUsername(edt_username.text.toString())
Log.d("Ini Token tersimpan",sharedPref.getTokenBearer())
val intent = Intent(this@LoginActivity, HomeActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
startService(Intent(this@LoginActivity,NotificationService::class.java))
startActivity(intent)
finish()
Toast.makeText(
this@LoginActivity,
"Selamat datang ",
Toast.LENGTH_SHORT
).show()
}else{
Toast.makeText(this@LoginActivity,"Password/Username anda salah",Toast.LENGTH_LONG).show()
}
}
})
}
}
}
package ta1.cis.activity
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TableLayout
import androidx.viewpager.widget.ViewPager
import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
import ta1.cis.R
import ta1.cis.adapter.MateriVPAdapter
import ta1.cis.fragment.MateriFragment
import ta1.cis.model.response.MatakuliahItem
class MatakuliahActivity : AppCompatActivity() {
private lateinit var viewPager : ViewPager2
private lateinit var tabLayout : TabLayout
private lateinit var matakuliah: MatakuliahItem
companion object{
val MATAKULIAH_ITEM = "MATAKULIAH_ITEM"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_matakuliah)
viewPager = findViewById(R.id.vp_matkul)
tabLayout = findViewById(R.id.tabLayoutmatkul)
matakuliah = intent.getParcelableExtra(MATAKULIAH_ITEM)!!
initVP()
}
private fun initVP() {
val adapter = MateriVPAdapter(supportFragmentManager,lifecycle)
viewPager.adapter = adapter
initTab()
}
fun getKuliahId(): String? = matakuliah.idKuliah
fun initTab(){
TabLayoutMediator(tabLayout, viewPager) { tab, position ->
when(position){
0->{
tab.text="Materi Kuliah"
}
1->{
tab.text="Materi Praktikum"
}
}
}.attach()
}
}
\ No newline at end of file
package ta1.cis.activity
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import ta1.cis.R
import ta1.cis.model.response.Item
class PraktikumDetail : AppCompatActivity() {
private lateinit var itemPraktikum: Item
companion object{
val DATA_PRAKTIKUM = "DATA_PRAKTIKUM"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_praktikum_detail)
// itemPraktikum = intent.getParcelableExtra<Item>(DATA_PRAKTIKUM) as Item
// bindData()
// setupData()
}
private fun bindData() {
// topikPraktikum.text = itemPraktikum.topik
// tempatPenyerahan.text = "Tempat Penyerahan : ${itemPraktikum.tempatPenyerahan}"
// tglSesiPrak.text = "Tanggal Sesi : ${itemPraktikum.tanggalSesi}"
// aktifitas.text = "Aktifitas : ${itemPraktikum.aktifitas}"
// batasAkhir.text = "Batas Akhir : ${itemPraktikum.batasAkhir}"
// waktuPengerjaanPrak.text = "Waktu Pengerjaan : ${itemPraktikum.waktuPengerjaan}"
// tujuanPrak.text = "Tujuan : ${itemPraktikum.tujuan}"
// isiPrak.text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
// Html.fromHtml(itemPraktikum.isi, Html.FROM_HTML_MODE_COMPACT)
// } else {
// Html.fromHtml(itemPraktikum.isi)
// }
// isiPrak.movementMethod = LinkMovementMethod.getInstance()
}
private fun setupData() {
// GlobalScope.launch(Dispatchers.IO) {
//
// }
}
}
\ No newline at end of file
package ta1.cis.activity
import android.app.TimePickerDialog
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.widget.TimePicker
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.NavController
import ta1.cis.api.RetrofitInstance
import com.google.android.material.datepicker.CalendarConstraints
import com.google.android.material.datepicker.DateValidatorPointForward
import com.google.android.material.datepicker.MaterialDatePicker
import kotlinx.android.synthetic.main.activity_detail_paket.*
import ta1.cis.helper.Connectivity
import ta1.cis.helper.SharedPref
import kotlinx.android.synthetic.main.activity_request_izin_bermalam.*
import kotlinx.android.synthetic.main.activity_request_izin_bermalam.topAppBar
import kotlinx.android.synthetic.main.fragment_home.*
import ta1.cis.model.request.IBRequest
import ta1.cis.model.response.ResponseSaveIB
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import ta1.cis.R
import java.text.SimpleDateFormat
import java.util.*
class RequestIzinBermalamActivity : AppCompatActivity() {
private lateinit var sharedPref: SharedPref
private var waktuBerangkat : String = ""
private var waktuKembali : String = ""
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_request_izin_bermalam)
setSupportActionBar(topAppBar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
sharedPref = SharedPref(this)
btn_berangkat.setOnClickListener {
getDate(0)
}
btn_kembali.setOnClickListener {
getDate(1)
}
batal.setOnClickListener {
onBackPressed()
}
buat.setOnClickListener {
if(!tgl_berangkat.text!!.isEmpty() && !tgl_kembali.text!!.isEmpty() &&
!keperluanIb.text!!.isEmpty() && !tujuan.text!!.isEmpty()){
val compare = validate()
if(compare == -1){
val request = IBRequest(
tgl_berangkat.text.toString(),
tgl_kembali.text.toString(),
keperluanIb.text.toString(),
tujuan.text.toString()
)
pb_ib.visibility = View.VISIBLE
saveIB(request)
}
}else{
if(waktuBerangkat.isNullOrEmpty()){
tgl_berangkat.error = "Data wajib diisi"
tgl_berangkat.requestFocus()
}else{
tgl_berangkat.error = null
}
if(waktuKembali.isNullOrEmpty()){
tgl_kembali.error = "Data wajib diisi"
tgl_kembali.requestFocus()
}else{
tgl_kembali.error = null
}
}
}
topAppBar.setNavigationOnClickListener {
onBackPressed()
}
}
fun validate() : Int{
var cek_count = 0;
val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
var date1 = sdf.parse(tgl_berangkat.text.toString());
var date2 = sdf.parse(tgl_kembali.text.toString());
var compare = -2
var compareBerangkat = -2
if(date1 != null && date2 != null){
compare = date1.compareTo(date2)
compareBerangkat = date2.compareTo(date1)
}
Log.d("Compare",compare.toString())
if(compare == 1 || compare == 0){
Toast.makeText(applicationContext,"Tanggal Kembali sama atau kurang dari tanggal berangkat",Toast.LENGTH_SHORT).show()
}else{
compare = -1
}
if(compareBerangkat == -1 || compareBerangkat == 0){
Toast.makeText(applicationContext,"Tanggal Berangkat sama atau lebih dari tanggal kembali",Toast.LENGTH_SHORT).show()
}else{
compareBerangkat = 1
}
if(compare == -1 && compareBerangkat == 1){
return compare
}
return 0;
}
fun saveIB(requestIb : IBRequest){
if(Connectivity.isNetworkAvailable(this as Context)){
val token = sharedPref.getTokenBearer();
val userId = sharedPref.getDimId().toLong()
RetrofitInstance.instanceRetrofit.saveIzinBermalam("Bearer $token",userId,requestIb)
.enqueue(object : Callback<ResponseSaveIB>{
override fun onFailure(call: Call<ResponseSaveIB>, t: Throwable) {
Toast.makeText(this@RequestIzinBermalamActivity,"Error : ${t.message}",Toast.LENGTH_SHORT).show()
}
override fun onResponse(
call: Call<ResponseSaveIB>,
response: Response<ResponseSaveIB>
) {
pb_ib.visibility = View.GONE
sharedPref.setStatusUpdate(2)
onBackPressed()
}
})
}
}
fun getDate(id : Int) {
val mcurrentDate: Calendar = Calendar.getInstance()
val mYear: Int = mcurrentDate.get(Calendar.YEAR)
val mMonth: Int = mcurrentDate.get(Calendar.MONTH)
val mDay: Int = mcurrentDate.get(Calendar.DAY_OF_MONTH)
mcurrentDate.add(Calendar.DATE, 1);
val constraintBuilder = CalendarConstraints.Builder().setValidator(DateValidatorPointForward.from(mcurrentDate.timeInMillis))
val picker = MaterialDatePicker.Builder
.datePicker()
.setTitleText("Pilih Waktu Berangkat")
.setSelection(mcurrentDate.timeInMillis)
.setCalendarConstraints(constraintBuilder.build())
.build()
picker.show(supportFragmentManager,"tag")
picker.addOnPositiveButtonClickListener { selection: Long ->
val timeZoneUTC = TimeZone.getDefault()
val offsetFromUTC = timeZoneUTC.getOffset(Date().time) * -1
val simpleFormat = SimpleDateFormat("yyyy-MM-dd", Locale.US)
val date = Date(selection + offsetFromUTC)
val mcurrentDate: Calendar = Calendar.getInstance()
// var waktuBerangkat :String = simpleFormat.format(date)
if(id == 0){
waktuBerangkat = simpleFormat.format(date)
}else{
waktuKembali = simpleFormat.format(date)
}
val timePicker = TimePickerDialog(this,object : TimePickerDialog.OnTimeSetListener{
override fun onTimeSet(view: TimePicker?, hourOfDay: Int, minute: Int) {
if(id == 0){
waktuBerangkat += " ${hourOfDay}:${minute}:00"
tgl_berangkat.setText(waktuBerangkat.toString())
}else{
waktuKembali += " ${hourOfDay}:${minute}:00"
tgl_kembali.setText(waktuKembali.toString())
}
}
},mcurrentDate.get(Calendar.HOUR_OF_DAY), mcurrentDate.get(Calendar.MINUTE), android.text.format.DateFormat.is24HourFormat(this))
timePicker.show()
}
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if(item.itemId == android.R.id.home){
}
return super.onOptionsItemSelected(item)
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
return super.onCreateOptionsMenu(menu)
}
}
package ta1.cis.activity
import android.app.TimePickerDialog
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.format.DateFormat
import android.util.Log
import android.widget.TimePicker
import android.widget.Toast
import com.google.android.material.datepicker.CalendarConstraints
import com.google.android.material.datepicker.DateValidatorPointForward
import com.google.android.material.datepicker.MaterialDatePicker
import kotlinx.android.synthetic.main.activity_request_izin_bermalam.*
import kotlinx.android.synthetic.main.activity_request_izin_keluar.*
import kotlinx.android.synthetic.main.item_izin_keluar.*
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import ta1.cis.R
import ta1.cis.api.RetrofitInstance
import ta1.cis.helper.SharedPref
import ta1.cis.model.request.IKRequest
import java.text.SimpleDateFormat
import java.util.*
class RequestIzinKeluarActivity : AppCompatActivity() {
private lateinit var sharedPref: SharedPref
private var waktuBerangkat : String = ""
private var waktuKembali : String = ""
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_request_izin_keluar)
setSupportActionBar(topAppBarIK)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
sharedPref = SharedPref(this)
topAppBarIK.setNavigationOnClickListener {
onBackPressed()
}
btn_berangkatIK.setOnClickListener {
getDate(0);
}
btn_kembaliIK.setOnClickListener {
getDate(1);
}
buatIk.setOnClickListener {
if(tgl_berangkatIK.text.isNullOrBlank() || tgl_kembaliIK.text.isNullOrBlank() || keperluan_ik.text.isNullOrBlank()){
Toast.makeText(this,"Harap mengisi field terlebih dahulu",Toast.LENGTH_LONG).show()
}else{
var cek = validate()
if(cek == -1){
var request = IKRequest(
waktuBerangkat,
waktuKembali,
keperluan_ik.text.toString()
)
saveIk(request)
}
}
}
}
private fun saveIk(request: IKRequest) {
RetrofitInstance.instanceRetrofit.saveIK(sharedPref.getDimId().toLong(),request,"Bearer ${sharedPref.getTokenBearer()}")
.enqueue(object : Callback<Any>{
override fun onResponse(call: Call<Any>, response: Response<Any>) {
Toast.makeText(this@RequestIzinKeluarActivity,"Izin sudah di request",Toast.LENGTH_LONG).show()
onBackPressed()
}
override fun onFailure(call: Call<Any>, t: Throwable) {
Toast.makeText(this@RequestIzinKeluarActivity,"Ada Masalah dalam internet kamu",Toast.LENGTH_LONG).show()
onBackPressed()
}
})
}
fun validate() : Int{
var cek_count = 0;
val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
var date1 = sdf.parse(tgl_berangkatIK.text.toString());
var date2 = sdf.parse(tgl_kembaliIK.text.toString());
var compare = -2
var compareBerangkat = -2
if(date1 != null && date2 != null){
compare = date1.compareTo(date2)
compareBerangkat = date2.compareTo(date1)
}
Log.d("Compare",compare.toString())
if(compare == 1 || compare == 0){
Toast.makeText(applicationContext,"Tanggal Kembali sama atau kurang dari tanggal berangkat",Toast.LENGTH_SHORT).show()
}else{
compare = -1
}
if(compareBerangkat == -1 || compareBerangkat == 0){
Toast.makeText(applicationContext,"Tanggal Berangkat sama atau lebih dari tanggal kembali",Toast.LENGTH_SHORT).show()
}else{
compareBerangkat = 1
}
if(compare == -1 && compareBerangkat == 1){
return compare
}
return 0;
}
private fun getDate(jenis: Int){
val mcurrentDate: Calendar = Calendar.getInstance()
val mYear: Int = mcurrentDate.get(Calendar.YEAR)
val mMonth: Int = mcurrentDate.get(Calendar.MONTH)
val mDay: Int = mcurrentDate.get(Calendar.DAY_OF_MONTH)
mcurrentDate.add(Calendar.DATE, 1);
val constraintBuilder = CalendarConstraints.Builder().setValidator(DateValidatorPointForward.from(mcurrentDate.timeInMillis))
val picker = MaterialDatePicker.Builder
.datePicker()
.setTitleText("Pilih Waktu")
.setSelection(mcurrentDate.timeInMillis)
.setCalendarConstraints(constraintBuilder.build())
.build()
picker.show(supportFragmentManager,"tag")
picker.addOnPositiveButtonClickListener { selection: Long ->
val timeZoneUTC = TimeZone.getDefault()
val offsetFromUTC = timeZoneUTC.getOffset(Date().time) * -1
val simpleFormat = SimpleDateFormat("yyyy-MM-dd", Locale.US)
val date = Date(selection + offsetFromUTC)
val mcurrentDate: Calendar = Calendar.getInstance()
// var waktuBerangkat :String = simpleFormat.format(date)
if(jenis == 0){
waktuBerangkat = simpleFormat.format(date)
}else{
waktuKembali = simpleFormat.format(date)
}
val timePicker = TimePickerDialog(this,object : TimePickerDialog.OnTimeSetListener{
override fun onTimeSet(view: TimePicker?, hourOfDay: Int, minute: Int) {
if(jenis == 0){
waktuBerangkat += " ${hourOfDay}:${minute}:00"
tgl_berangkatIK.setText(waktuBerangkat.toString())
}else{
waktuKembali += " ${hourOfDay}:${minute}:00"
tgl_kembaliIK.setText(waktuKembali.toString())
}
}
},mcurrentDate.get(Calendar.HOUR_OF_DAY), mcurrentDate.get(Calendar.MINUTE), DateFormat.is24HourFormat(this))
timePicker.show()
}
}
}
\ No newline at end of file
package ta1.cis.adapter
import android.content.Context
import android.content.Intent
import android.graphics.Paint
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
import ta1.cis.R
import ta1.cis.activity.MatakuliahActivity
import ta1.cis.model.response.MatakuliahItem
class ChildPerkuliahanAdapter(var context: Context, var listMatkul: List<MatakuliahItem?>?) : RecyclerView.Adapter<ChildPerkuliahanAdapter.Holder>() {
class Holder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var sks = itemView.findViewById<TextView>(R.id.sks)
var matkul = itemView.findViewById<TextView>(R.id.namaMatakuliah)
var kodeMatkul = itemView.findViewById<TextView>(R.id.kodeMatakuliah)
}
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): ChildPerkuliahanAdapter.Holder {
var view = LayoutInflater.from(parent.context).inflate(R.layout.list_matkul,parent,false)
return Holder(view)
}
override fun onBindViewHolder(holder: ChildPerkuliahanAdapter.Holder, position: Int) {
var matakuliah = listMatkul?.get(position)
holder.sks.text = matakuliah?.sks
holder.matkul.text = matakuliah?.namaMatakuliahInd
holder.matkul.paintFlags = holder.matkul.paintFlags or Paint.UNDERLINE_TEXT_FLAG
holder.kodeMatkul.text = matakuliah?.kodeMatakuliah
holder.matkul.setOnClickListener {
val intent = Intent(context,MatakuliahActivity::class.java).apply {
putExtra(MatakuliahActivity.MATAKULIAH_ITEM,matakuliah)
}
it.context.startActivity(intent)
}
}
override fun getItemCount(): Int = listMatkul?.size!!
}
\ No newline at end of file
package ta1.cis.adapter
import android.Manifest
import android.app.Activity
import android.app.DownloadManager
import android.content.Context
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Environment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import android.widget.Toast
import androidx.cardview.widget.CardView
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat.getSystemService
import androidx.recyclerview.widget.RecyclerView
import ta1.cis.R
import ta1.cis.activity.DetailPengumumanActivity
import ta1.cis.api.Constants
import ta1.cis.model.response.DataFile
class DetailFileAdapter(val context: Context, val fileList: List<DataFile>?) : RecyclerView.Adapter<DetailFileAdapter.Holder>(){
class Holder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val namaFile = itemView.findViewById<TextView>(R.id.namaFile)
val kapasitasFile = itemView.findViewById<TextView>(R.id.size)
val cardView = itemView.findViewById<CardView>(R.id.filemateri)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DetailFileAdapter.Holder {
val view = LayoutInflater.from(context).inflate(R.layout.file_layout,parent,false);
return Holder(view)
}
override fun onBindViewHolder(holder: DetailFileAdapter.Holder, position: Int) {
var data = fileList?.get(position)
holder.namaFile.text = data?.namaFile
holder.kapasitasFile.text = "Size : ${data?.keterangan}"
holder.cardView.setOnClickListener {
Toast.makeText(context,"File Sedang Di download",Toast.LENGTH_SHORT).show()
downloadFile(data?.namaFile,data?.kodeFile)
}
}
override fun getItemCount(): Int = fileList?.size ?: -1
fun downloadFile(namaFile: String?, kodeFile: String?){
if (ActivityCompat.checkSelfPermission(
context,
Manifest.permission.READ_EXTERNAL_STORAGE
) != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(
context,
Manifest.permission.WRITE_EXTERNAL_STORAGE
) != PackageManager.PERMISSION_GRANTED
) {
// this will request for permission when user has not granted permission for the app
ActivityCompat.requestPermissions(
context as Activity,
arrayOf(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
),
1
)
} else {
//Download Script
val downloadManager = context.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
val uri: Uri = Uri.parse(Constants.URLFileOrImage + "${kodeFile}")
val request = DownloadManager.Request(uri)
var mime = Constants.getMimeType(context,uri);
request.setVisibleInDownloadsUi(true)
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
request.setDestinationInExternalPublicDir(
Environment.DIRECTORY_DOWNLOADS,
namaFile
)
request.setDescription("Downloading")
request.setAllowedOverMetered(true)
request.setAllowedOverRoaming(true)
request.setTitle("Download File ${namaFile}")
request.setMimeType(mime)
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
downloadManager.enqueue(request)
}
}
}
\ No newline at end of file
package ta1.cis.adapter
import android.content.Context
import android.os.Build
import android.text.Editable
import android.text.Html
import android.text.InputType
import android.text.TextWatcher
import android.text.method.LinkMovementMethod
import android.text.method.ScrollingMovementMethod
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.*
import androidx.core.view.marginTop
import androidx.core.view.setPadding
import androidx.core.view.updatePadding
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.isikuesioner_layout.view.*
import ta1.cis.R
import ta1.cis.activity.IsiKuesionerActivity
import ta1.cis.model.response.Data
import ta1.cis.model.response.DataItem
class IsiKuisionerAdapter(
val context: Context,
var listPertanyaan:List<DataItem>,
var answare: MutableList<String>
) : RecyclerView.Adapter<IsiKuisionerAdapter.Holder>() {
class Holder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var tvNoQuestion = itemView.tvNoQuestion
var tvQuestion = itemView.tvQuestion
var tvKategori = itemView.tvKategori
var linearOptions = itemView.rowChoice
init {
}
fun bind(position:Int, context: Context, pertanyaan:DataItem, answare:String, total:Int) {
if(pertanyaan.kategori.isNullOrEmpty()){
tvKategori.visibility = View.GONE
}else{
tvKategori.visibility = View.VISIBLE
tvKategori.text = pertanyaan.kategori.toString()
}
tvNoQuestion.text = (position + 1).toString() + "."
tvQuestion.text =if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Html.fromHtml(pertanyaan.pertanyaan, Html.FROM_HTML_MODE_COMPACT)
} else {
Html.fromHtml(pertanyaan.pertanyaan)
}
tvQuestion.movementMethod = LinkMovementMethod.getInstance()
linearOptions.removeAllViews()
if(pertanyaan.tipeOpsi.equals("R", true)){
val radioGroup = RadioGroup(itemView.context.applicationContext)
for (opsiItem in pertanyaan.opsi!!){
val radioButton = RadioButton(itemView.context.applicationContext)
if (opsiItem != null) {
radioButton.text = opsiItem.ketOpsi
radioGroup.addView(radioButton)
if(opsiItem.noOpsi.toString() == answare){
radioButton.isChecked = true
}
radioButton.setOnCheckedChangeListener { buttonView, isChecked ->
if(isChecked){
(itemView.context as IsiKuesionerActivity).setAnsware(position, opsiItem.noOpsi.toString())
}
}
}
}
linearOptions.addView(radioGroup)
}
else if(pertanyaan.tipeOpsi.equals("T", true)){
val editText = EditText(itemView.context.applicationContext)
Editable.Factory.getInstance().newEditable(answare).also { editText.text = it }
ViewGroup.LayoutParams.MATCH_PARENT.also { editText.width = it }
ViewGroup.LayoutParams.WRAP_CONTENT.also { editText.height = it }
(InputType.TYPE_TEXT_VARIATION_LONG_MESSAGE or InputType.TYPE_TEXT_FLAG_IME_MULTI_LINE).also { editText.inputType = it }
5.also { editText.minLines = it }
Gravity.TOP.also { editText.gravity = it }
false.also { editText.isSingleLine = it }
editText.updatePadding(20, 30, 20,30)
editText.setBackgroundResource(R.drawable.edit_text_bordered)
editText.addTextChangedListener(object :TextWatcher{
override fun beforeTextChanged(
s: CharSequence?,
start: Int,
count: Int,
after: Int
) {
}
override fun onTextChanged(
s: CharSequence?,
start: Int,
before: Int,
count: Int
) {
}
override fun afterTextChanged(s: Editable?) {
(itemView.context as IsiKuesionerActivity).setAnsware(position, s.toString())
}
})
linearOptions.addView(editText)
}
else if(pertanyaan.tipeOpsi.equals("C", true)){
var option = answare.split(",").toMutableList()
for (opsiItem in pertanyaan.opsi!!){
val checkBox = CheckBox(itemView.context.applicationContext)
if (opsiItem != null) {
checkBox.text = opsiItem.ketOpsi
if(option.contains(opsiItem.noOpsi.toString())){
checkBox.isChecked = true
}
checkBox.setOnCheckedChangeListener{ buttonView, isChecked ->
if(isChecked){
if(!option.contains(opsiItem.noOpsi.toString())){
option.add(opsiItem.noOpsi.toString())
}
}else{
option.remove(opsiItem.noOpsi.toString())
}
(itemView.context as IsiKuesionerActivity).setAnsware(position, option.joinToString(","))
}
}
linearOptions.addView(checkBox)
}
}
if(total === (position + 1)){
var button = Button(itemView.context.applicationContext)
button.text = "Kirimkan hasil"
var params= LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)
params.topMargin = 40
button.layoutParams =params
linearOptions.addView(button)
button.setOnClickListener {
(itemView.context as IsiKuesionerActivity).sendAnsware(button)
}
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
val view = LayoutInflater.from(context).inflate(R.layout.isikuesioner_layout, parent, false)
return Holder(view)
}
override fun onBindViewHolder(holder: Holder, position: Int) =
holder.bind(position, context, listPertanyaan[position], answare[position], listPertanyaan.size)
override fun getItemCount(): Int = listPertanyaan.size
}
\ No newline at end of file
package ta1.cis.adapter
import android.graphics.Color
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.cardview.widget.CardView
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.ib_layout.view.*
import org.w3c.dom.Text
import ta1.cis.model.response.DataIzin
import ta1.cis.R
class IzinBermalamAdapter(private val listIzinBermalam : ArrayList<DataIzin>) : RecyclerView.Adapter<IzinBermalamAdapter.IzinBermalamVM>(){
private lateinit var onItemCallBack: OnItemCallBack;
fun setOnItemCallback(onItemCallBack: OnItemCallBack){
this.onItemCallBack = onItemCallBack
}
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): IzinBermalamAdapter.IzinBermalamVM {
val view:View = LayoutInflater.from(parent.context).inflate(R.layout.ib_layout,parent,false);
return IzinBermalamVM(view)
}
override fun getItemCount(): Int = listIzinBermalam.size
override fun onBindViewHolder(holder: IzinBermalamAdapter.IzinBermalamVM, position: Int) {
var data = listIzinBermalam[position]
holder.bindContent(data,position)
holder.itemView.setOnClickListener { onItemCallBack.onItemClicked(data) }
}
class IzinBermalamVM(itemView: View) : RecyclerView.ViewHolder(itemView) {
var number = itemView.findViewById<TextView>(R.id.number);
var status = itemView.findViewById<CardView>(R.id.card_ib);
var accept = itemView.findViewById<TextView>(R.id.disetujui)
var purpose = itemView.findViewById<TextView>(R.id.keperluan)
var destination = itemView.findViewById<TextView>(R.id.tujuan)
fun bindContent(dataIzin: DataIzin, position : Int){
number.text = (position + 1).toString()
if(dataIzin.requestId == 1){
status.setCardBackgroundColor((Color.parseColor("#bbdefb")))
}else if(dataIzin.requestId == 2){
status.setCardBackgroundColor(Color.parseColor("#c8e6c9"))
}else if(dataIzin.requestId == 3){
status.setCardBackgroundColor((Color.parseColor("#ffffe5")))
}else if(dataIzin.requestId == 4){
status.setCardBackgroundColor((Color.parseColor("#ffebee")))
}
if(dataIzin.disetujuiOleh == null){
accept.text = "Disetujui Oleh : -"
}else{
accept.text = "Disetujui Oleh : ${dataIzin.disetujuiOleh}"
}
purpose.text = "Keperluan IB : ${dataIzin.keperluanIb}"
destination.text = "Tujuan : ${dataIzin.tujuan}"
}
}
fun setData(data : List<DataIzin>){
listIzinBermalam.clear()
listIzinBermalam.addAll(data)
notifyDataSetChanged()
}
interface OnItemCallBack{
fun onItemClicked(dataIzin: DataIzin)
}
}
\ No newline at end of file
package ta1.cis.adapter
import android.graphics.Color
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.cardview.widget.CardView
import androidx.recyclerview.widget.RecyclerView
import org.w3c.dom.Text
import ta1.cis.R
import ta1.cis.model.response.DataIzin
import ta1.cis.model.response.DataIzinKeluar
class IzinKeluarAdapter(var izinKeluars : ArrayList<DataIzinKeluar>) :
RecyclerView.Adapter<IzinKeluarAdapter.ViewHolder>() {
private lateinit var onItemCallBack: IzinKeluarAdapter.OnItemCallBack;
fun setOnItemCallback(onItemCallBack: IzinKeluarAdapter.OnItemCallBack){
this.onItemCallBack = onItemCallBack
}
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): IzinKeluarAdapter.ViewHolder {
val view:View = LayoutInflater.from(parent.context).inflate(R.layout.item_izin_keluar,parent,false);
return IzinKeluarAdapter.ViewHolder(view)
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var noUrut = itemView.findViewById<TextView>(R.id.numberIk)
var keperluan = itemView.findViewById<TextView>(R.id.keperluanIkAll)
var tglBerangkat = itemView.findViewById<TextView>(R.id.tglBerangaktIk)
var tglKembali = itemView.findViewById<TextView>(R.id.tglKembaliIk)
var cardView = itemView.findViewById<CardView>(R.id.card_ik)
fun bind(dataIzinKeluar: DataIzinKeluar, position: Int){
if(dataIzinKeluar.statusDosen == 1){
if(dataIzinKeluar.statusKeasramaan == 1){
if(dataIzinKeluar.statusDosen == 1){
cardView.setCardBackgroundColor((Color.parseColor("#bbdefb")))
}
}
}else if(dataIzinKeluar.statusDosen == 2){
cardView.setCardBackgroundColor(Color.parseColor("#c8e6c9"))
}else if(dataIzinKeluar.statusDosen == 3){
cardView.setCardBackgroundColor((Color.parseColor("#ffffe5")))
}else if(dataIzinKeluar.statusDosen == 4){
cardView.setCardBackgroundColor((Color.parseColor("#ffebee")))
}
noUrut.text = (position+1).toString()
keperluan.text = dataIzinKeluar.keperluanIk
tglBerangkat.text = dataIzinKeluar.rencanaBerangkat
tglKembali.text = dataIzinKeluar.rencanaKembali
}
}
override fun onBindViewHolder(holder: IzinKeluarAdapter.ViewHolder, position: Int) {
var izinKeluar = izinKeluars.get(position)
holder.bind(izinKeluar,position)
holder.itemView.setOnClickListener {
onItemCallBack.onItemClicked(izinKeluar)
}
}
override fun getItemCount(): Int = izinKeluars.size
fun setData(data : List<DataIzinKeluar>){
izinKeluars.clear()
izinKeluars.addAll(data)
notifyDataSetChanged()
}
interface OnItemCallBack{
fun onItemClicked(dataIzin: DataIzinKeluar)
}
}
\ No newline at end of file
package ta1.cis.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.jadwal_footer.view.*
import ta1.cis.R
import ta1.cis.model.response.MatkulJadwal
class JadwalFooterAdapter(var context: Context, var listMatkul: List<MatkulJadwal>?) : RecyclerView.Adapter<JadwalFooterAdapter.ViewHolder>() {
class ViewHolder(itemView:View) : RecyclerView.ViewHolder(itemView){
val jam = itemView.findViewById<TextView>(R.id.jam)
val matkul = itemView.findViewById<TextView>(R.id.matkul)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(context).inflate(R.layout.jadwal_footer,parent,false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val data = listMatkul?.get(position)
holder.itemView.jam.text = "${data?.mulaiMatkul} - ${data?.akhirMatkul}"
holder.itemView.matkul.text = data?.namaMatkul
}
override fun getItemCount(): Int = listMatkul?.size!!
}
\ No newline at end of file
package ta1.cis.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import ta1.cis.R
import ta1.cis.model.response.Jadwal
class JadwalHeaderAdapter(var context: Context?,var list: List<Jadwal>?) : RecyclerView.Adapter<JadwalHeaderAdapter.JadwalVH>() {
private val recyleViewPool = RecyclerView.RecycledViewPool()
class JadwalVH(itemView: View): RecyclerView.ViewHolder(itemView){
val hari = itemView.findViewById<TextView>(R.id.day)
val rv_footer = itemView.findViewById<RecyclerView>(R.id.rv_jadwalFooter)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): JadwalHeaderAdapter.JadwalVH {
val view = LayoutInflater.from(context).inflate(R.layout.jadwal_layout,parent,false)
return JadwalVH(view)
}
override fun onBindViewHolder(holder: JadwalHeaderAdapter.JadwalVH, position: Int) {
var data = list?.get(position)
holder.hari.text = data?.hari
var childLayoutManager = LinearLayoutManager(holder.itemView.context,LinearLayoutManager.VERTICAL,false);
holder.rv_footer.apply {
layoutManager = childLayoutManager
adapter = JadwalFooterAdapter(holder.itemView.context,data?.matkul)
setRecycledViewPool(recyleViewPool)
}
}
override fun getItemCount(): Int = list?.size!!
}
\ No newline at end of file
package ta1.cis.adapter
import android.content.Intent
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.kuesioner_layout.view.*
import ta1.cis.R
import ta1.cis.activity.IsiKuesionerActivity
import ta1.cis.model.response.DataKuesioner
class KuesionerAdapter(private val kuesioners: List<DataKuesioner?>?) : RecyclerView.Adapter<KuesionerAdapter.KuesionerViewHolder>(){
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): KuesionerViewHolder {
return KuesionerViewHolder (
LayoutInflater.from(parent.context).inflate(R.layout.kuesioner_layout, parent, false)
)
}
override fun getItemCount() = kuesioners!!.size
override fun onBindViewHolder(holder: KuesionerAdapter.KuesionerViewHolder, position: Int) {
val kuesioner = kuesioners?.get(position)
if (kuesioner != null) {
holder.bind(kuesioner)
}
holder.view.setOnClickListener {
val intent = Intent(it.context, IsiKuesionerActivity::class.java).apply {
putExtra(IsiKuesionerActivity.DATA_KUESIONER, kuesioner)
}
it.context.startActivity(intent)
}
}
inner class KuesionerViewHolder(val view: View) : RecyclerView.ViewHolder(view){
fun bind(kuesioner: DataKuesioner){
view.judul_kuesioner.text = kuesioner.nama
view.TA.text = kuesioner.ta
view.semTA.text = kuesioner.sem
view.kategori_kuesioner.text = kuesioner.kodeMk
}
}
}
\ No newline at end of file
package ta1.cis.adapter
import android.content.Context
import android.content.Intent
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import android.widget.Toast
import androidx.cardview.widget.CardView
import androidx.recyclerview.widget.RecyclerView
import ta1.cis.R
import ta1.cis.activity.DetailMateriActivity
import ta1.cis.model.response.MateriItem
class MateriFooterAdapter(val context: Context, val materiItem: List<MateriItem?>?) : RecyclerView.Adapter<MateriFooterAdapter.Holder>() {
class Holder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val sesi = itemView.findViewById<TextView>(R.id.sesi_materi)
val judulMateri = itemView.findViewById<TextView>(R.id.judul_materi)
val tanggalView = itemView.findViewById<TextView>(R.id.tanggal_materi)
val cardView = itemView.findViewById<CardView>(R.id.cardMatkul)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MateriFooterAdapter.Holder {
val view = LayoutInflater.from(context).inflate(R.layout.materi_footer, parent, false)
return Holder(view)
}
override fun onBindViewHolder(holder: MateriFooterAdapter.Holder, position: Int) {
val data = materiItem?.get(position)!!
holder.sesi.text = "Sesi ${data.sesi}"
holder.judulMateri.text = data.judul
holder.tanggalView.text = data.tglView
holder.cardView.setOnClickListener {
val intent = Intent(context,DetailMateriActivity::class.java).apply {
putExtra(DetailMateriActivity.DETAIL_MATAKULIAH, data)
}
it.context.startActivity(intent);
}
}
override fun getItemCount(): Int = materiItem?.size!!
}
\ No newline at end of file
package ta1.cis.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import ta1.cis.R
import ta1.cis.model.response.ListMateri
class MateriHeader(val context: Context?, val materiItemList: List<ListMateri?>?) : RecyclerView.Adapter<MateriHeader.Holder>() {
private val recyleViewPool = RecyclerView.RecycledViewPool()
class Holder(itemView: View) : RecyclerView.ViewHolder(itemView){
val mingguKe = itemView.findViewById<TextView>(R.id.modul)
val recycleMateri = itemView.findViewById<RecyclerView>(R.id.list_materi)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MateriHeader.Holder {
val view = LayoutInflater.from(context).inflate(R.layout.materi_header,parent,false);
return Holder(view)
}
override fun onBindViewHolder(holder: MateriHeader.Holder, position: Int) {
val parent = materiItemList?.get(position)!!
holder.mingguKe.text = "Modul Week ${parent.mingguKe}"
val childLinear = LinearLayoutManager(holder.itemView.context,LinearLayoutManager.VERTICAL,false)
holder.recycleMateri.apply {
layoutManager = childLinear
adapter = MateriFooterAdapter(context,parent.materi)
setRecycledViewPool(recyleViewPool)
}
}
override fun getItemCount(): Int = materiItemList?.size!!
}
\ No newline at end of file
package ta1.cis.adapter
import android.os.Parcel
import android.os.Parcelable
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import androidx.lifecycle.Lifecycle
import androidx.viewpager2.adapter.FragmentStateAdapter
import ta1.cis.fragment.MateriFragment
import ta1.cis.fragment.PraktikumFragment
class MateriVPAdapter(var fm: FragmentManager,var lifecycle: Lifecycle) : FragmentStateAdapter(fm,lifecycle) {
override fun getItemCount(): Int = 2
override fun createFragment(position: Int): Fragment {
return when(position){
0 -> {
MateriFragment()
}
1-> {
PraktikumFragment()
}
else -> {
Fragment()
}
}
}
}
\ No newline at end of file
package ta1.cis.adapter
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.paket_layout.view.*
import model.response.DetailPaket
import model.response.Paket
import model.response.ResponsePaket
import ta1.cis.R
import ta1.cis.activity.DetailPaketActivity
import ta1.cis.model.response.DataIzin
class PaketAdapter(val pakets: List<Paket>) : RecyclerView.Adapter<PaketAdapter.PaketViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PaketViewHolder {
return PaketViewHolder (
LayoutInflater.from(parent.context)
.inflate(R.layout.paket_layout, parent, false)
)
}
override fun getItemCount() = pakets.size
override fun onBindViewHolder(holder: PaketViewHolder, position: Int) {
val paket = pakets[position]
holder.bind(paket)
holder.view.setOnClickListener {
// Toast.makeText(it.context,paket.toString(),Toast.LENGTH_SHORT).show()
val intent = Intent(it.context,DetailPaketActivity::class.java).apply {
putExtra(DetailPaketActivity.DATA_PAKET,paket)
}
it.context.startActivity(intent)
}
}
inner class PaketViewHolder(val view: View) : RecyclerView.ViewHolder(view){
fun bind(paket: Paket){
view.TagPaket.text = paket.tag
view.namapenerima.text = paket.namaPenerima ?: "-";
view.statusPaket.text = paket.status
}
}
}
\ No newline at end of file
package ta1.cis.adapter
import android.content.Intent
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.pengumuman_layout.view.*
import model.response.Pengumuman
import ta1.cis.R
import ta1.cis.activity.DetailPengumumanActivity
import ta1.cis.adapter.PengumumanAdapter.PengumumanViewHolder
class PengumumanAdapter(val pengumumans: List<Pengumuman>) : RecyclerView.Adapter<PengumumanViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PengumumanViewHolder {
return PengumumanViewHolder(
LayoutInflater.from(parent.context)
.inflate(R.layout.pengumuman_layout, parent, false)
)
}
override fun onBindViewHolder(holder: PengumumanViewHolder, position: Int) {
val pengumuman = pengumumans[position]
holder.bind(pengumuman)
holder.view.setOnClickListener {
var intent = Intent(it.context,DetailPengumumanActivity::class.java).apply {
putExtra(DetailPengumumanActivity.ID_PENGUMUMAN,pengumuman.id);
}
it.context.startActivity(intent)
}
}
override fun getItemCount() = pengumumans.size
public final inner class PengumumanViewHolder(val view: View) :RecyclerView.ViewHolder(view){
fun bind(pengumuman: Pengumuman){
view.judulPengumuman.text = pengumuman.judul
view.tglpembuatan.text = pengumuman.pembuatan
view.tglkedaluarsa.text = pengumuman.kadaluarsa
}
}
}
\ No newline at end of file
package ta1.cis.adapter
import android.content.Context
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.TableLayout
import android.widget.TableRow
import android.widget.TextView
import androidx.core.view.marginLeft
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.header_semester.view.*
import org.w3c.dom.Text
import ta1.cis.R
import ta1.cis.model.response.HeaderItem
class PerkuliahanAdapter(val context: Context,val array: List<HeaderItem>) : RecyclerView.Adapter<PerkuliahanAdapter.PerkuliahanHolder>() {
private val viewPool = RecyclerView.RecycledViewPool()
class PerkuliahanHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val keteranganSemester = itemView.findViewById<TextView>(R.id.Keterangansemester)
val recyclerView = itemView.findViewById<RecyclerView>(R.id.listMatkul)
}
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): PerkuliahanAdapter.PerkuliahanHolder {
val view = LayoutInflater.from(context).inflate(R.layout.header_semester,parent,false)
return PerkuliahanHolder(view)
}
override fun onBindViewHolder(holder: PerkuliahanAdapter.PerkuliahanHolder, position: Int){
val parent = array[position];
holder.keteranganSemester.text = "Semester ${parent.semester}"
val childLayout = LinearLayoutManager(holder.itemView.context,LinearLayoutManager.VERTICAL,false)
holder.recyclerView.apply {
layoutManager = childLayout
adapter = ChildPerkuliahanAdapter(context,parent.matakuliah)
setRecycledViewPool(viewPool)
}
}
override fun getItemCount(): Int = array.size
}
\ No newline at end of file
package ta1.cis.adapter
import android.content.Context
import android.content.Intent
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.cardview.widget.CardView
import androidx.recyclerview.widget.RecyclerView
import ta1.cis.R
import ta1.cis.activity.DetailPraktikum
import ta1.cis.activity.PraktikumDetail
import ta1.cis.model.response.Item
class PraktikumFooterAdapter(var context: Context, var listPraktikum: List<Item>?) : RecyclerView.Adapter<PraktikumFooterAdapter.Holder>() {
class Holder(itemView: View): RecyclerView.ViewHolder(itemView) {
val sesi = itemView.findViewById<TextView>(R.id.sesi_praktikum)
val materiPraktikum = itemView.findViewById<TextView>(R.id.judul_praktikum)
val tujuan = itemView.findViewById<TextView>(R.id.tujuan_praktikum)
val tanggal = itemView.findViewById<TextView>(R.id.tanggal_praktikum)
val cardPraktikum = itemView.findViewById<CardView>(R.id.cardPraktikum)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
val view = LayoutInflater.from(context).inflate(R.layout.praktikum_footer,parent,false)
return Holder(view)
}
override fun onBindViewHolder(holder: Holder, position: Int) {
var data = listPraktikum?.get(position)
holder.sesi.text = "Sesi :${data?.sesi}"
holder.tujuan.text = "Tujuan : ${data?.tujuan}" ?: ""
holder.materiPraktikum.text = data?.topik
holder.tanggal.text = data?.tanggalSesi
holder.cardPraktikum.setOnClickListener {
val intent = Intent(context, DetailPraktikum::class.java).apply {
putExtra(DetailPraktikum.DATA_PRAKTIKUM,data)
}
it.context.startActivity(intent)
}
}
override fun getItemCount(): Int = listPraktikum!!.size
}
package ta1.cis.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import ta1.cis.R
import ta1.cis.model.response.PraktikumItem
class PraktikumHeaderAdapter(val context: Context?, val listPraktikum: List<PraktikumItem>) : RecyclerView.Adapter<PraktikumHeaderAdapter.Holder>() {
private val recyclePool = RecyclerView.RecycledViewPool()
class Holder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val praktikum = itemView.findViewById<TextView>(R.id.modulPrak)
val recyclePrak = itemView.findViewById<RecyclerView>(R.id.list_praktikum)
}
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): PraktikumHeaderAdapter.Holder {
val view = LayoutInflater.from(context).inflate(R.layout.praktikum_header,parent,false)
return Holder(view)
}
override fun onBindViewHolder(holder: PraktikumHeaderAdapter.Holder, position: Int) {
var data = listPraktikum[position]
holder.praktikum.text = "Modul Week ${data.mingguKe}"
var childLinear = LinearLayoutManager(holder.itemView.context,LinearLayoutManager.VERTICAL,false)
holder.recyclePrak.apply {
layoutManager = childLinear
adapter = PraktikumFooterAdapter(context,data.materi)
setRecycledViewPool(recyclePool)
}
}
override fun getItemCount(): Int = listPraktikum.size
}
\ No newline at end of file
package ta1.cis.adapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import ta1.cis.R
import ta1.cis.model.response.ResponseSingleJadwal
import ta1.cis.model.response.SingleJadwalItem
class SingleJadwalAdapter(var list: List<SingleJadwalItem?>?) : RecyclerView.Adapter<SingleJadwalAdapter.ViewHolder>() {
class ViewHolder(itemView:View): RecyclerView.ViewHolder(itemView){
val jam = itemView.findViewById<TextView>(R.id.jam)
val matkul = itemView.findViewById<TextView>(R.id.matkul)
}
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): SingleJadwalAdapter.ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.jadwal_footer,parent,false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: SingleJadwalAdapter.ViewHolder, position: Int) {
val data = list?.get(position)
holder.jam.text = "${data?.mulaiMatkul} - ${data?.akhirMatkul}"
holder.matkul.text = data?.namaMatkul
}
override fun getItemCount(): Int = list?.size!!
}
\ No newline at end of file
package ta1.cis.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.TextView
import ta1.cis.R
import ta1.cis.model.staticdata.ProdiData
class SpinnerProdiAdapter(context: Context, resource: Int, prodilist: MutableList<ProdiData>) :
ArrayAdapter<ProdiData>(context, resource, prodilist) {
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
return initView(position,convertView,parent)
}
override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View? {
return initView(position,convertView,parent)
}
fun initView(position: Int,convert: View?,parent: ViewGroup) : View {
var view = convert
var prodi = getItem(position)
var type = prodi?.type
view = LayoutInflater.from(context).inflate(R.layout.spinner_prodi,parent,false)
var text = view.findViewById<TextView>(R.id.jurusan)
text.setText(prodi?.prodi)
return view!!
}
}
\ No newline at end of file
package ta1.cis.adapter
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.Lifecycle
import androidx.viewpager2.adapter.FragmentStateAdapter
import ta1.cis.fragment.tabitem.*
class ViewPagerAdapter(fragmentManager: FragmentManager, lifecycle: Lifecycle): FragmentStateAdapter(fragmentManager, lifecycle) {
override fun getItemCount(): Int {
return 7
}
override fun createFragment(position: Int): Fragment {
return when(position){
0->{
D_AkademisFragment()
}
1->{
D_PribadiFragment()
}
2->{
D_OrangTuaFragment()
}
3->{
D_AsalSekolahFragment()
}
4->{
D_AsramaFragment()
}
5->{
D_NilaiPerilakuFragment()
}
6->{
H_StudiFragment()
}
else->{
Fragment()
}
}
}
}
\ No newline at end of file
package ta1.cis.api
import com.google.gson.annotations.SerializedName
import model.response.*
import ta1.cis.model.response.*
import okhttp3.ResponseBody
import retrofit2.Call
import retrofit2.Response
import retrofit2.http.*
import ta1.cis.model.request.*
import ta1.cis.model.response.*
interface ApiService {
@Headers("Content-Type: application/json")
@POST("login")
fun login(@Body userRequest: LoginRequest):Call<ResponseModel>
@GET("dim")
fun getDataPribadi(@Header("Authorization") token: String):Call<ResponseDataPribadi>
@PUT("updateDim")
fun updateDataPribadi(@Header("Authorization") token: String,
@Body editPribadi: RequestEditPribadi) : Call<ResponseEditPribadi>
@GET("orangtua")
fun getDataOrangtua(@Header("Authorization") token: String):Call<ResponseDataOrangtua>
@PUT("updateOrangtua")
fun updateDataOrangtua(@Header("Authorization") token: String, @Body editOrangtua: EditDataOrtu):Call<ResponseDataOrangtua>
@GET("akademis")
fun getDataAkademis(@Header("Authorization") token: String):Call<ResponseDataAkademis>
@GET("sekolah")
fun getDataSekolah(@Header("Authorization") token: String):Call<ResponseDataSekolah>
@FormUrlEncoded
@PUT("updateDataSekolah")
fun updateDataSekolah(@Header("Authorization") token: String,
@Field("no_ijazah_sma") noIjazah: String,
@Field("nama_sma") namaSma:String?):Call<ResponseEditSekolah>
@GET("dataAsrama")
fun getDataAsrama(@Header("Authorization") token : String) : Call<ResponseDataAsrama>
@GET("izinBermalam/{userId}")
fun getIzinBermalam(@Header("Authorization")token : String, @Path("userId") userId : Long):Call<ResponseIzinBermalam>
@Headers("Content-Type: application/json")
@POST("izinBermalam/{userId}")
fun saveIzinBermalam(@Header("Authorization") token : String,
@Path("userId") userId : Long,
@Body ibRequest: IBRequest
) : Call<ResponseSaveIB>
@Headers("Content-Type: application/json")
@GET("getIzin/{userId}/{izinId}")
fun getDetailIzinBermalam(@Header("Authorization") token : String,
@Path("userId")userId:Long,
@Path("izinId")izinId : Long):Call<ResponseDetailIzinBermalam>
@Headers("Content-Type: application/json")
@GET("paket")
fun getPaket(@Header("Authorization") token: String):Call<ResponsePaket>
@GET("paket/{paketId}")
fun getDetailPaket(@Header("Authorization") token: String,
@Path("paketId")paketId: String):Call<ResponseDetailPaket>
@GET("pengumuman")
fun getPengumuman(@Header("Authorization") token: String):Call<ResponsePengumuman>
@GET("pengumuman/{pengumumanId}")
fun getDetailPengumuman(@Header("Authorization") token: String, @Path("pengumumanId") pengumumanId: String):Call<ResponseDetailPengumuman>
@GET("kuesioner")
fun getKuesioner():Call<ResponseKuesioner>
@GET("pertanyaan/{kuesionerId}")
fun getPertanyaanKuesioner(
@Header("Authorization") token: String,
@Path("kuesionerId")kuesionerId: Long
): Call<ResponsePertanyaan>
@FormUrlEncoded
@PUT("batalIb")
fun cancelIzinBermalam(
@Field("idIzin") idIzin: Int?,
@Header("Authorization")token: String
):Call<Unit>
@PUT("editIb/{izinId}/{userId}")
fun editIzinBermalam(
@Path("izinId") izinId: Long,
@Path("userId") userId: Long,
@Body data:IBRequest,
@Header("Authorization")token:String
):Call<Unit>
@GET("izinKeluar/{dimId}")
fun getIzinKeluar(
@Path("dimId") dimId: Long,
@Header("Authorization") bearer: String
):Call<ResponseIzinKeluar>
@GET("izinKeluar/{id}/{izinId}")
fun getDetailIzinKeluar(
@Path("id") id: Long,
@Path("izinId") dimId: Long,
@Header("Authorization") bearer: String
):Call<ResponseDetailIzinKeluar>
@POST("izinKeluar/{dimId}")
fun saveIK(
@Path("dimId") dimId: Long,
@Body request: IKRequest,
@Header("Authorization") bearer: String
):Call<Any>
@PUT("izinKeluar/{izinId}/{id}")
fun editIk(
@Path("izinId")izinId: Long,
@Path("id")id: Long,
@Body data:IKRequest,
@Header("Authorization")bearer: String
):Call<Any>
@FormUrlEncoded
@PUT("izinKeluar")
fun cancelIk(
@Field("idIzin") idIzin:Long,
@Header("Authorization") bearer: String
):Call<Any>
@GET("kurikulum/{tahun}/{prodi}")
fun getMatkulBasedOnYearAndCollege(
@Path("tahun") tahun: String,
@Path("prodi") prodi: Int,
@Header("Authorization") bearer: String
):Call<ResponsePerkuliahan>
@GET("perkuliahan/{kuliahId}")
fun getMateriKuliah(
@Path("kuliahId") kuliahId: String?,
@Header("Authorization") bearer: String,
@Query("tahun") tahun: String? = null
):Call<ResponseMateriKul>
@GET("fileMateri/{materiId}")
fun getFileMateri(
@Path("materiId") materiId: String,
@Header("Authorization") bearer: String
):Call<ResponseFileMateri>
@GET("praktikum/{kuliahId}")
fun getPraktikum(
@Path("kuliahId") kuliahId: String?,
@Header("Authorization") bearer: String
):Call<ResponsePraktikum>
@Headers("Content-Type: application/json")
@POST("isiKuesioner")
fun sendKuesionerAnsware(
@Header("Authorization") bearer: String,
@Body kuisionerReq: KuisionerAnsware
) : Call<ResponseIsiPertanyaan>
@GET("jadwal")
fun getAllJadwal(
@Header("Authorization")bearer: String
):Call<ResponseJadwal>
@GET("jadwalToday")
fun getJadwalToday(
@Header("Authorization") bearer:String
):Call<ResponseSingleJadwal>
}
\ No newline at end of file
package ta1.cis.api
import android.content.ContentResolver
import android.content.Context
import android.net.Uri
import android.webkit.MimeTypeMap
import java.io.File
class Constants{
companion object{
val URLFileOrImage = "https://apipuro.del.ac.id/v1/file/";
val BASE_URL = "http://localhost:8000/api/"
fun getMimeType(context: Context, uri: Uri): String? {
//Check uri format to avoid null
var extension: String? = if (uri.scheme == ContentResolver.SCHEME_CONTENT) {
//If scheme is a content
val mime = MimeTypeMap.getSingleton()
mime.getExtensionFromMimeType(context.contentResolver.getType(uri))
} else {
//If scheme is a File
//This will replace white spaces with %20 and also other special characters. This will avoid returning null values on file name with spaces and special characters.
MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(File(uri.path)).toString())
}
return extension
}
}
}
\ No newline at end of file
package ta1.cis.api
import com.google.gson.GsonBuilder
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.util.concurrent.TimeUnit
object RetrofitInstance {
private val client: Retrofit
get() {
val gson = GsonBuilder()
.setLenient()
.create()
val interceptor = HttpLoggingInterceptor()
interceptor.level = HttpLoggingInterceptor.Level.BODY
val client: OkHttpClient = OkHttpClient.Builder()
.addInterceptor(interceptor)
.connectTimeout(40, TimeUnit.SECONDS)
.readTimeout(40, TimeUnit.SECONDS)
.writeTimeout(40, TimeUnit.SECONDS)
.build()
return Retrofit.Builder()
.baseUrl(Constants.BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.client(client)
.build()
}
val instanceRetrofit: ApiService
get() = client.create(ApiService::class.java)
}
\ No newline at end of file
package ta1.cis.fragment
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import android.widget.Toast
import androidx.navigation.Navigation
import androidx.recyclerview.widget.ConcatAdapter
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.fragment_beranda.*
import kotlinx.android.synthetic.main.fragment_i_b.*
import kotlinx.android.synthetic.main.fragment_pengumuman.*
import kotlinx.android.synthetic.main.fragment_pengumuman.recyclerViewPengumuman
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import model.response.Pengumuman
import model.response.ResponsePengumuman
import retrofit2.*
import ta1.cis.R
import ta1.cis.activity.DetailIzinBermalam
import ta1.cis.adapter.IzinBermalamAdapter
import ta1.cis.adapter.PengumumanAdapter
import ta1.cis.adapter.SingleJadwalAdapter
import ta1.cis.api.RetrofitInstance
import ta1.cis.helper.SharedPref
import ta1.cis.model.response.DataIzin
import ta1.cis.model.response.ResponseIzinBermalam
import java.text.SimpleDateFormat
import java.util.*
class BerandaFragment : Fragment() {
private lateinit var rv: RecyclerView
private var list = ArrayList<DataIzin>()
private lateinit var sharedPref: SharedPref
lateinit var ibAdapter : IzinBermalamAdapter
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.fragment_beranda, container, false)
sharedPref = SharedPref(activity as Context)
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
rv = view.findViewById(R.id.recyclerViewPengumumanBeranda)
var txt = view.findViewById<TextView>(R.id.dateToday)
txt.text = SimpleDateFormat("EEEE,d MMM yyyy", Locale.getDefault()).format(Date())
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
refreshlayoutberanda.setOnRefreshListener {
fetchPengumuman()
fetchSingleJadwal()
}
fetchPengumuman()
fetchSingleJadwal()
}
private fun fetchSingleJadwal(){
refreshlayoutberanda.isRefreshing = true
GlobalScope.launch(Dispatchers.IO) {
val response = RetrofitInstance.instanceRetrofit.getJadwalToday("Bearer ${sharedPref.getTokenBearer()}").awaitResponse()
if(response.isSuccessful){
withContext(Dispatchers.Main){
val data = response.body()?.data
if(data != null){
rv_singleJadwal.layoutManager = LinearLayoutManager(context,LinearLayoutManager.VERTICAL,false)
rv_singleJadwal.adapter = SingleJadwalAdapter(data)
}else{
descJadwal.text = "Jadwal Tidak ada Hari ini"
rv_singleJadwal.visibility = View.GONE
}
}
}
}
}
private fun fetchPengumuman(){
refreshlayoutberanda.isRefreshing = true
RetrofitInstance.instanceRetrofit.getPengumuman("Bearer ${sharedPref.getTokenBearer()}").enqueue(object : Callback<ResponsePengumuman>{
override fun onResponse(
call: Call<ResponsePengumuman>,
response: Response<ResponsePengumuman>
) {
val pengumuman = response.body()
refreshlayoutberanda.isRefreshing = false
Log.d("Pengumuman",pengumuman.toString())
pengumuman?.let {
var mypengumuman = it.data
showPengumuman(mypengumuman)
}
}
override fun onFailure(call: Call<ResponsePengumuman>, t: Throwable) {
refreshlayoutberanda.isRefreshing = false
Toast.makeText(activity, t.message, Toast.LENGTH_LONG).show()
}
})
}
private fun showPengumuman(mypengumuman: List<Pengumuman>){
var adapterMyPengumuman = PengumumanAdapter(mypengumuman)
var pengumumanAdapter = ConcatAdapter(adapterMyPengumuman)
recyclerViewPengumumanBeranda.layoutManager = LinearLayoutManager(activity)
recyclerViewPengumumanBeranda.adapter = adapterMyPengumuman
}
}
\ No newline at end of file
package ta1.cis.fragment
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.view.size
import androidx.fragment.app.FragmentManager
import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
import ta1.cis.R
import ta1.cis.adapter.ViewPagerAdapter
class DataDiriFragment : Fragment() {
private lateinit var tabLayout :TabLayout
private lateinit var viewPager2:ViewPager2
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_data_diri, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
tabLayout = view.findViewById(R.id.tab_layout)
viewPager2 = view.findViewById<ViewPager2>(R.id.view_pager2)
val adapter=ViewPagerAdapter(childFragmentManager,lifecycle);
viewPager2.adapter = adapter
initTab()
super.onViewCreated(view, savedInstanceState)
}
fun initTab(){
TabLayoutMediator(tabLayout, viewPager2) { tab, position ->
when(position){
0->{
tab.text="Data Akademis"
}
1->{
tab.text="Data Pribadi"
}
2->{
tab.text = "Data Orangtua"
}
3->{
tab.text = "Asal Sekolah"
}
4->{
tab.text = "Keasramaan"
}
5->{
tab.text = "Nilai Perilaku"
}
6->{
tab.text = "Hasil Studi"
}
}
}.attach()
}
}
\ No newline at end of file
package ta1.cis.fragment
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.navigation.Navigation
import ta1.cis.R
import java.text.SimpleDateFormat
import java.util.*
class HomeFragment : Fragment() {
lateinit var date:TextView
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.fragment_home, container, false)
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
}
\ No newline at end of file
package ta1.cis.fragment
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import androidx.navigation.NavController
import androidx.navigation.Navigation
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import ta1.cis.api.RetrofitInstance
import ta1.cis.helper.SharedPref
import kotlinx.android.synthetic.main.fragment_i_b.*
import ta1.cis.model.response.DataIzin
import ta1.cis.model.response.ResponseIzinBermalam
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import ta1.cis.R
import ta1.cis.activity.DetailIzinBermalam
import ta1.cis.adapter.IzinBermalamAdapter
class IBFragment : Fragment(),View.OnClickListener {
private lateinit var rv:RecyclerView
private var list = ArrayList<DataIzin>()
private lateinit var sharedPref: SharedPref
lateinit var ibAdapter : IzinBermalamAdapter
private var navController:NavController ? =null
private lateinit var alertData : TextView
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
sharedPref = SharedPref(activity as Context)
return inflater.inflate(R.layout.fragment_i_b, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
rv = view.findViewById(R.id.rv_ib)
alertData = view.findViewById(R.id.alertData)
setUpRecycle()
loadData()
navController = Navigation.findNavController(view)
view.findViewById<Button>(R.id.btn_request).setOnClickListener(this)
super.onViewCreated(view, savedInstanceState)
}
override fun onStart() {
super.onStart()
setUpRecycle()
loadData()
}
private fun setUpRecycle() {
ibAdapter = IzinBermalamAdapter(arrayListOf())
rv.apply {
setHasFixedSize(true)
layoutManager = LinearLayoutManager(activity)
adapter = ibAdapter
}
ibAdapter.setOnItemCallback(object : IzinBermalamAdapter.OnItemCallBack{
override fun onItemClicked(dataIzin: DataIzin) {
var intent = Intent(activity,DetailIzinBermalam::class.java).apply {
putExtra(DetailIzinBermalam.DATA_IZIN,dataIzin)
}
startActivity(intent);
}
})
}
fun loadData() {
progressBarIzin.visibility = View.VISIBLE
RetrofitInstance.instanceRetrofit.getIzinBermalam("Bearer ${sharedPref.getTokenBearer()}",sharedPref.getDimId().toLong())
.enqueue(object : Callback<ResponseIzinBermalam>{
override fun onFailure(call: Call<ResponseIzinBermalam>, t: Throwable) {
Toast.makeText(activity,t.message,Toast.LENGTH_SHORT).show()
}
override fun onResponse(
call: Call<ResponseIzinBermalam>,
response: Response<ResponseIzinBermalam>
) {
var list = response.body()
Log.d("Izin Bermalam",sharedPref.getDimId().toString())
list?.toString()?.let { Log.d("Isi data", it) }
if(list?.data == null){
alertData.visibility = View.VISIBLE
rv.visibility = View.GONE
}else{
alertData.visibility = View.GONE
rv.visibility = View.VISIBLE
ibAdapter.setData(list?.data)
}
progressBarIzin.visibility = View.GONE
}
})
}
override fun onClick(v: View?) {
when(v!!.id){
R.id.btn_request->{
navController!!.navigate(R.id.action_nav_ib_to_requestIzinBermalamActivity)
}
}
}
}
\ No newline at end of file
package ta1.cis.fragment
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.navigation.NavController
import androidx.navigation.Navigation
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.fragment_i_b.*
import kotlinx.android.synthetic.main.fragment_i_k.*
import kotlinx.android.synthetic.main.fragment_i_k.alertData
import kotlinx.android.synthetic.main.fragment_i_k.progressBarIzin
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import ta1.cis.R
import ta1.cis.activity.DetailIzinBermalam
import ta1.cis.activity.DetailIzinKeluar
import ta1.cis.adapter.IzinBermalamAdapter
import ta1.cis.adapter.IzinKeluarAdapter
import ta1.cis.api.RetrofitInstance
import ta1.cis.helper.SharedPref
import ta1.cis.model.response.DataIzin
import ta1.cis.model.response.DataIzinKeluar
import ta1.cis.model.response.ResponseIzinBermalam
import ta1.cis.model.response.ResponseIzinKeluar
class IKFragment : Fragment() {
private lateinit var izinKeluarAdapter: IzinKeluarAdapter
private lateinit var sharedPref : SharedPref
private var navController: NavController? =null
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
sharedPref = SharedPref(activity as Context)
return inflater.inflate(R.layout.fragment_i_k, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
setUpRecycle()
loadData()
navController = Navigation.findNavController(view)
btn_requestIK.setOnClickListener {
navController!!.navigate(R.id.action_nav_ik_to_requestIzinKeluarActivity)
}
super.onViewCreated(view, savedInstanceState)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
swipeRefreshIK.setOnRefreshListener {
loadData()
}
}
override fun onStart() {
super.onStart()
loadData()
}
private fun setUpRecycle() {
izinKeluarAdapter = IzinKeluarAdapter(arrayListOf())
rv_ik.apply {
setHasFixedSize(true)
layoutManager = LinearLayoutManager(activity)
adapter = izinKeluarAdapter
}
izinKeluarAdapter.setOnItemCallback(object : IzinKeluarAdapter.OnItemCallBack{
override fun onItemClicked(dataIzin: DataIzinKeluar) {
// Toast.makeText(activity,dataIzin.toString(),Toast.LENGTH_LONG).show()
var intent = Intent(activity, DetailIzinKeluar::class.java).apply {
putExtra(DetailIzinKeluar.DATA_IZIN_KELUAR,dataIzin)
}
startActivity(intent);
}
})
}
fun loadData() {
swipeRefreshIK.isRefreshing = true
RetrofitInstance.instanceRetrofit.getIzinKeluar(
sharedPref.getDimId().toLong(),
"Bearer ${sharedPref.getTokenBearer()}"
).enqueue(object : Callback<ResponseIzinKeluar> {
override fun onFailure(call: Call<ResponseIzinKeluar>, t: Throwable) {
Toast.makeText(activity,t.message, Toast.LENGTH_SHORT).show()
swipeRefreshIK.isRefreshing = false
}
override fun onResponse(
call: Call<ResponseIzinKeluar>,
response: Response<ResponseIzinKeluar>
) {
var list = response.body()
Log.d("Izin Keluar",list?.data.toString())
// list?.toString()?.let { Log.d("Isi data", it) }
if(list?.data == null){
alertData.visibility = View.VISIBLE
rv_ik.visibility = View.GONE
}else{
alertData.visibility = View.GONE
rv_ik.visibility = View.VISIBLE
izinKeluarAdapter.setData(list?.data)
}
progressBarIzin.visibility = View.GONE
swipeRefreshIK.isRefreshing = false
}
})
}
}
\ No newline at end of file
package ta1.cis.fragment
import android.app.Activity
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.fragment_jadwal.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import retrofit2.await
import retrofit2.awaitResponse
import ta1.cis.R
import ta1.cis.adapter.JadwalHeaderAdapter
import ta1.cis.api.RetrofitInstance
import ta1.cis.helper.SharedPref
class JadwalFragment : Fragment() {
private lateinit var sharedPref: SharedPref
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
sharedPref = SharedPref(context as Activity)
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_jadwal, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
pb_jadwal.visibility = View.VISIBLE
callApiJadwal()
}
fun callApiJadwal(){
GlobalScope.launch(Dispatchers.IO) {
val response = RetrofitInstance.instanceRetrofit.getAllJadwal("Bearer ${sharedPref.getTokenBearer()}").awaitResponse()
if(response.isSuccessful){
withContext(Dispatchers.Main){
val data = response.body()?.data
if(data != null){
pb_jadwal.visibility = View.GONE
recyclerViewJadwal.layoutManager = LinearLayoutManager(context,LinearLayoutManager.VERTICAL,false)
recyclerViewJadwal.adapter = JadwalHeaderAdapter(context,data)
}else{
pb_jadwal.visibility = View.GONE
}
}
}
}
}
}
\ No newline at end of file
package ta1.cis.fragment
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import ta1.cis.R
class KRSFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_k_r_s, container, false)
}
}
\ No newline at end of file
package ta1.cis.fragment
import android.content.Context
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import android.widget.Toast
import androidx.recyclerview.widget.ConcatAdapter
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.fragment_kuesioner.*
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import ta1.cis.R
import ta1.cis.adapter.KuesionerAdapter
import ta1.cis.api.RetrofitInstance
import ta1.cis.helper.SharedPref
import ta1.cis.model.response.DataKuesioner
import ta1.cis.model.response.ResponseKuesioner
class KuesionerFragment : Fragment() {
private lateinit var sharedPref: SharedPref
private lateinit var klikJudul: TextView
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
sharedPref = SharedPref(activity as Context)
return inflater.inflate(R.layout.fragment_kuesioner, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
refreshlayoutkuesioner.setOnRefreshListener {
fetchKuesioner()
}
fetchKuesioner()
}
private fun fetchKuesioner(){
refreshlayoutkuesioner.isRefreshing = true
RetrofitInstance.instanceRetrofit.getKuesioner().enqueue(object : Callback<ResponseKuesioner>{
override fun onResponse(
call: Call<ResponseKuesioner>,
response: Response<ResponseKuesioner>
) {
val kuesioner = response.body()
refreshlayoutkuesioner.isRefreshing = false
var mykuesioner = kuesioner?.data
Log.d("Kuesioner",mykuesioner.toString())
showKuesioner(mykuesioner)
}
override fun onFailure(call: Call<ResponseKuesioner>, t: Throwable) {
refreshlayoutkuesioner.isRefreshing = false
Toast.makeText(activity, t.message, Toast.LENGTH_LONG).show()
}
})
}
private fun showKuesioner(mykuesioner: List<DataKuesioner?>?){
var adapterMyKuesioner = KuesionerAdapter(mykuesioner)
var kuesionerAdapter = ConcatAdapter(adapterMyKuesioner)
recyclerViewKuesioner.layoutManager = LinearLayoutManager(activity)
recyclerViewKuesioner.adapter = kuesionerAdapter
}
}
\ No newline at end of file
package ta1.cis.fragment
import android.content.Context
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.materi_fragment.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.awaitResponse
import ta1.cis.R
import ta1.cis.activity.MatakuliahActivity
import ta1.cis.adapter.MateriHeader
import ta1.cis.api.RetrofitInstance
import ta1.cis.helper.SharedPref
import ta1.cis.model.response.ResponseMateriKul
class MateriFragment() : Fragment() {
private lateinit var matkul: MatakuliahActivity
private lateinit var sharedPref: SharedPref
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.materi_fragment, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
matkul = activity as MatakuliahActivity
sharedPref = SharedPref(activity as Context)
setupRecycle()
}
private fun setupRecycle() {
RetrofitInstance.instanceRetrofit.getMateriKuliah(matkul.getKuliahId(),"Bearer ${sharedPref.getTokenBearer()}")
.enqueue(object : Callback<ResponseMateriKul>{
override fun onResponse(
call: Call<ResponseMateriKul>,
response: Response<ResponseMateriKul>
) {
var data = response?.body()?.data
if(data != null){
rv_materi.layoutManager = LinearLayoutManager(context,LinearLayoutManager.VERTICAL,false)
rv_materi.adapter = MateriHeader(context,data)
}else{
Toast.makeText(context,"Data Tidak ada",Toast.LENGTH_LONG).show()
}
}
override fun onFailure(call: Call<ResponseMateriKul>, t: Throwable) {
Toast.makeText(context,t.message.toString(),Toast.LENGTH_SHORT).show()
}
})
}
}
\ No newline at end of file
package ta1.cis.fragment
import android.content.Context
import androidx.lifecycle.ViewModelProvider
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.recyclerview.widget.ConcatAdapter
import androidx.recyclerview.widget.LinearLayoutManager
import fragment.PaketViewModel
import kotlinx.android.synthetic.main.paket2_fragment.*
import model.response.Paket
import model.response.ResponsePaket
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import ta1.cis.R
import ta1.cis.adapter.PaketAdapter
import ta1.cis.api.RetrofitInstance
import ta1.cis.helper.SharedPref
class PaketFragment : Fragment() {
private lateinit var sharedPref: SharedPref
companion object {
fun newInstance() = PaketFragment()
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
sharedPref = SharedPref(activity as Context)
return inflater.inflate(R.layout.paket2_fragment, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
refreshlayout.setOnRefreshListener {
fetchPaket()
}
fetchPaket()
}
private fun fetchPaket(){
refreshlayout.isRefreshing = true
RetrofitInstance.instanceRetrofit.getPaket("Bearer ${sharedPref.getTokenBearer()}").enqueue(object : Callback<ResponsePaket>{
override fun onFailure(call: Call<ResponsePaket>, t: Throwable) {
refreshlayout.isRefreshing = false
Toast.makeText(activity, t.message, Toast.LENGTH_LONG).show()
}
override fun onResponse(
call: Call<ResponsePaket>,
response: Response<ResponsePaket>
) {
val paket = response.body()
refreshlayout.isRefreshing = false
paket?.let {
var mylistpaket = it.data.myPaket
var otherlistpaket = it.data.otherPaket
showPaket(mylistpaket, otherlistpaket)
}
}
})
}
private fun showPaket(mylistpaket: List<Paket>, otherlistpaket: List<Paket>){
var adapterMyPaket = PaketAdapter(mylistpaket)
var adapterOtherPaket = PaketAdapter(otherlistpaket)
var paketAdapter = ConcatAdapter(adapterMyPaket, adapterOtherPaket)
recyclerViewPaket.layoutManager = LinearLayoutManager(activity)
recyclerViewPaket.adapter = paketAdapter
}
}
\ No newline at end of file
package ta1.cis.fragment
import android.content.Context
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.SearchView
import android.widget.Toast
import androidx.recyclerview.widget.ConcatAdapter
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.fragment_pengumuman.*
import kotlinx.android.synthetic.main.paket2_fragment.*
import model.response.Pengumuman
import model.response.ResponsePengumuman
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import ta1.cis.R
import ta1.cis.adapter.PengumumanAdapter
import ta1.cis.api.RetrofitInstance
import ta1.cis.helper.SharedPref
class PengumumanFragment : Fragment() {
private lateinit var sharedPref: SharedPref
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
sharedPref = SharedPref(activity as Context)
return inflater.inflate(R.layout.fragment_pengumuman, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
refreshlayoutpengumuman.setOnRefreshListener {
fetchPengumuman()
}
fetchPengumuman()
}
private fun fetchPengumuman(){
refreshlayoutpengumuman.isRefreshing = true
RetrofitInstance.instanceRetrofit.getPengumuman("Bearer ${sharedPref.getTokenBearer()}").enqueue(object : Callback<ResponsePengumuman>{
override fun onResponse(
call: Call<ResponsePengumuman>,
response: Response<ResponsePengumuman>
) {
val pengumuman = response.body()
refreshlayoutpengumuman.isRefreshing = false
Log.d("Pengumuman",pengumuman.toString())
pengumuman?.let {
var mypengumuman = it.data
showPengumuman(mypengumuman)
}
}
override fun onFailure(call: Call<ResponsePengumuman>, t: Throwable) {
refreshlayoutpengumuman.isRefreshing = false
Toast.makeText(activity, t.message, Toast.LENGTH_LONG).show()
}
})
}
private fun showPengumuman(mypengumuman: List<Pengumuman>){
var adapterMyPengumuman = PengumumanAdapter(mypengumuman)
var pengumumanAdapter = ConcatAdapter(adapterMyPengumuman)
recyclerViewPengumuman.layoutManager = LinearLayoutManager(activity)
recyclerViewPengumuman.adapter = adapterMyPengumuman
}
}
\ No newline at end of file
package ta1.cis.fragment
import android.content.Context
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.Spinner
import android.widget.Toast
import androidx.core.view.get
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.fragment_perkuliahan.*
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import ta1.cis.R
import ta1.cis.adapter.PerkuliahanAdapter
import ta1.cis.adapter.SpinnerProdiAdapter
import ta1.cis.api.RetrofitInstance
import ta1.cis.helper.SharedPref
import ta1.cis.model.request.PerkuliahanHeader
import ta1.cis.model.response.HeaderItem
import ta1.cis.model.response.ResponsePerkuliahan
import ta1.cis.model.staticdata.ProdiData
class PerkuliahanFragment : Fragment() {
private lateinit var ThnKurikulumSpin: Spinner
private lateinit var JenProdiSpin: Spinner
private lateinit var sharedPref:SharedPref
private lateinit var tahunKur: String
private lateinit var namaProdi:String
private var prodiId: Int = 0
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_perkuliahan, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
var data = initList();
ThnKurikulumSpin = view.findViewById(R.id.spinner_thnKurikulum)
JenProdiSpin = view.findViewById(R.id.spinner_prodiJenjang)
var adapter = SpinnerProdiAdapter(requireActivity().applicationContext,0,data)
JenProdiSpin.adapter = adapter
JenProdiSpin.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
override fun onItemSelected(
parent: AdapterView<*>?,
view: View?,
position: Int,
id: Long
) {
val type = parent?.getItemAtPosition(position) as ProdiData;
prodiId = type?.value
namaProdi = type.prodi
}
override fun onNothingSelected(parent: AdapterView<*>?) {
TODO("Not yet implemented")
}
}
context?.let { initSpinnerTahun(it) }
ThnKurikulumSpin.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
override fun onItemSelected(
parent: AdapterView<*>?,
view: View?,
position: Int,
id: Long
) {
var selected = parent?.getItemAtPosition(position).toString()
tahunKur = selected
}
override fun onNothingSelected(parent: AdapterView<*>?) {
TODO("Not yet implemented")
}
}
sharedPref = SharedPref(activity as Context)
btn_cariKuliah.setOnClickListener {
pb_perkuliahan.visibility = View.VISIBLE
sendData(prodiId,tahunKur)
}
}
private fun sendData(prodiId: Int, tahunKur: String) {
RetrofitInstance.instanceRetrofit.getMatkulBasedOnYearAndCollege(tahunKur,prodiId,"Bearer ${sharedPref.getTokenBearer()}")
.enqueue(object : Callback<ResponsePerkuliahan>{
override fun onResponse(
call: Call<ResponsePerkuliahan>,
response: Response<ResponsePerkuliahan>
) {
var data = response.body()?.data
desk1.text = "Data Kurikulum Tahun $tahunKur"
desk1.visibility = View.VISIBLE
deskProdi.text = "Jenjang Prodi ${namaProdi}"
recyclerViewPerkuliahan.apply{
layoutManager = LinearLayoutManager(activity,LinearLayoutManager.VERTICAL,false)
adapter = PerkuliahanAdapter(activity as Context, data as List<HeaderItem>)
}
pb_perkuliahan.visibility = View.GONE
}
override fun onFailure(call: Call<ResponsePerkuliahan>, t: Throwable) {
Toast.makeText(activity,t.toString(),Toast.LENGTH_SHORT).show()
pb_perkuliahan.visibility = View.GONE
}
})
}
private fun initSpinnerTahun(context: Context){
ArrayAdapter.createFromResource(context,R.array.list_Tahun_Kurikulum,android.R.layout.simple_spinner_item)
.also {
it.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
ThnKurikulumSpin.adapter = it
}
}
private fun initList(): MutableList<ProdiData> {
var prodiList : MutableList<ProdiData> = mutableListOf()
var listData = listOf<ProdiData>(ProdiData(
1,
"D3 Teknologi Informasi",
1
),ProdiData(
null,
"D3 Teknologi Komputer",
2
),ProdiData(
2,
"D4 Teknologi Rekayasa Perangkat lunak",
3
),ProdiData(
3,
"S1 Informatika",
4
),ProdiData(
null,
"S1 Manajemen Rekayasa",
5
),ProdiData(
null,
"S1 Sistem Informasi",
6
),ProdiData(
null,
"S1 Teknik Bioproses",
7
),ProdiData(
null,
"S1 Teknik Elektro",
8
))
prodiList.addAll(listData)
return prodiList
}
// private fun bindData(tahun:String,prodi:Int){
// RetrofitInstance.instanceRetrofit.getMatkulBasedOnYearAndCollege(tahun,prodi)
// }
}
\ No newline at end of file
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