def get_time_navigation_data(self):
        # test
        if 'act_date' in self.request.POST:
            self.act_date = self.request.POST['act_date']

        if 'year' in self.request.POST:
            self.act_date = timezone.make_aware(datetime(year=self.request.POST['year'],
                                                         month=self.request.POST['month'],
                                                         day=1))

        act_date = get_monatserster(self.act_date)
        vormonat_date = shift_month(get_monatserster(self.act_date), step=-1)
        nachmonat_date = shift_month(get_monatserster(self.act_date), step=1)
        monatsliste = {}
        for i in range(1, 13):
            monatsliste[
                datetime(month=i,
                         year=1,
                         day=1).strftime('%m')] = datetime(month=i,
                                                           year=1,
                                                           day=1).strftime('%b')
        jahresliste = []
        for j in range(datetime.now().year + 2, datetime.now().year - 40, -1):
            jahresliste.append(str(j))

        return {
            'act_date': act_date,
            'vormonat_date': vormonat_date,
            'nachmonat_date': nachmonat_date,
            'monatsliste': monatsliste,
            'jahresliste': jahresliste
        }
    def get_table_data(self):
        # TODO optimieren!!!

        start = self.act_date
        ende = get_first_of_next_month(this_month=start)

        # schichten berechnen und in schicht_view_data bzw. summen einsortieren
        self.calc_schichten(start=start, ende=ende)

        # urlaube berechnen und in schicht_view_data bzw. summen einsortieren
        self.calc_urlaube(start=start, ende=ende)

        # au/krank berechnen und in schicht_view_data bzw. summen einsortieren
        self.calc_au(start=start, ende=ende)

        # schichtsammlung durch ergänzung von leeren Tagen zu Kalender konvertieren
        monatsletzter = (shift_month(self.act_date, step=1) -
                         timedelta(days=1)).day
        table_array = {}
        for i in range(1, monatsletzter + 1):
            key = str(i).zfill(2)
            datakey = datetime(year=self.act_date.year,
                               month=self.act_date.month,
                               day=i)
            if key in self.schichten_view_data:
                table_array[datakey] = self.schichten_view_data[key]
            else:
                table_array[datakey] = []

        return table_array
    def sort_schichten_in_templates(self):
        splitted_templates = []
        templates = get_schicht_templates(asn=self.request.user.assistenznehmer, order_by='beginn')
        # Todo Sub-Templates und verschobene Templates
        for template in templates:
            if template.beginn < template.ende:

                splitted_templates.append(
                    {
                        'beginn': template.beginn,
                        'ende': template.ende
                    }
                )
            else:
                splitted_templates.append(
                    {
                        'beginn': template.beginn,
                        'ende': time(0)
                    }
                )
                splitted_templates.append(
                    {
                        'beginn': time(0),
                        'ende': template.ende
                    }
                )
        splitted_templates = sorted(splitted_templates, key=lambda j: j['beginn'])

        start = self.act_date

        # schichtsammlung durch ergänzung von leeren Tagen zu Kalender konvertieren
        end = shift_month(self.act_date, step=1)
        monatsletzter = (end - timedelta(days=1)).day

        schichten = get_sliced_schichten_by_asn(
            start=self.act_date,
            end=end,
            asn=self.request.user.assistenznehmer
        )

        table_array = {}
        for i in range(1, monatsletzter + 1):
            datakey = datetime(year=self.act_date.year, month=self.act_date.month, day=i)
            template_counter = 0
            table_array[datakey] = {}
            for template in splitted_templates:
                temp_beginn = timezone.make_aware(datetime.combine(datakey, template['beginn']))
                if template['ende'] == time(0):
                    temp_ende = timezone.make_aware(
                        datetime.combine(
                            datakey + timedelta(days=1),
                            template['ende']
                        )
                    )
                else:
                    temp_ende = timezone.make_aware(datetime.combine(datakey, template['ende']))
                table_array[datakey][template_counter] = []
                schicht_counter = 0
                for schicht in schichten:
                    # print(temp_beginn)
                    # print(schicht['beginn'])
                    # print(temp_ende)
                    # print(schicht['ende'])
                    # print('--------------------')
                    if schicht['beginn'] == temp_beginn and schicht['ende'] == temp_ende:
                        # Wenn sich mehrere Assistenten um die gleiche Schicht "bewerben",
                        # können mehrere Schichten im selben Template stehen

                        table_array[datakey][template_counter].append(schicht)
                        schichten.remove(schicht)
                        schicht_counter += 1

                if schicht_counter == 0:
                    table_array[datakey][template_counter] = []
                template_counter += 1
        print(schichten)
        print('---hurz-----')

        return splitted_templates, table_array