From: Radek Czajka Date: Wed, 1 Apr 2026 14:27:54 +0000 (+0200) Subject: Collect paypal transactions X-Git-Url: https://git.mdrn.pl/wolnelektury.git/commitdiff_plain/8b3e9a48c7cab6a4274d55bab64ab8f8e196009e?ds=sidebyside;hp=df6d939e24b62fb0424a0793e6ded1317a5b4915 Collect paypal transactions --- diff --git a/src/paypal/migrations/0005_donation.py b/src/paypal/migrations/0005_donation.py new file mode 100644 index 000000000..377718613 --- /dev/null +++ b/src/paypal/migrations/0005_donation.py @@ -0,0 +1,24 @@ +# Generated by Django 4.0.8 on 2026-04-01 14:25 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('paypal', '0004_auto_20210622_0945'), + ] + + operations = [ + migrations.CreateModel( + name='Donation', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('transaction_id', models.CharField(db_index=True, max_length=255)), + ('timestamp', models.DateTimeField()), + ('amount', models.DecimalField(decimal_places=2, max_digits=10)), + ('billing_agreement', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='paypal.billingagreement')), + ], + ), + ] diff --git a/src/paypal/models.py b/src/paypal/models.py index 6d45bcdb5..69d2f006a 100644 --- a/src/paypal/models.py +++ b/src/paypal/models.py @@ -25,3 +25,21 @@ class BillingAgreement(models.Model): def get_donations(self, year): from .rest import get_donations return get_donations(self.agreement_id, year) + + def update_donations(self, year): + from .rest import get_donations + for donation in get_donations(self.agreement_id, year): + Donation.objects.get_or_create( + transaction_id=donation['transaction_id'], + defaults={ + 'timestamp': donation['timestamp'], + 'amount': donation['amount'], + } + ) + + +class Donation(models.Model): + billing_agreement = models.ForeignKey(BillingAgreement, models.CASCADE) + transaction_id = models.CharField(max_length=255, db_index=True) + timestamp = models.DateTimeField() + amount = models.DecimalField(decimal_places=2, max_digits=10) diff --git a/src/paypal/rest.py b/src/paypal/rest.py index f1546b491..d324c4c2a 100644 --- a/src/paypal/rest.py +++ b/src/paypal/rest.py @@ -136,6 +136,7 @@ def get_donations(agreement_id, year): continue assert transaction['amount']['currency'] == 'PLN' transactions.append({ + 'transation_id': transaction['transaction_id'], 'timestamp': dt, 'amount': Decimal(transaction['amount']['value']) })