Exemplo n.º 1
0
    def _load_payments(self):
        """
        LOAD PAYMENTS
        :return: nothing. Happens in place
        """
        # change amount format
        def clean_format(x):
            x = x.replace('€', '')
            x = x.strip()
            return x

        # parse date format
        def dateparse(x):
            if pandas.isnull(x):
                return None
            return pandas.datetime.strptime(x, '%d/%m/%y %H:%M:%S')

        # lookup child method
        def lookup_child(child_id):
            if child_id:
                return self.children_lookup[int(child_id)]

        # lookup contributor method
        def lookup_contributor(contributor_id):
            if contributor_id in self.contributor_lookup.keys():
                return self.contributor_lookup[contributor_id]
            self.stdout.write('Contributor with number {0} not found.'.format(contributor_id))

        self.stdout.write('\nloading payments')

        self.payments_data['amount'] = self.payments_data['amount'].astype(str).apply(clean_format)
        self.payments_data['amount'].astype(float)

        # fill empty strings
        self.payments_data['comment'].fillna('', inplace=True)
        self.payments_data['child_id'].fillna('', inplace=True)
        self.payments_data['date'].fillna('01/01/71 00:00:00', inplace=True)

        self.payments_data['date'] = self.payments_data['date'].apply(dateparse)

        # add default columns
        self.payments_data['currency'] = self.payments_data['sappayment'].apply(lambda x: 'zar' if int(x) is 1 else 'euro')
        self.payments_data['ptype'] = 'recurrent'
        self.payments_data['entitled'] = 'entitled'


        # drop payments with empty contributor
        self.payments_data = self.payments_data[pandas.notnull(self.payments_data['contributor_id'])]

        # lookup contributors
        self.payments_data['contributor'] = self.payments_data['contributor_id'].apply(lookup_contributor)

        # lookup children
        self.payments_data['child'] = self.payments_data['child_id'].apply(lookup_child)

        # drop unneeded columns
        self.payments_data.drop('child_id', axis=1, inplace=True)
        self.payments_data.drop('contributor_id', axis=1, inplace=True)
        self.payments_data.drop('sappayment', axis=1, inplace=True)

        # load payments
        failing_payments = {}
        ok_payments = []
        for payment_data in self.payments_data.to_dict(orient='records'):
            self.stdout.write('.', ending="")
            self.stdout.flush()
            try:
                payment = Payment(**payment_data)
                payment.full_clean()
                payment.save()
                ok_payments.append(payment_data)
            except Exception as e:
                failing_payments[str(payment_data)] = e
        if failing_payments:
            print('Payments failed validation:\n{0}'.format(pprint.pformat(failing_payments, indent=4)))