Changeset - 01a86107d7e4
[Not reviewed]
0 3 1
Brett Smith - 4 years ago 2019-12-30 20:45:14
brettcsmith@brettcsmith.org
benevity: Add support for latest Benevity format.
4 files changed with 210 insertions and 2 deletions:
0 comments (0 inline, 0 general)
README.rst
Show inline comments
...
 
@@ -137,14 +137,19 @@ Benevity
 
                   This information was not available in reports before 2019,
 
                   so this amount will always be 0.00 in those reports.
 
  ---------------- -----------------------------------------------------------
 
  fee_comment      The note from the Fee Comment column in the report.
 
                   This information was not available in reports before 2020,
 
                   so this field will always be empty in those reports.
 
  ---------------- -----------------------------------------------------------
 
  frequency        The frequency of this donation as indicated in the report
 
  ---------------- -----------------------------------------------------------
 
  match_amount     The amount of the donation match by the participating
 
                   corporation
 
  ---------------- -----------------------------------------------------------
 
  match_fee        The fee taken from the donation match.
 
                   This information was not available in reports before 2019,
 
                   so this amount will always be 0.00 in those reports.
 
                   This information is not available in reports from
 
                   before 2019 or since 2020, so this amount will always be
 
                   0.00 in those reports.
 
  ---------------- -----------------------------------------------------------
 
  merchant_fee     The merchant fee taken from the donation total.
 
                   This information was not available in reports before 2019,
import2ledger/importers/benevity.py
Show inline comments
...
 
@@ -34,6 +34,9 @@ class _DonationsImporterBase(_csv.CSVImporterBase):
 
        retval.update((retkey, strparse.currency_decimal(row[rowkey]))
 
                      for rowkey, retkey in self.DECIMAL_FIELDS.items())
 
        retval['amount'] = retval['donation_amount'] + retval['match_amount']
 
        retval.setdefault('net_amount', retval['amount'] - sum(
 
            fee for key, fee in retval.items() if key.endswith('_fee')
 
        ))
 
        return retval
 

	
 

	
...
 
@@ -43,6 +46,7 @@ class Donations2018Importer(_DonationsImporterBase):
 
        'donation_fee': ZERO_DECIMAL,
 
        'match_fee': ZERO_DECIMAL,
 
        'merchant_fee': ZERO_DECIMAL,
 
        'fee_comment': None,
 
    }
 
    DATE_FIELD = 'Date of Donation'
 
    DATE_FMT = '%Y-%m-%d'
...
 
@@ -72,6 +76,7 @@ class Donations2018Importer(_DonationsImporterBase):
 
class Donations2019Importer(_DonationsImporterBase):
 
    ENTRY_SEED = {
 
        'ledger template': 'benevity donations ledger entry',
 
        'fee_comment': None,
 
    }
 
    DATE_FIELD = 'Donation Date'
 
    DATE_FMT = '%Y-%m-%dT%H:%M:%SZ'
...
 
@@ -99,3 +104,35 @@ class Donations2019Importer(_DonationsImporterBase):
 
        'Transaction ID': 'transaction_id',
 
        'Donation Frequency': 'frequency',
 
    }
 

	
 

	
 
class Donations2020Importer(_DonationsImporterBase):
 
    ENTRY_SEED = {
 
        'ledger template': 'benevity donations ledger entry',
 
        'match_fee': ZERO_DECIMAL,
 
    }
 
    DATE_FIELD = 'Donation Date'
 
    DATE_FMT = '%Y-%m-%dT%H:%M:%SZ'
 
    HEADER_FIELDS = {
 
        'Disbursement ID': 'disbursement_id',
 
    }
 
    DECIMAL_FIELDS = {
 
        'Total Donation to be Acknowledged': 'donation_amount',
 
        'Cause Support Fee': 'donation_fee',
 
        'Match Amount': 'match_amount',
 
        'Merchant Fee': 'merchant_fee',
 
    }
 
    NEEDED_FIELDS = frozenset([
 
        DATE_FIELD,
 
        *_DonationsImporterBase.NAME_FIELDS,
 
        *DECIMAL_FIELDS,
 
    ])
 
    COPIED_FIELDS = {
 
        'Company': 'corporation',
 
        'Currency': 'currency',
 
        'Project': 'project',
 
        'Comment': 'comment',
 
        'Transaction ID': 'transaction_id',
 
        'Donation Frequency': 'frequency',
 
        'Fee Comment': 'fee_comment',
 
    }
tests/data/Benevity2020.csv
Show inline comments
 
new file 100644
 
Donations Report
 
"#-------------------------------------------"
 
Charity Name,"Software Freedom Conservancy, Inc."
 
Charity ID,850-607080900
 
Period Ending,Tue 1 Jan 2019 0:00:00
 
Currency,USD
 
Payment Method,EFT
 
Disbursement ID,ABCDE12345
 
Note,Rounding may be applied to some values in this report. Learn more at https://causes.benevity.org/feedback-support
 
"#-------------------------------------------"
 

	
 
Company,Project,Donation Date,Donor First Name,Donor Last Name,Email,Address,City,State/Province,Postal Code,Activity,Comment,Transaction ID,Donation Frequency,Currency,Project Remote ID,Source,Reason,Total Donation to be Acknowledged,Match Amount,Cause Support Fee,Merchant Fee,Fee Comment
 
Company A,,2019-10-28T12:00:01Z,Dakota,Smith,a@example.com,Not shared by donor,Not shared by donor,Not shared by donor,0,Volunteering,,67890QWERT,One-time,USD,,,,20,0,0,0,
 
Company A,,2019-10-30T12:00:03Z,Dakota,Smith,a@example.com,Not shared by donor,Not shared by donor,Not shared by donor,0,Volunteering,,67890WERTY,One-time,USD,,,,25,0,0,0,
 
Company B,,2019-10-19T12:00:05Z,Not shared by donor,Not shared by donor,Not shared by donor,Not shared by donor,Not shared by donor,Not shared by donor,12345,,,67890ERTYU,Unknown,USD,,,,0,10,0,0,
 
Company B,,2019-10-19T12:00:07Z,Not shared by donor,Not shared by donor,Not shared by donor,Not shared by donor,Not shared by donor,Not shared by donor,12345,,,67890RTYUI,Unknown,USD,,,,0,20,0,0,
 
Company B,,2019-10-19T12:00:09Z,Not shared by donor,Not shared by donor,Not shared by donor,Not shared by donor,Not shared by donor,Not shared by donor,12345,,,67890TYUIO,Recurring,USD,,,,30,0,0,0,
 
Company C,,2019-10-18T12:00:11Z,Not shared by donor,Not shared by donor,Not shared by donor,Not shared by donor,Not shared by donor,Not shared by donor,12345,,,67890YUIOP,Unknown,USD,,,,10,10,0.3,0.15,
 
Company C,,2019-10-21T12:00:13Z,Not shared by donor,Not shared by donor,Not shared by donor,Not shared by donor,Not shared by donor,Not shared by donor,12345,,,67890ASDFG,Unknown,USD,,,,10,10,0.3,0.15,
 
Totals,,,,,,,,,,,,,,,,,,95,50,0.6,0.3,
 
Check Fee,0
 
Total Donations (Gross),144.1
tests/data/imports.yml
Show inline comments
...
 
@@ -304,6 +304,7 @@
 
      donation_fee: !!python/object/apply:decimal.Decimal [0]
 
      match_fee: !!python/object/apply:decimal.Decimal [0]
 
      merchant_fee: !!python/object/apply:decimal.Decimal [0]
 
      fee_comment: null
 
      payee: Dakota Smith
 
      corporation: Company A
 
      project: ""
...
 
@@ -321,6 +322,7 @@
 
      donation_fee: !!python/object/apply:decimal.Decimal [0]
 
      match_fee: !!python/object/apply:decimal.Decimal [0]
 
      merchant_fee: !!python/object/apply:decimal.Decimal [0]
 
      fee_comment: null
 
      payee: Dakota Smith
 
      corporation: Company A
 
      project: ""
...
 
@@ -338,6 +340,7 @@
 
      donation_fee: !!python/object/apply:decimal.Decimal [0]
 
      match_fee: !!python/object/apply:decimal.Decimal [0]
 
      merchant_fee: !!python/object/apply:decimal.Decimal [0]
 
      fee_comment: null
 
      payee: Anonymous
 
      corporation: Company B
 
      project: ""
...
 
@@ -355,6 +358,7 @@
 
      donation_fee: !!python/object/apply:decimal.Decimal [0]
 
      match_fee: !!python/object/apply:decimal.Decimal [0]
 
      merchant_fee: !!python/object/apply:decimal.Decimal [0]
 
      fee_comment: null
 
      payee: Anonymous
 
      corporation: Company B
 
      project: ""
...
 
@@ -373,6 +377,7 @@
 
      donation_fee: !!python/object/apply:decimal.Decimal [0]
 
      match_fee: !!python/object/apply:decimal.Decimal [0]
 
      merchant_fee: !!python/object/apply:decimal.Decimal [0]
 
      fee_comment: null
 
      corporation: Company B
 
      project: ""
 
      comment: ""
...
 
@@ -395,6 +400,7 @@
 
      donation_fee: !!python/object/apply:decimal.Decimal [0]
 
      match_fee: !!python/object/apply:decimal.Decimal [0]
 
      merchant_fee: !!python/object/apply:decimal.Decimal [0]
 
      fee_comment: null
 
      payee: Dakota Smith
 
      corporation: Company A
 
      project: ""
...
 
@@ -412,6 +418,7 @@
 
      donation_fee: !!python/object/apply:decimal.Decimal [0]
 
      match_fee: !!python/object/apply:decimal.Decimal [0]
 
      merchant_fee: !!python/object/apply:decimal.Decimal [0]
 
      fee_comment: null
 
      payee: Dakota Smith
 
      corporation: Company A
 
      project: ""
...
 
@@ -429,6 +436,7 @@
 
      donation_fee: !!python/object/apply:decimal.Decimal [0]
 
      match_fee: !!python/object/apply:decimal.Decimal [0]
 
      merchant_fee: !!python/object/apply:decimal.Decimal [0]
 
      fee_comment: null
 
      payee: Anonymous
 
      corporation: Company B
 
      project: ""
...
 
@@ -446,6 +454,7 @@
 
      donation_fee: !!python/object/apply:decimal.Decimal [0]
 
      match_fee: !!python/object/apply:decimal.Decimal [0]
 
      merchant_fee: !!python/object/apply:decimal.Decimal [0]
 
      fee_comment: null
 
      payee: Anonymous
 
      corporation: Company B
 
      project: ""
...
 
@@ -463,6 +472,7 @@
 
      donation_fee: !!python/object/apply:decimal.Decimal [0]
 
      match_fee: !!python/object/apply:decimal.Decimal [0]
 
      merchant_fee: !!python/object/apply:decimal.Decimal [0]
 
      fee_comment: null
 
      payee: Anonymous
 
      corporation: Company B
 
      project: ""
...
 
@@ -480,6 +490,7 @@
 
      donation_fee: !!python/object/apply:decimal.Decimal [".1"]
 
      match_fee: !!python/object/apply:decimal.Decimal [".2"]
 
      merchant_fee: !!python/object/apply:decimal.Decimal [".15"]
 
      fee_comment: null
 
      payee: Anonymous
 
      corporation: Company C
 
      project: ""
...
 
@@ -497,6 +508,139 @@
 
      donation_fee: !!python/object/apply:decimal.Decimal [".1"]
 
      match_fee: !!python/object/apply:decimal.Decimal [".2"]
 
      merchant_fee: !!python/object/apply:decimal.Decimal [".15"]
 
      fee_comment: null
 
      payee: Anonymous
 
      corporation: Company C
 
      project: ""
 
      comment: ""
 
      frequency: Unknown
 
      transaction_id: 67890ASDFG
 
      ledger template: benevity donations ledger entry
 

	
 
- source: Benevity2020.csv
 
  importer: benevity.Donations2020Importer
 
  header_rows: 11
 
  header_cols: 23
 
  expect:
 
    - date: !!python/object/apply:datetime.date [2019, 10, 28]
 
      currency: USD
 
      disbursement_id: ABCDE12345
 
      amount: !!python/object/apply:decimal.Decimal [20]
 
      net_amount: !!python/object/apply:decimal.Decimal [20]
 
      donation_amount: !!python/object/apply:decimal.Decimal [20]
 
      match_amount: !!python/object/apply:decimal.Decimal [0]
 
      donation_fee: !!python/object/apply:decimal.Decimal [0]
 
      merchant_fee: !!python/object/apply:decimal.Decimal [0]
 
      match_fee: !!python/object/apply:decimal.Decimal [0]
 
      fee_comment: ""
 
      payee: Dakota Smith
 
      corporation: Company A
 
      project: ""
 
      comment: ""
 
      frequency: One-time
 
      transaction_id: 67890QWERT
 
      ledger template: benevity donations ledger entry
 
    - date: !!python/object/apply:datetime.date [2019, 10, 30]
 
      currency: USD
 
      disbursement_id: ABCDE12345
 
      amount: !!python/object/apply:decimal.Decimal [25]
 
      net_amount: !!python/object/apply:decimal.Decimal [25]
 
      donation_amount: !!python/object/apply:decimal.Decimal [25]
 
      match_amount: !!python/object/apply:decimal.Decimal [0]
 
      donation_fee: !!python/object/apply:decimal.Decimal [0]
 
      merchant_fee: !!python/object/apply:decimal.Decimal [0]
 
      match_fee: !!python/object/apply:decimal.Decimal [0]
 
      fee_comment: ""
 
      payee: Dakota Smith
 
      corporation: Company A
 
      project: ""
 
      comment: ""
 
      frequency: One-time
 
      transaction_id: 67890WERTY
 
      ledger template: benevity donations ledger entry
 
    - date: !!python/object/apply:datetime.date [2019, 10, 19]
 
      currency: USD
 
      disbursement_id: ABCDE12345
 
      amount: !!python/object/apply:decimal.Decimal [10]
 
      net_amount: !!python/object/apply:decimal.Decimal [10]
 
      donation_amount: !!python/object/apply:decimal.Decimal [0]
 
      match_amount: !!python/object/apply:decimal.Decimal [10]
 
      donation_fee: !!python/object/apply:decimal.Decimal [0]
 
      merchant_fee: !!python/object/apply:decimal.Decimal [0]
 
      match_fee: !!python/object/apply:decimal.Decimal [0]
 
      fee_comment: ""
 
      payee: Anonymous
 
      corporation: Company B
 
      project: ""
 
      comment: ""
 
      frequency: Unknown
 
      transaction_id: 67890ERTYU
 
      ledger template: benevity donations ledger entry
 
    - date: !!python/object/apply:datetime.date [2019, 10, 19]
 
      currency: USD
 
      disbursement_id: ABCDE12345
 
      amount: !!python/object/apply:decimal.Decimal [20]
 
      net_amount: !!python/object/apply:decimal.Decimal [20]
 
      donation_amount: !!python/object/apply:decimal.Decimal [0]
 
      match_amount: !!python/object/apply:decimal.Decimal [20]
 
      donation_fee: !!python/object/apply:decimal.Decimal [0]
 
      merchant_fee: !!python/object/apply:decimal.Decimal [0]
 
      match_fee: !!python/object/apply:decimal.Decimal [0]
 
      fee_comment: ""
 
      payee: Anonymous
 
      corporation: Company B
 
      project: ""
 
      comment: ""
 
      frequency: Unknown
 
      transaction_id: 67890RTYUI
 
      ledger template: benevity donations ledger entry
 
    - date: !!python/object/apply:datetime.date [2019, 10, 19]
 
      currency: USD
 
      disbursement_id: ABCDE12345
 
      amount: !!python/object/apply:decimal.Decimal [30]
 
      net_amount: !!python/object/apply:decimal.Decimal [30]
 
      donation_amount: !!python/object/apply:decimal.Decimal [30]
 
      match_amount: !!python/object/apply:decimal.Decimal [0]
 
      donation_fee: !!python/object/apply:decimal.Decimal [0]
 
      merchant_fee: !!python/object/apply:decimal.Decimal [0]
 
      match_fee: !!python/object/apply:decimal.Decimal [0]
 
      fee_comment: ""
 
      payee: Anonymous
 
      corporation: Company B
 
      project: ""
 
      comment: ""
 
      frequency: Recurring
 
      transaction_id: 67890TYUIO
 
      ledger template: benevity donations ledger entry
 
    - date: !!python/object/apply:datetime.date [2019, 10, 18]
 
      currency: USD
 
      disbursement_id: ABCDE12345
 
      amount: !!python/object/apply:decimal.Decimal [20]
 
      net_amount: !!python/object/apply:decimal.Decimal ["19.55"]
 
      donation_amount: !!python/object/apply:decimal.Decimal [10]
 
      match_amount: !!python/object/apply:decimal.Decimal [10]
 
      donation_fee: !!python/object/apply:decimal.Decimal [".3"]
 
      merchant_fee: !!python/object/apply:decimal.Decimal [".15"]
 
      match_fee: !!python/object/apply:decimal.Decimal [0]
 
      fee_comment: ""
 
      payee: Anonymous
 
      corporation: Company C
 
      project: ""
 
      comment: ""
 
      frequency: Unknown
 
      transaction_id: 67890YUIOP
 
      ledger template: benevity donations ledger entry
 
    - date: !!python/object/apply:datetime.date [2019, 10, 21]
 
      currency: USD
 
      disbursement_id: ABCDE12345
 
      amount: !!python/object/apply:decimal.Decimal [20]
 
      net_amount: !!python/object/apply:decimal.Decimal ["19.55"]
 
      donation_amount: !!python/object/apply:decimal.Decimal [10]
 
      match_amount: !!python/object/apply:decimal.Decimal [10]
 
      donation_fee: !!python/object/apply:decimal.Decimal [".3"]
 
      merchant_fee: !!python/object/apply:decimal.Decimal [".15"]
 
      match_fee: !!python/object/apply:decimal.Decimal [0]
 
      fee_comment: ""
 
      payee: Anonymous
 
      corporation: Company C
 
      project: ""
0 comments (0 inline, 0 general)