def _devices_sample(self): self.device1 = utils.get_or_create_device() self.device2 = utils.get_or_create_device() self.venture_device = utils.get_or_create_venture() start = datetime.date(2013, 10, 8) end = datetime.date(2013, 10, 20) base_usage_types = models.UsageType.objects.filter(type='BU') for i, device in enumerate([self.device1, self.device2], start=1): for j, ut in enumerate(base_usage_types, start=1): for k, day in enumerate(rrule.rrule( rrule.DAILY, dtstart=start, until=end )): daily_usage = models.DailyUsage( date=day, pricing_venture=self.venture_device, pricing_device=device, value=10 * i, type=ut, ) if ut.by_warehouse: daily_usage.warehouse = ( self.warehouses[k % len(self.warehouses)] ) daily_usage.save()
def setUp(self): self.report_start = datetime.date(2013, 4, 20) self.report_end = datetime.date(2013, 4, 30) # ventures self.venture = utils.get_or_create_venture() self.subventure = utils.get_or_create_venture(parent=self.venture) # usages self.usage_type = models.UsageType( name='UT1', symbol='ut1', type='BU', show_in_devices_report=True, ) self.usage_type.save() usage_type2 = models.UsageType( name='UT2', symbol='ut2', type='BU', show_in_devices_report=False, ) usage_type2.save() # usages by warehouse self.warehouse_usage_type = models.UsageType( name='UT3', symbol='ut3', by_warehouse=True, order=3, type='BU', use_universal_plugin=False, show_in_devices_report=True, ) self.warehouse_usage_type.save() # devices self.device1 = utils.get_or_create_device() self.device2 = utils.get_or_create_device() self.device3 = utils.get_or_create_device() # device without daily self.device_virtual = utils.get_or_create_device(is_virtual=True) # dailydevices days = rrule.rrule( rrule.DAILY, dtstart=self.report_start, until=self.report_end, ) for device in (self.device1, self.device2, self.device_virtual): for j, day in enumerate(days, start=1): dailydevice = utils.get_or_create_dailydevice( date=day, device=device, venture=self.venture ) dailydevice.save()
def setUp(self): self.report_start = datetime.date(2013, 4, 20) self.report_end = datetime.date(2013, 4, 30) # ventures self.venture = utils.get_or_create_venture() self.subventure = utils.get_or_create_venture(parent=self.venture) # usages self.usage_type = models.UsageType( name='UT1', symbol='ut1', type='BU', show_in_devices_report=True, ) self.usage_type.save() usage_type2 = models.UsageType( name='UT2', symbol='ut2', type='BU', show_in_devices_report=False, ) usage_type2.save() # usages by warehouse self.warehouse_usage_type = models.UsageType( name='UT3', symbol='ut3', by_warehouse=True, order=3, type='BU', use_universal_plugin=False, show_in_devices_report=True, ) self.warehouse_usage_type.save() # devices self.device1 = utils.get_or_create_device() self.device2 = utils.get_or_create_device() self.device3 = utils.get_or_create_device() # device without daily self.device_virtual = utils.get_or_create_device(is_virtual=True) # dailydevices days = rrule.rrule( rrule.DAILY, dtstart=self.report_start, until=self.report_end, ) for device in (self.device1, self.device2, self.device_virtual): for j, day in enumerate(days, start=1): dailydevice = utils.get_or_create_dailydevice( date=day, device=device, venture=self.venture) dailydevice.save()
def test_dailyusages(self): device = utils.get_or_create_device() utils.get_or_create_dailydevice( date=datetime.date(2013, 10, 12), venture=self.venture1, device=device, name=device.name, price=100, deprecation_rate=0.25, is_deprecated=False, ) result = Deprecation( start=datetime.date(2013, 10, 10), end=datetime.date(2013, 10, 13), ventures=self.ventures_subset, type='dailyusages', ) self.assertEquals(result, { datetime.date(2013, 10, 10): { self.venture1.id: 5, self.venture2.id: 10, }, datetime.date(2013, 10, 11): { self.venture1.id: 5, self.venture2.id: 10, }, datetime.date(2013, 10, 12): { self.venture1.id: 6, # additional device! self.venture2.id: 10, }, datetime.date(2013, 10, 13): { self.venture1.id: 5, self.venture2.id: 10, }, })
def setUp(self): # ventures self.venture1 = utils.get_or_create_venture() self.venture2 = utils.get_or_create_venture() self.venture3 = utils.get_or_create_venture() self.ventures_subset = [self.venture1, self.venture2] self.ventures = models.Venture.objects.all() self.ventures_devices = {} # devices # add j*5 devices for each venture start = datetime.date(2013, 10, 8) end = datetime.date(2013, 10, 22) for j, venture in enumerate(self.ventures, start=1): self.ventures_devices[venture.id] = [] for k in range(j * 5): # add device device = utils.get_or_create_device() self.ventures_devices[venture.id].append(device.id) for day in rrule.rrule(rrule.DAILY, dtstart=start, until=end): utils.get_or_create_dailydevice( date=day, venture=venture, device=device, name=device.name, price=1460*j, deprecation_rate=25, is_deprecated=False, )
def test_costs_per_device_deprecated(self): venture = utils.get_or_create_venture() device = utils.get_or_create_device() utils.get_or_create_dailydevice( datetime.date(2013, 10, 10), device, venture, price=1460, deprecation_rate=25, is_deprecated=True, ) utils.get_or_create_dailydevice( datetime.date(2013, 10, 11), device, venture, price=1460, deprecation_rate=25, is_deprecated=True, ) result = Deprecation( start=datetime.date(2013, 10, 10), end=datetime.date(2013, 10, 13), ventures=[venture], type='costs_per_device', ) self.assertEquals(result, { device.id: { 'assets_cost': D('0'), 'assets_count': 0.5, 'deprecation_rate': D('25'), 'is_deprecated': _('Yes') } })
def test_get_dailyusages(self): # test if sum of usages per day if properly calculated du = models.DailyUsage( date=datetime.date(2013, 10, 11), pricing_venture=self.venture2, pricing_device=utils.get_or_create_device(), value=100, type=self.usage_type, ) du.save() result = UsagePlugin( usage_type=self.usage_type, start=datetime.date(2013, 10, 10), end=datetime.date(2013, 10, 13), ventures=self.ventures_subset, type='dailyusages', ) self.assertEquals(result, { datetime.date(2013, 10, 10): { self.venture1.id: 10, self.venture2.id: 20, }, datetime.date(2013, 10, 11): { self.venture1.id: 10, self.venture2.id: 120, # additional usage! }, datetime.date(2013, 10, 12): { self.venture1.id: 10, self.venture2.id: 20, }, datetime.date(2013, 10, 13): { self.venture1.id: 10, self.venture2.id: 20, }, })
def test_costs_per_device(self): device1 = utils.get_or_create_device( asset_id=1234, barcode='12345', sn='1111-1111-1111', ) device2 = utils.get_or_create_device( asset_id=1235, barcode='12346', sn='1111-1111-1112', ) start = datetime.date(2013, 10, 8) end = datetime.date(2013, 10, 22) for i, device in enumerate([device1, device2]): for day in rrule.rrule(rrule.DAILY, dtstart=start, until=end): utils.get_or_create_dailydevice( date=day, name='Device{0}'.format(i), price=100 * i, deprecation_rate=0.25, is_deprecated=False, venture=self.venture1, device=device, ) result = Information( start=datetime.date(2013, 10, 10), end=datetime.date(2013, 10, 25), ventures=[self.venture1], type='costs_per_device', ) self.assertEquals(result, { device1.id: { 'asset_id': 1234, 'barcode': '12345', 'id': device1.id, 'name': 'Default1234', 'sn': '1111-1111-1111' }, device2.id: { 'asset_id': 1235, 'barcode': '12346', 'id': device2.id, 'name': 'Default1235', 'sn': '1111-1111-1112' } })
def test_get_asset_count_and_cost_group_by_device(self): venture = utils.get_or_create_venture() device1 = utils.get_or_create_device() device2 = utils.get_or_create_device() utils.get_or_create_dailydevice( datetime.date(2013, 10, 10), device1, venture, price=1460, deprecation_rate=25, is_deprecated=False, ) utils.get_or_create_dailydevice( datetime.date(2013, 10, 11), device2, venture, price=1460, deprecation_rate=25, is_deprecated=False, ) utils.get_or_create_dailydevice( datetime.date(2013, 10, 12), device2, self.venture1, price=1460, deprecation_rate=25, is_deprecated=False, ) result = Deprecation.get_assets_count_and_cost( start=datetime.date(2013, 10, 10), end=datetime.date(2013, 10, 20), ventures=[venture], group_by='pricing_device', ) self.assertEquals(list(result), [ { 'assets_cost': D('1'), 'assets_count': 1.0, 'pricing_device': device1.id, }, { 'assets_cost': D('1'), 'assets_count': 1.0, 'pricing_device': device2.id, } ])
def setUp(self): self.venture1 = utils.get_or_create_venture() self.venture2 = utils.get_or_create_venture() self.venture3 = utils.get_or_create_venture(parent=self.venture1) self.device1 = utils.get_or_create_device( device_id=11, sn='1111-1111-1111', barcode='12345', ) self.device2 = utils.get_or_create_device( device_id=12, sn='1111-1111-1112', barcode='12346', ) self.dailydevice1_1 = utils.get_or_create_dailydevice( datetime.date(2013, 10, 10), self.device1, self.venture1, name=self.device1.name, ) self.dailydevice1_2 = utils.get_or_create_dailydevice( datetime.date(2013, 10, 11), self.device1, self.venture2, name=self.device1.name, ) self.dailydevice2_1 = utils.get_or_create_dailydevice( datetime.date(2013, 10, 10), self.device2, self.venture2, name=self.device2.name, ) self.dailydevice2_1 = utils.get_or_create_dailydevice( datetime.date(2013, 10, 11), self.device2, self.venture1, name=self.device2.name, ) self.dailydevice3_1 = utils.get_or_create_dailydevice( datetime.date(2013, 10, 12), self.device1, self.venture3, name=self.device1.name, )
def setUp(self): self.venture = get_or_create_venture() self.venture2 = get_or_create_venture() self.device = get_or_create_device(device_id=1) self.usage_type = UsageType( name='Usage1', symbol='ut1', ) self.usage_type.save() self.today = date.today()
def test_get_dailyusages(self): # test if sum of usages per day if properly calculated du = models.DailyUsage( date=datetime.date(2013, 10, 11), pricing_venture=self.venture2, pricing_device=utils.get_or_create_device(), value=100, type=self.usage_type, ) du.save() result = UsagePlugin( usage_type=self.usage_type, start=datetime.date(2013, 10, 10), end=datetime.date(2013, 10, 13), ventures=self.ventures_subset, type='dailyusages', ) self.assertEquals( result, { datetime.date(2013, 10, 10): { self.venture1.id: 10, self.venture2.id: 20, }, datetime.date(2013, 10, 11): { self.venture1.id: 10, self.venture2.id: 120, # additional usage! }, datetime.date(2013, 10, 12): { self.venture1.id: 10, self.venture2.id: 20, }, datetime.date(2013, 10, 13): { self.venture1.id: 10, self.venture2.id: 20, }, })
def setUp(self): # usage types self.usage_type = models.UsageType( name='UsageType1', symbol='ut1', by_warehouse=False, by_cost=False, type='BU', divide_by=1, ) self.usage_type.save() self.usage_type_cost_wh = models.UsageType( name='UsageType2', symbol='ut2', by_warehouse=True, by_cost=True, type='BU', rounding=2, ) self.usage_type_cost_wh.save() self.usage_type_cost_sum = models.UsageType( name='UsageType3', symbol='ut3', by_warehouse=False, by_cost=True, type='BU', by_internet_provider=True, rounding=1, ) self.usage_type_cost_sum.save() self.usage_type_average = models.UsageType( name='UsageType4', symbol='ut4', by_warehouse=False, by_cost=False, type='BU', average=True, divide_by=2, ) self.usage_type_average.save() # warehouses self.warehouse1 = models.Warehouse( name='Warehouse1', show_in_report=True, ) self.warehouse1.save() self.warehouse2 = models.Warehouse( name='Warehouse2', show_in_report=True, ) self.warehouse2.save() self.warehouses = models.Warehouse.objects.all() # internet providers self.net_provider1 = models.InternetProvider( name='InternetProvider1', ) self.net_provider1.save() self.net_provider2 = models.InternetProvider( name='InternetProvider2', ) self.net_provider2.save() self.net_providers = models.InternetProvider.objects.all() # ventures self.venture1 = models.Venture(venture_id=1, name='V1', is_active=True) self.venture1.save() self.venture2 = models.Venture(venture_id=2, name='V2', is_active=True) self.venture2.save() self.venture3 = models.Venture(venture_id=3, name='V3', is_active=True) self.venture3.save() self.venture4 = models.Venture(venture_id=4, name='V4', is_active=True) self.venture4.save() self.ventures_subset = [self.venture1, self.venture2] self.ventures = models.Venture.objects.all() # daily usages of base type # ut1: # venture1: 10 # venture2: 20 # ut2: # venture1: 20 (half in warehouse1, half in warehouse2) # venture2: 40 (half in warehouse1, half in warehouse2) # ut3: # venture1: 30 # venture2: 60 # ut4: # venture1: 40 # venture2: 80 start = datetime.date(2013, 10, 8) end = datetime.date(2013, 10, 22) base_usage_types = models.UsageType.objects.filter(type='BU') self.ventures_devices = {} for k, venture in enumerate(self.ventures, start=1): device = utils.get_or_create_device() self.ventures_devices[venture] = device for i, ut in enumerate(base_usage_types, start=1): days = rrule.rrule(rrule.DAILY, dtstart=start, until=end) for j, day in enumerate(days, start=1): daily_usage = models.DailyUsage( date=day, pricing_venture=venture, pricing_device=device, value=10 * i * k, type=ut, ) if ut.by_warehouse: daily_usage.warehouse = ( self.warehouses[j % len(self.warehouses)]) daily_usage.save() # usage prices dates = [ (datetime.date(2013, 10, 5), datetime.date(2013, 10, 12)), (datetime.date(2013, 10, 13), datetime.date(2013, 10, 17)), (datetime.date(2013, 10, 18), datetime.date(2013, 10, 25)), ] # (real cost/price, forecast cost/price) ut_prices_costs = [ (self.usage_type, [(10, 50), (20, 60), (30, 70)]), ( self.usage_type_cost_wh, [ [(3600, 2400), (5400, 5400), (4800, 12000)], # warehouse1 [(3600, 5400), (3600, 1200), (7200, 3600)], # warehouse2 ]), ( self.usage_type_cost_sum, [ [(1000, 2000), (2000, 3000), (4000, 5000)], # provider 1 [(10000, 20000), (20000, 30000), (40000, 50000)], # provider 2 ]), (self.usage_type_average, [(10, 20), (20, 30), (30, 40)]), ] def add_usage_price(usage_type, prices_costs, net_provider=None, warehouse=None): for daterange, price_cost in zip(dates, prices_costs): start, end = daterange usage_price = models.UsagePrice( type=usage_type, start=start, end=end, ) if warehouse is not None: usage_price.warehouse = warehouse if net_provider is not None: usage_price.internet_provider = net_provider if usage_type.by_cost: usage_price.cost = price_cost[0] usage_price.forecast_cost = price_cost[1] else: usage_price.price = price_cost[0] usage_price.forecast_price = price_cost[1] usage_price.save() for ut, prices in ut_prices_costs: if ut.by_warehouse: for i, prices_wh in enumerate(prices): warehouse = self.warehouses[i] add_usage_price(ut, prices_wh, warehouse=warehouse) elif ut.by_internet_provider: for i, prices_ip in enumerate(prices): net_provider = self.net_providers[i] add_usage_price(ut, prices_ip, net_provider=net_provider) else: add_usage_price(ut, prices)
def setUp(self): # usage types self.usage_type = models.UsageType( name='UsageType1', symbol='ut1', by_warehouse=False, by_cost=False, type='BU', ) self.usage_type.save() self.usage_type_cost_wh = models.UsageType( name='UsageType2', symbol='ut2', by_warehouse=True, by_cost=True, type='BU', ) self.usage_type_cost_wh.save() self.usage_type_cost_sum = models.UsageType( name='UsageType3', symbol='ut3', by_warehouse=False, by_cost=True, type='BU', by_internet_provider=True, ) self.usage_type_cost_sum.save() self.usage_type_average = models.UsageType( name='UsageType4', symbol='ut4', by_warehouse=False, by_cost=False, type='BU', average=True, ) self.usage_type_average.save() # warehouses self.warehouse1 = models.Warehouse( name='Warehouse1', show_in_report=True, ) self.warehouse1.save() self.warehouse2 = models.Warehouse( name='Warehouse2', show_in_report=True, ) self.warehouse2.save() self.warehouses = models.Warehouse.objects.all() # internet providers self.net_provider1 = models.InternetProvider( name='InternetProvider1', ) self.net_provider1.save() self.net_provider2 = models.InternetProvider( name='InternetProvider2', ) self.net_provider2.save() self.net_providers = models.InternetProvider.objects.all() # ventures self.venture1 = models.Venture(venture_id=1, name='V1', is_active=True) self.venture1.save() self.venture2 = models.Venture(venture_id=2, name='V2', is_active=True) self.venture2.save() self.venture3 = models.Venture(venture_id=3, name='V3', is_active=True) self.venture3.save() self.venture4 = models.Venture(venture_id=4, name='V4', is_active=True) self.venture4.save() self.ventures_subset = [self.venture1, self.venture2] self.ventures = models.Venture.objects.all() # daily usages of base type # ut1: # venture1: 10 # venture2: 20 # ut2: # venture1: 20 (half in warehouse1, half in warehouse2) # venture2: 40 (half in warehouse1, half in warehouse2) # ut3: # venture1: 30 # venture2: 60 # ut4: # venture1: 40 # venture2: 80 start = datetime.date(2013, 10, 8) end = datetime.date(2013, 10, 22) base_usage_types = models.UsageType.objects.filter(type='BU') self.ventures_devices = {} for k, venture in enumerate(self.ventures, start=1): device = utils.get_or_create_device() self.ventures_devices[venture] = device for i, ut in enumerate(base_usage_types, start=1): days = rrule.rrule(rrule.DAILY, dtstart=start, until=end) for j, day in enumerate(days, start=1): daily_usage = models.DailyUsage( date=day, pricing_venture=venture, pricing_device=device, value=10 * i * k, type=ut, ) if ut.by_warehouse: daily_usage.warehouse = ( self.warehouses[j % len(self.warehouses)] ) daily_usage.save() # usage prices dates = [ (datetime.date(2013, 10, 5), datetime.date(2013, 10, 12)), (datetime.date(2013, 10, 13), datetime.date(2013, 10, 17)), (datetime.date(2013, 10, 18), datetime.date(2013, 10, 25)), ] # (real cost/price, forecast cost/price) ut_prices_costs = [ (self.usage_type, [(10, 50), (20, 60), (30, 70)]), (self.usage_type_cost_wh, [ [(3600, 2400), (5400, 5400), (4800, 12000)], # warehouse1 [(3600, 5400), (3600, 1200), (7200, 3600)], # warehouse2 ]), (self.usage_type_cost_sum, [ [(1000, 2000), (2000, 3000), (4000, 5000)], # provider 1 [(10000, 20000), (20000, 30000), (40000, 50000)], # provider 2 ]), (self.usage_type_average, [(10, 20), (20, 30), (30, 40)]), ] def add_usage_price( usage_type, prices_costs, net_provider=None, warehouse=None ): for daterange, price_cost in zip(dates, prices_costs): start, end = daterange usage_price = models.UsagePrice( type=usage_type, start=start, end=end, ) if warehouse is not None: usage_price.warehouse = warehouse if net_provider is not None: usage_price.internet_provider = net_provider if usage_type.by_cost: usage_price.cost = price_cost[0] usage_price.forecast_cost = price_cost[1] else: usage_price.price = price_cost[0] usage_price.forecast_price = price_cost[1] usage_price.save() for ut, prices in ut_prices_costs: if ut.by_warehouse: for i, prices_wh in enumerate(prices): warehouse = self.warehouses[i] add_usage_price(ut, prices_wh, warehouse=warehouse) elif ut.by_internet_provider: for i, prices_ip in enumerate(prices): net_provider = self.net_providers[i] add_usage_price(ut, prices_ip, net_provider=net_provider) else: add_usage_price(ut, prices)
def setUp(self): self.device = get_or_create_device() self.venture = get_or_create_venture()