def update(self, instance: Attendance, validated_data: dict) -> Attendance: """ Upraví účast a provede další nutné transformace dat. """ attendancestate_old = instance.attendancestate canceled_old = instance.lecture.canceled # uprava instance ucasti instance = super().update(instance, validated_data) # proved korekce poctu predplacenych lekci LectureHelpers.lecture_corrections(instance.lecture, instance, canceled_old, attendancestate_old) # nastav lekci jako zrusenou pokud nikdo nema prijit LectureHelpers.cancel_lecture_if_nobody_arrives(instance.lecture) return instance
def update(self, instance: Lecture, validated_data: dict) -> Lecture: # type: ignore """ Upraví lekci a k ní příslušející účasti klientů, provede další nutné transformace. """ canceled_old = instance.canceled attendances_data = validated_data.pop("attendances", None) # uprava instance lekce instance = super().update(instance, validated_data) # pokud nejsou zaslany ucasti, update konci if not attendances_data: return instance # upravy jednotlivych ucasti attendances = instance.attendances.all() refresh_clients = validated_data["refresh_clients"] for attendance_data in attendances_data: # najdi prislusnou ucast attendance = attendances.get(pk=attendance_data["id"]) # projeveni zmen klientu skupiny (smazani ucasti) if instance.group and refresh_clients: # pokud ucastnik uz neni clenem skupiny, smaz jeho ucast a prejdi na dalsiho ucastnika try: instance.group.memberships.get(client=attendance.client) except ObjectDoesNotExist: attendance.delete() continue # jedna se stale o clena skupiny (nebo neni pozadovano projeveni zmen klientu), proved prislusne upravy attendancestate_old = attendance.attendancestate # uprava ucasti attendance = super().update(attendance, attendance_data) # proved korekce poctu predplacenych lekci LectureHelpers.lecture_corrections(instance, attendance, canceled_old, attendancestate_old) # projeveni zmen klientu skupiny (pridani ucasti) if instance.group and refresh_clients: LectureHelpers.refresh_clients_add(instance, attendances_data) # nastav lekci jako zrusenou pokud nikdo nema prijit LectureHelpers.cancel_lecture_if_nobody_arrives(instance) return instance