diff --git a/connection/connections/plaid_client.py b/connection/connections/plaid_client.py index 214ffba..73b3bb4 100755 --- a/connection/connections/plaid_client.py +++ b/connection/connections/plaid_client.py @@ -105,4 +105,4 @@ class Connection(AbstractConnectionClient): auth_token, start_date, end_date) except plaid.errors.PlaidError as e: return format_error(e) - return transactions_resp + return transactions_resp.get("transactions") diff --git a/connection/tasks.py b/connection/tasks.py index 2c09315..59b67be 100644 --- a/connection/tasks.py +++ b/connection/tasks.py @@ -1,4 +1,32 @@ -from qrtr_account.models import Transaction +from qrtr_account.models import Transaction, Bank, Account from connection.models import Connection +def get_and_save_transactions(connection, start_date=None, end_date=None): + client = connection.connect() + transactions = client.get_transactions(start_date=start_date, + end_date=end_date) + for trns in transactions: + Transaction.objects.update_or_create( + trans_id=trns.get("transaction_id"), + defaults={"authorized_date": trns.get("authorized_date"), + "trans_id": trns.get("transaction_id"), + "details": trns, + "bank": Bank.objects.get(acc_id=trns.get("account_id")), + "name": trns.get("name")}) + return True + +def pull_transactions(account_ids=[], exclude_ids=[], start_date=None, + end_date=None): + if account_ids: + accounts = Account.objects.filter(pk__in=account_ids).exclude(pk__in=exclude_ids) + else: + accounts = Account.objects.exclude(pk__in=exclude_ids) + + for account in accounts: + connections = account.connection_set.all() + for connection in connections: + get_and_save_transactions(connection, + start_date=start_date, end_date=end_date) + + diff --git a/qrtr_account/models.py b/qrtr_account/models.py index 26aacee..f625ca0 100644 --- a/qrtr_account/models.py +++ b/qrtr_account/models.py @@ -112,15 +112,19 @@ class Rule(models.Model): class Transaction(models.Model): - datetime = models.DateTimeField() - Bank = models.ForeignKey(Bank, on_delete=models.CASCADE, + authorized_date = models.DateField(null=True) + bank = models.ForeignKey(Bank, on_delete=models.CASCADE, related_name='transactions') + name = models.CharField(max_length=255) details = models.JSONField() Slice = models.ForeignKey(Slice, on_delete=models.SET_NULL, null=True) + trans_id = models.CharField(max_length=255) + updated_at = models.DateTimeField(auto_now=True) + created_at = models.DateTimeField(auto_now_add=True) @property def qid(self): return f"T{self.pk}" def __str__(self): - return f"{self.Bank} - {self.datetime}" + return f"{self.bank} - {self.authorized_date} - {self.name} - {self.details.get('amount')}"