Формулировка проблемы: необходимо реализовать поддержку виртуальной структуры папок проекта, соответствующих его мероприятиям.
Используется: Проекты -> Детали.
Решение: необходимо реализовать виртуальную структуру папок при создании проекта согласно всех его мероприятий. Структура папок и их названия повторяют их же у соответствующих мероприятий данного проекта.
Данные папки невозможно создать/удалить/переместить/переименовать самостоятельно.
Иконки папок отличаются согласно их типа:
физическая папка - иконка "желтой папки";
виртуальная папка - иконка "синей папки";
папка "Корзина" - иконка "мусорной корзины".
Папка "Корзина" представляет собой скрытую папку, доступную в следующих случаях:
"Корзина" отображается только в корневой папке для владельца проекта, причем в случае наличия в ней содержимого.
Во всех остальных случаях данная папка не отображается:
в папках, отличных от корневой;
для не-владельца проекта;
если папка пуста.
Содержимое всех папок отображается в следующем порядке:
группа виртуальных папок (по структуре мероприятий проекта);
группа физических папок (по возрастанию их наименований);
папка "Корзина" (отображается только в корневой папке).
При этом столбец "Загрузил" для виртуальных папок (включая "Корзину") пуст.
Также необходимо поддерживать поиск как по физическим папкам, так и виртуальным (включая "Корзину") согласно правам авторизованного пользователя.
Папки полностью зависят от соответствующих им мероприятий:
Права на папки для пользователей полностью повторяют набор прав на мероприятия проекта.
Если пользователю доступна только часть проекта, то ему могут быть недоступны папки и файлы, например, из других уровней (выше). Например, при отображении только ветки уровня 3 пользователю не будет доступен паспорт проекта, т.к. он содержится в недоступном корневом каталоге проекта.
При переименовании мероприятия его виртуальная папка также должна переименоваться согласно новому названию мероприятия.
При перемещении мероприятия его виртуальная папка и все ее содержимое также перемещается согласно новому расположению мероприятия.
При удалении мероприятия его виртуальная папка удаляется, а все ее содержимое перемещается в папку, указанную в "Настройках" проекта.
При выделении мероприятия проекта необходимо открывать соответствующую ему виртуальную папку.
Примечание
При открытии виртуальной папки через просмотр папок выделение соответствующего ей мероприятия не происходит.
Также необходимо проводить валидацию на создание новых физических папок:
При создании папки с наименованием уже существующей другой физической папки - все также запрещать создавать с ошибкой:
Папка не создана. Элемент с таким названием уже существует.
При создании папки с наименованием уже существующей и доступной данному пользователю в рамках данного проекта виртуальной папки необходимо выдавать браузерное диалоговое окно с предупреждением:
Среди папок мероприятий уже существует папка с таким названием. Вы действительно хотите создать папку %название_папки%?
Действие "ОК" - физическая папка с дублирующимся названием создается.
Действие "Отмена" - физическая папка не создается.
Необходимо добавить новую настройку "Действия с файлами папок мероприятий" во вкладку "Настройки" настроек проекта. Она должна представлять собой лейбл "При удалении мероприятий" и выпадающий список со значениями:
"Перемещать в папку уровнем выше" - содержимое виртуальной папки удаляемого мероприятия переместится в папку уровнем выше;
"Перемещать в корневую папку" - содержимое виртуальной папки удаляемого мероприятия переместится в корневую папку проекта;
"Создавать папку "Корзина"" (по умолчанию) - в корневой папке проекта создается папка "Корзина" (при ее отсутствии), и содержимое виртуальной папки удаляемого мероприятия переместится в эту новую папку.
При наличии дублирующихся папок и файлов необходимо добавлять к файлам и папкам, отличным от оригинальных, timestamp в формате yyyy-MM-dd hh_mm_ss.
Действия при обновлении системы
При обновлении системы во всех существующих проектах добавятся виртуальные папки согласно их мероприятий. Других видимых изменений быть не должно.
Примеры использования
Создание проекта
Условия: наличие прав на Портфель_1 для сотрудников: * Сотрудник_1 * Сотрудник_2 * Сотрудник_3
Авторизоваться с логином и паролем Сотрудника_1 в модуле "Проекты".
В Портфеле_1 создать Проект_1 со следующей структурой:
1 Мероприятие_1 2 Мероприятие_2 2.1 Мероприятие_2.1 (ответственный - Сотрудник_2) 2.2 Мероприятие_2.2 (ответственный - Сотрудник_3) 2.2.1 Мероприятие_2.2.1 3 Мероприятие_3
Утвердить Проект_1.
Открыть Проект_1 и нажать на кнопку "Детали" - в области папок отобразились следующие папки:
Мероприятие_1 Мероприятие_2 Мероприятие_3
Выделить Мероприятие_2 - в области папок отобразились следующие папки::
Мероприятие_2.1 Мероприятие_2.2
Открыть папку Мероприятие_2.2 - отобразилась папка Мероприятие_2.2.1, в Проекте_1 осталось выделенным Мероприятие_2.
Создать в данной папке папку "Для Сотрудника_3" - отобразились следующие папки:
Для Сотрудника_3 Мероприятие_2.2.1
Загрузить в текущую папку Изображение.png - отобразились следующие элементы:
Для Сотрудника_3 Мероприятие_2.2.1 Изображение.png
В Проекте_1 выделить Мероприятие_2.1 - в области папок не отобразилось ни одного элемента.
Загрузить в текущую папку Файл.odt - файл отобразился в области папок.
В Проекте_1 выделить корневое мероприятие - отобразились папки из п. 4.
Создать папку "Разное" - в области папок отобразились следующие папки:
Мероприятие_1 Мероприятие_2 Мероприятие_3 Разное
Перемещение мероприятий проекта
Условия:
наличие проекта со следующей структурой:
1 Мероприятие_1 2 Мероприятие_2 2.1 Мероприятие_2.1 (ответственный - Сотрудник_2) 2.2 Мероприятие_2.2 (ответственный - Сотрудник_3) 2.2.1 Мероприятие_2.2.1 3 Мероприятие_3
наличие следующей структуры папок проекта:
Мероприятие_1 Мероприятие_2 Мероприятие_2.1 Файл.odt Мероприятие_2.2 Мероприятие_2.2.1 Для Сотрудника_3 Изображение.png Мероприятие_3 Разное
Авторизоваться с логином и паролем Сотрудника_2 в модуле "Проекты".
Открыть Проект_1 и нажать на кнопку "Детали" - в области папок отобразился следующий элемент Файл.odt
Авторизоваться с логином и паролем Сотрудника_3 в модуле "Проекты".
Открыть Проект_1 и нажать на кнопку "Детали" - в области папок отобразились следующие элементы:
Мероприятие_2.2.1 Для Сотрудника_3 Изображение.png
Авторизоваться с логином и паролем Сотрудника_1 в модуле "Проекты".
Открыть Проект_1 и перенести Мероприятие_3 в ячейку Мероприятия_2.1 - Мероприятие_3 стало дочерним мероприятием мероприятия Мероприятия_2.1.
Нажать на кнопку "Детали" - в области папок отобразились следующие папки:
Мероприятие_1 Мероприятие_2 Разное
Авторизоваться с логином и паролем Сотрудника_2 в модуле "Проекты".
Открыть Проект_1 и нажать на кнопку "Детали" - в области папок отобразились следующие элементы:
Мероприятие_3 Файл.odt
Удаление мероприятий проекта (перенос содержимого папки в папку на уровень выше)
Условия:
наличие проекта со следующей структурой:
1 Мероприятие_1 2 Мероприятие_2 2.1 Мероприятие_2.1 (ответственный - Сотрудник_2) 2.2 Мероприятие_2.2 (ответственный - Сотрудник_3) 2.2.1 Мероприятие_2.2.1 3 Мероприятие_3
наличие следующей структуры папок проекта:
Мероприятие_1 Мероприятие_2 Мероприятие_2.1 Файл.odt Мероприятие_2.2 Мероприятие_2.2.1 Для Сотрудника_3 Изображение.png Мероприятие_3 Разное
Авторизоваться с логином и паролем Сотрудника_1 в модуле "Проекты".
В настройках проекта включить настройку "Перемещать содержимое папки удаляемого мероприятия в папку на уровень выше".
Открыть Проект_1 и удалить Мероприятие_2.2.
Выделить корневое мероприятие, нажать на кнопку "Детали" и открыть папку Мероприятие_2 - отобразились следующие элементы:
Мероприятие_2.1 Мероприятие_2.2.1 Для Сотрудника_3 Изображение.png
Авторизоваться с логином и паролем Сотрудника_2 в модуле "Проекты".
Открыть Проект_1 и нажать на кнопку "Детали" - отобразились следующие элементы:
Мероприятие_2.1 Мероприятие_2.2.1 Для Сотрудника_3 Изображение.png
Удаление мероприятий проекта (перенос содержимого папки в корневую папку)
Условия:
наличие проекта со следующей структурой:
1 Мероприятие_1 2 Мероприятие_2 2.1 Мероприятие_2.1 (ответственный - Сотрудник_2) 2.2 Мероприятие_2.2 (ответственный - Сотрудник_3) 2.2.1 Мероприятие_2.2.1 3 Мероприятие_3
наличие следующей структуры папок проекта:
Мероприятие_1 Мероприятие_2 Мероприятие_2.1 Файл.odt Мероприятие_2.2 Мероприятие_2.2.1 Для Сотрудника_3 Изображение.png Мероприятие_3 Разное
Авторизоваться с логином и паролем Сотрудника_1 в модуле "Проекты".
В настройках проекта включить настройку "Перемещать содержимое папки удаляемого мероприятия в папку корневого".
Открыть Проект_1 и удалить Мероприятие_2.2.
Выделить корневое мероприятие и нажать на кнопку "Детали" - отобразились следующие элементы:
Мероприятие_1 Мероприятие_2 Мероприятие_3 Мероприятие_2.2.1 Для Сотрудника_3 Разное Изображение.png
Удаление мероприятий проекта (перенос содержимого папки в Корзину (с доступом только владельца проекта))
Условия:
наличие проекта со следующей структурой:
1 Мероприятие_1 2 Мероприятие_2 2.1 Мероприятие_2.1 (ответственный - Сотрудник_2) 2.2 Мероприятие_2.2 (ответственный - Сотрудник_3) 2.2.1 Мероприятие_2.2.1 3 Мероприятие_3
наличие следующей структуры папок проекта:
Мероприятие_1 Мероприятие_2 Мероприятие_2.1 Файл.odt Мероприятие_2.2 Мероприятие_2.2.1 Для Сотрудника_3 Изображение.png Мероприятие_3 Разное
Авторизоваться с логином и паролем Сотрудника_1 в модуле "Проекты".
В настройках проекта включить настройку "Перемещать содержимое папки удаляемого мероприятия в Корзину (с доступом только владельца проекта)".
Открыть Проект_1 и удалить Мероприятие_2.2.
Выделить корневое мероприятие и нажать на кнопку "Детали" - отобразились следующие элементы:
Мероприятие_1 Мероприятие_2 Мероприятие_3 Разное Корзина
Открыть папку "Корзина" - отобразились следующие элементы:
Мероприятие_2.2.1 Для Сотрудника_3 Изображение.png