diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Constants.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Constants.kt index ef594568..3c2cc86e 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Constants.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Constants.kt @@ -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_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_HOMEWORK = "mod_panelRodzica/pracaDomowa/WS_pracaDomowa.asmx/pobierzPraceDomowe" 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_ANNOUNCEMENTS = "mod_panelRodzica/tabOgl/WS_tablicaOgloszen.asmx/GetOgloszenia" diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/IdziennikFeatures.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/IdziennikFeatures.kt index c83c9690..f57a4bb9 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/IdziennikFeatures.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/IdziennikFeatures.kt @@ -11,6 +11,7 @@ const val ENDPOINT_IDZIENNIK_WEB_TIMETABLE = 1030 const val ENDPOINT_IDZIENNIK_WEB_GRADES = 1040 const val ENDPOINT_IDZIENNIK_WEB_PROPOSED_GRADES = 1050 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_ANNOUNCEMENTS = 1080 const val ENDPOINT_IDZIENNIK_WEB_ATTENDANCE = 1090 @@ -34,6 +35,10 @@ val IdziennikFeatures = listOf( ENDPOINT_IDZIENNIK_WEB_EXAMS to 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( ENDPOINT_IDZIENNIK_WEB_NOTICES to LOGIN_METHOD_IDZIENNIK_WEB ), listOf(LOGIN_METHOD_IDZIENNIK_WEB)), diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/IdziennikData.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/IdziennikData.kt index 64064a83..c1a7ef8f 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/IdziennikData.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/IdziennikData.kt @@ -55,6 +55,10 @@ class IdziennikData(val data: DataIdziennik, val onSuccess: () -> Unit) { data.startProgress(R.string.edziennik_progress_endpoint_exams) IdziennikWebExams(data, onSuccess) } + ENDPOINT_IDZIENNIK_WEB_HOMEWORK -> { + data.startProgress(R.string.edziennik_progress_endpoint_homework) + IdziennikWebHomework(data, onSuccess) + } ENDPOINT_IDZIENNIK_WEB_NOTICES -> { data.startProgress(R.string.edziennik_progress_endpoint_notices) IdziennikWebNotices(data, onSuccess) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/IdziennikWeb.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/IdziennikWeb.kt index 2bae8843..5485e951 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/IdziennikWeb.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/IdziennikWeb.kt @@ -94,6 +94,7 @@ open class IdziennikWeb(open val data: DataIdziennik) { is Long -> json.addProperty(name, value) is Float -> json.addProperty(name, value) is Char -> json.addProperty(name, value) + is Boolean -> json.addProperty(name, value) } } setJsonBody(json) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebExams.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebExams.kt index 7e818653..01b31ad0 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebExams.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebExams.kt @@ -5,6 +5,7 @@ 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_EXAMS import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik @@ -14,13 +15,11 @@ 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.lessons.Lesson import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata -import pl.szczodrzynski.edziennik.getJsonObject import pl.szczodrzynski.edziennik.utils.models.Date class IdziennikWebExams(override val data: DataIdziennik, - val onSuccess: () -> Unit) : IdziennikWeb(data) { + val onSuccess: () -> Unit) : IdziennikWeb(data) { companion object { private const val TAG = "IdziennikWebExams" } @@ -57,28 +56,33 @@ class IdziennikWebExams(override val data: DataIdziennik, return@webApiGet } - for (jExamEl in json.getAsJsonArray("ListK")) { - val jExam = jExamEl.asJsonObject - // jExam - val eventId = jExam.get("_recordId").asLong - val rSubject = data.getSubject(jExam.get("przedmiot").asString, -1, "") - val rTeacher = data.getTeacherByLastFirst(jExam.get("wpisal").asString) - val examDate = Date.fromY_m_d(jExam.get("data").asString) - val lessonObject = Lesson.getByWeekDayAndSubject(data.lessonList, examDate.weekDay, rSubject.id) - val examTime = lessonObject?.startTime + json.getJsonArray("ListK")?.asJsonObjectList()?.forEach { exam -> + val id = exam.getLong("_recordId") ?: return@forEach + val examDate = Date.fromY_m_d(exam.getString("data") ?: return@forEach) + val subjectId = data.getSubject(exam.getString("przedmiot") ?: return@forEach, + -1, "").id + val teacherId = data.getTeacherByLastFirst(exam.getString("wpisal") + ?: return@forEach).id + val lessonList = data.db.timetableDao().getForDateNow(profileId, examDate) + 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( profileId, - eventId, + id, examDate, - examTime, - jExam.get("zakres").asString, + startTime, + topic, -1, eventType, false, - rTeacher.id, - rSubject.id, + teacherId, + subjectId, data.teamClass?.id ?: -1 ) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebHomework.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebHomework.kt new file mode 100644 index 00000000..d749cea5 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebHomework.kt @@ -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() + } + } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/profiles/ProfileFull.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/profiles/ProfileFull.kt index ceb88413..a88d5e66 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/profiles/ProfileFull.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/profiles/ProfileFull.kt @@ -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_ANNOUNCEMENTS 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_HOMEWORK 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.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_GRADES) fragmentIds.add(DRAWER_ITEM_MESSAGES) + fragmentIds.add(DRAWER_ITEM_HOMEWORK) fragmentIds.add(DRAWER_ITEM_BEHAVIOUR) fragmentIds.add(DRAWER_ITEM_ATTENDANCE) fragmentIds.add(DRAWER_ITEM_ANNOUNCEMENTS) @@ -87,9 +88,7 @@ class ProfileFull : Profile { return fragmentIds } - constructor() : super() { - - } + constructor() : super() 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 { return loginStoreType == LOGIN_TYPE_MOBIDZIENNIK || loginStoreType == LOGIN_TYPE_LIBRUS || loginStoreType == LOGIN_TYPE_IUCZNIOWIE diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/timetable/TimetableDao.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/timetable/TimetableDao.kt index 251e65c8..540fdc49 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/timetable/TimetableDao.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/timetable/TimetableDao.kt @@ -52,6 +52,13 @@ interface TimetableDao { """) fun getForDate(profileId: Int, date: Date) : LiveData> + @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 + @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