def export_sepa(self, request, queryset): """ Dowload a sepa file with selected ProjectPayments """ objs = queryset.all() if not request.user.is_staff: raise PermissionDenied response = HttpResponse(mimetype='text/xml') date = timezone.datetime.strftime(timezone.now(), '%Y%m%d%H%I%S') response['Content-Disposition'] = 'attachment; ' \ 'filename=payments_sepa%s.xml' % date response.write(OrganizationPayout.create_sepa_xml(objs)) return response
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.save() payout2.settled() payout2.save() payout3 = self.project3.projectpayout_set.first() payout3.payout_rule = BaseProjectPayout.PayoutRules.not_fully_funded payout3.in_progress() payout3.save() payout3.settled() payout3.save() # 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() 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()
class BankTransactionActionTests(WebTestMixin, BluebottleTestCase): def setUp(self): super(BankTransactionActionTests, self).setUp() self.init_projects() self.app.extra_environ['HTTP_HOST'] = str(self.tenant.domain_url) self.superuser = BlueBottleUserFactory.create(is_staff=True, is_superuser=True) def _add_completed_donation(self, project, amount): donation = DonationFactory.create(project=project, amount=amount) donation.order.locked() donation.order.save() donation.order.success() donation.order.save() 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.save() payout2.settled() payout2.save() payout3 = self.project3.projectpayout_set.first() payout3.payout_rule = BaseProjectPayout.PayoutRules.not_fully_funded payout3.in_progress() payout3.save() payout3.settled() payout3.save() # 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() 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() def _match_banktransactions(self, expected_action, n_transactions): """ Fetches the list and executes the list action to match the bank transactions. :param expected_action: string as expected to be visible. """ admin_url = reverse('admin:accounting_banktransaction_changelist') # verify that the transactions are visible transaction_list = self.app.get(admin_url, user=self.superuser) self.assertEqual(transaction_list.status_code, 200) # one for each transaction self.assertEqual(transaction_list.pyquery('.action-checkbox').length, n_transactions) # 'try' to match them and check that they have the appropriate statuses and actions in the admin # check the checkboxes and submit the action form = transaction_list.forms['changelist-form'] form['action'].select('find_matches') for i in range(0, len(self.transactions)): form.get('_selected_action', index=i).checked = True transaction_list = form.submit().follow() # all transactions must be marked as 'unknown' transactions = BankTransaction.objects.filter(status=BankTransaction.IntegrityStatus.UnknownTransaction) self.assertEqual(transactions.count(), n_transactions) # verify that the action 'create donation' is visible self.assertContains(transaction_list, expected_action, count=4)