Skip to content

Instantly share code, notes, and snippets.

@simranjaising30
Last active December 8, 2022 19:29
Show Gist options
  • Save simranjaising30/b3d6d1882a934782d5d1d3f529e99d7a to your computer and use it in GitHub Desktop.
Save simranjaising30/b3d6d1882a934782d5d1d3f529e99d7a to your computer and use it in GitHub Desktop.
import csv
from fund_admin.capital_account.models import CommitmentTransaction, Partner
import requests
from dateutil import parser as date_parser
import logging
fund_id = 79372
csv_url = 'https://gist.githubusercontent.com/simranjaising30/c3d79b6de918e052039acd390b982c6a/raw/41f75a4819227e602a61b699b97437f599cdd789/isd-5684-3.csv'
partner_ids = dict(
Partner.objects.filter(fund_id=fund_id).values_list("name", "id")
)
response = requests.get(csv_url)
response.raise_for_status()
decoded_content = response.content.decode("utf-8")
csv_reader = csv.reader(decoded_content.splitlines())
commitment_transactions = []
for line in csv_reader:
partner_name, from_date, to_date = line
partner_id = partner_ids[partner_name]
from_date = date_parser.parse(from_date)
to_date = date_parser.parse(to_date)
if partner_id and from_date and to_date:
partner = Partner.objects.filter(fund_id=fund_id, id=partner_id).get()
assert partner_id == partner.id
target_transactions = CommitmentTransaction.objects.filter(
date=from_date, partner_id=partner.id
)
logging.info(
f"number of target transactions for {partner_id} is {len(target_transactions)}"
)
for transaction in target_transactions:
transaction.date = to_date
logging.info(
f"target transaction f{transaction.partner.id} to date {to_date}"
)
commitment_transactions.append(transaction)
logging.info(f"target transactions to update = {commitment_transactions}")
CommitmentTransaction.objects.bulk_update(commitment_transactions, ["date"])
@nanramakr
Copy link

LGTM

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment