Files @ 5463290f874c
Branch filter:

Location: NPO-Accounting/import2ledger/import2ledger/importers/eventbrite.py

Brett Smith
eventbrite: Sales report can include currency.

It's a selectable column that I apparently failed to include in my last
report. Keep USD around as a default for convenience.
import decimal

from . import _csv
from .. import strparse

class SalesImporter(_csv.CSVImporterBase):
    DECIMAL_FIELDS = {
        'Eventbrite Fees': 'eventbrite_fees',
        'Eventbrite Payment Processing': 'payment_fees',
        'Fees Paid': 'total_fees',
        'Quantity': 'quantity',
        'Tax Paid': 'tax',
        'Total Paid': 'amount',
    }
    NEEDED_FIELDS = frozenset([
        'Order Date',
        'Order Type',
        *DECIMAL_FIELDS,
    ])
    OPTIONAL_FIELDS = {
        'Attendee #': 'attendee_id',
        'Company': 'corporation',
        'Currency': 'currency',
        'Event ID': 'event_id',
        'Event Name': 'event_name',
        'Order #': 'order_id',
        'Ticket Type': 'ticket_type',
    }
    ENTRY_SEED = {'currency': 'USD'}

    def _read_row(self, row):
        if row['Order Type'] != 'Eventbrite Completed':
            return None
        retval = {
            self.DECIMAL_FIELDS[key]: strparse.currency_decimal(row[key])
            for key in self.DECIMAL_FIELDS
        }
        date_s, _, _ = row['Order Date'].partition(' ')
        retval['date'] = strparse.date(date_s, '%Y-%m-%d')
        try:
            retval['payee'] = '{Buyer First Name} {Buyer Last Name}'.format_map(row)
        except KeyError:
            retval['payee'] = '{First Name} {Last Name}'.format_map(row)
        retval.update(
            (self.OPTIONAL_FIELDS[key], row.get(key, ''))
            for key in self.OPTIONAL_FIELDS
        )
        return retval