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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)