def generate_pdf_dict(): return { 'subscriptions': SubscriptionDao.all_active_subscritions(), 'products': SubscriptionProductDao.get_all(), 'depots': DepotDao.all_depots_order_by_code(), 'weekdays': { weekdays[weekday['weekday']]: weekday['weekday'] for weekday in DepotDao.distinct_weekdays() }, 'messages': ListMessageDao.all_active() }
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) membernotification.depot_changed(emails, subscription.depot) if options['force'] and not options['future']: print('future depots ignored, use --future to override') depot_dict = { 'subscriptions': SubscriptionDao.all_active_subscritions(), 'products': SubscriptionProductDao.get_all_for_depot_list(), 'extra_sub_categories': ExtraSubscriptionCategoryDao.categories_for_depot_list_ordered(), 'depots': DepotDao.all_depots_order_by_code(), 'weekdays': { weekdays[weekday['weekday']]: weekday['weekday'] for weekday in DepotDao.distinct_weekdays() }, 'messages': ListMessageDao.all_active() } render_to_pdf_storage('exports/depotlist.html', depot_dict, 'depotlist.pdf') render_to_pdf_storage('exports/depot_overview.html', depot_dict, 'depot_overview.pdf') render_to_pdf_storage('exports/amount_overview.html', depot_dict, 'amount_overview.pdf')
def depot_overview_direct(request): depot_dict = { 'subscriptions': SubscriptionDao.all_active_subscritions(), 'products': SubscriptionProductDao.get_all_for_depot_list(), 'extra_sub_categories': ExtraSubscriptionCategoryDao.categories_for_depot_list_ordered(), 'depots': DepotDao.all_depots_order_by_code(), 'weekdays': { weekdays[weekday['weekday']]: weekday['weekday'] for weekday in DepotDao.distinct_weekdays() }, 'messages': ListMessageDao.all_active() } return render_to_pdf_http('exports/depot_overview.html', depot_dict, 'depotlist.pdf')
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')
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(): activate_future_depots() if options['force'] and not options['future']: print('future depots ignored, use --future to override') products = [{ 'name': 'Gemüse', 'sizes': [{ 'name': 'Tasche', 'key': 'gmues' }] }, { 'name': 'Obst', 'sizes': [{ 'name': 'Portion', 'key': 'obst' }] }, { 'name': 'Brot', 'sizes': [{ 'name': '500g', 'key': 'brot' }] }, { 'name': 'Eier', 'sizes': [{ 'name': '4er', 'key': 'eier' }] }, { 'name': 'Tofu', 'sizes': [{ 'name': 'Portion', 'key': 'tofu' }] }] gmues_types = SubscriptionType.objects.filter( pk__in=[6, 7, 8, 9, 10, 11, 12, 13, 18]) obst_types = SubscriptionType.objects.filter(pk__in=[ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22 ]) brot_types = SubscriptionType.objects.filter( pk__in=[8, 9, 12, 13, 16, 17, 19, 20]) tofu_types = ExtraSubscriptionType.objects.filter(pk__in=[11]) eier_types = ExtraSubscriptionType.objects.filter(pk__in=[1]) now = dateformat.format(timezone.now(), 'Y-m-d') subs = SubscriptionDao.all_active_subscritions(). \ annotate(gmues=Count('parts', filter=Q(parts__type__in=gmues_types) & Q( parts__activation_date__lte=now) & (Q( parts__deactivation_date__isnull=True) | Q(parts__deactivation_date__gte=now)), distinct=True)). \ annotate(obst=Count('parts', filter=Q(parts__type__in=obst_types) & Q(parts__activation_date__lte=now) & (Q( parts__deactivation_date__isnull=True) | Q(parts__deactivation_date__gte=now)), distinct=True)). \ annotate(brot=Count('parts', filter=Q(parts__type__in=brot_types) & Q(parts__activation_date__lte=now) & (Q( parts__deactivation_date__isnull=True) | Q( parts__deactivation_date__gte=now)), distinct=True)). \ annotate(tofu=Count('extra_subscription_set', filter=Q(extra_subscription_set__type__in=tofu_types) & Q( extra_subscription_set__activation_date__lte=now) & (Q( extra_subscription_set__deactivation_date__isnull=True) | Q( extra_subscription_set__deactivation_date__gte=now)), distinct=True)). \ annotate(eier=Count('extra_subscription_set', filter=Q(extra_subscription_set__type__in=eier_types) & Q( extra_subscription_set__activation_date__lte=now) & (Q( extra_subscription_set__deactivation_date__isnull=True) | Q( extra_subscription_set__deactivation_date__gte=now)), distinct=True)) depots = DepotDao.all_depots_order_by_code().prefetch_related('subscription_set'). \ annotate( gmues=Count('subscription_set__parts', filter=Q(subscription_set__parts__type__in=gmues_types) & Q( subscription_set__parts__activation_date__lte=now) & (Q( subscription_set__parts__deactivation_date__isnull=True) | Q( subscription_set__parts__deactivation_date__gte=now)), distinct=True)). \ annotate( obst=Count('subscription_set__parts', filter=Q(subscription_set__parts__type__in=obst_types) & Q( subscription_set__parts__activation_date__lte=now) & (Q( subscription_set__parts__deactivation_date__isnull=True) | Q( subscription_set__parts__deactivation_date__gte=now)), distinct=True)). \ annotate( brot=Count('subscription_set__parts', filter=Q(subscription_set__parts__type__in=brot_types) & Q( subscription_set__parts__activation_date__lte=now) & (Q( subscription_set__parts__deactivation_date__isnull=True) | Q( subscription_set__parts__deactivation_date__gte=now)), distinct=True)). \ annotate(tofu=Count('subscription_set__extra_subscription_set', filter=Q(subscription_set__extra_subscription_set__type__in=tofu_types) & Q( subscription_set__extra_subscription_set__activation_date__lte=now) & (Q( subscription_set__extra_subscription_set__deactivation_date__isnull=True) | Q( subscription_set__extra_subscription_set__deactivation_date__gte=now)), distinct=True)). \ annotate(eier=Count('subscription_set__extra_subscription_set', filter=Q(subscription_set__extra_subscription_set__type__in=eier_types) & Q( subscription_set__extra_subscription_set__activation_date__lte=now) & (Q( subscription_set__extra_subscription_set__deactivation_date__isnull=True) | Q( subscription_set__extra_subscription_set__deactivation_date__gte=now)), distinct=True)) days = Depot.objects.all().prefetch_related('subscription_set'). \ values('weekday').order_by('weekday'). \ annotate( gmues=Count('subscription_set__parts', filter=Q(subscription_set__parts__type__in=gmues_types) & Q( subscription_set__parts__activation_date__lte=now) & (Q( subscription_set__parts__deactivation_date__isnull=True) | Q( subscription_set__parts__deactivation_date__gte=now)), distinct=True)). \ annotate( obst=Count('subscription_set__parts', filter=Q(subscription_set__parts__type__in=obst_types) & Q( subscription_set__parts__activation_date__lte=now) & (Q( subscription_set__parts__deactivation_date__isnull=True) | Q( subscription_set__parts__deactivation_date__gte=now)), distinct=True)). \ annotate( brot=Count('subscription_set__parts', filter=Q(subscription_set__parts__type__in=brot_types) & Q( subscription_set__parts__activation_date__lte=now) & (Q( subscription_set__parts__deactivation_date__isnull=True) | Q( subscription_set__parts__deactivation_date__gte=now)), distinct=True)). \ annotate(tofu=Count('subscription_set__extra_subscription_set', filter=Q(subscription_set__extra_subscription_set__type__in=tofu_types) & Q( subscription_set__extra_subscription_set__activation_date__lte=now) & (Q( subscription_set__extra_subscription_set__deactivation_date__isnull=True) | Q( subscription_set__extra_subscription_set__deactivation_date__gte=now)), distinct=True)). \ annotate(eier=Count('subscription_set__extra_subscription_set', filter=Q(subscription_set__extra_subscription_set__type__in=eier_types) & Q( subscription_set__extra_subscription_set__activation_date__lte=now) & (Q( subscription_set__extra_subscription_set__deactivation_date__isnull=True) | Q( subscription_set__extra_subscription_set__deactivation_date__gte=now)), distinct=True)) for day in days: day['name'] = weekdays[day['weekday']] for product in products: for size in product['sizes']: total = 0 for day in days: total += day[size['key']] size['total'] = total depot_dict = { 'weekdays': days, 'depots': depots, 'products': products, 'subscriptions': subs, 'messages': ListMessageDao.all_active(), } render_to_pdf_storage('exports_oooo/depotlist.html', depot_dict, 'depotlist.pdf') render_to_pdf_storage('exports_oooo/depot_overview.html', depot_dict, 'depot_overview.pdf') render_to_pdf_storage('exports_oooo/amount_overview.html', depot_dict, 'amount_overview.pdf') # cleanup files from preview runs legacy_files = [ 'depotlist_pre.pdf', 'depot_overview_pre.pdf', 'amount_overview_pre.pdf' ] for file in legacy_files: if default_storage.exists(file): default_storage.delete(file)