def get_number(obj: Lecture) -> Union[int, str, None]: """ Vypočítá pořadové číslo lekce. Pokud se jedná o předplacenou lekci, vrátí None. Pokud se nedá číslo dopočítat kvůli chybějícímu výchozímu stavu účasti, vrátí upozornění. """ # vrat null pokud se jedna o predplacenou lekci if obj.start is None: return None # proved jednoduchy vypocet poradoveho cisla pro skupinu if obj.group is not None: prev_lectures_cnt = Lecture.objects.filter( group=obj.group, start__isnull=False, start__lt=obj.start, canceled=False ).count() else: # proved vypocet poradoveho cisla pro jednotlivce try: # je potreba najit vychozi stav attendancestate_default_pk = LectureHelpers.find_default_state() except ObjectDoesNotExist: # pokud neni vychozi stav zvoleny, vrat misto toho upozorneni return LectureHelpers.DEFAULT_STATE_MISSING prev_lectures_cnt = Attendance.objects.filter( client=obj.attendances.get().client_id, lecture__course=obj.course, lecture__start__isnull=False, lecture__group__isnull=True, lecture__start__lt=obj.start, lecture__canceled=False, attendancestate=attendancestate_default_pk, ).count() # vrat poradove cislo aktualni lekce (tedy +1 k poctu minulych lekci) return prev_lectures_cnt + 1
def get_number(obj: Attendance) -> Union[int, str, None]: """ Vypočítá pořadové číslo lekce pro daného klienta skupiny. Pro jednotlivce se pole nezobrazuje, tedy neni treba nic pocitat. Pokud se nedá číslo dopočítat kvůli chybějícímu výchozímu stavu účasti, vrátí upozornění. """ # pro lekce jednotlivcu pole neukazujeme, tedy nic neni treba pocitat if not obj.lecture.group: return None # proved vypocet poradoveho cisla pro ucastnika skupinove lekce try: # je potreba najit vychozi stav attendancestate_default_pk = LectureHelpers.find_default_state() except ObjectDoesNotExist: # pokud neni vychozi stav zvoleny, vrat misto toho upozorneni return LectureHelpers.DEFAULT_STATE_MISSING prev_lectures_cnt = Attendance.objects.filter( client=obj.client, lecture__course=obj.lecture.course, lecture__group=obj.lecture.group, lecture__start__lt=obj.lecture.start, lecture__canceled=False, attendancestate=attendancestate_default_pk, ).count() # vrat poradove cislo aktualni lekce (tedy +1 k poctu minulych lekci) return prev_lectures_cnt + 1