示例#1
0
    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),
        ])
示例#2
0
    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, [])
示例#3
0
    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)])
示例#4
0
    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)
示例#5
0
 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',
     }])
示例#6
0
    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')
示例#7
0
    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)])
示例#8
0
    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)
示例#9
0
    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")
示例#10
0
    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),
        ])
示例#11
0
    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),
        ])
示例#12
0
    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)
示例#13
0
    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',
        }])
示例#14
0
    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)
示例#15
0
    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',
            },
        ])