Collect paypal transactions
authorRadek Czajka <rczajka@rczajka.pl>
Wed, 1 Apr 2026 14:27:54 +0000 (16:27 +0200)
committerRadek Czajka <rczajka@rczajka.pl>
Wed, 1 Apr 2026 14:27:54 +0000 (16:27 +0200)
src/paypal/migrations/0005_donation.py [new file with mode: 0644]
src/paypal/models.py
src/paypal/rest.py

diff --git a/src/paypal/migrations/0005_donation.py b/src/paypal/migrations/0005_donation.py
new file mode 100644 (file)
index 0000000..3777186
--- /dev/null
@@ -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')),
+            ],
+        ),
+    ]
index 6d45bcd..69d2f00 100644 (file)
@@ -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 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)
index f1546b4..d324c4c 100644 (file)
@@ -136,6 +136,7 @@ def get_donations(agreement_id, year):
             continue
         assert transaction['amount']['currency'] == 'PLN'
         transactions.append({
             continue
         assert transaction['amount']['currency'] == 'PLN'
         transactions.append({
+            'transation_id': transaction['transaction_id'],
             'timestamp': dt,
             'amount': Decimal(transaction['amount']['value'])
         })
             'timestamp': dt,
             'amount': Decimal(transaction['amount']['value'])
         })