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()