예제 #1
0
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()
    }
예제 #2
0
    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')
예제 #3
0
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')
예제 #4
0
    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')
예제 #5
0
    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)