patreon: New importer for payouts.

This commit is contained in:
Brett Smith 2018-07-10 11:36:07 -04:00
parent e22b2f7c17
commit 0eb014aeeb
5 changed files with 64 additions and 1 deletions

View file

@ -201,6 +201,21 @@ Patreon
``patreon income ledger entry`` ``patreon income ledger entry``
Imports one transaction per patron per month. Generated from Patreon's monthly patron report CSVs. 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`` ``patreon cardfees ledger entry``
Imports one expense transaction per month for that month's credit card fees. Generated from Patreon's earnings report CSV. Imports one expense transaction per month for that month's credit card fees. Generated from Patreon's earnings report CSV.

View file

@ -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): class FeeImporterBase(_csv.CSVImporterBase):
ENTRY_SEED = { ENTRY_SEED = {
'currency': 'USD', 'currency': 'USD',

View file

@ -30,7 +30,7 @@ REQUIREMENTS['tests_require'] = [
setup( setup(
name='import2ledger', name='import2ledger',
description="Import different sources of financial data to Ledger", description="Import different sources of financial data to Ledger",
version='0.5', version='0.6',
author='Brett Smith', author='Brett Smith',
author_email='brettcsmith@brettcsmith.org', author_email='brettcsmith@brettcsmith.org',
license='GNU AGPLv3+', license='GNU AGPLv3+',

View file

@ -0,0 +1,4 @@
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"
1 Month Funds transferred to you Funds used for pledges to other creators Total funds deducted from creator balance
2 2018-03 $0 $0 $0
3 2018-04 $123.45 $0 $123.45
4 2018-05 $2,345.67 $0 $2,345.67

View file

@ -62,6 +62,22 @@
country_code: CZ country_code: CZ
country_name: Czech Republic 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 - source: StripePayments.csv
importer: stripe.PaymentImporter importer: stripe.PaymentImporter
expect: expect: