forked from github/szkolny
[APIv2/Idziennik] Add getting homework and rewrite getting exams.
This commit is contained in:
parent
66d54c7c45
commit
6892832fff
@ -64,6 +64,7 @@ const val IDZIENNIK_WEB_TIMETABLE = "mod_panelRodzica/plan/WS_Plan.asmx/pobierzP
|
|||||||
const val IDZIENNIK_WEB_GRADES = "mod_panelRodzica/oceny/WS_ocenyUcznia.asmx/pobierzOcenyUcznia"
|
const val IDZIENNIK_WEB_GRADES = "mod_panelRodzica/oceny/WS_ocenyUcznia.asmx/pobierzOcenyUcznia"
|
||||||
const val IDZIENNIK_WEB_MISSING_GRADES = "mod_panelRodzica/brak_ocen/WS_BrakOcenUcznia.asmx/pobierzBrakujaceOcenyUcznia"
|
const val IDZIENNIK_WEB_MISSING_GRADES = "mod_panelRodzica/brak_ocen/WS_BrakOcenUcznia.asmx/pobierzBrakujaceOcenyUcznia"
|
||||||
const val IDZIENNIK_WEB_EXAMS = "mod_panelRodzica/sprawdziany/mod_sprawdzianyPanel.asmx/pobierzListe"
|
const val IDZIENNIK_WEB_EXAMS = "mod_panelRodzica/sprawdziany/mod_sprawdzianyPanel.asmx/pobierzListe"
|
||||||
|
const val IDZIENNIK_WEB_HOMEWORK = "mod_panelRodzica/pracaDomowa/WS_pracaDomowa.asmx/pobierzPraceDomowe"
|
||||||
const val IDZIENNIK_WEB_NOTICES = "mod_panelRodzica/uwagi/WS_uwagiUcznia.asmx/pobierzUwagiUcznia"
|
const val IDZIENNIK_WEB_NOTICES = "mod_panelRodzica/uwagi/WS_uwagiUcznia.asmx/pobierzUwagiUcznia"
|
||||||
const val IDZIENNIK_WEB_ATTENDANCE = "mod_panelRodzica/obecnosci/WS_obecnosciUcznia.asmx/pobierzObecnosciUcznia"
|
const val IDZIENNIK_WEB_ATTENDANCE = "mod_panelRodzica/obecnosci/WS_obecnosciUcznia.asmx/pobierzObecnosciUcznia"
|
||||||
const val IDZIENNIK_WEB_ANNOUNCEMENTS = "mod_panelRodzica/tabOgl/WS_tablicaOgloszen.asmx/GetOgloszenia"
|
const val IDZIENNIK_WEB_ANNOUNCEMENTS = "mod_panelRodzica/tabOgl/WS_tablicaOgloszen.asmx/GetOgloszenia"
|
||||||
|
@ -11,6 +11,7 @@ const val ENDPOINT_IDZIENNIK_WEB_TIMETABLE = 1030
|
|||||||
const val ENDPOINT_IDZIENNIK_WEB_GRADES = 1040
|
const val ENDPOINT_IDZIENNIK_WEB_GRADES = 1040
|
||||||
const val ENDPOINT_IDZIENNIK_WEB_PROPOSED_GRADES = 1050
|
const val ENDPOINT_IDZIENNIK_WEB_PROPOSED_GRADES = 1050
|
||||||
const val ENDPOINT_IDZIENNIK_WEB_EXAMS = 1060
|
const val ENDPOINT_IDZIENNIK_WEB_EXAMS = 1060
|
||||||
|
const val ENDPOINT_IDZIENNIK_WEB_HOMEWORK = 1061
|
||||||
const val ENDPOINT_IDZIENNIK_WEB_NOTICES = 1070
|
const val ENDPOINT_IDZIENNIK_WEB_NOTICES = 1070
|
||||||
const val ENDPOINT_IDZIENNIK_WEB_ANNOUNCEMENTS = 1080
|
const val ENDPOINT_IDZIENNIK_WEB_ANNOUNCEMENTS = 1080
|
||||||
const val ENDPOINT_IDZIENNIK_WEB_ATTENDANCE = 1090
|
const val ENDPOINT_IDZIENNIK_WEB_ATTENDANCE = 1090
|
||||||
@ -34,6 +35,10 @@ val IdziennikFeatures = listOf(
|
|||||||
ENDPOINT_IDZIENNIK_WEB_EXAMS to LOGIN_METHOD_IDZIENNIK_WEB
|
ENDPOINT_IDZIENNIK_WEB_EXAMS to LOGIN_METHOD_IDZIENNIK_WEB
|
||||||
), listOf(LOGIN_METHOD_IDZIENNIK_WEB)),
|
), listOf(LOGIN_METHOD_IDZIENNIK_WEB)),
|
||||||
|
|
||||||
|
Feature(LOGIN_TYPE_IDZIENNIK, FEATURE_HOMEWORK, listOf(
|
||||||
|
ENDPOINT_IDZIENNIK_WEB_HOMEWORK to LOGIN_METHOD_IDZIENNIK_WEB
|
||||||
|
), listOf(LOGIN_METHOD_IDZIENNIK_WEB)),
|
||||||
|
|
||||||
Feature(LOGIN_TYPE_IDZIENNIK, FEATURE_BEHAVIOUR, listOf(
|
Feature(LOGIN_TYPE_IDZIENNIK, FEATURE_BEHAVIOUR, listOf(
|
||||||
ENDPOINT_IDZIENNIK_WEB_NOTICES to LOGIN_METHOD_IDZIENNIK_WEB
|
ENDPOINT_IDZIENNIK_WEB_NOTICES to LOGIN_METHOD_IDZIENNIK_WEB
|
||||||
), listOf(LOGIN_METHOD_IDZIENNIK_WEB)),
|
), listOf(LOGIN_METHOD_IDZIENNIK_WEB)),
|
||||||
|
@ -55,6 +55,10 @@ class IdziennikData(val data: DataIdziennik, val onSuccess: () -> Unit) {
|
|||||||
data.startProgress(R.string.edziennik_progress_endpoint_exams)
|
data.startProgress(R.string.edziennik_progress_endpoint_exams)
|
||||||
IdziennikWebExams(data, onSuccess)
|
IdziennikWebExams(data, onSuccess)
|
||||||
}
|
}
|
||||||
|
ENDPOINT_IDZIENNIK_WEB_HOMEWORK -> {
|
||||||
|
data.startProgress(R.string.edziennik_progress_endpoint_homework)
|
||||||
|
IdziennikWebHomework(data, onSuccess)
|
||||||
|
}
|
||||||
ENDPOINT_IDZIENNIK_WEB_NOTICES -> {
|
ENDPOINT_IDZIENNIK_WEB_NOTICES -> {
|
||||||
data.startProgress(R.string.edziennik_progress_endpoint_notices)
|
data.startProgress(R.string.edziennik_progress_endpoint_notices)
|
||||||
IdziennikWebNotices(data, onSuccess)
|
IdziennikWebNotices(data, onSuccess)
|
||||||
|
@ -94,6 +94,7 @@ open class IdziennikWeb(open val data: DataIdziennik) {
|
|||||||
is Long -> json.addProperty(name, value)
|
is Long -> json.addProperty(name, value)
|
||||||
is Float -> json.addProperty(name, value)
|
is Float -> json.addProperty(name, value)
|
||||||
is Char -> json.addProperty(name, value)
|
is Char -> json.addProperty(name, value)
|
||||||
|
is Boolean -> json.addProperty(name, value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
setJsonBody(json)
|
setJsonBody(json)
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
package pl.szczodrzynski.edziennik.api.v2.idziennik.data.web
|
package pl.szczodrzynski.edziennik.api.v2.idziennik.data.web
|
||||||
|
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.api.v2.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA
|
import pl.szczodrzynski.edziennik.api.v2.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA
|
||||||
import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_WEB_EXAMS
|
import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_WEB_EXAMS
|
||||||
import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik
|
||||||
@ -14,9 +15,7 @@ import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
|||||||
import pl.szczodrzynski.edziennik.api.v2.models.DataRemoveModel
|
import pl.szczodrzynski.edziennik.api.v2.models.DataRemoveModel
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.events.Event
|
import pl.szczodrzynski.edziennik.data.db.modules.events.Event
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
||||||
import pl.szczodrzynski.edziennik.getJsonObject
|
|
||||||
import pl.szczodrzynski.edziennik.utils.models.Date
|
import pl.szczodrzynski.edziennik.utils.models.Date
|
||||||
|
|
||||||
class IdziennikWebExams(override val data: DataIdziennik,
|
class IdziennikWebExams(override val data: DataIdziennik,
|
||||||
@ -57,28 +56,33 @@ class IdziennikWebExams(override val data: DataIdziennik,
|
|||||||
return@webApiGet
|
return@webApiGet
|
||||||
}
|
}
|
||||||
|
|
||||||
for (jExamEl in json.getAsJsonArray("ListK")) {
|
json.getJsonArray("ListK")?.asJsonObjectList()?.forEach { exam ->
|
||||||
val jExam = jExamEl.asJsonObject
|
val id = exam.getLong("_recordId") ?: return@forEach
|
||||||
// jExam
|
val examDate = Date.fromY_m_d(exam.getString("data") ?: return@forEach)
|
||||||
val eventId = jExam.get("_recordId").asLong
|
val subjectId = data.getSubject(exam.getString("przedmiot") ?: return@forEach,
|
||||||
val rSubject = data.getSubject(jExam.get("przedmiot").asString, -1, "")
|
-1, "").id
|
||||||
val rTeacher = data.getTeacherByLastFirst(jExam.get("wpisal").asString)
|
val teacherId = data.getTeacherByLastFirst(exam.getString("wpisal")
|
||||||
val examDate = Date.fromY_m_d(jExam.get("data").asString)
|
?: return@forEach).id
|
||||||
val lessonObject = Lesson.getByWeekDayAndSubject(data.lessonList, examDate.weekDay, rSubject.id)
|
val lessonList = data.db.timetableDao().getForDateNow(profileId, examDate)
|
||||||
val examTime = lessonObject?.startTime
|
val startTime = lessonList.firstOrNull { it.subjectId == subjectId }?.startTime
|
||||||
|
val topic = exam.getString("zakres") ?: ""
|
||||||
|
|
||||||
|
val eventType = when (exam.getString("rodzaj")) {
|
||||||
|
"sprawdzian/praca klasowa" -> Event.TYPE_EXAM
|
||||||
|
else -> Event.TYPE_SHORT_QUIZ
|
||||||
|
}
|
||||||
|
|
||||||
val eventType = if (jExam.get("rodzaj").asString == "sprawdzian/praca klasowa") Event.TYPE_EXAM else Event.TYPE_SHORT_QUIZ
|
|
||||||
val eventObject = Event(
|
val eventObject = Event(
|
||||||
profileId,
|
profileId,
|
||||||
eventId,
|
id,
|
||||||
examDate,
|
examDate,
|
||||||
examTime,
|
startTime,
|
||||||
jExam.get("zakres").asString,
|
topic,
|
||||||
-1,
|
-1,
|
||||||
eventType,
|
eventType,
|
||||||
false,
|
false,
|
||||||
rTeacher.id,
|
teacherId,
|
||||||
rSubject.id,
|
subjectId,
|
||||||
data.teamClass?.id ?: -1
|
data.teamClass?.id ?: -1
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -0,0 +1,98 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Kacper Ziubryniewicz 2019-11-25
|
||||||
|
*/
|
||||||
|
|
||||||
|
package pl.szczodrzynski.edziennik.api.v2.idziennik.data.web
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject
|
||||||
|
import pl.szczodrzynski.edziennik.*
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_WEB_HOMEWORK
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.ENDPOINT_IDZIENNIK_WEB_HOMEWORK
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikWeb
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.models.DataRemoveModel
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.modules.events.Event
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
||||||
|
import pl.szczodrzynski.edziennik.utils.models.Date
|
||||||
|
|
||||||
|
class IdziennikWebHomework(override val data: DataIdziennik,
|
||||||
|
val onSuccess: () -> Unit) : IdziennikWeb(data) {
|
||||||
|
companion object {
|
||||||
|
private const val TAG = "IdziennikWebHomework"
|
||||||
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
val param = JsonObject().apply {
|
||||||
|
addProperty("strona", 1)
|
||||||
|
addProperty("iloscNaStrone", 997)
|
||||||
|
addProperty("iloscRekordow", -1)
|
||||||
|
addProperty("kolumnaSort", "DataZadania")
|
||||||
|
addProperty("kierunekSort", 0)
|
||||||
|
addProperty("maxIloscZaznaczonych", 0)
|
||||||
|
addProperty("panelFiltrow", 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
webApiGet(TAG, IDZIENNIK_WEB_HOMEWORK, mapOf(
|
||||||
|
"idP" to data.registerId,
|
||||||
|
"data" to Date.getToday().stringY_m_d,
|
||||||
|
"wszystkie" to true,
|
||||||
|
"param" to param
|
||||||
|
)) { result ->
|
||||||
|
val json = result.getJsonObject("d") ?: run {
|
||||||
|
data.error(ApiError(TAG, ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA)
|
||||||
|
.withApiResponse(result))
|
||||||
|
return@webApiGet
|
||||||
|
}
|
||||||
|
|
||||||
|
json.getJsonArray("ListK")?.asJsonObjectList()?.forEach { homework ->
|
||||||
|
val id = homework.getLong("_recordId") ?: return@forEach
|
||||||
|
val eventDate = Date.fromY_m_d(homework.getString("dataO") ?: return@forEach)
|
||||||
|
val subjectId = data.getSubject(homework.getString("przed") ?: return@forEach,
|
||||||
|
-1, "").id
|
||||||
|
val teacherId = data.getTeacherByLastFirst(homework.getString("usr")
|
||||||
|
?: return@forEach).id
|
||||||
|
val lessonList = data.db.timetableDao().getForDateNow(profileId, eventDate)
|
||||||
|
val startTime = lessonList.firstOrNull { it.subjectId == subjectId }?.displayStartTime
|
||||||
|
val topic = homework.getString("tytul") ?: ""
|
||||||
|
|
||||||
|
val seen = when (profile?.empty) {
|
||||||
|
true -> true
|
||||||
|
else -> eventDate < Date.getToday()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
val eventObject = Event(
|
||||||
|
profileId,
|
||||||
|
id,
|
||||||
|
eventDate,
|
||||||
|
startTime,
|
||||||
|
topic,
|
||||||
|
-1,
|
||||||
|
Event.TYPE_HOMEWORK,
|
||||||
|
false,
|
||||||
|
teacherId,
|
||||||
|
subjectId,
|
||||||
|
data.teamClass?.id ?: -1
|
||||||
|
)
|
||||||
|
|
||||||
|
data.eventList.add(eventObject)
|
||||||
|
data.metadataList.add(Metadata(
|
||||||
|
profileId,
|
||||||
|
Metadata.TYPE_HOMEWORK,
|
||||||
|
eventObject.id,
|
||||||
|
seen,
|
||||||
|
seen,
|
||||||
|
System.currentTimeMillis()
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
data.toRemove.add(DataRemoveModel.Events.futureWithType(Event.TYPE_HOMEWORK))
|
||||||
|
|
||||||
|
data.setSyncNext(ENDPOINT_IDZIENNIK_WEB_HOMEWORK, SYNC_ALWAYS)
|
||||||
|
onSuccess()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -6,10 +6,10 @@ import com.google.gson.JsonObject
|
|||||||
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_AGENDA
|
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_AGENDA
|
||||||
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_ANNOUNCEMENTS
|
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_ANNOUNCEMENTS
|
||||||
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_ATTENDANCE
|
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_ATTENDANCE
|
||||||
|
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_BEHAVIOUR
|
||||||
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_GRADES
|
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_GRADES
|
||||||
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_HOMEWORK
|
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_HOMEWORK
|
||||||
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_MESSAGES
|
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_MESSAGES
|
||||||
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_BEHAVIOUR
|
|
||||||
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_TIMETABLE
|
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_TIMETABLE
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
|
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.*
|
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.*
|
||||||
@ -74,6 +74,7 @@ class ProfileFull : Profile {
|
|||||||
fragmentIds.add(DRAWER_ITEM_AGENDA)
|
fragmentIds.add(DRAWER_ITEM_AGENDA)
|
||||||
fragmentIds.add(DRAWER_ITEM_GRADES)
|
fragmentIds.add(DRAWER_ITEM_GRADES)
|
||||||
fragmentIds.add(DRAWER_ITEM_MESSAGES)
|
fragmentIds.add(DRAWER_ITEM_MESSAGES)
|
||||||
|
fragmentIds.add(DRAWER_ITEM_HOMEWORK)
|
||||||
fragmentIds.add(DRAWER_ITEM_BEHAVIOUR)
|
fragmentIds.add(DRAWER_ITEM_BEHAVIOUR)
|
||||||
fragmentIds.add(DRAWER_ITEM_ATTENDANCE)
|
fragmentIds.add(DRAWER_ITEM_ATTENDANCE)
|
||||||
fragmentIds.add(DRAWER_ITEM_ANNOUNCEMENTS)
|
fragmentIds.add(DRAWER_ITEM_ANNOUNCEMENTS)
|
||||||
@ -87,9 +88,7 @@ class ProfileFull : Profile {
|
|||||||
return fragmentIds
|
return fragmentIds
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor() : super() {
|
constructor() : super()
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(profile: Profile, loginStore: LoginStore) {
|
constructor(profile: Profile, loginStore: LoginStore) {
|
||||||
|
|
||||||
@ -122,7 +121,7 @@ class ProfileFull : Profile {
|
|||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(context: Context) : super(context) {}
|
constructor(context: Context) : super(context)
|
||||||
|
|
||||||
fun canChangeLoginPassword(): Boolean {
|
fun canChangeLoginPassword(): Boolean {
|
||||||
return loginStoreType == LOGIN_TYPE_MOBIDZIENNIK || loginStoreType == LOGIN_TYPE_LIBRUS || loginStoreType == LOGIN_TYPE_IUCZNIOWIE
|
return loginStoreType == LOGIN_TYPE_MOBIDZIENNIK || loginStoreType == LOGIN_TYPE_LIBRUS || loginStoreType == LOGIN_TYPE_IUCZNIOWIE
|
||||||
|
@ -52,6 +52,13 @@ interface TimetableDao {
|
|||||||
""")
|
""")
|
||||||
fun getForDate(profileId: Int, date: Date) : LiveData<List<LessonFull>>
|
fun getForDate(profileId: Int, date: Date) : LiveData<List<LessonFull>>
|
||||||
|
|
||||||
|
@Query("""
|
||||||
|
$QUERY
|
||||||
|
WHERE timetable.profileId = :profileId AND ((type != 3 AND date = :date) OR ((type = 3 OR type = 1) AND oldDate = :date))
|
||||||
|
ORDER BY id, type
|
||||||
|
""")
|
||||||
|
fun getForDateNow(profileId: Int, date: Date) : List<LessonFull>
|
||||||
|
|
||||||
@Query("""
|
@Query("""
|
||||||
$QUERY
|
$QUERY
|
||||||
WHERE timetable.profileId = :profileId AND ((type != 3 AND date > :today) OR ((type = 3 OR type = 1) AND oldDate > :today)) AND timetable.subjectId = :subjectId
|
WHERE timetable.profileId = :profileId AND ((type != 3 AND date > :today) OR ((type = 3 OR type = 1) AND oldDate > :today)) AND timetable.subjectId = :subjectId
|
||||||
|
Loading…
x
Reference in New Issue
Block a user