def nonuniform_transactions_zerosum(basic_setup): member = basic_setup cutoff = datetime.datetime.now().date() - datetime.timedelta( days=settings.VELKOJA_NORDEACHECKER_GRACE_DAYS + 2) tag = TransactionTag.objects.get(tmatch='2') months = 6 for refno, amount in [('109', 40), ('107', 20)]: for x in range(months): debit_date = cutoff - datetime.timedelta(days=x * 30) debit = TransactionFactory(owner=member, reference=refno, amount=-amount, tag=tag, stamp=datetime.datetime.combine( debit_date, datetime.datetime.min.time())) credit_date = cutoff - datetime.timedelta(days=months / 3 * 30) first_amount = amount * (months / 3) credit = TransactionFactory(owner=member, reference=refno, amount=first_amount, tag=tag, stamp=datetime.datetime.combine( credit_date, datetime.datetime.min.time())) credit2 = TransactionFactory(owner=member, reference=refno, amount=months * amount - first_amount, tag=tag, stamp=datetime.datetime.combine( cutoff, datetime.datetime.min.time())) return (member, cutoff)
def test_nonuniform_overdue_emails(nonuniform_transactions_zerosum, mailoutbox): # FIXME: can we avoid this copy-paste with fixture or something ? member, cutoff = nonuniform_transactions_zerosum old_count = member.creditor_transactions.count() assert old_count > 0 newest = member.creditor_transactions.filter( amount__lt=0).order_by('-stamp')[0] oldest = member.creditor_transactions.filter( amount__lt=0).order_by('stamp')[0] debit = TransactionFactory(owner=member, reference=oldest.reference, amount=oldest.amount, tag=oldest.tag, stamp=oldest.stamp - datetime.timedelta(days=60)) assert member.creditor_transactions.count() > old_count if not settings.NORDEA_BARCODE_IBAN: # Example IBAN from http://www.xe.com/ibancalculator/sample/?ibancountry=finland settings.NORDEA_BARCODE_IBAN = 'FI21 1234 5600 0007 85' handler = NordeaOverdueInvoicesHandler() assert (len(mailoutbox) == 0) handler.process_overdue(send=True) assert (len(mailoutbox) == 1) m = mailoutbox[0] assert member.email in m.to assert newest.reference in m.body
def test_model_can_be_saved(): generate_standard_set() member = MemberFactory() transaction = TransactionFactory(owner=member) ns = NotificationSent(email=member.email, transaction_unique_id=transaction.unique_id) ns.save() assert ns.pk > 0
def test_nonuniform_adjustment_zerosum(nonuniform_transactions_zerosum): member, cutoff = nonuniform_transactions_zerosum adjtag = TransactionTagFactory(label='Adjustment', tmatch='') all_debits_as_list = list( member.creditor_transactions.filter(amount__lt=0).order_by('stamp')) first_half = all_debits_as_list[:int(len(all_debits_as_list) / 2)] credit_sum = 0 for trans in first_half: credit_sum += trans.amount trans.delete() newest = member.creditor_transactions.filter( amount__lt=0).order_by('-stamp')[0] oldest = member.creditor_transactions.filter( amount__lt=0).order_by('stamp')[0] odd_sum = TransactionFactory(owner=member, reference=oldest.reference + ' adjust', amount=credit_sum, tag=adjtag, stamp=oldest.stamp) debit = TransactionFactory(owner=member, reference=newest.reference, amount=newest.amount, tag=newest.tag, stamp=cutoff + datetime.timedelta(days=20)) # First check we have overdue without tag filter handler = NordeaOverdueInvoicesHandler() overdue = handler.list_overdue() assert overdue # Then check that we don't have overdue with tag filter settings.VELKOJA_EXCLUDE_TAGS = ['Adjustment'] handler = NordeaOverdueInvoicesHandler() overdue = handler.list_overdue() assert not overdue
def generate_all(): with transaction.atomic(): members.tests.fixtures.types.generate_standard_set() members.tests.fixtures.tags.generate_standard_set() MemberFactory.create_batch(100) MembershipApplicationFactory.create_batch(25) tokentypes.generate_standard_set() accesstypes.generate_standard_set() NonMemberTokenFactory.create_batch(10) creditor.tests.fixtures.tags.generate_standard_set() Membershipfee4all() TransactionFactory.build_batch(100) MemberNoteFactory.create_batch(50) TokenFactory.create_batch(50) GrantFactory.create_batch(50) for m in Member.objects.filter(access_granted__atype=AccessType.objects.get(bit=0)): KeyholderfeeFactory(owner=m) for t in RecurringTransaction.objects.all(): ret = t.conditional_add_transaction()
def generate_all(): with transaction.atomic(): members.tests.fixtures.types.generate_standard_set() members.tests.fixtures.tags.generate_standard_set() MemberFactory.create_batch(100) MembershipApplicationFactory.create_batch(25) tokentypes.generate_standard_set() accesstypes.generate_standard_set() NonMemberTokenFactory.create_batch(10) creditor.tests.fixtures.tags.generate_standard_set() Membershipfee4all() TransactionFactory.build_batch(100) MemberNoteFactory.create_batch(50) TokenFactory.create_batch(50) GrantFactory.create_batch(50) for m in Member.objects.filter( access_granted__atype=AccessType.objects.get(bit=0)): KeyholderfeeFactory(owner=m) for t in RecurringTransaction.objects.all(): ret = t.conditional_add_transaction()
def test_uniform_no_overdue_after_cutoff(uniform_transactions_zerosum): member, cutoff = uniform_transactions_zerosum old_count = member.creditor_transactions.count() assert old_count > 0 templ = member.creditor_transactions.filter( amount__lt=0).order_by('-stamp')[0] debit = TransactionFactory(owner=member, reference=templ.reference, amount=templ.amount, tag=templ.tag, stamp=cutoff + datetime.timedelta(days=20)) assert member.creditor_transactions.count() > old_count assert member.credit < 0 handler = NordeaOverdueInvoicesHandler() overdue = handler.list_overdue() assert not overdue
def test_nonuniform_overdue(nonuniform_transactions_zerosum): member, cutoff = nonuniform_transactions_zerosum old_count = member.creditor_transactions.count() assert old_count > 0 newest = member.creditor_transactions.filter( amount__lt=0).order_by('-stamp')[0] oldest = member.creditor_transactions.filter( amount__lt=0).order_by('stamp')[0] debit = TransactionFactory(owner=member, reference=oldest.reference, amount=oldest.amount, tag=oldest.tag, stamp=oldest.stamp - datetime.timedelta(days=60)) assert member.creditor_transactions.count() > old_count assert member.credit < 0 handler = NordeaOverdueInvoicesHandler() overdue = handler.list_overdue() assert overdue # The overdue one should be the one with the newest stamp assert overdue[0].unique_id == newest.unique_id
def handle(self, *args, **options): for i in range(options['amount']): trans = TransactionFactory() print("Generated transaction %s" % trans)