Beispiel #1
0
from django.contrib import admin
from django.core.exceptions import PermissionDenied
from django.http import HttpResponse
from django.utils import timezone
from django.utils.translation import ugettext as _
from django.utils.text import Truncator

from .models import ProjectPayoutLog, OrganizationPayoutLog

from .admin_filters import HasIBANPayoutFilter
from .admin_utils import link_to
from django import forms

PROJECT_PAYOUT_MODEL = get_project_payout_model()
ORGANIZATION_PAYOUT_MODEL = get_organization_payout_model()
MODEL_MAP = get_model_mapping()


class PayoutLogBase(admin.TabularInline):
    extra = 0
    max_num = 0
    can_delete = False
    fields = ['created', 'old_status', 'new_status']
    readonly_fields = fields


class PayoutLogInline(PayoutLogBase):
    model = ProjectPayoutLog

    def _initialize_unmatched_transactions(self):
        # required for project save
        start = timezone.now() - timedelta(days=10)
        status_campaign = ProjectPhase.objects.get(slug='campaign')
        status_done = ProjectPhase.objects.get(slug='done-complete')

        # projects to match with
        self.project1 = ProjectFactory.create(status=status_campaign)
        self.project2 = ProjectFactory.create(status=status_campaign,
                                              amount_asked=200)
        self.project3 = ProjectFactory.create(status=status_campaign,
                                              amount_asked=200)
        self.project4 = ProjectFactory.create(status=status_campaign,
                                              amount_asked=200)

        # Close some of the projects
        self.project2.status = status_done
        self.project2.save()
        self.project3.status = status_done
        self.project3.save()
        self.project4.status = status_done
        self.project4.save()

        # update payout for project 2 & 3, no donations exist yet so just make it zero/empty
        # adding a new donation (for a closed payout) should create a new payout
        payout2 = self.project2.projectpayout_set.first()
        payout2.payout_rule = BaseProjectPayout.PayoutRules.not_fully_funded
        payout2.in_progress()
        payout2.settled()

        payout3 = self.project3.projectpayout_set.first()
        payout3.payout_rule = BaseProjectPayout.PayoutRules.not_fully_funded
        payout3.in_progress()
        payout3.settled()

        # should be updated with new donation
        payout4 = self.project4.projectpayout_set.first()
        payout4.payout_rule = BaseProjectPayout.PayoutRules.not_fully_funded
        payout4.save()
        self.assertEqual(payout4.status, StatusDefinition.NEW)

        # create a bank transaction to resolve. It's unmatched with anything.
        self.transactions = BankTransactionFactory.create_batch(
            4,
            payout=None,
            remote_payout=None,
            remote_payment=None,
            credit_debit='C',
            amount=Decimal(75),  # must create a donation of 75 euro
            book_date=date.today() - timedelta(days=3),
            description1='Unmatched donation'
        )

        # create an organization payout
        now = date.today()
        OrganizationPayout = get_organization_payout_model()
        self.org_payout = OrganizationPayout(
            start_date=now - timedelta(days=7),
            end_date=now + timedelta(days=7),
            planned=now + timedelta(days=8)
        )
        self.org_payout.save()