def test_system_modificator_tag_form_filled(self):
        """test additional form content"""

        # get object
        systemstatus_id = Systemstatus.objects.get(
            systemstatus_name='systemstatus_1').systemstatus_id
        # get object
        tag_1_id = Tag.objects.get(tag_name='tag_1').tag_id
        tag_2_id = Tag.objects.get(tag_name='tag_2').tag_id
        # get object
        system = System.objects.get(system_name='system_1')
        # get object
        form = SystemModificatorForm(
            data={
                'systemlist': [
                    str(system.system_id),
                ],
                'systemstatus': systemstatus_id,
                'systemstatus_choice': 'keep_status',
                'analysisstatus_choice': 'keep_status',
                'tag': [tag_1_id, tag_2_id],
                'company_delete': 'keep_not_add',
                'tag_delete': 'keep_not_add',
                'contact_delete': 'keep_existing',
                'location_delete': 'keep_existing',
                'serviceprovider_delete': 'keep_existing',
            })
        # compare
        self.assertTrue(form.is_valid())
Ejemplo n.º 2
0
    def test_system_modificator_form_empty(self):
        """ test minimum form requirements / INVALID """

        # get object
        form = SystemModificatorForm(data={})
        # compare
        self.assertFalse(form.is_valid())
Ejemplo n.º 3
0
    def test_system_modificator_contact_form_filled(self):
        """ test additional form content """

        # get object
        systemstatus_id = Systemstatus.objects.get(
            systemstatus_name='systemstatus_1').systemstatus_id
        # get object
        contact_id = Contact.objects.get(contact_name='contact_1').contact_id
        # get object
        system = System.objects.get(system_name='system_1')
        # get object
        form = SystemModificatorForm(
            data={
                'systemlist': [
                    str(system.system_id),
                ],
                'systemstatus': systemstatus_id,
                'contact': contact_id,
                'company_delete': 'keep_not_add',
                'tag_delete': 'keep_not_add',
                'contact_delete': 'keep_existing',
                'location_delete': 'keep_existing',
                'serviceprovider_delete': 'keep_existing',
            })
        # compare
        self.assertTrue(form.is_valid())
Ejemplo n.º 4
0
    def test_system_modificator_systemlist_admin_style(self):
        """ test for multiple line input """

        # get object
        systemstatus_id = Systemstatus.objects.get(
            systemstatus_name='systemstatus_1').systemstatus_id
        # get object
        system1 = System.objects.get(system_name='system_1')
        system2 = System.objects.get(system_name='system_2')
        # get object
        form = SystemModificatorForm(
            data={
                'systemlist': [
                    str(system1.system_id),
                    str(system2.system_id),
                ],
                'systemstatus': systemstatus_id,
                'company_delete': 'keep_not_add',
                'tag_delete': 'keep_not_add',
                'contact_delete': 'keep_existing',
                'location_delete': 'keep_existing',
                'serviceprovider_delete': 'keep_existing',
            })
        # compare
        self.assertTrue(form.is_valid())
Ejemplo n.º 5
0
    def test_system_modificator_systemlist_form_filled(self):
        """ test minimum form requirements / INVALID """

        # get object
        form = SystemModificatorForm(data = {
            'systemlist': 'system_1',
        })
        # compare
        self.assertFalse(form.is_valid())
Ejemplo n.º 6
0
    def test_system_modificator_systemlist_multi_line(self):
        """ test for multiple line input """

        # get object
        systemstatus_id = Systemstatus.objects.get(systemstatus_name='systemstatus_1').systemstatus_id
        # get object
        form = SystemModificatorForm(data = {
            'systemlist': 'system_1\nsystem_2\nsystem_3',
            'systemstatus': systemstatus_id,
        })
        # compare
        self.assertTrue(form.is_valid())
Ejemplo n.º 7
0
    def test_system_modificator_systemstatus_form_filled(self):
        """ test minimum form requirements / VALID """

        # get object
        systemstatus_id = Systemstatus.objects.get(systemstatus_name='systemstatus_1').systemstatus_id
        # get object
        form = SystemModificatorForm(data = {
            'systemlist': 'system_1',
            'systemstatus': systemstatus_id,
        })
        # compare
        self.assertTrue(form.is_valid())
Ejemplo n.º 8
0
    def test_system_modificator_analysisstatus_form_filled(self):
        """ test additional form content """

        # get object
        systemstatus_id = Systemstatus.objects.get(systemstatus_name='systemstatus_1').systemstatus_id
        # get object
        analysisstatus_id = Analysisstatus.objects.get(analysisstatus_name='analysisstatus_1').analysisstatus_id
        # get object
        form = SystemModificatorForm(data = {
            'systemlist': 'system_1',
            'systemstatus': systemstatus_id,
            'analysisstatus': analysisstatus_id,
        })
        # compare
        self.assertTrue(form.is_valid())
Ejemplo n.º 9
0
    def test_system_modificator_location_form_label(self):
        """ test form label """

        # get object
        form = SystemModificatorForm()
        # compare
        self.assertEqual(form.fields['location'].label, 'Location')
Ejemplo n.º 10
0
    def test_system_modificator_systemstatus_form_label(self):
        """ test form label """

        # get object
        form = SystemModificatorForm()
        # compare
        self.assertEqual(form.fields['systemstatus'].label, 'Systemstatus (*)')
Ejemplo n.º 11
0
    def test_system_modificator_company_form_label(self):
        """ test form label """

        # get object
        form = SystemModificatorForm()
        # compare
        self.assertEqual(form.fields['company'].label, 'Companies')
Ejemplo n.º 12
0
    def test_system_modificator_tag_form_filled(self):
        """ test additional form content """

        # get object
        systemstatus_id = Systemstatus.objects.get(systemstatus_name='systemstatus_1').systemstatus_id
        # get object
        tag_1_id = Tag.objects.get(tag_name='tag_1').tag_id
        tag_2_id = Tag.objects.get(tag_name='tag_2').tag_id
        # get object
        form = SystemModificatorForm(data = {
            'systemlist': 'system_1',
            'systemstatus': systemstatus_id,
            'tag': [tag_1_id, tag_2_id],
        })
        # compare
        self.assertTrue(form.is_valid())
Ejemplo n.º 13
0
def system_modificator(request):
    """ function to modify many systems at once (helper function to call the real function) """

    # form was valid to post
    if request.method == "POST":
        request_post = request.POST
        request_user = request.user

        # call async function
        async_task(
            "dfirtrack_main.modificator.system_modificator.system_modificator_async",
            request_post,
            request_user,
        )

        return redirect(reverse('system_list'))

    # show empty form
    else:
        form = SystemModificatorForm(initial={
            'systemstatus': 2,
            'analysisstatus': 1,
        })

    # call logger
    debug_logger(str(request.user), " SYSTEM_MODIFICATOR_ENTERED")
    return render(request, 'dfirtrack_main/system/system_modificator.html', {'form': form})
Ejemplo n.º 14
0
    def test_system_modificator_tag_form_label(self):
        """ test form label """

        # get object
        form = SystemModificatorForm()
        # compare
        self.assertEqual(form.fields['tag'].label, 'Tags')
Ejemplo n.º 15
0
    def test_system_modificator_serviceprovider_delete_form_label(self):
        """ test form label """

        # get object
        form = SystemModificatorForm()
        # compare
        self.assertEqual(form.fields['serviceprovider_delete'].label,
                         'How to deal with serviceproviders')
    def test_system_modificator_analysisstatus_choice_form_label(self):
        """test form label"""

        # get object
        form = SystemModificatorForm()
        # compare
        self.assertEqual(form.fields['analysisstatus_choice'].label,
                         'Keep analysisstatus')
Ejemplo n.º 17
0
    def test_system_modificator_serviceprovider_form_label(self):
        """ test form label """

        # get object
        form = SystemModificatorForm()
        # compare
        self.assertEqual(form.fields['serviceprovider'].label,
                         'Serviceprovider')
Ejemplo n.º 18
0
    def test_system_modificator_tag_delete_form_label(self):
        """ test form label """

        # get object
        form = SystemModificatorForm()
        # compare
        self.assertEqual(form.fields['tag_delete'].label,
                         'How to deal with existing tags')
Ejemplo n.º 19
0
    def test_system_modificator_contact_form_label(self):
        """ test form label """

        # get object
        form = SystemModificatorForm()
        # compare
        self.assertEqual(form.fields['contact'].label, 'Contact')
        self.assertEqual(form.fields['contact'].empty_label,
                         'Select contact (optional)')
Ejemplo n.º 20
0
    def test_system_modificator_delete_options_form_filled(self):
        """ test minimum form requirements / INVALID """

        # get object
        system = System.objects.get(system_name='system_1')
        # get object
        form = SystemModificatorForm(
            data={
                'systemlist': [
                    str(system.system_id),
                ],
                'company_delete': 'keep_not_add',
                'tag_delete': 'keep_not_add',
                'contact_delete': 'keep_existing',
                'location_delete': 'keep_existing',
                'serviceprovider_delete': 'keep_existing',
            })
        # compare
        self.assertFalse(form.is_valid())
Ejemplo n.º 21
0
    def test_system_modificator_contact_form_filled(self):
        """ test additional form content """

        # get object
        systemstatus_id = Systemstatus.objects.get(
            systemstatus_name='systemstatus_1').systemstatus_id
        # get object
        contact_id = Contact.objects.get(contact_name='contact_1').contact_id
        # get object
        system = System.objects.get(system_name='system_1')
        # get object
        form = SystemModificatorForm(
            data={
                'systemlist': [
                    str(system.system_id),
                ],
                'systemstatus': systemstatus_id,
                'contact': contact_id,
            })
        # compare
        self.assertTrue(form.is_valid())
Ejemplo n.º 22
0
    def test_system_modificator_location_form_filled(self):
        """ test additional form content """

        # get object
        systemstatus_id = Systemstatus.objects.get(
            systemstatus_name='systemstatus_1').systemstatus_id
        # get object
        location_id = Location.objects.get(
            location_name='location_1').location_id
        # get object
        system = System.objects.get(system_name='system_1')
        # get object
        form = SystemModificatorForm(
            data={
                'systemlist': [
                    str(system.system_id),
                ],
                'systemstatus': systemstatus_id,
                'location': location_id,
            })
        # compare
        self.assertTrue(form.is_valid())
Ejemplo n.º 23
0
    def test_system_modificator_serviceprovider_form_filled(self):
        """ test additional form content """

        # get object
        systemstatus_id = Systemstatus.objects.get(
            systemstatus_name='systemstatus_1').systemstatus_id
        # get object
        serviceprovider_id = Serviceprovider.objects.get(
            serviceprovider_name='serviceprovider_1').serviceprovider_id
        # get object
        system = System.objects.get(system_name='system_1')
        # get object
        form = SystemModificatorForm(
            data={
                'systemlist': [
                    str(system.system_id),
                ],
                'systemstatus': systemstatus_id,
                'serviceprovider': serviceprovider_id,
            })
        # compare
        self.assertTrue(form.is_valid())
Ejemplo n.º 24
0
def system_modificator(request):
    """ function to modify many systems at once (helper function to call the real function) """

    # form was valid to post
    if request.method == "POST":

        # get objects from request object
        request_post = request.POST
        request_user = request.user

        # show immediate message for user
        messages.success(request, 'System modificator started')

        # call async function
        async_task(
            "dfirtrack_main.modificator.system_modificator.system_modificator_async",
            request_post,
            request_user,
        )

        # return directly to system list
        return redirect(reverse('system_list'))

    # show empty form
    else:

        # get id of first status objects sorted by name
        systemstatus = Systemstatus.objects.order_by('systemstatus_name')[0].systemstatus_id
        analysisstatus = Analysisstatus.objects.order_by('analysisstatus_name')[0].analysisstatus_id

        show_systemlist = bool(int(request.GET.get('systemlist', 0)))

        # workflows
        workflows = Workflow.objects.all()

        # show empty form with default values for convenience and speed reasons
        form = SystemModificatorForm(initial={
            'systemstatus': systemstatus,
            'analysisstatus': analysisstatus,
            'company_delete': 'keep_not_add',
            'tag_delete': 'keep_not_add',
            'contact_delete': 'keep_existing',
            'location_delete': 'keep_existing',
            'serviceprovider_delete': 'keep_existing',
        }, use_system_charfield = show_systemlist)

        # call logger
        debug_logger(str(request.user), ' SYSTEM_MODIFICATOR_ENTERED')

    return render(request, 'dfirtrack_main/system/system_modificator.html', {'form': form, 'workflows': workflows})
Ejemplo n.º 25
0
def system_modificator(request):
    """ function to modify many systems at once (helper function to call the real function) """

    # form was valid to post
    if request.method == "POST":

        # get objects from request object
        request_post = request.POST
        request_user = request.user

        # show immediate message for user
        messages.success(request, 'System modificator started')

        # call async function
        async_task(
            "dfirtrack_main.modificator.system_modificator.system_modificator_async",
            request_post,
            request_user,
        )

        # return directly to system list
        return redirect(reverse('system_list'))

    # show empty form
    else:
        show_systemlist = bool(int(request.GET.get('systemlist', 0)))
        form = SystemModificatorForm(initial={
            'systemstatus': 2,
            'analysisstatus': 1,
        },
                                     use_system_charfield=show_systemlist)

        # call logger
        debug_logger(str(request.user), ' SYSTEM_MODIFICATOR_ENTERED')

    return render(request, 'dfirtrack_main/system/system_modificator.html',
                  {'form': form})
Ejemplo n.º 26
0
def system_modificator_async(request_post, request_user):
    """ function to modify many systems at once """

    # call logger
    debug_logger(str(request_user), ' SYSTEM_MODIFICATOR_BEGIN')

    # exctract lines from systemlist (list results either from request object via multiline selector or via large text area)
    lines = request_post.getlist('systemlist')
    system_char_field_used = False
    # if large text area was used, the list contains only one entry with (one or more) line breaks
    if len(lines) == 1 and ("\r\n" in lines[0] or not lines[0].isdigit()):
        system_char_field_used = True
        lines = lines[0].splitlines()

    #  count lines (needed for messages)
    number_of_lines = len(lines)

    # set systems_modified_counter (needed for messages)
    systems_modified_counter = 0

    # set systems_skipped_counter (needed for messages)
    systems_skipped_counter = 0

    # set lines_faulty_counter (needed for messages)
    lines_faulty_counter = 0

    # create empty list (needed for messages)
    skipped_systems = []

    # iterate over lines
    for line in lines:

        # skip emtpy lines
        if line == '':
            # autoincrement counter
            lines_faulty_counter += 1
            # call logger
            warning_logger(str(request_user), ' SYSTEM_MODIFICATOR_ROW_EMPTY')
            continue

        # check line for string
        if not isinstance(line, str):  # coverage: ignore branch
            # autoincrement counter
            lines_faulty_counter += 1
            # call logger
            warning_logger(str(request_user), ' SYSTEM_MODIFICATOR_NO_STRING')
            continue

        # check line for length of string
        if len(line) > 50:
            # autoincrement counter
            lines_faulty_counter += 1
            # call logger
            warning_logger(str(request_user),
                           ' SYSTEM_MODIFICATOR_LONG_STRING')
            continue

        # check for existence of system
        if system_char_field_used:
            system = System.objects.filter(system_name=line)
        else:
            system = System.objects.filter(system_id=line)
        """ handling non-existing or non-unique systems 2 """

        # system does not exist
        if system.count() == 0:
            # autoincrement counter
            systems_skipped_counter += 1
            # add system name to list of skipped systems
            skipped_systems.append(line)
            # call logger
            error_logger(
                str(request_user),
                ' SYSTEM_MODIFICATOR_SYSTEM_DOES_NOT_EXISTS ' +
                'system_id/system_name:' + line)
            # leave this loop because system with this systemname does not exist
            continue
        # more than one system exists
        elif system.count() > 1:
            # autoincrement counter
            systems_skipped_counter += 1
            # add system name to list of skipped systems
            skipped_systems.append(line)
            # call logger
            error_logger(
                str(request_user), ' SYSTEM_MODIFICATOR_SYSTEM_NOT_DISTINCT ' +
                'system_id/system_name:' + line)
            # leave this loop because system with this systemname is not distinct
            continue

        # get existing system
        if system_char_field_used:
            system = System.objects.get(system_name=line)
        else:
            system = System.objects.get(system_id=line)
        """ new system """

        # create form with request data
        form = SystemModificatorForm(
            request_post,
            instance=system,
            use_system_charfield=system_char_field_used)

        # extract tags (list results from request object via multiple choice field)
        tags = request_post.getlist('tag')

        # extract companies (list results from request object via multiple choice field)
        companies = request_post.getlist('company')

        # modify system
        if form.is_valid():
            """ object modification """

            # don't save form yet
            system = form.save(commit=False)

            # set auto values
            system.system_modified_by_user_id = request_user
            system.system_modify_time = timezone.now()

            # save object
            system.save()
            """ object counter / log """

            # autoincrement counter
            systems_modified_counter += 1

            # call logger
            system.logger(str(request_user), ' SYSTEM_MODIFICATOR_EXECUTED')
            """ many 2 many """

            # TODO: add check for empty list
            # add tags (using save_m2m would replace existing tags)
            for tag_id in tags:
                # get object
                tag = Tag.objects.get(tag_id=tag_id)
                # add tag to system
                system.tag.add(tag)

            for company_id in companies:
                # get object
                company = Company.objects.get(company_id=company_id)
                # add company to system
                system.company.add(company)
    """ call final messages """

    # finish message
    message_user(request_user, 'System modificator finished',
                 constants.SUCCESS)

    # number messages

    if systems_modified_counter > 0:
        if systems_modified_counter == 1:
            message_user(
                request_user,
                str(systems_modified_counter) + ' system was modified.',
                constants.SUCCESS)
        else:
            message_user(
                request_user,
                str(systems_modified_counter) + ' systems were modified.',
                constants.SUCCESS)

    if systems_skipped_counter > 0:
        if systems_skipped_counter == 1:
            message_user(
                request_user,
                str(systems_skipped_counter) + ' system was skipped. ' +
                str(skipped_systems), constants.ERROR)
        else:
            message_user(
                request_user,
                str(systems_skipped_counter) + ' systems were skipped. ' +
                str(skipped_systems), constants.ERROR)

    if lines_faulty_counter > 0:
        if lines_faulty_counter == 1:
            message_user(
                request_user,
                str(lines_faulty_counter) + ' line out of ' +
                str(number_of_lines) +
                ' lines was faulty (see log file for details).',
                constants.WARNING)
        else:
            message_user(
                request_user,
                str(lines_faulty_counter) + ' lines out of ' +
                str(number_of_lines) +
                ' lines were faulty (see log file for details).',
                constants.WARNING)

    # call logger
    info_logger(
        str(request_user), ' SYSTEM_MODIFICATOR_STATUS ' + 'modified:' +
        str(systems_modified_counter) + '|' + 'skipped:' +
        str(systems_skipped_counter) + '|' + 'faulty_lines:' +
        str(lines_faulty_counter))

    # call logger
    debug_logger(str(request_user), " SYSTEM_MODIFICATOR_END")
Ejemplo n.º 27
0
def system_modificator_async(request_post, request_user):
    """function to modify many systems at once"""

    # call logger
    debug_logger(str(request_user), ' SYSTEM_MODIFICATOR_START')

    # extract lines from systemlist (list results either from request object via multiline selector or via large text area)
    lines = request_post.getlist('systemlist')
    system_char_field_used = False
    # if large text area was used, the list contains only one entry with (one or more) line breaks
    if len(lines) == 1 and ("\r\n" in lines[0] or not lines[0].isdigit()):
        system_char_field_used = True
        lines = lines[0].splitlines()
    """ prepare and start loop """

    #  count lines (needed for messages)
    number_of_lines = len(lines)

    # set systems_modified_counter (needed for messages)
    systems_modified_counter = 0

    # set systems_skipped_counter (needed for messages)
    systems_skipped_counter = 0

    # set lines_faulty_counter (needed for messages)
    lines_faulty_counter = 0

    # create empty list (needed for messages)
    skipped_systems = []

    # workflows to apply
    workflows = request_post.getlist("workflow")

    # set workflows_applied (needed for messages)
    if workflows:
        workflow_count = len(workflows)
    else:
        workflow_count = 0
    workflows_applied = 0

    # iterate over lines
    for line in lines:

        # skip empty lines
        if line == '':
            # autoincrement counter
            lines_faulty_counter += 1
            # call logger
            warning_logger(str(request_user), ' SYSTEM_MODIFICATOR_ROW_EMPTY')
            continue

        # check line for string
        if not isinstance(line, str):  # coverage: ignore branch
            # autoincrement counter
            lines_faulty_counter += 1
            # call logger
            warning_logger(str(request_user), ' SYSTEM_MODIFICATOR_NO_STRING')
            continue

        # check line for length of string
        if len(line) > 50:
            # autoincrement counter
            lines_faulty_counter += 1
            # call logger
            warning_logger(str(request_user),
                           ' SYSTEM_MODIFICATOR_LONG_STRING')
            continue

        # check for existence of system
        if system_char_field_used:
            system = System.objects.filter(system_name=line)
        else:
            system = System.objects.filter(system_id=line)
        """ handling non-existing (== 0) or non-unique (> 1) systems """

        # system does not exist
        if system.count() == 0:

            # autoincrement counter
            systems_skipped_counter += 1
            # add system name to list of skipped systems
            skipped_systems.append(line)
            # call logger
            warning_logger(
                str(request_user),
                f' SYSTEM_MODIFICATOR_SYSTEM_DOES_NOT_EXISTS system_id/system_name:{line}',
            )
            # leave this loop because system with this systemname does not exist
            continue

        # more than one system exists
        elif system.count() > 1:

            # autoincrement counter
            systems_skipped_counter += 1
            # add system name to list of skipped systems
            skipped_systems.append(line)
            # call logger
            warning_logger(
                str(request_user),
                f' SYSTEM_MODIFICATOR_SYSTEM_NOT_DISTINCT system_id/system_name:{line}',
            )
            # leave this loop because system with this systemname is not distinct
            continue
        """ unique system (== 1) """

        # get existing system
        if system_char_field_used:
            system = System.objects.get(system_name=line)
        else:
            system = System.objects.get(system_id=line)

        # create form with request data
        form = SystemModificatorForm(
            request_post,
            instance=system,
            use_system_charfield=system_char_field_used)

        # extract tags (list results from request object via multiple choice field)
        tags = request_post.getlist('tag')

        # extract companies (list results from request object via multiple choice field)
        companies = request_post.getlist('company')

        # TODO: [code] add condition for invalid form, not implemented yet because of multiple constraints

        # modify system
        if form.is_valid():
            """object modification"""

            # don't save form yet
            system = form.save(commit=False)

            # set auto values
            system.system_modified_by_user_id = request_user
            """ status fields """

            # replace, if 'change status' was selected (checking for status value independent of form field validation)
            if (form['analysisstatus_choice'].value() == 'change_status'
                    and form['analysisstatus'].value()):

                # replace status
                analysisstatus_id = form['analysisstatus'].value()
                analysisstatus = Analysisstatus.objects.get(
                    analysisstatus_id=analysisstatus_id)
                system.analysisstatus = analysisstatus

            # replace, if 'change status' was selected (checking for status value independent of form field validation)
            if (form['systemstatus_choice'].value() == 'change_status'
                    and form['systemstatus'].value()):

                # replace status
                systemstatus_id = form['systemstatus'].value()
                systemstatus = Systemstatus.objects.get(
                    systemstatus_id=systemstatus_id)
                system.systemstatus = systemstatus
            """ fk non-model fields """

            # replace / delete, if 'switch_new / Switch to selected item or none' was selected
            if form['contact_delete'].value() == 'switch_new':

                # replace, if value was submitted via form
                if form['contact'].value():
                    contact_id = form['contact'].value()
                    contact = Contact.objects.get(contact_id=contact_id)
                    system.contact = contact
                # delete, if form field was empty
                else:
                    system.contact = None

            # replace / delete, if 'switch_new / Switch to selected item or none' was selected
            if form['location_delete'].value() == 'switch_new':

                # replace, if value was submitted via form
                if form['location'].value():
                    location_id = form['location'].value()
                    location = Location.objects.get(location_id=location_id)
                    system.location = location
                # delete, if form field was empty
                else:
                    system.location = None

            # replace / delete, if 'switch_new / Switch to selected item or none' was selected
            if form['serviceprovider_delete'].value() == 'switch_new':

                # replace, if value was submitted via form
                if form['serviceprovider'].value():
                    serviceprovider_id = form['serviceprovider'].value()
                    serviceprovider = Serviceprovider.objects.get(
                        serviceprovider_id=serviceprovider_id)
                    system.serviceprovider = serviceprovider
                # delete, if form field was empty
                else:
                    system.serviceprovider = None

            # save object
            system.save()
            """ object counter / log """

            # autoincrement counter
            systems_modified_counter += 1

            # call logger
            system.logger(str(request_user), ' SYSTEM_MODIFICATOR_EXECUTED')
            """ many 2 many """

            # remove existing relations if 'remove_and_add / Delete existing and add new items' was selected
            if form['tag_delete'].value() == 'remove_and_add':

                # remove all m2m
                system.tag.clear()

            # add new relations if not 'keep_not_add / Do not change and keep existing' was selected
            if form['tag_delete'].value() != 'keep_not_add':

                # add new tags (using save_m2m would replace existing tags it there were any)
                for tag_id in tags:
                    # get object
                    tag = Tag.objects.get(tag_id=tag_id)
                    # add tag to system
                    system.tag.add(tag)

            # remove existing relations if 'remove_and_add / Delete existing and add new items' was selected
            if form['company_delete'].value() == 'remove_and_add':

                # remove all m2m
                system.company.clear()

            # add new relations if not 'keep_not_add / Do not change and keep existing' was selected
            if form['company_delete'].value() != 'keep_not_add':

                # add new companies (using save_m2m would replace existing companies it there were any)
                for company_id in companies:
                    # get object
                    company = Company.objects.get(company_id=company_id)
                    # add company to system
                    system.company.add(company)

            # apply workflows
            if workflows:
                error_code = Workflow.apply(workflows, system, request_user)
                if error_code:
                    system.logger(str(request_user),
                                  ' COULD_NOT_APPLY_WORKFLOW')
                else:
                    workflows_applied += workflow_count
    """ finish system modificator """

    # call final messages
    final_messages(
        systems_modified_counter,
        systems_skipped_counter,
        lines_faulty_counter,
        skipped_systems,
        number_of_lines,
        request_user,
        workflow_count,
        workflows_applied,
    )

    # call logger
    info_logger(
        str(request_user),
        f' SYSTEM_MODIFICATOR_STATUS'
        f' modified:{systems_modified_counter}'
        f'|skipped:{systems_skipped_counter}'
        f'|faulty_lines:{lines_faulty_counter}',
    )

    # call logger
    debug_logger(str(request_user), ' SYSTEM_MODIFICATOR_END')
Ejemplo n.º 28
0
def system_modificator_async(request_post, request_user):
    """ function to modify many systems at once """

    # call logger
    debug_logger(str(request_user), " SYSTEM_MODIFICATOR_BEGIN")

    # exctract lines from systemlist (list results from request object via large text area)
    lines = request_post.get('systemlist').splitlines()

    # iterate over lines
    for line in lines:

        # skip emtpy lines
        if line == '':
            warning_logger(str(request_user), " SYSTEM_MODIFICATOR_ROW_EMPTY")
            continue

        # check line for string
        if not isinstance(line, str):
            warning_logger(str(request_user), " SYSTEM_MODIFICATOR_NO_STRING")
            continue

        # check line for length of string
        if len(line) > 50:
            warning_logger(str(request_user), " SYSTEM_MODIFICATOR_LONG_STRING")
            continue

        # check for existence of system
        system = System.objects.filter(system_name = line)
        if system.count() == 0:
            # call logger
            error_logger(str(request_user), " SYSTEM_MODIFICATOR_SYSTEM_DOES_NOT_EXISTS " + "system_name:" + line)
            # leave this loop because system with this systemname does not exist
            continue
        elif system.count() > 1:
            # call logger
            error_logger(str(request_user), " SYSTEM_MODIFICATOR_SYSTEM_NOT_DISTINCT " + "system_name:" + line)
            # leave this loop because system with this systemname is not distinct
            continue

        # get existing system
        system = System.objects.get(system_name = line)

        # create form with request data
        form = SystemModificatorForm(request_post, instance = system)

        # extract tags (list results from request object via multiple choice field)
        tags = request_post.getlist('tag')

        # modify system
        if form.is_valid():

            # don't save form yet
            system = form.save(commit=False)

            # set system_name
            system.system_name = line

            # set auto values
            system.system_modified_by_user_id = request_user
            system.system_modify_time = timezone.now()

            # save object
            system.save()

            # call logger
            system.logger(str(request_user), ' SYSTEM_MODIFICATOR_EXECUTED')

            # TODO: add check for empty list
            # add tags (using save_m2m would replace existing tags)
            for tag_id in tags:
                # get object
                tag = Tag.objects.get(tag_id=tag_id)
                # add tag to system
                system.tag.add(tag)

    # call logger
    debug_logger(str(request_user), " SYSTEM_MODIFICATOR_END")