def fill_overview_cache(self): self.fill_active_subscription_cache() self.overview_cache = [] for subscription_size in SubscriptionSizeDao.sizes_for_depot_list(): self.overview_cache.append(self.subscription_amounts(self.subscription_cache, subscription_size.name)) for category in ExtraSubscriptionCategoryDao.all_categories_ordered(): for extra_subscription in ExtraSubscriptionTypeDao.extra_types_by_category_ordered(category): code = extra_subscription.name self.overview_cache.append(self.extra_subscription(self.subscription_cache, code))
def fill_overview_cache(self): self.fill_active_subscription_cache() self.overview_cache = [] for subscription_size in SubscriptionSizeDao.sizes_for_depot_list(): cache = self.subscription_cache size_name = subscription_size.name amounts = self.subscription_amounts(cache, size_name) self.overview_cache.append(amounts) for category in ExtraSubscriptionCategoryDao.all_categories_ordered(): types = ExtraSubscriptionTypeDao.extra_types_by_category_ordered( category) for extra_subscription in types: code = extra_subscription.name cache = self.subscription_cache esub = self.extra_subscription(cache, code) self.overview_cache.append(esub)
def handle(self, *args, **options): if not options['force'] and timezone.now().weekday( ) not in Config.depot_list_generation_days(): print( 'not the specified day for depot list generation, use --force to override' ) return if options['future'] or timezone.now().weekday( ) in Config.depot_list_generation_days(): for subscription in SubscriptionDao.subscritions_with_future_depots( ): subscription.depot = subscription.future_depot subscription.future_depot = None subscription.save() emails = [] for member in subscription.recipients(): emails.append(member.email) send_depot_changed(emails, subscription.depot) if options['force'] and not options['future']: print('future depots ignored, use --future to override') depots = DepotDao.all_depots_order_by_code() subscription_names = [] for subscription_size in SubscriptionSizeDao.sizes_for_depot_list(): subscription_names.append(subscription_size.name) categories = [] types = [] for category in ExtraSubscriptionCategoryDao.all_categories_ordered(): cat = {'name': category.name, 'description': category.description} count = 0 for extra_subscription in ExtraSubscriptionTypeDao.extra_types_by_category_ordered( category): count += 1 type = { 'name': extra_subscription.name, 'size': extra_subscription.size, 'last': False } types.append(type) type['last'] = True cat['count'] = count categories.append(cat) used_weekdays = [] for item in DepotDao.distinct_weekdays(): used_weekdays.append(weekdays[item['weekday']]) overview = {'all': None} for weekday in used_weekdays: overview[weekday] = None count = len(types) + len(subscription_names) for weekday in used_weekdays: overview[weekday] = [0] * count overview['all'] = [0] * count all = overview.get('all') for depot in depots: depot.fill_overview_cache() depot.fill_active_subscription_cache() row = overview.get(depot.get_weekday_display()) count = 0 # noinspection PyTypeChecker while count < len(row): row[count] += depot.overview_cache[count] all[count] += depot.overview_cache[count] count += 1 insert_point = len(subscription_names) for weekday in used_weekdays: overview[weekday].insert(insert_point, 0) overview['all'].insert(insert_point, 0) index = 0 for subscription_size in SubscriptionSizeDao.sizes_for_depot_list(): for weekday in used_weekdays: overview[weekday][insert_point] = overview[weekday][insert_point] + subscription_size.size * \ overview[weekday][index] overview['all'][insert_point] = overview['all'][ insert_point] + subscription_size.size * overview['all'][index] index += 1 renderdict = { 'overview': overview, 'depots': depots, 'subscription_names': subscription_names, 'subscriptioncount': len(subscription_names) + 1, 'categories': categories, 'types': types, 'datum': timezone.now(), 'weekdays': used_weekdays } render_to_pdf_storage('exports/legacy.html', renderdict, 'dpl.pdf') render_to_pdf_storage('exports/depotlist.html', renderdict, 'depotlist.pdf') render_to_pdf_storage('exports/depot_overview.html', renderdict, 'depot_overview.pdf') render_to_pdf_storage('exports/amount_overview.html', renderdict, 'amount_overview.pdf')