def setUp(self): # fake settings needed to run plugin, even with mocked library. settings.OPENSTACK_URL = '/' settings.OPENSTACK_USER = '******' settings.OPENSTACK_PASSWORD = '******' # model group for sample costs calculations. self.cmg = ComponentModelGroup() self.cmg.price = 100.0 self.cmg.per_size = 1 self.cmg.size_modifier = 1 self.cmg.save() self.mk = MarginKind() self.mk.margin = 200 self.mk.remarks = 'Margin kind 200%' self.mk.save()
def post(self, *args, **kwargs): if not self.request.user.get_profile().has_perm( Perm.edit_device_info_financial): raise HttpResponseForbidden( "You have no permission to edit catalog") if 'move' in self.request.POST: items = self.request.POST.getlist('items') if not items: messages.error(self.request, "Nothing to move.") return HttpResponseRedirect(self.request.path) target_id = self.request.POST.get('target', '') if target_id == 'none': target = None elif target_id == 'new': item = get_object_or_404(ComponentModel, id=items[0]) target = ComponentModelGroup(name=item.name, type=item.type) target.save(user=self.request.user) else: target = get_object_or_404(ComponentModelGroup, id=target_id) for item in items: model = get_object_or_404(ComponentModel, id=item) model.group = target model.save(user=self.request.user) self.update_cached(target) messages.success(self.request, "Items moved.") return HttpResponseRedirect(self.request.path) elif 'delete' in self.request.POST: try: self.group_id = int(self.kwargs.get('group', '')) except ValueError: messages.error(self.request, "No such group.") else: self.group = get_object_or_404(ComponentModelGroup, id=self.group_id) self.group.price = 0 self.group.save(user=self.request.user) self.update_cached(self.group) self.group.delete() messages.warning(self.request, "Group '%s' deleted." % self.group.name) return HttpResponseRedirect(self.request.path+'..') else: try: self.group_id = int(self.kwargs.get('group', '')) except ValueError: self.group_id = None self.group = None else: self.group = get_object_or_404(ComponentModelGroup, id=self.group_id) self.form = ComponentModelGroupForm(self.request.POST, instance=self.group) if self.form.is_valid(): self.form.save(commit=False) self.form.instance.save(user=self.request.user) self.update_cached(self.group) messages.success(self.request, "Changes saved.") return HttpResponseRedirect(self.request.path) else: messages.error(self.request, "Correct the errors.") return self.get(*args, **kwargs)
def test_disk_share(self): storage_dev = Device.create( sn='device', model_type=DeviceType.storage, model_name='storage device', ) storage_dev.save() share_group = ComponentModelGroup( price=1, type=ComponentType.share, per_size=False, size_unit='', size_modifier=1, ) share_group.save() share_model = ComponentModel( speed=0, cores=0, size=7, type=ComponentType.share, group=share_group, family='', ) share_model.save() disk_share = DiskShare( device=storage_dev, model=share_model, share_id=1, label="share", size=7, snapshot_size=5, wwn='123456789012345678901234567890123', full=True, ) disk_share.save() share_mount = DiskShareMount( share=disk_share, device=storage_dev, size=17, ) share_mount.save() today = date.today() this_month = date(year=today.year, month=today.month, day=1) pricing_group = PricingGroup( name='group', date=this_month, ) pricing_group.save() pricing_group.devices.add(storage_dev) pricing_group.save() pricing_formula = PricingFormula( group=pricing_group, component_group=share_group, formula='3+size+11*variable', ) pricing_formula.save() pricing_variable = PricingVariable( name='variable', group=pricing_group, aggregate=PricingAggregate.sum, ) pricing_variable.save() pricing_value = PricingValue( device=storage_dev, variable=pricing_variable, value=13, ) pricing_value.save() variable_value = pricing_variable.get_value() self.assertEqual(variable_value, 13) formula_value = pricing_formula.get_value(size=7) self.assertEqual(formula_value, 3 + 7 + 11 * 13) share_price = disk_share.get_price() self.assertEqual(share_price, 3 + (7.0 + 5.0) / 1024 + 11 * 13) mount_price = share_mount.get_price() self.assertEqual(mount_price, 3 + 17.0 / 1024 + 11 * 13)