Changeset - 0eb014aeeb2e
[Not reviewed]
0 4 1
Brett Smith - 6 years ago 2018-07-10 15:36:07
brettcsmith@brettcsmith.org
patreon: New importer for payouts.
5 files changed with 64 insertions and 1 deletions:
0 comments (0 inline, 0 general)
README.rst
Show inline comments
...
 
@@ -201,6 +201,21 @@ Patreon
 
``patreon income ledger entry``
 
  Imports one transaction per patron per month.  Generated from Patreon's monthly patron report CSVs.
 

	
 
``patreon payout ledger entry``
 
  Imports one transaction per month for that month's payout.  Generated from Patreon's payout report CSV.
 

	
 
  This template can use these variables:
 

	
 
  =============== ===========================================================
 
  Name            Contents
 
  =============== ===========================================================
 
  pledges_amount  A decimal with the amount paid out by Patreon to pledges
 
                  you've made
 
  --------------- -----------------------------------------------------------
 
  transfer_amount A decimal with the amount paid out by Patreon to your bank
 
                  account
 
  =============== ===========================================================
 

	
 
``patreon cardfees ledger entry``
 
  Imports one expense transaction per month for that month's credit card fees.  Generated from Patreon's earnings report CSV.
 

	
import2ledger/importers/patreon.py
Show inline comments
...
 
@@ -34,6 +34,34 @@ class IncomeImporter(_csv.CSVImporterBase):
 
            }
 

	
 

	
 
class PayoutImporter(_csv.CSVImporterBase):
 
    AMOUNT_KEY = 'Total funds deducted from creator balance'
 
    PLEDGE_KEY = 'Funds used for pledges to other creators'
 
    TRANSFER_KEY = 'Funds transferred to you'
 
    NEEDED_FIELDS = frozenset([
 
        'Month',
 
        TRANSFER_KEY,
 
        PLEDGE_KEY,
 
        AMOUNT_KEY,
 
    ])
 
    ENTRY_SEED = {
 
        'currency': 'USD',
 
        'payee': 'Patreon',
 
    }
 

	
 
    def _read_row(self, row):
 
        amount = strparse.currency_decimal(row[self.AMOUNT_KEY])
 
        if not amount:
 
            return None
 
        else:
 
            return {
 
                'amount': amount,
 
                'date': strparse.date(row['Month'], '%Y-%m'),
 
                'pledges_amount': strparse.currency_decimal(row[self.PLEDGE_KEY]),
 
                'transfer_amount': strparse.currency_decimal(row[self.TRANSFER_KEY]),
 
            }
 

	
 

	
 
class FeeImporterBase(_csv.CSVImporterBase):
 
    ENTRY_SEED = {
 
        'currency': 'USD',
setup.py
Show inline comments
...
 
@@ -30,7 +30,7 @@ REQUIREMENTS['tests_require'] = [
 
setup(
 
    name='import2ledger',
 
    description="Import different sources of financial data to Ledger",
 
    version='0.5',
 
    version='0.6',
 
    author='Brett Smith',
 
    author_email='brettcsmith@brettcsmith.org',
 
    license='GNU AGPLv3+',
tests/data/PatreonPayouts.csv
Show inline comments
 
new file 100644
 
Month,Funds transferred to you,Funds used for pledges to other creators,Total funds deducted from creator balance
 
2018-03,$0,$0,$0
 
2018-04,$123.45,$0,$123.45
 
2018-05,"$2,345.67",$0,"$2,345.67"
tests/data/imports.yml
Show inline comments
...
 
@@ -62,6 +62,22 @@
 
      country_code: CZ
 
      country_name: Czech Republic
 

	
 
- source: PatreonPayouts.csv
 
  importer: patreon.PayoutImporter
 
  expect:
 
    - payee: Patreon
 
      date: !!python/object/apply:datetime.date [2018, 4, 1]
 
      amount: !!python/object/apply:decimal.Decimal ["123.45"]
 
      pledges_amount: !!python/object/apply:decimal.Decimal ["0"]
 
      transfer_amount: !!python/object/apply:decimal.Decimal ["123.45"]
 
      currency: USD
 
    - payee: Patreon
 
      date: !!python/object/apply:datetime.date [2018, 5, 1]
 
      amount: !!python/object/apply:decimal.Decimal ["2345.67"]
 
      pledges_amount: !!python/object/apply:decimal.Decimal ["0"]
 
      transfer_amount: !!python/object/apply:decimal.Decimal ["2345.67"]
 
      currency: USD
 

	
 
- source: StripePayments.csv
 
  importer: stripe.PaymentImporter
 
  expect:
0 comments (0 inline, 0 general)