Files @ ac2359101b9f
Branch filter:

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

Rosanne DiMesio
Update brightfunds importer and bump version number
from . import _csv
from . import _xls
from .. import strparse

class _BrightFundsMixin:
    DATE_FMT = '%m/%d/%y'
    ENTRY_SEED = {'currency': 'USD'}
    NAME_KEYS = ['company_name', 'donor_name', 'on_behalf_of']

    DATE_FIELD = 'Date'
    DONOR_FIELD = 'Name'
    EMAIL_FIELD = 'Email'
    TYPE_FIELD = 'Donation Type'

    def __init_subclass__(cls):
        cls.FIELDS_TO_COPY = {
            'Company Name': 'company_name',
            'On Behalf Of': 'on_behalf_of',
            'Designation': 'designation',
            'Fund': 'fund',
            cls.DONOR_FIELD: 'donor_name',
            cls.EMAIL_FIELD: 'donor_email',
            cls.TYPE_FIELD: 'type',
        }
        cls.NEEDED_FIELDS = frozenset(['Amount', cls.DATE_FIELD, *cls.FIELDS_TO_COPY])

    def _get_value(self, value):
        return '' if (value == '-' or not value) else value

    def _read_row(self, row):
        if not (row['Amount'] and row[self.DATE_FIELD]):
            return None
        entry_data = {
            entry_key: self._get_value(row[row_key])
            for row_key, entry_key in self.FIELDS_TO_COPY.items()
        }
        names = []
        for key in self.NAME_KEYS:
            name = entry_data[key].strip()
            entry_data[key] = name
            if name:
                names.append(name)
        try:
            corporation, payee, *_ = names
        except ValueError:
            corporation = names[0]
            payee = corporation
        entry_data['amount'] = str(row['Amount'])
        entry_data['corporation'] = corporation
        entry_data['date'] = strparse.date(row[self.DATE_FIELD], self.DATE_FMT)
        entry_data['payee'] = payee
        return entry_data


class DonorReportImporter(_BrightFundsMixin, _csv.CSVImporterBase):
    BOOK_KWARGS = {'encoding_override': 'utf-8'}
    DATE_FMT = '%m/%d/%Y'
    DATE_FIELD = 'Created'
    DONOR_FIELD = 'Donor Name'
    EMAIL_FIELD = 'Donor Email'
    TYPE_FIELD = 'Type'


class DonorReportXLSImporter(_BrightFundsMixin, _xls.XLSImporterBase):
    BOOK_KWARGS = {'encoding_override': 'utf-8'}
    DATE_FMT = '%m/%d/%Y'
    DATE_FIELD = 'Created'
    DONOR_FIELD = 'Donor Name'
    EMAIL_FIELD = 'Donor Email'
    TYPE_FIELD = 'Type'