Пример #1
0
    def test_pennies_zeros(self):
        values = ratio_split(
            Decimal("11.05"), [Decimal("1"), Decimal("1"), Decimal("0")]
        )
        self.assertEqual(values, [Decimal("5.53"), Decimal("5.52"), Decimal("0.00")])

        values = ratio_split(
            Decimal("11.05"), [Decimal("0"), Decimal("1"), Decimal("1")]
        )
        self.assertEqual(values, [Decimal("0.00"), Decimal("5.53"), Decimal("5.52")])
Пример #2
0
    def get_amount_normal(self, billing_cycle):
        """Get the amount due on the given billing cycle

        For regular recurring costs this is simply `fixed_amount`. For
        one-off costs this is the portion of `fixed_amount` for the given
        billing_cycle.
        """
        if self.is_one_off():
            billing_cycle_number = self._get_billing_cycle_number(
                billing_cycle)

            if billing_cycle_number > self.total_billing_cycles:
                # A future billing cycle after this one has ended
                return Decimal('0')
            else:
                # This is a current cycle. Split the amount into
                # equal parts then return the part for this cycle
                splits = ratio_split(
                    amount=self.fixed_amount,
                    ratios=[Decimal('1')] * self.total_billing_cycles,
                )
                return splits[billing_cycle_number - 1]
        else:
            # This is a none-one-off recurring cost, so the logic is simple
            return self.fixed_amount
Пример #3
0
 def test_pennies(self):
     values = ratio_split(
         Decimal("-11.06"), [Decimal("1"), Decimal("1"), Decimal("1"), Decimal("1")]
     )
     self.assertEqual(
         values,
         [Decimal("-2.77"), Decimal("-2.77"), Decimal("-2.76"), Decimal("-2.76")],
     )
Пример #4
0
 def test_extra_penny(self):
     values = ratio_split(
         Decimal('10'),
         [Decimal('3'), Decimal('3'),
          Decimal('3')])
     self.assertEqual(values,
                      [Decimal('3.33'),
                       Decimal('3.33'),
                       Decimal('3.34')])
Пример #5
0
 def test_less_penny(self):
     values = ratio_split(
         Decimal('8'),
         [Decimal('3'), Decimal('3'),
          Decimal('3')])
     self.assertEqual(values,
                      [Decimal('2.67'),
                       Decimal('2.67'),
                       Decimal('2.66')])
Пример #6
0
 def test_extra_penny(self):
     values = ratio_split(
         Decimal("10"),
         [Decimal("3"), Decimal("3"),
          Decimal("3")])
     self.assertEqual(values,
                      [Decimal("3.33"),
                       Decimal("3.33"),
                       Decimal("3.34")])
Пример #7
0
 def test_less_penny(self):
     values = ratio_split(
         Decimal("8"),
         [Decimal("3"), Decimal("3"),
          Decimal("3")])
     self.assertEqual(values,
                      [Decimal("2.67"),
                       Decimal("2.67"),
                       Decimal("2.66")])
Пример #8
0
    def split(self, amount):
        """Split the value given by amount according to the RecurringCostSplit's portions

        Args:
            amount (Decimal):

        Returns:
            list[(RecurringCostSplit, Decimal)]: A list with elements in the form (RecurringCostSplit, Decimal)
        """
        split_objs = list(self.all())
        if not split_objs:
            raise NoSplitsFoundForRecurringCost()

        portions = [split_obj.portion for split_obj in split_objs]

        split_amounts = ratio_split(amount, portions)
        return [(split_objs[i], split_amount)
                for i, split_amount in enumerate(split_amounts)]
Пример #9
0
 def test_all_equal(self):
     values = ratio_split(
         Decimal('30'),
         [Decimal('3'), Decimal('3'),
          Decimal('3')])
     self.assertEqual(values, [Decimal('10'), Decimal('10'), Decimal('10')])
Пример #10
0
 def test_all_equal(self):
     values = ratio_split(
         Decimal("30"),
         [Decimal("3"), Decimal("3"),
          Decimal("3")])
     self.assertEqual(values, [Decimal("10"), Decimal("10"), Decimal("10")])