From 4389dc9d79f7955f507c41b1be37e31d608cc243 Mon Sep 17 00:00:00 2001 From: Kacper Ziubryniewicz Date: Wed, 13 May 2020 19:37:24 +0200 Subject: [PATCH] [API/Podlasie] Add getting grades proposals. --- .../data/api/PodlasieApiFinalGrades.kt | 121 ++++++++++++++++++ .../podlasie/data/api/PodlasieApiMain.kt | 1 + .../edziennik/utils/managers/GradesManager.kt | 24 ++++ 3 files changed, 146 insertions(+) create mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/data/api/PodlasieApiFinalGrades.kt diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/data/api/PodlasieApiFinalGrades.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/data/api/PodlasieApiFinalGrades.kt new file mode 100644 index 00000000..7c4575aa --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/data/api/PodlasieApiFinalGrades.kt @@ -0,0 +1,121 @@ +/* + * Copyright (c) Kacper Ziubryniewicz 2020-5-13 + */ + +package pl.szczodrzynski.edziennik.data.api.edziennik.podlasie.data.api + +import com.google.gson.JsonObject +import pl.szczodrzynski.edziennik.data.api.edziennik.podlasie.DataPodlasie +import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel +import pl.szczodrzynski.edziennik.data.db.entity.Grade +import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_SEMESTER1_FINAL +import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_SEMESTER1_PROPOSED +import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_SEMESTER2_FINAL +import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_SEMESTER2_PROPOSED +import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_YEAR_FINAL +import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_YEAR_PROPOSED +import pl.szczodrzynski.edziennik.data.db.entity.Metadata +import pl.szczodrzynski.edziennik.getLong +import pl.szczodrzynski.edziennik.getString + +class PodlasieApiFinalGrades(val data: DataPodlasie, val rows: List) { + init { data.profile?.also { profile -> + rows.forEach { grade -> + val id = grade.getLong("ExternalId") ?: return@forEach + val mark = grade.getString("Mark") ?: return@forEach + val proposedMark = grade.getString("ProposedMark") ?: "0" + val name = data.app.gradesManager.getGradeNumberName(mark) + val value = data.app.gradesManager.getGradeValue(name) + val semester = grade.getString("TermShortcut")?.length ?: return@forEach + + val typeName = grade.getString("Type") ?: return@forEach + val type = when (typeName) { + "S" -> if (semester == 1) TYPE_SEMESTER1_FINAL else TYPE_SEMESTER2_FINAL + "Y", "R" -> TYPE_YEAR_FINAL + else -> return@forEach + } + + val subjectName = grade.getString("SchoolSubject") ?: return@forEach + val subject = data.getSubject(subjectName) + + val addedDate = if (profile.empty) profile.getSemesterStart(semester).inMillis + else System.currentTimeMillis() + + val gradeObject = Grade( + profileId = data.profileId, + id = id, + name = name, + type = type, + value = value, + weight = 0f, + color = -1, + category = null, + description = null, + comment = null, + semester = semester, + teacherId = -1, + subjectId = subject.id, + addedDate = addedDate + ) + + data.gradeList.add(gradeObject) + data.metadataList.add( + Metadata( + data.profileId, + Metadata.TYPE_GRADE, + id, + profile.empty, + profile.empty + )) + + if (proposedMark != "0") { + val proposedName = data.app.gradesManager.getGradeNumberName(proposedMark) + val proposedValue = data.app.gradesManager.getGradeValue(proposedName) + + val proposedType = when (typeName) { + "S" -> if (semester == 1) TYPE_SEMESTER1_PROPOSED else TYPE_SEMESTER2_PROPOSED + "Y", "R" -> TYPE_YEAR_PROPOSED + else -> return@forEach + } + + val proposedGradeObject = Grade( + profileId = data.profileId, + id = id * (-1), + name = proposedName, + type = proposedType, + value = proposedValue, + weight = 0f, + color = -1, + category = null, + description = null, + comment = null, + semester = semester, + teacherId = -1, + subjectId = subject.id, + addedDate = addedDate + ) + + data.gradeList.add(proposedGradeObject) + data.metadataList.add( + Metadata( + data.profileId, + Metadata.TYPE_GRADE, + proposedGradeObject.id, + profile.empty, + profile.empty + )) + } + } + + data.toRemove.addAll(listOf( + TYPE_SEMESTER1_FINAL, + TYPE_SEMESTER1_PROPOSED, + TYPE_SEMESTER2_FINAL, + TYPE_SEMESTER2_PROPOSED, + TYPE_YEAR_FINAL, + TYPE_YEAR_PROPOSED + ).map { + DataRemoveModel.Grades.allWithType(it) + }) + }} +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/data/api/PodlasieApiMain.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/data/api/PodlasieApiMain.kt index aa4dc9f2..7144f236 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/data/api/PodlasieApiMain.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/data/api/PodlasieApiMain.kt @@ -25,6 +25,7 @@ class PodlasieApiMain(override val data: DataPodlasie, json.getJsonArray("Timetable")?.asJsonObjectList()?.let { PodlasieApiTimetable(data, it) } json.getJsonArray("Marks")?.asJsonObjectList()?.let { PodlasieApiGrades(data, it) } + json.getJsonArray("MarkFinal")?.asJsonObjectList()?.let { PodlasieApiFinalGrades(data, it) } data.setSyncNext(ENDPOINT_PODLASIE_API_MAIN, SYNC_ALWAYS) onSuccess(ENDPOINT_PODLASIE_API_MAIN) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/utils/managers/GradesManager.kt b/app/src/main/java/pl/szczodrzynski/edziennik/utils/managers/GradesManager.kt index 8a09df3d..61ea5ad2 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/utils/managers/GradesManager.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/utils/managers/GradesManager.kt @@ -208,6 +208,30 @@ class GradesManager(val app: App) : CoroutineScope { } } + fun getGradeNumberName(name: String): String { + return when(name.toLowerCase()){ + "niedostateczny", "f" -> "1" + "niedostateczny plus", "f+" -> "1+" + "niedostateczny minus", "f-" -> "1-" + "dopuszczający", "e" -> "2" + "dopuszczający plus", "e+" -> "2+" + "dopuszczający minus", "e-" -> "2-" + "dostateczny", "d" -> "3" + "dostateczny plus", "d+" -> "3+" + "dostateczny minus", "d-" -> "3-" + "dobry", "c" -> "4" + "dobry plus", "c+" -> "4+" + "dobry minus", "c-" -> "4-" + "bardzo dobry", "b" -> "5" + "bardzo dobry plus", "b+" -> "5+" + "bardzo dobry minus", "b-" -> "5-" + "celujący", "a" -> "6" + "celujący plus", "a+" -> "6+" + "celujący minus", "a-" -> "6-" + else -> name + } + } + /* _ _ _____ _____ _ __ _ | | | |_ _| / ____| (_)/ _(_) | | | | | | | (___ _ __ ___ ___ _| |_ _ ___