Пример #1
0
 def test_get_usages_by_internet_provider(self):
     result = UsagePlugin._get_usages_per_warehouse(
         start=datetime.date(2013, 10, 10),
         end=datetime.date(2013, 10, 20),
         usage_type=self.usage_type_cost_sum,
         ventures=self.ventures_subset,
         forecast=False,
     )
     # 5-12: (usages are from 8 to 12)
     #   usage: 5 * (30 + 60 + 90 + 120) = 1500;
     #   cost: 1000 + 10000 = 11000;
     #   price = 11000 / 1500 = 7.(3);
     # 13-17:
     #   usage: 5 * (30 + 60 + 90 + 120) = 1500;
     #   cost: 2000 + 20000 = 22000;
     #   price = 22000 / 1500 = 14.(6);
     # 18-25: (usages are from 18 to 22)
     #   usage: 5 * (30 + 60 + 90 + 120) = 1500;
     #   cost: 4000 + 40000 = 44000;
     #   price = 44000 / 1500 = 29.(3);
     self.assertEquals(result, {
         1: {
             'ut_3_count': 330.0,  # 3 * 30 + 5 * 30 + 3 * 30
             'ut_3_cost': D('5500'),  # 90*7.(3) + 150*14.(6) + 90*29.(3)
         },
         2: {
             'ut_3_count': 660.0,  # 3 * 60 + 5 * 60 + 3 * 60
             'ut_3_cost': D('11000'),  # 180*7.(3) + 300*14.(6) + 180*29.(3)
         },
     })
Пример #2
0
 def test_get_usages_by_internet_provider(self):
     result = UsagePlugin._get_usages_per_warehouse(
         start=datetime.date(2013, 10, 10),
         end=datetime.date(2013, 10, 20),
         usage_type=self.usage_type_cost_sum,
         ventures=self.ventures_subset,
         forecast=False,
     )
     # 5-12: (usages are from 8 to 12)
     #   usage: 5 * (30 + 60 + 90 + 120) = 1500;
     #   cost: 1000 + 10000 = 11000;
     #   price = 11000 / 1500 = 7.(3);
     # 13-17:
     #   usage: 5 * (30 + 60 + 90 + 120) = 1500;
     #   cost: 2000 + 20000 = 22000;
     #   price = 22000 / 1500 = 14.(6);
     # 18-25: (usages are from 18 to 22)
     #   usage: 5 * (30 + 60 + 90 + 120) = 1500;
     #   cost: 4000 + 40000 = 44000;
     #   price = 44000 / 1500 = 29.(3);
     self.assertEquals(
         result,
         {
             1: {
                 'ut_3_count': 330.0,  # 3 * 30 + 5 * 30 + 3 * 30
                 'ut_3_cost':
                 D('5500'),  # 90*7.(3) + 150*14.(6) + 90*29.(3)
             },
             2: {
                 'ut_3_count': 660.0,  # 3 * 60 + 5 * 60 + 3 * 60
                 'ut_3_cost':
                 D('11000'),  # 180*7.(3) + 300*14.(6) + 180*29.(3)
             },
         })
Пример #3
0
 def test_get_usages_per_warehouse_by_device(self):
     result = UsagePlugin._get_usages_per_warehouse(
         start=datetime.date(2013, 10, 10),
         end=datetime.date(2013, 10, 20),
         usage_type=self.usage_type_cost_wh,
         ventures=[self.venture1],
         forecast=False,
         by_device=True,
     )
     self.assertEquals(result, {
         self.ventures_devices[self.venture1].id: {
             'ut_2_count_wh_1': 100.0,
             'ut_2_cost_wh_1': D('960'),
             'ut_2_count_wh_2': 120.0,
             'ut_2_cost_wh_2': D('1080'),
             'ut_2_total_cost': D('2040'),
         }
     })
Пример #4
0
 def test_get_usages_per_warehouse_by_device(self):
     result = UsagePlugin._get_usages_per_warehouse(
         start=datetime.date(2013, 10, 10),
         end=datetime.date(2013, 10, 20),
         usage_type=self.usage_type_cost_wh,
         ventures=[self.venture1],
         forecast=False,
         by_device=True,
     )
     self.assertEquals(
         result, {
             self.ventures_devices[self.venture1].id: {
                 'ut_2_count_wh_1': 100.0,
                 'ut_2_cost_wh_1': D('960'),
                 'ut_2_count_wh_2': 120.0,
                 'ut_2_cost_wh_2': D('1080'),
                 'ut_2_total_cost': D('2040'),
             }
         })
Пример #5
0
 def test_get_usages_by_internet_provider_incomplete_price(self):
     result = UsagePlugin._get_usages_per_warehouse(
         start=datetime.date(2013, 10, 4),
         end=datetime.date(2013, 10, 26),
         usage_type=self.usage_type_cost_sum,
         ventures=self.ventures_subset,
         forecast=False,
         no_price_msg=True,
     )
     self.assertEquals(result, {
         1: {
             'ut_3_count': 450.0,  # 5 * 30 + 5 * 30 + 5 * 30
             'ut_3_cost': 'Incomplete price',
         },
         2: {
             'ut_3_count': 900.0,  # 5 * 60 + 5 * 60 + 5 * 60
             'ut_3_cost': 'Incomplete price',
         },
     })
Пример #6
0
 def test_get_usages_by_internet_provider_incomplete_price(self):
     result = UsagePlugin._get_usages_per_warehouse(
         start=datetime.date(2013, 10, 4),
         end=datetime.date(2013, 10, 26),
         usage_type=self.usage_type_cost_sum,
         ventures=self.ventures_subset,
         forecast=False,
         no_price_msg=True,
     )
     self.assertEquals(
         result,
         {
             1: {
                 'ut_3_count': 450.0,  # 5 * 30 + 5 * 30 + 5 * 30
                 'ut_3_cost': 'Incomplete price',
             },
             2: {
                 'ut_3_count': 900.0,  # 5 * 60 + 5 * 60 + 5 * 60
                 'ut_3_cost': 'Incomplete price',
             },
         })
Пример #7
0
    def test_get_usages_per_warehouse_with_warehouse(self):
        result = UsagePlugin._get_usages_per_warehouse(
            start=datetime.date(2013, 10, 10),
            end=datetime.date(2013, 10, 20),
            usage_type=self.usage_type_cost_wh,
            ventures=self.ventures_subset,
            forecast=False,
        )
        # prices:
        # 5-12: (usages are from 8 to 12)
        #   warehouse1:
        #               usage: 2 * (20 + 40 + 60 + 80) = 400;
        #               cost: 3600;
        #               price = 3600 / 400 = 9;
        #   warehouse2:
        #               usage: 3 * (20 + 40 + 60 + 80) = 600;
        #               cost: 3600;
        #               price = 3600 / 600 = 6;
        # 13-17:
        #   warehouse1:
        #               usage: 3 * (20 + 40 + 60 + 80) = 600;
        #               cost: 5400
        #               price = 5400 / 600 = 9;
        #   warehouse2:
        #               usage: 2 * (20 + 40 + 60 + 80) = 400;
        #               cost: 3600
        #               price = 3600 / 400 = 9;
        # 18-25: (usages are from 18 to 22)
        #   warehouse1:
        #               usage: 2 * (20 + 40 + 60 + 80) = 400;
        #               cost: 4800
        #               price = 4800 / 400 = 12;
        #   warehouse2:
        #               usage: 3 * (20 + 40 + 60 + 80) = 600;
        #               cost: 7200
        #               price = 7200 / 600 = 12;

        # warehouse1 has usages only in odd days
        # odd days in usages prices:
        # 10-12: 1
        # 13-17: 3
        # 18-20: 1

        # warehouse2 has usages only in even days
        # even days in usages prices:
        # 10-12: 2
        # 13-17: 2
        # 18-20: 2
        self.assertEquals(
            result,
            {
                1: {
                    'ut_2_count_wh_1':
                    100.0,  # 5 * 20 (5 is number of odd days)
                    'ut_2_cost_wh_1':
                    D('960'),  # 20 * (1 * 9 + 3 * 9 + 1 * 12)
                    'ut_2_count_wh_2':
                    120.0,  # 6 * 20 (6 is number of even days)
                    'ut_2_cost_wh_2':
                    D('1080'),  # 20 * (2 * 6 + 2 * 9 + 2 * 12)
                    'ut_2_total_cost': D('2040'),  # 960 + 1080
                },
                2: {
                    'ut_2_count_wh_1':
                    200.0,  # 5 * 40 (5 is number of odd days)
                    'ut_2_cost_wh_1':
                    D('1920'),  # 40 * (1 * 9 + 3 * 9 + 1 * 12)
                    'ut_2_count_wh_2':
                    240.0,  # 6 * 40 (6 is number of even days)
                    'ut_2_cost_wh_2':
                    D('2160'),  # 40 * (2 * 6 + 2 * 9 + 2 * 12)
                    'ut_2_total_cost': D('4080'),  # 1920 + 2160
                },
            })
Пример #8
0
    def test_get_usages_per_warehouse_with_warehouse(self):
        result = UsagePlugin._get_usages_per_warehouse(
            start=datetime.date(2013, 10, 10),
            end=datetime.date(2013, 10, 20),
            usage_type=self.usage_type_cost_wh,
            ventures=self.ventures_subset,
            forecast=False,
        )
        # prices:
        # 5-12: (usages are from 8 to 12)
        #   warehouse1:
        #               usage: 2 * (20 + 40 + 60 + 80) = 400;
        #               cost: 3600;
        #               price = 3600 / 400 = 9;
        #   warehouse2:
        #               usage: 3 * (20 + 40 + 60 + 80) = 600;
        #               cost: 3600;
        #               price = 3600 / 600 = 6;
        # 13-17:
        #   warehouse1:
        #               usage: 3 * (20 + 40 + 60 + 80) = 600;
        #               cost: 5400
        #               price = 5400 / 600 = 9;
        #   warehouse2:
        #               usage: 2 * (20 + 40 + 60 + 80) = 400;
        #               cost: 3600
        #               price = 3600 / 400 = 9;
        # 18-25: (usages are from 18 to 22)
        #   warehouse1:
        #               usage: 2 * (20 + 40 + 60 + 80) = 400;
        #               cost: 4800
        #               price = 4800 / 400 = 12;
        #   warehouse2:
        #               usage: 3 * (20 + 40 + 60 + 80) = 600;
        #               cost: 7200
        #               price = 7200 / 600 = 12;

        # warehouse1 has usages only in odd days
        # odd days in usages prices:
        # 10-12: 1
        # 13-17: 3
        # 18-20: 1

        # warehouse2 has usages only in even days
        # even days in usages prices:
        # 10-12: 2
        # 13-17: 2
        # 18-20: 2
        self.assertEquals(result, {
            1: {
                'ut_2_count_wh_1': 100.0,  # 5 * 20 (5 is number of odd days)
                'ut_2_cost_wh_1': D('960'),  # 20 * (1 * 9 + 3 * 9 + 1 * 12)
                'ut_2_count_wh_2': 120.0,  # 6 * 20 (6 is number of even days)
                'ut_2_cost_wh_2': D('1080'),  # 20 * (2 * 6 + 2 * 9 + 2 * 12)
                'ut_2_total_cost': D('2040'),  # 960 + 1080
            },
            2: {
                'ut_2_count_wh_1': 200.0,  # 5 * 40 (5 is number of odd days)
                'ut_2_cost_wh_1': D('1920'),  # 40 * (1 * 9 + 3 * 9 + 1 * 12)
                'ut_2_count_wh_2': 240.0,  # 6 * 40 (6 is number of even days)
                'ut_2_cost_wh_2': D('2160'),  # 40 * (2 * 6 + 2 * 9 + 2 * 12)
                'ut_2_total_cost': D('4080'),  # 1920 + 2160
            },
        })