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