Esempio n. 1
0
 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
Esempio n. 2
0
 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