コード例 #1
0
ファイル: depot.py プロジェクト: olmaga/juntagrico
 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))
コード例 #2
0
 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)
コード例 #3
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')