Ejemplo n.º 1
0
 def total_amount(self):
     return self.credit_set.aggregate(total=models.Sum('amount'))['total']
Ejemplo n.º 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
Ejemplo n.º 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
Ejemplo n.º 4
0
 def donation_balance(self) -> Decimal:
     return self.donations.aggregate(donations=models.Sum('amount'))['donations'] or Decimal('0.00')
Ejemplo n.º 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))
Ejemplo n.º 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')
Ejemplo n.º 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
Ejemplo n.º 8
0
 def total_products(self):
     return (self.products.aggregate(
         quantity=models.Sum("quantity"))["quantity"] or 0)
Ejemplo n.º 9
0
 def calculate_capital(self):
     capital = self.ruble_set.aggregate(nominal=models.Sum("nominal"))
     return capital.get('nominal') or 0
Ejemplo n.º 10
0
def aggregate_sum(field, qs):
    return qs.aggregate(total=Coalesce(models.Sum(field), 0))
Ejemplo n.º 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
Ejemplo n.º 12
0
 def points(self):
     result = self.postlike_set.all().aggregate(
         sum=models.Sum('points'))['sum']
     return result or 0
Ejemplo n.º 13
0
 def donation_balance(self) -> Decimal:
     return self.donations.aggregate(
         donations=models.Sum("amount"))["donations"] or Decimal("0.00")
Ejemplo n.º 14
0
 def value(self):
     v = self.queueitemvote_set.aggregate(models.Sum('value'))["value__sum"]
     if v:
         return v
     else:
         return 0
Ejemplo n.º 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')
Ejemplo n.º 16
0
 def duration(self):
     sum_ = self.timetable_entries.aggregate(
         sum=models.Sum('duration'))['sum']
     return sum_ or timedelta()
Ejemplo n.º 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')
Ejemplo n.º 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())
Ejemplo n.º 19
0
 def length(self):
     """The total length of all the lessons"""
     return self.lessons.all().aggregate(
         sum=models.Sum('length'))['sum'] or 0
Ejemplo n.º 20
0
 def total_redirecciones(self):
     return self.aggregate(redirecciones=models.Sum('contador'))
Ejemplo n.º 21
0
 def total(self):
     return self.categories.aggregate(
         total=models.Sum('planned_spending')
     ).get('total')
Ejemplo n.º 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)
Ejemplo n.º 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"))
Ejemplo n.º 24
0
 def amount_donated(self):
     return self.order_set.filter(
         status=StatusDefinition.SUCCESS
     ).aggregate(
         amount_donated=models.Sum('total')
     )['amount_donated']
Ejemplo n.º 25
0
 def total_points(self):
     return self.parts.aggregate(total=models.Sum("points"))['total'] or 0
Ejemplo n.º 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
Ejemplo n.º 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
Ejemplo n.º 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"]
Ejemplo n.º 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
Ejemplo n.º 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