diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Constants.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Constants.kt index e5d8b7b6..8a518386 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Constants.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Constants.kt @@ -129,6 +129,7 @@ const val VULCAN_HEBE_ENDPOINT_REGISTER_NEW = "api/mobile/register/new" const val VULCAN_HEBE_ENDPOINT_MAIN = "api/mobile/register/hebe" const val VULCAN_HEBE_ENDPOINT_TIMETABLE = "api/mobile/schedule" const val VULCAN_HEBE_ENDPOINT_TIMETABLE_CHANGES = "api/mobile/schedule/changes" +const val VULCAN_HEBE_ENDPOINT_ADDRESSBOOK = "api/mobile/addressbook" const val VULCAN_HEBE_ENDPOINT_EXAMS = "api/mobile/exam" const val VULCAN_HEBE_ENDPOINT_GRADES = "api/mobile/grade" const val VULCAN_HEBE_ENDPOINT_HOMEWORK = "api/mobile/homework" diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/VulcanFeatures.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/VulcanFeatures.kt index 0eef575a..d4749729 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/VulcanFeatures.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/VulcanFeatures.kt @@ -21,6 +21,7 @@ const val ENDPOINT_VULCAN_API_MESSAGES_INBOX = 1090 const val ENDPOINT_VULCAN_API_MESSAGES_SENT = 1100 const val ENDPOINT_VULCAN_WEB_LUCKY_NUMBERS = 2010 const val ENDPOINT_VULCAN_HEBE_MAIN = 3000 +const val ENDPOINT_VULCAN_HEBE_ADDRESSBOOK = 3010 const val ENDPOINT_VULCAN_HEBE_TIMETABLE = 3020 const val ENDPOINT_VULCAN_HEBE_EXAMS = 3030 const val ENDPOINT_VULCAN_HEBE_GRADES = 3040 @@ -89,7 +90,11 @@ val VulcanFeatures = listOf( Feature(LOGIN_TYPE_VULCAN, FEATURE_ALWAYS_NEEDED, listOf( ENDPOINT_VULCAN_API_UPDATE_SEMESTER to LOGIN_METHOD_VULCAN_API, ENDPOINT_VULCAN_API_DICTIONARIES to LOGIN_METHOD_VULCAN_API - ), listOf(LOGIN_METHOD_VULCAN_API)) + ), listOf(LOGIN_METHOD_VULCAN_API)), + Feature(LOGIN_TYPE_VULCAN, FEATURE_ALWAYS_NEEDED, listOf( + ENDPOINT_VULCAN_HEBE_MAIN to LOGIN_METHOD_VULCAN_HEBE, + ENDPOINT_VULCAN_HEBE_ADDRESSBOOK to LOGIN_METHOD_VULCAN_HEBE + ), listOf(LOGIN_METHOD_VULCAN_HEBE)) /*Feature(LOGIN_TYPE_VULCAN, FEATURE_STUDENT_INFO, listOf( ENDPOINT_VULCAN_API to LOGIN_METHOD_VULCAN_WEB ), listOf(LOGIN_METHOD_VULCAN_WEB)), diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/VulcanData.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/VulcanData.kt index f21f193d..fd32db8a 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/VulcanData.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/VulcanData.kt @@ -7,10 +7,7 @@ package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data import pl.szczodrzynski.edziennik.R import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.* import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.api.* -import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.hebe.VulcanHebeExams -import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.hebe.VulcanHebeGrades -import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.hebe.VulcanHebeHomework -import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.hebe.VulcanHebeTimetable +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.hebe.* import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.web.VulcanWebLuckyNumber import pl.szczodrzynski.edziennik.utils.Utils @@ -95,6 +92,23 @@ class VulcanData(val data: DataVulcan, val onSuccess: () -> Unit) { data.startProgress(R.string.edziennik_progress_endpoint_lucky_number) VulcanWebLuckyNumber(data, lastSync, onSuccess) } + ENDPOINT_VULCAN_HEBE_MAIN -> { + if (data.profile == null) { + onSuccess(ENDPOINT_VULCAN_HEBE_MAIN) + return + } + data.startProgress(R.string.edziennik_progress_endpoint_student_info) + VulcanHebeMain(data, lastSync).getStudents( + profile = data.profile, + profileList = null + ) { + onSuccess(ENDPOINT_VULCAN_HEBE_MAIN) + } + } + ENDPOINT_VULCAN_HEBE_ADDRESSBOOK -> { + data.startProgress(R.string.edziennik_progress_endpoint_teachers) + VulcanHebeAddressbook(data, lastSync, onSuccess) + } ENDPOINT_VULCAN_HEBE_TIMETABLE -> { data.startProgress(R.string.edziennik_progress_endpoint_timetable) VulcanHebeTimetable(data, lastSync, onSuccess) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/hebe/VulcanHebeAddressbook.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/hebe/VulcanHebeAddressbook.kt new file mode 100644 index 00000000..c96142aa --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/hebe/VulcanHebeAddressbook.kt @@ -0,0 +1,118 @@ +package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.hebe + +import androidx.core.util.set +import pl.szczodrzynski.edziennik.* +import pl.szczodrzynski.edziennik.data.api.VULCAN_HEBE_ENDPOINT_ADDRESSBOOK +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.DataVulcan +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.ENDPOINT_VULCAN_HEBE_ADDRESSBOOK +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.VulcanHebe +import pl.szczodrzynski.edziennik.data.db.entity.Teacher +import pl.szczodrzynski.edziennik.data.db.entity.Teacher.Companion.TYPE_EDUCATOR +import pl.szczodrzynski.edziennik.data.db.entity.Teacher.Companion.TYPE_OTHER +import pl.szczodrzynski.edziennik.data.db.entity.Teacher.Companion.TYPE_PARENT +import pl.szczodrzynski.edziennik.data.db.entity.Teacher.Companion.TYPE_PARENTS_COUNCIL +import pl.szczodrzynski.edziennik.data.db.entity.Teacher.Companion.TYPE_STUDENT +import pl.szczodrzynski.edziennik.data.db.entity.Teacher.Companion.TYPE_TEACHER +import kotlin.text.replace + +class VulcanHebeAddressbook( + override val data: DataVulcan, + override val lastSync: Long?, + val onSuccess: (endpointId: Int) -> Unit +) : VulcanHebe(data, lastSync) { + companion object { + const val TAG = "VulcanHebeAddressbook" + } + + private fun String.removeUnitName(unitName: String?): String { + return (unitName ?: data.schoolShort)?.let { + this.replace("($it)", "").trim() + } ?: this + } + + init { + apiGetList( + TAG, + VULCAN_HEBE_ENDPOINT_ADDRESSBOOK, + HebeFilterType.BY_PERSON, + lastSync = lastSync, + includeFilterType = false + ) { list, _ -> + list.forEach { person -> + val id = person.getString("Id") ?: return@forEach + val loginId = person.getString("LoginId") ?: return@forEach + + val idType = id.split("-") + .getOrNull(0) + val idLong = id.split("-") + .getOrNull(1) + ?.toLongOrNull() + ?: return@forEach + + val typeBase = when (idType) { + "e" -> TYPE_TEACHER + "c" -> TYPE_PARENT + "p" -> TYPE_STUDENT + else -> TYPE_OTHER + } + + val name = person.getString("Name") ?: "" + val surname = person.getString("Surname") ?: "" + val namePrefix = "$surname $name - " + + val teacher = data.teacherList[idLong] ?: Teacher( + data.profileId, + idLong, + name, + surname, + loginId + ).also { + data.teacherList[idLong] = it + } + + person.getJsonArray("Roles")?.asJsonObjectList()?.onEach { role -> + var roleText: String? = null + val unitName = role.getString("ConstituentUnitSymbol") + + val personType = when (role.getInt("RoleOrder")) { + 0 -> { /* Wychowawca */ + roleText = role.getString("ClassSymbol") + ?.removeUnitName(unitName) + TYPE_EDUCATOR + } + 1 -> TYPE_TEACHER /* Nauczyciel */ + 2 -> return@onEach /* Pracownik */ + 3 -> { /* Rada rodziców */ + roleText = role.getString("Address") + ?.removeUnitName(unitName) + ?.removePrefix(namePrefix) + ?.trim() + TYPE_PARENTS_COUNCIL + } + 5 -> { + roleText = role.getString("RoleName") + ?.plus(" - ") + ?.plus( + role.getString("Address") + ?.removeUnitName(unitName) + ?.removePrefix(namePrefix) + ?.trim() + ) + TYPE_STUDENT + } + else -> TYPE_OTHER + } + + teacher.setTeacherType(personType) + teacher.typeDescription = roleText + } + + if (teacher.type == 0) + teacher.setTeacherType(typeBase) + } + + data.setSyncNext(ENDPOINT_VULCAN_HEBE_ADDRESSBOOK, 2 * DAY) + onSuccess(ENDPOINT_VULCAN_HEBE_ADDRESSBOOK) + } + } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/hebe/VulcanHebeMain.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/hebe/VulcanHebeMain.kt index 020509c3..b3d88d04 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/hebe/VulcanHebeMain.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/hebe/VulcanHebeMain.kt @@ -76,7 +76,7 @@ class VulcanHebeMain( } val schoolSymbol = unit.getString("Symbol") ?: return@forEach - val schoolShort = unit.getString("Short") ?: return@forEach + val schoolShort = constituentUnit.getString("Short") ?: return@forEach val schoolCode = "${data.symbol}_$schoolSymbol" val studentUnitId = unit.getInt("Id") ?: return@forEach