예제 #1
0
def delete_net(request):
    net = get_object_or_404(Net, pk=request.POST.get('id'))
    Spy().log(object=net, action=Spy.DELETE, user=request.user)
    messages.add_message(request, messages.SUCCESS, "Сеть %s удалена" % net)

    if request.POST.get('delete_subnets', None):
        children = Net.objects.children_of(net)
        for child in children:
            if child.protected:
                messages.add_message(request, messages.ERROR,
                                     "Сеть %s защищена" % child)
            else:
                messages.add_message(request, messages.SUCCESS,
                                     "Сеть %s удалена" % child)
                Spy().log(object=child, action=Spy.DELETE, user=request.user)
                child.delete()

    if request.POST.get('delete_vlan', None):
        messages.add_message(request, messages.SUCCESS,
                             "Vlan %s удален" % net.vlan)
        Spy().log(object=net.vlan, action=Spy.DELETE, user=request.user)
        net.vlan.delete()

    net.delete()
    return redirect(view_nodes)
예제 #2
0
def device_create(request):
    context = {'app': 'devices', 'tab': 'add', 'mode': 'edit'}

    form = CreateDeviceForm(request.POST or None)
    if form.is_valid():
        device = form.save()
        Spy().created(form.instance, form, request)
        ipaddress = form.cleaned_data.get('ipaddress')
        if ipaddress:
            net = Net(address=ipaddress,
                      netmask=32,
                      status='+',
                      device=device,
                      description='%s management' % device.netname)
            net.save()

            device.management_net = net
            device.save()
            Spy().created(instance=net, request=request)
            messages.success(request, 'Сеть %s создана' % net)

        messages.add_message(request, messages.SUCCESS,
                             "Device успешно создан")
        return redirect(device_view, device_id=form.instance.pk)

    context['form'] = form
    return render(request, 'bs3/devices/device_create.html', context)
예제 #3
0
def create_for_service(request):
    if request.method == "POST":  # Пришли данные для рабты
        form = VlanForm(request.POST)
        service = get_object_or_404(Service, pk=request.POST.get('service_id'))
        free_vlans = service.get_free_vlans()

        if form.is_valid():
            # TODO: Проверка данных на соответствие требованиям услуги
            form.save()
            if form.instance.pk:
                form.instance.service = service
                Spy().log(object=form.instance,
                          form=form,
                          user=request.user,
                          action=Spy.CREATE)
                Spy().log(object=service, user=request.user, action=Spy.CREATE)
                form.instance.save()
                # TODO: add success message
            else:
                pass
            # TODO: add an error message
            return redirect(service_view, service_id=service.pk)

        else:
            service = get_object_or_404(Service, pk=request.GET.get('service'))

    else:  # Данных в POST нет, просто выводим форму для добавления новой сети
        service = get_object_or_404(Service, pk=request.GET.get('service'))

        rt = request.GET.get('rt')

        free_vlans = service.get_free_vlans()

        recommended_vlan = ''
        if free_vlans:
            recommended_vlan = free_vlans[0].vlannum
        form = VlanForm(
            initial={
                'rt': rt,
                'vlannum': recommended_vlan,
                'vname': '%s_' % service.client.netname
            })

    context = {
        'form': form,
        'service': service,
        'free_vlans': free_vlans[:134],
        'app': 'vlans'
    }

    return render(request, 'bs3/vlans/add_vlan_to_service.html', context)
예제 #4
0
def update_application(request, application_id):
    context = {'app': 'docs', 'mode': 'edit'}

    application = get_object_or_404(Application, pk=application_id)
    context['application'] = application

    form = ApplicationForm(instance=application)
    context['form'] = form

    if request.method == 'POST':

        form = ApplicationForm(data=request.POST, instance=application)
        context['form'] = form
        if form.is_valid():

            form.save()
            Spy().log(object=form.instance,
                      form=form,
                      action=Spy.CHANGE,
                      user=request.user)
            messages.add_message(request, messages.SUCCESS,
                                 'Информация обновлена')

            # Trying to handle file if exists
            if request.FILES.get('file'):
                result = application.handle_file(request.FILES['file'])
                if result:
                    messages.add_message(request, messages.SUCCESS,
                                         'Файл "%s" успешно загружен' % result)
                else:
                    messages.add_message(request, messages.ERROR,
                                         "Ошибка сохранения файла")

            return redirect(view_application, application_id=application.pk)
    return render(request, 'bs3/docs/update_application.html', context)
예제 #5
0
def entry_delete(request):
    entry = get_object_or_404(Entry, pk=request.POST.get('id'))
    Spy().log(object=entry, form=None, user=request.user, action=Spy.DELETE)
    entry.delete()
    messages.add_message(request, messages.SUCCESS,
                         'Оборудование удалено со склада')
    return redirect(entry_list)
예제 #6
0
def incident_create(request):
    context = {'tab': 'add', 'app': 'ins'}

    initial = {
        'time_start':
        datetime.now().replace(minute=0,
                               second=0).strftime('%Y-%m-%d %H:%M:%S'),
        'time_end':
        datetime.now().replace(minute=0,
                               second=0).strftime('%Y-%m-%d %H:%M:%S')
    }

    for field in InsForm.Meta.fields:
        value = request.GET.get(field, '')
        if value:
            if field == 'fiber':
                value = value.replace(', ', ', \n').strip()
            initial[field] = value

    form = InsForm(request.POST or None, initial=initial)

    if form.is_valid():
        form.instance.creator = request.user
        form.save()
        Spy().created(form.instance, form, request)
        messages.add_message(request, messages.SUCCESS, "INS успешно создан")
        return redirect(incident_view, incident_id=form.instance.pk)
    context['form'] = form
    return render(request, 'bs3/ins/incident_create.html', context)
예제 #7
0
def update_net(request, net_id):
    return_to = request.GET.get('return_to')

    net = get_object_or_404(Net, pk=net_id)
    if request.method == "POST":
        form = NetForm(request.POST, instance=net)
        if form.is_valid():
            try:
                form.save()
            except ValueError as e:
                messages.add_message(request, messages.ERROR, str(e))
            else:
                Spy().changed(instance=form.instance,
                              old_instance=net,
                              form=form,
                              request=request)
                messages.add_message(request, messages.SUCCESS,
                                     "Данные сети обновлены")
                if return_to == 'nets':
                    return redirect(view_nodes)
                else:
                    return redirect(view_net, net_id=net.pk)
    else:
        form = NetForm(instance=net)

    context = {'form': form, 'net': net}
    return render(request, 'bs3/nets/update_net.html', context)
예제 #8
0
def assign_to_service(request):
    if request.method == "POST":  # Пришли данные для рабты
        service = get_object_or_404(Service, pk=request.POST.get('service_id'))

        vlan_id = request.POST.get('vlan_id')

        if not vlan_id.isdigit():
            messages.add_message(request, messages.ERROR, "Не определен влан")
            return redirect(
                "../vlans/?page=vlan&action=assigntoservice&service=%s" %
                service.pk)

        vlan = get_object_or_404(Vlan, pk=request.POST.get('vlan_id'))
        Spy().log(object=service, user=request.user, action=Spy.CHANGE)
        vlan.service = service
        vlan.save()

        messages.add_message(request, messages.SUCCESS,
                             "Влан %s добавлен к услуге %s" % (vlan, service))

        return redirect(service_view, service_id=service.pk)

    else:  # Данных в POST нет, просто выводим форму для добавления новой сети
        service = get_object_or_404(Service, pk=request.GET.get('service'))
    context = {'service': service, 'app': 'vlans'}

    return render(request, 'bs3/vlans/assign_vlan_to_service.html', context)
예제 #9
0
def device_update(request, device_id):
    tab = request.GET.get('tab', 'bundles')

    context = {'app': 'devices', 'mode': 'edit', 'tab': tab}
    device = get_object_or_404(Device, pk=device_id)
    management_nets = Net.objects.filter(device=device,
                                         netmask=32).order_by('ipaddress_from')
    store_entries = Entry.objects.filter(
        Q(device__isnull=True) | Q(device=device))

    if request.method == "POST":
        form = DeviceForm(request.POST, instance=device)
        form.fields['management_net'].queryset = management_nets
        form.fields['store_entry'].queryset = store_entries
        if form.is_valid():
            old_object = Device.objects.get(pk=device.pk)
            Spy().changed(device, old_object, form, request)
            form.save()
            messages.add_message(request, messages.SUCCESS,
                                 'Данные девайса обновлены')
            url = reverse(device_view, args=[device.pk])
            url += '?tab=%s' % tab
            return redirect(url)
    else:
        form = DeviceForm(instance=device)
        form.fields['management_net'].queryset = management_nets
        form.fields['store_entry'].queryset = store_entries

    context['form'] = form
    context['device'] = device

    return render(request, 'bs3/devices/device_update.html', context)
예제 #10
0
def entry_create(request):
    context = {'app': 'store', 'tab': 'add_entry'}
    form = EntryForm(request.POST or None)
    if form.is_valid():
        form.save()
        Spy().created(form.instance, form, request)
        messages.add_message(request, messages.SUCCESS, "Оборудование добавлено на склад")
        return redirect(entry_view, entry_id=form.instance.pk)
    context['form'] = form
    return render(request, 'bs3/store/entry_create.html', context)
예제 #11
0
def part_create(request):
    context = {'app': 'store', 'tab': 'add_part'}
    form = PartForm(request.POST or None)
    if form.is_valid():
        part = form.save()
        Spy().created(form.instance, form, request)
        messages.add_message(request, messages.SUCCESS, "Запчасть добавлена на склад")
        return redirect(reverse('part', args=[part.pk]))
    context['form'] = form
    return render(request, 'bs3/store/part_create.html', context)
예제 #12
0
def burst_set_add(request):
    context = {}
    form = BurstSetForm(request.POST or None)
    if form.is_valid():
        burst_set = form.save()
        Spy().created(form.instance, form, request)
        messages.add_message(request, messages.SUCCESS,
                             "Burst-набор успешно создан")
        return redirect(reverse('burst_set', args=[burst_set.pk]))

    context['form'] = form
    return render(request, 'bs3/burst/add_burst_set.html', context)
예제 #13
0
def vlan_create(request):
    context = {'app': 'vlans', 'tab': 'add'}
    vlan_id = request.GET.get('vlanid', None)
    form = VlanForm(request.POST or None, initial={'vlannum': vlan_id})
    if form.is_valid():
        form.save()
        Spy().created(form.instance, form, request)
        messages.add_message(request, messages.SUCCESS, "Vlan успешно создан")
        return redirect(vlan_view, vlan_id=form.instance.pk)
    print(form.errors)
    context['form'] = form
    return render(request, 'bs3/vlans/vlan_create.html', context)
예제 #14
0
def delete_application(request):
    application = get_object_or_404(Application, pk=request.POST.get('id'))
    agreement = application.agreement
    try:
        application.delete()
    except:
        messages.add_message(request, messages.ERROR,
                             "Ошибка при удалении документа.")

        return redirect(view_application, application_id=application.pk)
    Spy().log(object=application, action=Spy.DELETE, user=request.user)
    messages.add_message(request, messages.SUCCESS, "Документ удален")
    return redirect(view_agreement, agreement_id=agreement.pk)
예제 #15
0
def client_create(request):
    context = {'app': 'clients', 'tab': 'add'}

    form = ClientForm(request.POST or None)
    if form.is_valid():
        form.save()
        Spy().created(form.instance, form, request)
        messages.add_message(request, messages.SUCCESS, "Клиент успешно создан")
        return redirect(client_view, client_id=form.instance.pk)

    context['form'] = form

    return render(request, 'bs3/clients/add_client.html', context)
예제 #16
0
def company_create(request):
    context = {'app': 'cities', 'tab': 'add'}

    form = CompanyForm(request.POST or None)
    if form.is_valid():
        form.save()
        Spy().created(form.instance, form, request)
        messages.add_message(request, messages.SUCCESS,
                             "Компания успешно создана")
        return redirect(company_view, company_id=form.instance.pk)

    context['form'] = form
    return render(request, 'bs3/companies/company_create.html', context)
예제 #17
0
def add_application(request, agreement_id):
    context = {'app': 'docs'}
    agreement = get_object_or_404(Agreement, pk=agreement_id)
    context['agreement'] = agreement
    form = ApplicationForm()
    context['form'] = form

    if request.method == 'POST':
        form = ApplicationForm(request.POST, request.FILES)
        context['form'] = form

        if form.is_valid():

            agreement = Agreement.objects.get(pk=agreement_id)

            try:
                form.instance.agreement = agreement
                form.instance.creator = request.user
                Spy().log(object=form.instance,
                          form=form,
                          action=Spy.CREATE,
                          user=request.user)
                form.save()
            except Exception as e:
                messages.add_message(request, messages.ERROR,
                                     'Ошибка целостности БД: %s' % e)
                context = {'form': form, 'app': 'docs'}
                return render(request, 'bs3/docs/add_application.html',
                              context)

            application = form.instance
            application.agreement = agreement
            application.save()

            # Trying to handle file if exists
            if request.FILES.get('file'):
                result = application.handle_file(request.FILES['file'])
                if result:
                    messages.add_message(request, messages.SUCCESS,
                                         'Файл "%s" успешно загружен' % result)
                else:
                    messages.add_message(request, messages.ERROR,
                                         "Ошибка сохранения файла")
            else:
                messages.add_message(request, messages.ERROR,
                                     "Загрузите скан документа")

            return redirect(view_agreement, agreement_id=agreement.pk)

    return render(request, 'bs3/docs/add_application.html', context)
예제 #18
0
def delete_agreement(request):
    agreement = get_object_or_404(Agreement, pk=request.POST.get('id'))
    try:
        agreement.delete()
    except:
        messages.add_message(request, messages.ERROR,
                             "Ошибка при удалении документа.")
        return redirect(view_agreement, agreement_id=agreement.pk)
    Spy().log(object=agreement, action=Spy.DELETE, user=request.user)

    messages.add_message(request, messages.SUCCESS,
                         "Договор и все сопутствующие файлы удалены")

    return redirect(view_agreements)
예제 #19
0
def entry_update(request, entry_id):
    context = {'app': 'store', 'mode': 'edit'}
    entry = get_object_or_404(Entry, pk=entry_id)
    if request.method == "POST":
        form = EntryForm(request.POST, instance=entry)
        if form.is_valid():
            old_object = Entry.objects.get(pk=entry.pk)
            Spy().changed(entry, old_object, form, request)
            form.save()
            messages.add_message(request, messages.SUCCESS, 'Данные оборудования обновлены')
            return redirect(entry_view, entry_id=form.instance.pk)
    else:
        form = EntryForm(instance=entry)
    context['form'] = form
    context['entry'] = entry
    return render(request, 'bs3/store/entry_update.html', context)
예제 #20
0
def vlan_update(request, vlan_id):
    context = {'app': 'vlans', 'mode': 'edit'}
    vlan = get_object_or_404(Vlan, pk=vlan_id)
    if request.method == "POST":
        form = VlanForm(request.POST, instance=vlan)
        if form.is_valid():
            old_object = Vlan.objects.get(pk=vlan.pk)
            Spy().changed(vlan, old_object, form, request)
            form.save()
            messages.add_message(request, messages.SUCCESS,
                                 'Данные Vlan обновлены')
            return redirect(vlan_view, vlan_id=form.instance.pk)
    else:
        form = VlanForm(instance=vlan)
    context['form'] = form
    context['vlan'] = vlan
    return render(request, 'bs3/vlans/vlan_update.html', context)
예제 #21
0
def add_net(request):
    # initial data
    selected_address = request.GET.get("address", "")
    selected_netmask = request.GET.get("mask", "")
    selected_device = request.GET.get("device", "")
    selected_vlan = request.GET.get("vlan", "")
    selected_allocated_for = request.GET.get("allocated_for", "internal")
    return_to = request.GET.get('return_to')
    return_net = request.GET.get('return_net')

    vlans = Vlan.objects.filter(is_management=True).order_by("vlannum")
    vlans_choices = [("", "")]
    for vlan in vlans:
        choice = (vlan.pk, "%s - %s" % (vlan.vlannum, vlan.vname))
        vlans_choices.append(choice)

    if request.method == "POST":  # Пришли данные для рабты
        form = NetForm(request.POST)
        if form.is_valid():
            try:
                form.save()
            except ValueError as e:
                messages.add_message(request, messages.ERROR, str(e))
            else:
                form.save()
                Spy().created(form.instance, form, request)
                if return_to == 'net' and return_net:
                    return redirect(view_net, net_id=return_net)
                return redirect(view_net, net_id=form.instance.pk)

    else:

        form = NetForm(initial={'allocated_for': selected_allocated_for,
                                'address': selected_address,
                                'netmask': selected_netmask,
                                'vlan': selected_vlan,
                                'device': selected_device})

    context = {'form': form,
               'app': 'nets',
               'tab': 'add'}

    return render(request, 'bs3/nets/add_net.html', context)
예제 #22
0
def part_update(request, part_id):
    context = {'app': 'store', 'mode': 'edit'}
    part = get_object_or_404(Part, pk=part_id)
    context['part'] = part

    form = PartForm(instance=part)
    context['form'] = form

    if request.method == "POST":
        form = PartForm(request.POST, instance=part)
        context['form'] = form
        if form.is_valid():
            old_object = Part.objects.get(pk=part.pk)
            Spy().changed(part, old_object, form, request)
            form.save()
            messages.add_message(request, messages.SUCCESS, 'Данные запчасти обновлены')
            return redirect(reverse('part', args=[part.pk]))

    return render(request, 'bs3/store/part_update.html', context)
예제 #23
0
def company_update(request, company_id):
    context = {'app': 'companies'}
    company = get_object_or_404(Company, pk=company_id)
    context['company'] = company

    form = CompanyForm(instance=company)
    context['form'] = form

    if request.method == "POST":
        form = CompanyForm(request.POST, instance=company)
        context['form'] = form
        if form.is_valid():
            old_object = Company.objects.get(pk=company.pk)
            Spy().changed(company, old_object, form, request)
            form.save()
            messages.add_message(request, messages.SUCCESS,
                                 'Данные компании обновлены')
            url = reverse(company_view, args=[company.pk])
            return redirect(url)

    return render(request, 'bs3/companies/company_update.html', context)
예제 #24
0
def client_update(request, client_id):
    context = {'app': 'clients', 'mode': 'edit'}

    client = get_object_or_404(Client, pk=client_id)
    if request.method == "POST":
        form = ClientForm(request.POST, instance=client)
        if form.is_valid():
            old_object = Client.objects.get(pk=client.pk)
            Spy().changed(client, old_object, form, request)
            form.save()
            messages.add_message(request, messages.SUCCESS, 'Данные клиента обновлены')
            return redirect(client_view, client_id=form.instance.pk)

    else:
        form = ClientForm(instance=client)

    context['form'] = form
    context['client'] = client
    context['our_services_common'] = common_models.Ourservice.objects.filter(tech_type='common')
    context['our_services_as'] = common_models.Ourservice.objects.filter(tech_type='as')

    return render(request, 'bs3/clients/update_client.html', context)
예제 #25
0
def assign_to_service(request):
    if request.method == "POST":  # Пришли данные для рабты
        service = get_object_or_404(Service, pk=request.POST.get('service_id'))
        net = get_object_or_404(Net, pk=request.POST.get('object_id'))

        Spy().log(object=net, user=request.user, action=Spy.CHANGE)
        net.service = service
        net.save()

        return redirect(service_view, service_id=service.pk)

    else:  # Данных в POST нет, просто выводим форму для добавления новой сети
        service = get_object_or_404(Service, pk=request.GET.get('service'))

    return_to, return_to_id = h.return_to(request, "net")

    context = {'service': service,
               'app': 'nets',
               'return_to': return_to,
               'return_to_id': return_to_id,
               }

    return render(request, 'bs3/nets/assign_net_to_service.html', context)
예제 #26
0
def incident_update(request, incident_id):
    context = {'app': 'ins'}
    incident = get_object_or_404(Incident, pk=incident_id)

    form = InsForm(instance=incident)

    if request.POST:
        form = InsForm(request.POST, instance=incident)
        if form.is_valid():
            old_object = Incident.objects.get(pk=incident.pk)
            Spy().changed(form.instance, old_object, form, request)
            form.save()
            messages.add_message(request, messages.SUCCESS,
                                 'Данные Incident обновлены')
            return redirect(incident_view, incident_id=form.instance.pk)

    context['form'] = form
    context['incident'] = incident

    logs = Spy.objects.filter(object_name='incident',
                              object_id=incident.pk).order_by('-time')
    context['logs'] = logs

    return render(request, 'bs3/ins/incident_update.html', context)
예제 #27
0
def select_path(request):
    context = {}

    # getting by bundle_id
    source_id = request.GET.get('source_id', None)
    target_id = request.GET.get('target_id', None)

    if source_id:
        source_bundle = common_models.Bundle.objects.get(pk=source_id)
    if target_id:
        target_bundle = common_models.Bundle.objects.get(pk=target_id)

    # getting vlan_id
    vlan_id = request.GET.get('vlan_id', None)
    vlan_name = request.GET.get('vlan_name', None)
    context['vlan_id'] = vlan_id
    context['vlan_name'] = vlan_name

    exclude_string = request.GET.get('exclude_netnames', '')
    exclude_netnames = exclude_string.split()

    if not source_id or not target_id:
        messages.add_message(request, messages.ERROR, 'Не указаны Source ID или Target ID')
        return redirect(select_bundles)

    suggested_paths = PathFinder().suggest_paths(source_id, target_id, exclude_netnames)

    requested_path_string = request.GET.get('requested_path', '')
    requested_path = requested_path_string.split()
    context['requested_path'] = requested_path

    forced_path_string = request.GET.get('forced_path', '')
    forced_path = forced_path_string.split()
    if forced_path and forced_path not in suggested_paths['paths']:
        suggested_paths['paths'].append(forced_path)
        requested_path = forced_path
        context['requested_path'] = forced_path
        context['forced_path'] = forced_path

    if requested_path:
        try:
            full_path = PathFinder().full_path(source_id, target_id, requested_path)
        except PathNotFound:
            full_path = None
            messages.add_message(request, messages.ERROR, 'Путь через %s не существует' % ' -> '.join(requested_path))
        context['full_path'] = full_path

    context['suggested_paths'] = suggested_paths
    context['source_bundle'] = source_bundle
    context['target_bundle'] = target_bundle
    context['exclude_netnames'] = exclude_netnames

    initial = {}
    if vlan_id:
        try:
            vlan = Vlan.objects.get(vlannum=vlan_id, service__isnull=True, is_management=False)
            initial = {'vlan': vlan}
        except Vlan.DoesNotExist:
            initial = {'vlan_id': vlan_id, 'vlan_name': vlan_name}
            vlan = None

    service_form = ServiceForm(initial=initial)

    if request.POST:
        service_form = ServiceForm(request.POST)
        if service_form.is_valid():
            client = service_form.cleaned_data['client']

            service = common_models.Service()
            service.client = client
            service.status = 'on'
            service.name = 'l2'
            service.ticket = service_form.cleaned_data['ticket']
            service.comment = service_form.cleaned_data['comment']
            service.servicetype = service_form.cleaned_data['service_type']
            service.description = service_form.cleaned_data['description']
            service.start_time = datetime.datetime.now()
            service.end_time = datetime.datetime.now()
            service.save()
            for city in service_form.cleaned_data['cities']:
                service.cities.add(city)
            Spy().created(service, service_form, request, client)
            messages.add_message(request, messages.SUCCESS, 'Услуга %s успешно создана' % service)

            if service_form.cleaned_data['vlan']:
                vlan = service_form.cleaned_data['vlan']
                vlan.service = service
                vlan.save()
                messages.add_message(request, messages.SUCCESS, 'Влан %s привязан к услуге %s' % (vlan, service))
            elif service_form.cleaned_data['vlan_id'] and service_form.cleaned_data['vlan_name']:
                vlan = Vlan()
                vlan.vlannum = service_form.cleaned_data['vlan_id']
                vlan.vname = service_form.cleaned_data['vlan_name']
                vlan.rt = service_form.cleaned_data['rt']
                vlan.service = service
                try:
                    vlan.save()
                except IntegrityError:
                    messages.add_message(request, messages.ERROR, 'Влан с id %s или названием %s '
                                                                  'уже существует' % (vlan.vlannum, vlan.vname))
                else:
                    messages.add_message(request, messages.SUCCESS, 'Влан %s успешно создан' % vlan)
            return redirect('service', service_id=service.pk)

    context['service_form'] = service_form

    return render(request, 'bs3/path_finder/wizard/select_path.html', context)
예제 #28
0
def vlan_delete(request):
    vlan = get_object_or_404(Vlan, pk=request.POST.get('id'))
    Spy().log(object=vlan, form=None, user=request.user, action=Spy.DELETE)
    vlan.delete()
    messages.add_message(request, messages.SUCCESS, 'Vlan удален')
    return redirect(vlan_list)
예제 #29
0
def add_agreement(request):
    if request.method == 'POST':  # Если данные приехали из POST, то пытаемся добавить клиента
        form = AgreementForm(request.POST)

        if form.is_valid():
            try:
                form.instance.creator = request.user
                form.save()
                Spy().log(object=form.instance,
                          form=form,
                          action=Spy.CREATE,
                          user=request.user)
            except:
                messages.add_message(request, messages.ERROR,
                                     'Ошибка целостности БД.')
                context = {'form': form, 'app': 'docs', 'tab': 'add'}
                return render(request, 'bs3/docs/add_agreement.html', context)

            agreement = form.instance

            # Trying to handle file if exists
            if request.FILES.get('file'):
                result = agreement.handle_file(request.FILES['file'])
                if result:
                    messages.add_message(request, messages.SUCCESS,
                                         'Файл "%s" успешно загружен' % result)
                else:
                    messages.add_message(request, messages.ERROR,
                                         "Ошибка сохранения файла")
            else:
                messages.add_message(request, messages.ERROR,
                                     "Загрузите скан документа")

            Spy().log(object=agreement, action=Spy.CREATE, user=request.user)
            return redirect(view_agreement, agreement_id=agreement.pk)

        else:
            choices = [('', '')]
            clients = Client.objects.filter(
                clientname__isnull=False).order_by("clientname")
            for client in clients:
                choice = (client.pk,
                          "%s — %s" % (client.clientname, client.netname))
                choices.append(choice)

            form = h.inject_choices(form=form,
                                    field_name='client',
                                    choices=choices,
                                    required=False)

            messages.add_message(request, messages.ERROR,
                                 'Форма содержит ошибки')
            context = {'form': form, 'app': 'docs', 'tab': 'add'}
            return render(request, 'bs3/docs/add_agreement.html', context)

    else:
        initial = {}
        company_id = request.GET.get('company')
        if company_id:
            initial['company'] = get_object_or_404(Company, pk=company_id)
        form = AgreementForm(initial=initial)

        context = {'form': form, 'app': 'docs', 'tab': 'add'}
        return render(request, 'bs3/docs/add_agreement.html', context)
예제 #30
0
def device_delete(request):
    device = get_object_or_404(Device, pk=request.POST.get('id'))
    Spy().log(object=device, form=None, user=request.user, action=Spy.DELETE)
    device.delete()
    messages.add_message(request, messages.SUCCESS, 'Device удален')
    return redirect(device_list)