def test_crossing_years(self): # needed objects member = create_member(first_payment_year=2017, first_payment_month=11) ps = create_payment_strategy() # create the payment amount = DEFAULT_FEE * 15 logic.create_payment(member, now(), amount, ps) # check payed_fees = Quota.objects.all() self.assertEqual([(x.year, x.month) for x in payed_fees], [ (2017, 11), (2017, 12), (2018, 1), (2018, 2), (2018, 3), (2018, 4), (2018, 5), (2018, 6), (2018, 7), (2018, 8), (2018, 9), (2018, 10), (2018, 11), (2018, 12), (2019, 1), ])
def test_same_year_same_month(self): member = create_member(first_payment_year=2017, first_payment_month=6) ps = create_payment_strategy() logic.create_payment(member, now(), DEFAULT_FEE, ps) debt = logic.get_debt_state(member, 2017, 6) self.assertEqual(debt, [])
def test_previous_year(self): member = create_member(first_payment_year=2017, first_payment_month=8) ps = create_payment_strategy() logic.create_payment(member, now(), DEFAULT_FEE, ps) debt = logic.get_debt_state(member, 2018, 2) self.assertEqual(debt, [(2017, 9), (2017, 10), (2017, 11), (2017, 12), (2018, 1), (2018, 2)])
def test_custom_fee(self): # needed objects member = create_member(first_payment_year=2017, first_payment_month=5) ps = create_payment_strategy() # create the payment custom_fee = DEFAULT_FEE // 2 amount = custom_fee * 5 logic.create_payment(member, now(), amount, ps, custom_fee=custom_fee) # check self.assertEqual(len(Quota.objects.all()), 5)
def test_last_payments_one(self): member = create_member(first_payment_year=2017, first_payment_month=5) ps = create_payment_strategy() amount = 100 tstamp = datetime.datetime(2018, 3, 22, 14, 32, 11) logic.create_payment(member, tstamp, amount, ps) info = views.MemberDetailView()._get_last_payments(member) self.assertEqual(info, [{ 'title': 'Transfer x 100.00', 'timestamp': '2018-03-22 14:32:11', 'invoice': '(-)', 'quotas': '2017-05', }])
def test_last_payments_limited(self): member = create_member(first_payment_year=2017, first_payment_month=5) ps = create_payment_strategy() # 15 payments amount = 100 for second in range(15): tstamp = datetime.datetime(2020, 3, 22, 14, 32, second) logic.create_payment(member, tstamp, amount, ps) # it should show only 12, still ordered info = views.MemberDetailView()._get_last_payments(member) self.assertEqual(len(info), 12) self.assertEqual(info[0]['timestamp'], '2020-03-22 14:32:14')
def test_multiyear(self): member = create_member(first_payment_year=2017, first_payment_month=8) ps = create_payment_strategy() logic.create_payment(member, now(), DEFAULT_FEE, ps) debt = logic.get_debt_state(member, 2020, 2) self.assertEqual(debt, [(2017, 9), (2017, 10), (2017, 11), (2017, 12), (2018, 1), (2018, 2), (2018, 3), (2018, 4), (2018, 5), (2018, 6), (2018, 7), (2018, 8), (2018, 9), (2018, 10), (2018, 11), (2018, 12), (2019, 1), (2019, 2), (2019, 3), (2019, 4), (2019, 5), (2019, 6), (2019, 7), (2019, 8), (2019, 9), (2019, 10), (2019, 11), (2019, 12), (2020, 1), (2020, 2)])
def test_not_exact_amount_small(self): # needed objects member = create_member(first_payment_year=2017, first_payment_month=5) ps = create_payment_strategy() # create the payment amount = DEFAULT_FEE * 1.0001 logic.create_payment(member, now(), amount, ps) # check (payed_fee, ) = Quota.objects.all() self.assertEqual(payed_fee.year, member.first_payment_year) self.assertEqual(payed_fee.month, member.first_payment_month) self.assertEqual(payed_fee.member, member)
def handle(self, *args, **options): if options['dni-cuit'] is None: raise CommandError( 'You must specify the DNI (person) or CUIT (organization).') # process the first month indication, if there first_unpaid = options.get('first_month') if first_unpaid is not None: if len(first_unpaid) != 6 or not first_unpaid.isdigit(): raise CommandError( "The first-month indication must be of format YYYYMM") first_unpaid = int(first_unpaid[:4]), int(first_unpaid[4:]) try: person = Person.objects.get(document_number=options['dni-cuit']) member = person.membership except Person.DoesNotExist: print("Not a person! organization?") try: organiz = Organization.objects.get( document_number=options['dni-cuit']) member = organiz.membership except Organization.DoesNotExist: print("Not an organization either!") print("FAILED") return print("Member:", member) timestamp = datetime.datetime.strptime(options['date'], "%Y-%m-%d") print("Timestamp:", timestamp) amount = decimal.Decimal(options['amount']) print("Amount:", amount) platform = PLATFORMS[options['platform']] print("Platform:", platform) strategy, _ = PaymentStrategy.objects.get_or_create( platform=platform, id_in_platform='', patron=member.patron) print("Strategy:", strategy) comments = options['comments'] or '' logic.create_payment(member, timestamp, amount, strategy, first_unpaid=first_unpaid, comments=comments) print("Done")
def test_from_specific_yearmonth(self): # needed objects member = create_member(first_payment_year=2017, first_payment_month=3) ps = create_payment_strategy() # create the payment amount = DEFAULT_FEE * 3 logic.create_payment(member, now(), amount, ps, first_unpaid=(2017, 5)) # check payed_fees = Quota.objects.all() self.assertEqual([(x.year, x.month) for x in payed_fees], [ (2017, 5), (2017, 6), (2017, 7), ])
def test_several_months(self): # needed objects member = create_member(first_payment_year=2017, first_payment_month=3) ps = create_payment_strategy() # create the payment amount = DEFAULT_FEE * 3 logic.create_payment(member, now(), amount, ps) # check payed_fees = Quota.objects.all() self.assertEqual([(x.year, x.month) for x in payed_fees], [ (2017, 3), (2017, 4), (2017, 5), ])
def test_second_payment(self): # needed objects member = create_member(first_payment_year=2017, first_payment_month=3) ps = create_payment_strategy() amount = DEFAULT_FEE logic.create_payment(member, now(), amount, ps) # create the second payment logic.create_payment(member, now(), amount, ps) # check (payed_fee1, payed_fee2) = Quota.objects.all() self.assertEqual(payed_fee1.year, 2017) self.assertEqual(payed_fee1.month, 3) self.assertEqual(payed_fee1.member, member) self.assertEqual(payed_fee2.year, 2017) self.assertEqual(payed_fee2.month, 4) self.assertEqual(payed_fee2.member, member)
def test_last_payments_with_invoice(self): member = create_member(first_payment_year=2017, first_payment_month=5) ps = create_payment_strategy() amount = 100 tstamp = datetime.datetime(2018, 3, 22, 14, 32, 11) logic.create_payment(member, tstamp, amount, ps) (payment, ) = Payment.objects.all() payment.invoice_spoint = 7 payment.invoice_number = 1234 payment.invoice_ok = True payment.save() info = views.MemberDetailView()._get_last_payments(member) self.assertEqual(info, [{ 'title': 'Transfer x 100.00', 'timestamp': '2018-03-22 14:32:11', 'invoice': '7-1234', 'quotas': '2017-05', }])
def create_manual(self, row): member = self.get_member_set_first_payments(row) assert member.category.name == row['Tipo socio'] paypairs = [] for i in range(1, 5): tstamp = row['timestamp' + str(i)].strip() amount = row['amount' + str(i)].strip() if tstamp: assert amount paypairs.append((tstamp, decimal.Decimal(amount))) platform = PLATFORMS[row['platform']] strategy = PaymentStrategy.objects.create(platform=platform, id_in_platform='', patron=member.patron, comments=MSG_BOOTSTRAP) for tstamp, amount in paypairs: tstamp = datetime.datetime.strptime(tstamp, "%d/%M/%y") logic.create_payment(member, tstamp, amount, strategy)
def test_last_payments_several(self): member = create_member(first_payment_year=2017, first_payment_month=5) ps = create_payment_strategy() # payment 1 amount = 100 tstamp = datetime.datetime(2018, 3, 22, 14, 32, 11) logic.create_payment(member, tstamp, amount, ps) # payment 2 amount = 500 tstamp = datetime.datetime(2020, 3, 22, 14, 32, 11) # mixed tstamp on purpose!! logic.create_payment(member, tstamp, amount, ps) # payment 3 amount = 300 tstamp = datetime.datetime(2019, 3, 22, 14, 32, 11) logic.create_payment(member, tstamp, amount, ps) info = views.MemberDetailView()._get_last_payments(member) self.assertEqual(info, [ { 'title': 'Transfer x 500.00', 'timestamp': '2020-03-22 14:32:11', 'invoice': '(-)', 'quotas': '2017-06, 2017-07, 2017-08, 2017-09, 2017-10', }, { 'title': 'Transfer x 300.00', 'timestamp': '2019-03-22 14:32:11', 'invoice': '(-)', 'quotas': '2017-11, 2017-12, 2018-01', }, { 'title': 'Transfer x 100.00', 'timestamp': '2018-03-22 14:32:11', 'invoice': '(-)', 'quotas': '2017-05', }, ])