Пример #1
0
 def total_amount(self):
     return self.credit_set.aggregate(total=models.Sum('amount'))['total']
Пример #2
0
 def rating(self):
     rating_aggregation_result = self.actions.aggregate(
         rating=models.Sum("action"))["rating"]
     rating = rating_aggregation_result if rating_aggregation_result is not None else 0
     return rating
Пример #3
0
    def attendee_total(self):
        total = self.atriaeventattendance_set\
                .filter(attendance_type__attendance_type='Attendee')\
                .aggregate(sum=models.Sum('user_count'))['sum']

        return total if total else 0
Пример #4
0
 def donation_balance(self) -> Decimal:
     return self.donations.aggregate(donations=models.Sum('amount'))['donations'] or Decimal('0.00')
Пример #5
0
    def set_metric_values(self, metric_name, column_name,
                          requests, service, **metric_values):
        metric = Metric.get_for(metric_name, service=service)

        def _key(v):
            return v['value']

        # we need list of three items:
        #  * value - numeric value for given metric
        #  * label - label value to be used
        #  * samples count - number of samples for a metric
        if metric.is_rate:
            row = requests.aggregate(value=models.Avg(column_name))
            row['samples'] = requests.count()
            row['label'] = Metric.TYPE_RATE
            q = [row]
        elif metric.is_count:
            q = []
            values = requests.distinct(
                column_name).values_list(column_name, flat=True)
            for v in values:
                rqs = requests.filter(**{column_name: v})
                row = rqs.aggregate(
                    value=models.Sum(column_name),
                    samples=models.Count(column_name)
                )
                row['label'] = v
                q.append(row)
            q.sort(key=_key)
            q.reverse()
        elif metric.is_value:
            q = []
            is_user_metric = column_name == "user_identifier"
            if is_user_metric:
                values = requests.distinct(
                    column_name).values_list(column_name, "user_username")
            else:
                values = requests.distinct(
                    column_name).values_list(column_name, flat=True)
            for v in values:
                if v is not None:
                    value = v
                    if is_user_metric:
                        value = v[0]
                    rqs = requests.filter(**{column_name: value})
                    row = rqs.aggregate(
                        value=models.Count(column_name),
                        samples=models.Count(column_name)
                    )
                    row['label'] = v
                    q.append(row)
            q.sort(key=_key)
            q.reverse()
        elif metric.is_value_numeric:
            q = []
            row = requests.aggregate(value=models.Max(column_name),
                                     samples=models.Count(column_name))
            row['label'] = Metric.TYPE_VALUE_NUMERIC
            q.append(row)
        else:
            raise ValueError("Unsupported metric type: {}".format(metric.type))
        rows = q[:100]
        metric_values.update({'metric': metric_name, 'service': service})
        for row in rows:
            label = row['label']
            value = row['value']
            samples = row['samples']
            metric_values.update({'value': value or 0,
                                  'label': label,
                                  'samples_count': samples,
                                  'value_raw': value or 0,
                                  'value_num': value if isinstance(value, (float, Decimal, int)) else None})
            log.debug(MetricValue.add(**metric_values))
Пример #6
0
 def for_public_display(self):
     objs = self.get_queryset().filter(
         invoice__expiration_date__gte=timezone_today(), ).annotate(
             donated_amount=models.Sum('invoice__amount'))
     return objs.order_by('-donated_amount', 'display_name')
Пример #7
0
def generate_donation_receipt(member, year):
    fees = member.fee_payments.filter(
        transaction__value_datetime__year=year).aggregate(
            fees=models.Sum('amount'))['fees'] or Decimal('0.00')
    donations = member.donations.filter(
        transaction__value_datetime__year=year).aggregate(
            donations=models.Sum('amount'))['donations'] or Decimal('0.00')
    address = "{}\n{}".format(member.name, member.address)
    if (donations + fees) <= 0:
        raise Exception('No donations or fees for {year}.'.format(year=year))

    story = []
    _buffer = BytesIO()
    local_settings = GemeinnuetzigkeitConfiguration.get_solo()
    global_settings = Configuration.get_solo()
    doc = get_default_document(_buffer)
    style = get_paragraph_style()

    # Header
    our_address = '\n'.join([global_settings.name,
                             global_settings.address]).replace('\n', '<br />')
    our_address = Paragraph(our_address, style['Normal'])
    our_title = Paragraph('Aussteller (Steuerbegünstigte Einrichtung)',
                          style['Heading5'])
    story.append(
        Table(
            [[
                our_title,
            ], [
                our_address,
            ]],
            colWidths=[doc.width * 1],
            hAlign='LEFT',
            style=TableStyle([
                ('ALIGN', (0, 0), (0, 0), 'CENTER'),
                ('BOX', (0, 0), (0, 1), 0.5, colors.black),
            ]),
        ))
    story.append(
        Paragraph('Bestätigung über Geldzuwendungen/Mitgliedsbeitrag',
                  style['Heading3']))
    story.append(
        Paragraph(
            'im Sinne des § 10b des Einkommenssteuergesetzes an eine der in § 5 Abs. 1 Nr. 9 des Körperschaftssteuergesetzes bezeichneten Körperschaften, Personenvereinigungen oder Vermögensmassen',
            style['Normal']))
    story.append(Spacer(1, 5 * mm))

    their_address = address.replace('\n', '<br />')
    their_address = Paragraph(their_address, style['Normal'])
    their_title = Paragraph('Name und Anschrift des Zuwendenden',
                            style['Heading5'])
    story.append(
        Table(
            [[their_title], [their_address]],
            colWidths=[doc.width * 1],
            style=TableStyle([
                ('ALIGN', (0, 0), (0, 0), 'CENTER'),
                ('BOX', (0, 0), (0, 1), 0.5, colors.black),
            ]),
        ))
    story.append(Spacer(1, 5 * mm))

    data = [
        [_('Product'), _('Tax rate'),
         _('Net'), _('Gross')],
    ]
    data = [['Art', 'in Ziffern', 'in Buchstaben', 'Datum']]
    if fees:
        data.append([
            'Beiträge',
            CURRENCY.format(fees),
            lib_num2words(fees, lang='de'), year
        ])
    if donations:
        data.append([
            'Spenden',
            CURRENCY.format(donations),
            lib_num2words(donations, lang='de'), year
        ])
    last_row = len(data) - 1

    story.append(
        Table(
            data=data,
            colWidths=[
                doc.width * 0.15, doc.width * 0.15, doc.width * 0.5,
                doc.width * 0.2
            ],
            style=TableStyle([
                ('FONTSIZE', (0, 0), (3, last_row), FONTSIZE),
                ('ALIGN', (0, 0), (1, last_row), 'LEFT'),
                ('ALIGN', (3, 0), (3, last_row), 'RIGHT'),
                ('BOX', (0, 0), (3, last_row), 1.0, colors.black),
                ('GRID', (0, 0), (3, last_row), 0.5, colors.black),
            ]),
        ))
    story.append(Spacer(1, 5 * mm))

    story.append(
        Paragraph(
            'Es handelt sich NICHT um den Verzicht auf Erstattung von Aufwendungen.',
            style['Normal']))
    story.append(Spacer(1, 5 * mm))
    loong = 'Wir sind wegen Förderung {zwecke} nach dem Freistellungsbescheid bzw. nach der Anlage zum Körperschaftssteuerbescheid des Finanzamts {amt} StNr. {nummer} vom {datum} für den letzten Veranlagungszeitraum {zeitraum} nach § 5 Abs. 1 Nr. 9 des Körperschaftssteuergesetzes von der Körperschaftssteuer und nach § 3 Nr. 6 des Gewerbesteuergesetzes von der Gewerbesteuer befreit.'
    loong = loong.format(
        zwecke=local_settings.reason,
        amt=local_settings.finanzamt,
        nummer=local_settings.vat_id,
        datum=local_settings.notification_date,
        zeitraum=local_settings.veranlagungszeitraum,
    )
    story.append(Paragraph(loong, style['Normal']))
    story.append(Spacer(1, 5 * mm))
    story.append(
        Table(
            [[
                Paragraph(
                    'Es wird bestätigt, dass die Zuwendung nur zur Förderung {zwecke} verwendet wird.'
                    .format(zwecke=local_settings.reason), style['Normal'])
            ]],
            colWidths=[doc.width * 1],
            style=TableStyle([
                ('ALIGN', (0, 0), (0, 0), 'CENTER'),
                ('BOX', (0, 0), (0, 0), 0.5, colors.black),
            ]),
        ))

    story.append(Spacer(1, 25 * mm))
    data = [[
        '{location}, {date}'.format(location=local_settings.location,
                                    date=formats.date_format(now().date(),
                                                             use_l10n=True))
    ], ['(Ort, Datum, und Unterschrift des Zuwendungsempfängers)']]
    story.append(
        Table(
            data=data,
            colWidths=[doc.width],
            style=TableStyle([
                ('LINEABOVE', (0, 1), (0, 1), 1.0, colors.black),
            ]),
        ))

    story.append(Spacer(1, 5 * mm))
    disclaimer1 = 'Wer vorsätzlich oder grob fahrlässig eine unrichtige Zuwendungsbestätigung erstellt oder wer veranlasst, dass Zuwendungen nicht zu den in der Zuwendungsbestätigung angegebenen steuerbegünstigten Zwecken verwendet werden, haftet für die Steuer, die dem Fiskus durch einen etwaigen Abzug der Zuwendungen beim Zuwendenden entgeht (§10b Abs. 4 EStG, §9 Abs. 3 KStG, §9 Nr. 5 GewStG).'
    disclaimer2 = 'Diese Bestätigung wird nicht als Nachweis für die steuerliche Berücksichtigung der Zuwendung anerkannt, wenn das Datum des Freistellungsbescheides länger als 5 Jahre bzw. das Datum der vorläufigen Bescheinigung länger als 3 Jahre seit Ausstellung der Bestätigung zurückliegt (BMF vom 15.12.1994 – BStBl I S. 884).'
    story.append(Paragraph('Hinweis', style['Heading5']))
    story.append(Paragraph(disclaimer1, style['Normal']))
    story.append(Paragraph(disclaimer2, style['Normal']))

    doc.build(story)
    _buffer.seek(0)
    doc = Document.objects.create(
        title='Zuwendungsbestätigung {}'.format(year),
        category=DOCUMENT_CATEGORY,
        member=member,
    )
    doc.document.save(
        'spenden/spenden_{}_{}_{}.pdf'.format(year, member.number,
                                              member.name),
        ContentFile(_buffer.read()))
    doc.save()
    return doc
Пример #8
0
 def total_products(self):
     return (self.products.aggregate(
         quantity=models.Sum("quantity"))["quantity"] or 0)
Пример #9
0
 def calculate_capital(self):
     capital = self.ruble_set.aggregate(nominal=models.Sum("nominal"))
     return capital.get('nominal') or 0
Пример #10
0
def aggregate_sum(field, qs):
    return qs.aggregate(total=Coalesce(models.Sum(field), 0))
Пример #11
0
 def get_payed_membership_fee(self, year):
     sum_fee = AccountTransaction.objects \
         .filter(member=self, due_date__year=year, transaction_type='membership fee') \
         .filter(Q(booking_type='deposit') | Q(booking_type='charge back')) \
         .aggregate(models.Sum('amount')).get('amount__sum') or 0
     return sum_fee
Пример #12
0
 def points(self):
     result = self.postlike_set.all().aggregate(
         sum=models.Sum('points'))['sum']
     return result or 0
Пример #13
0
 def donation_balance(self) -> Decimal:
     return self.donations.aggregate(
         donations=models.Sum("amount"))["donations"] or Decimal("0.00")
Пример #14
0
 def value(self):
     v = self.queueitemvote_set.aggregate(models.Sum('value'))["value__sum"]
     if v:
         return v
     else:
         return 0
Пример #15
0
 def sum(self):
     """
     Calculate the sum of transactions in the query set.
     """
     return self.aggregate(
         sum=models.Sum('amount'))['sum'] or Decimal('0.00')
Пример #16
0
 def duration(self):
     sum_ = self.timetable_entries.aggregate(
         sum=models.Sum('duration'))['sum']
     return sum_ or timedelta()
Пример #17
0
 def sum(self):
     """
     Calculate the sum of account balances in the query set.
     """
     return self.aggregate(
         sum=models.Sum('balance'))['sum'] or Decimal('0.00')
Пример #18
0
 def _get_start_for_index(self, index):
     offset = (self.timetable_entries.filter(
         timetable_index__lt=index).aggregate(
             sum=models.Sum('duration'))['sum'])
     return self.start + (offset or timedelta())
Пример #19
0
 def length(self):
     """The total length of all the lessons"""
     return self.lessons.all().aggregate(
         sum=models.Sum('length'))['sum'] or 0
Пример #20
0
 def total_redirecciones(self):
     return self.aggregate(redirecciones=models.Sum('contador'))
Пример #21
0
 def total(self):
     return self.categories.aggregate(
         total=models.Sum('planned_spending')
     ).get('total')
Пример #22
0
 def fechas(self, pk):
     return self.values('fecha').annotate(julio=models.Sum(
         'contador',
         filter=models.Q(fecha__gte=datetime.date(2019, 7, 1),
                         fecha__lte=datetime.date(2019, 7, 31)))).filter(
                             pk=pk)
Пример #23
0
 def paid_totals_for(self, year, month):
     """
     Return paid Transfers during a certain year, month with total amounts annotated.
     """
     return self.during(year, month).aggregate(total_amount=models.Sum("amount"))
Пример #24
0
 def amount_donated(self):
     return self.order_set.filter(
         status=StatusDefinition.SUCCESS
     ).aggregate(
         amount_donated=models.Sum('total')
     )['amount_donated']
Пример #25
0
 def total_points(self):
     return self.parts.aggregate(total=models.Sum("points"))['total'] or 0
Пример #26
0
 def warcs_count(self):
     """
     Returns total number of WARC files harvested for this collection.
     """
     return Harvest.objects.filter(collection=self).aggregate(
         count=models.Sum("warcs_count"))["count"] or 0
Пример #27
0
 def get_num_user_applications(self, user):
     OrderDiscount = get_model('order', 'OrderDiscount')
     aggregates = OrderDiscount.objects.filter(offer_id=self.id,
                                               order__user=user)\
         .aggregate(total=models.Sum('frequency'))
     return aggregates['total'] if aggregates['total'] is not None else 0
Пример #28
0
 def warcs_bytes(self):
     """
     Returns total number of WARC bytes harvested for this collection.
     """
     return Harvest.objects.filter(collection=self).aggregate(
         total=models.Sum("warcs_bytes"))["total"]
Пример #29
0
 def amount_repaid(self):
     """
     :return: the current amount of money repaid by the project to RE-volv.
     """
     return self.adminrepayment_set.aggregate(
         models.Sum('amount'))["amount__sum"] or 0.0
Пример #30
0
 def balance(self) -> Decimal:
     config = Configuration.get_solo()
     cutoff = now() - relativedelta(months=config.liability_interval)
     qs = self.transactions.filter(value_datetime__lte=now(), value_datetime__gte=cutoff)
     liability = qs.filter(source_account__account_category='member_fees').aggregate(liability=models.Sum('amount'))['liability'] or Decimal('0.00')
     asset = qs.filter(destination_account__account_category='member_fees').aggregate(asset=models.Sum('amount'))['asset'] or Decimal('0.00')
     return asset - liability