Пример #1
0
class CatalogDevice(Catalog):
    template_name = 'ui/catalog/device.html'

    def __init__(self, *args, **kwargs):
        super(CatalogDevice, self).__init__(*args, **kwargs)
        self.form = None

    def update_cached(self, group):
        for device in Device.objects.filter(model__group=group):
            pricing.device_update_cached(device)

    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(DeviceModel, id=items[0])
                target = DeviceModelGroup(name=item.name, type=item.type)
                target.save(user=self.request.user)
            else:
                target = get_object_or_404(DeviceModelGroup, id=target_id)
            for item in items:
                model = get_object_or_404(DeviceModel, 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 'clear' in self.request.POST:
            items = self.request.POST.getlist('items')
            if not items:
                messages.error(self.request, "Nothing to clear.")
                return HttpResponseRedirect(self.request.path)
            for item in items:
                model = get_object_or_404(DeviceModel, id=item)
                priorities = model.get_save_priorities()
                priorities = dict((key, 0) for key in priorities)
                model.update_save_priorities(priorities)
                model.save(user=self.request.user)
            messages.success(self.request, "Items cleaned.")
            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(DeviceModelGroup,
                                               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(DeviceModelGroup,
                                               id=self.group_id)
            self.form = DeviceModelGroupForm(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 get(self, *args, **kwargs):
        try:
            self.model_type_id = int(self.kwargs.get('type', ''))
        except ValueError:
            self.model_type_id = None
        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(DeviceModelGroup, id=self.group_id)
        if self.group:
            self.query = self.group.devicemodel_set.all()
        else:
            self.query = DeviceModel.objects.filter(
                    type=self.model_type_id).filter(group=None)
        unassigned_devices = DeviceModel.objects.filter(
            type=self.model_type_id
        ).filter(
            group=None
        )
        unassigned_count = 0
        for u in unassigned_devices:
            unassigned_count = unassigned_count + u.get_count()
        self.unassigned_count = unassigned_count
        self.groups = list(DeviceModelGroup.objects.filter(
            type=self.model_type_id))
        for g in self.groups:
            g.count = g.get_count()
        if not self.form:
            self.form = DeviceModelGroupForm(instance=self.group)
        return super(CatalogDevice, self).get(*args, **kwargs)

    def get_context_data(self, **kwargs):
        ret = super(CatalogDevice, self).get_context_data(**kwargs)
        ret.update({
            'columns': ['count', 'size'],
            'groups': self.groups,
            'group': self.group,
            'unassigned_count': self.unassigned_count,
            'form': self.form,
        })
        ret.update(_prepare_model_groups(self.request, self.query))
        return ret
Пример #2
0
class CatalogDevice(Catalog):
    template_name = 'ui/catalog/device.html'

    def __init__(self, *args, **kwargs):
        super(CatalogDevice, self).__init__(*args, **kwargs)
        self.form = None

    def update_cached(self, group):
        for device in Device.objects.filter(model__group=group):
            pricing.device_update_cached(device)

    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(DeviceModel, id=items[0])
                target = DeviceModelGroup(name=item.name, type=item.type)
                target.save(user=self.request.user)
            else:
                target = get_object_or_404(DeviceModelGroup, id=target_id)
            for item in items:
                model = get_object_or_404(DeviceModel, 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 'clear' in self.request.POST:
            items = self.request.POST.getlist('items')
            if not items:
                messages.error(self.request, "Nothing to clear.")
                return HttpResponseRedirect(self.request.path)
            for item in items:
                model = get_object_or_404(DeviceModel, id=item)
                priorities = model.get_save_priorities()
                priorities = dict((key, 0) for key in priorities)
                model.update_save_priorities(priorities)
                model.save(user=self.request.user)
            messages.success(self.request, "Items cleaned.")
            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(DeviceModelGroup,
                                               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(DeviceModelGroup,
                                               id=self.group_id)
            self.form = DeviceModelGroupForm(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 get(self, *args, **kwargs):
        try:
            self.model_type_id = int(self.kwargs.get('type', ''))
        except ValueError:
            self.model_type_id = None
        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(DeviceModelGroup, id=self.group_id)
        if self.group:
            self.query = self.group.devicemodel_set.all()
        else:
            self.query = DeviceModel.objects.filter(
                type=self.model_type_id).filter(group=None)
        unassigned_devices = DeviceModel.objects.filter(
            type=self.model_type_id
        ).filter(
            group=None
        )
        unassigned_count = 0
        for u in unassigned_devices:
            unassigned_count = unassigned_count + u.get_count()
        self.unassigned_count = unassigned_count
        self.groups = list(DeviceModelGroup.objects.filter(
            type=self.model_type_id))
        for g in self.groups:
            g.count = g.get_count()
        if not self.form:
            self.form = DeviceModelGroupForm(instance=self.group)
        return super(CatalogDevice, self).get(*args, **kwargs)

    def get_context_data(self, **kwargs):
        ret = super(CatalogDevice, self).get_context_data(**kwargs)
        ret.update({
            'columns': ['count', 'size'],
            'groups': self.groups,
            'group': self.group,
            'unassigned_count': self.unassigned_count,
            'form': self.form,
        })
        ret.update(_prepare_model_groups(self.request, self.query))
        return ret