Exemple #1
0
def distribution(request, queryset):
    action = sys._getframe().f_code.co_name
    action_name = "分配机柜"
    queryset = queryset.filter(actived=False)
    onidc_id = request.user.onidc.id
    options = Option.objects.filter(actived=True)
    clients = shared_queryset(Client.objects.filter(actived=True), onidc_id)
    status = shared_queryset(options.filter(flag='Rack-Status'), onidc_id)
    styles = shared_queryset(options.filter(flag='Rack-Style'), onidc_id)
    if request.POST.get('post') and request.POST.getlist('items'):

        def construct_item(index):
            obj = queryset.get(pk=int(index))
            try:
                client = int(request.POST.get('client-' + str(index)))
            except BaseException:
                client = 0
            status = int(request.POST.get(f'status-{index}'))
            style = int(request.POST.get(f'style-{index}'))
            expiry_date = request.POST.get(f'expiry_date-{index}')
            cpower = request.POST.get(f'cpower-{index}')
            comment = request.POST.get((f'comment-{index}'), None)
            return obj, client, status, style, expiry_date, cpower, comment

        for item in request.POST.getlist('items'):
            obj, client, status, style, expiry_date, cpower, _ = construct_item(
                item)
            try:
                expiry_date = timezone.datetime.strptime(
                    expiry_date, '%Y-%m-%d').date()
            except BaseException:
                expiry_date = None
            o = copy.deepcopy(obj)
            if client != 0:
                obj.client_id = client
            obj.status_id = status
            obj.style_id = style
            obj.cpower = cpower
            obj.expiry_date = expiry_date
            obj.actived = True
            obj.save()
            diffs = diff_dict(serialize_object(o), serialize_object(obj))
            log_action(user_id=request.user.pk,
                       content_type_id=get_content_type_for_model(obj,
                                                                  True).pk,
                       object_id=obj.pk,
                       action_flag=action_name,
                       message=json.dumps(list(diffs.keys())),
                       content=json.dumps(diffs))
        return None

    context = construct_context(request, queryset, action, action_name)
    _extra = dict(clients=clients, status=status, styles=styles)
    context.update(_extra)
    return TemplateResponse(request, 'rack/distribution.html', context)
Exemple #2
0
 def __init__(self, *args, **kwargs):
     self.user = kwargs.pop('user', None)
     super(FormBaseMixin, self).__init__(*args, **kwargs)
     if 'mark' in self.fields:
         self.fields['mark'].widget = forms.HiddenInput()
     if self.user is not None:
         onidc_id = self.user.onidc_id
         effective = {
             'onidc_id': onidc_id,
             'deleted': False,
             'actived': True}
         for field_name in self.fields:
             field = self.fields.get(field_name)
             if isinstance(
                     field,
                     (forms.fields.SlugField,
                      forms.fields.CharField)):
                 self.fields[field_name].widget.attrs.update(
                     {'autocomplete': "off"})
             if isinstance(field, forms.fields.DateTimeField):
                 self.fields[field_name].widget.attrs.update(
                     {'data-datetime': "true"})
             if isinstance(field.widget, forms.widgets.Textarea):
                 self.fields[field_name].widget.attrs.update({'rows': "3"})
             if isinstance(field, (
                     forms.models.ModelChoiceField,
                     forms.models.ModelMultipleChoiceField)):
                 fl = ''
                 if getattr(field.queryset.model, 'mark', False):
                     field.queryset = shared_queryset(
                         field.queryset, onidc_id)
                     if field.queryset.model is Option:
                         _prefix = self._meta.model._meta.model_name
                         _postfix = field_name.capitalize()
                         flag = _prefix.capitalize() + '-' + _postfix
                         fl = flag
                         field_initial = field.queryset.filter(
                             master=True, flag=flag)
                         if field_initial.exists():
                             field.initial = field_initial.first()
                 else:
                     field.queryset = field.queryset.filter(**effective)
                 mn = field.queryset.model._meta
                 if can_create(mn, self.user) and fl:
                     fk_url = format_html(
                         ''' <a title="点击添加一个 {}"'''
                         ''' href="/new/{}/?flag={}">'''
                         '''<i class="fa fa-plus"></i></a>'''.format(
                             field.label, mn.model_name, fl))
                 elif can_create(mn, self.user) and not fl:
                     fk_url = format_html(
                         ''' <a title="点击添加一个 {}"'''
                         ''' href="/new/{}">'''
                         '''<i class="fa fa-plus"></i></a>'''.format(
                             field.label, mn.model_name))
                 else:
                     fk_url = ''
                 field.help_text = field.help_text + fk_url
             self.fields[field_name].widget.attrs.update(
                 {'class': "form-control"})
Exemple #3
0
def get_or_create_style(name, onidc_id):
    f = dict(onidc_id=onidc_id, flag='Device-Style', text=name.strip())
    qs = shared_queryset(Option.objects.filter(**f), onidc_id)
    if qs.exists():
        instance = qs.first()
    else:
        extra = dict(description=name.strip(), creator_id=CreatorId)
        f.update(**extra)
        instance = Option.objects.create(**f)
    return instance
Exemple #4
0
def get_or_create_option(name, onidc_id, flag, create=False):
    if not name.strip():
        instance = None
    f = dict(onidc_id=onidc_id, flag=flag, text=name.strip())
    qs = shared_queryset(Option.objects.filter(**f), onidc_id)
    if qs.exists():
        instance = qs.first()
    else:
        if create and name.strip():
            extra = dict(description=name.strip(), creator_id=CreatorId)
            f.update(**extra)
            instance = Option.objects.create(**f)
        else:
            instance = None
    return instance
Exemple #5
0
 def make_rack_statistics(self):
     data = []
     robjects = Rack.objects.filter(onidc_id=self.onidc_id, actived=True)
     keys = Option.objects.filter(flag__in=['Rack-Style', 'Rack-Status'],
                                  actived=True)
     keys = shared_queryset(keys, self.onidc_id)
     for k in keys:
         d = []
         query = {k.flag.split('-')[1].lower(): k}
         c = robjects.filter(**query).count()
         if c > 0:
             d.append(force_text(k))
             d.append(c)
         if d:
             data.append(d)
     return data
Exemple #6
0
 def make_online_statistics(self):
     data = []
     dobjects = Online.objects.filter(onidc_id=self.onidc_id)
     keys = Option.objects.filter(flag__in=['Device-Style', 'Device-Tags'])
     keys = shared_queryset(keys, self.onidc_id)
     for k in keys:
         d = []
         if k.flag == 'Device-Style':
             c = dobjects.filter(style=k).count()
         else:
             c = dobjects.filter(tags__in=[k]).count()
         if c > 0:
             d.append(force_text(k))
             d.append(c)
         if d:
             data.append(d)
     return data
Exemple #7
0
def get_or_create_client(name, onidc_id):
    qs = Client.objects.filter(name=name.strip())
    if qs.exists():
        instance = qs.first()
    else:
        f = dict(flag='Client-Style')
        types = shared_queryset(Option.objects.filter(**f), onidc_id)
        if types.exists():
            default = types.filter(master=True)
            if default.exists():
                style = default.first()
            else:
                style = types.first()
        else:
            return None, "客户类型不能为空"
        instance = Client.objects.create(onidc_id=onidc_id,
                                         creator_id=CreatorId,
                                         name=name.strip(),
                                         style=style)
    return instance, None
Exemple #8
0
 def get_options(self):
     options = Option.objects.filter(actived=True)
     return shared_queryset(options, self.onidc_id)