Форум мне сильно помог - хочу отблагодарить, поделившись своим опытом:
Судя по всему, даже опытные пользователи TS не всегда пользуются Dashboard'ом, т.к. он кажется им менее удобным, чем дерево задач (хотя дерево - скорее для навигации) или чем фильтры в папках/категориях. Но вот пример Dashboard, который мы недавно сделали - нам нравится:
Сделано это всё обычным html, CSS, фильтрами и одним скриптом.
СТРУКТУРА:
Слева вверху - популярные ссылки.
Справа вверху - срочные/urgent задачи (статус Blocking)
По-середине - задачи. Этот блок делится на две половины (распределение задач происходит автоматически - фильтрами, основанными на поле "Deadline check:" задачи):
В правой - задачи без Deadline.
В левой - Просроченные задачи и задачи на ближайшие 7 дней (На сегодня + на завтра + на след. 5 дней = 1 неделя).
Думаем добавить ещё блок с недавно закрытыми задачами.
КАК СДЕЛАТЬ:
Наши таблицы (html + CSS) я выкладывать не буду. Да и всем всё разное нравится (текущий дизайн - тоже временный
![Rolling Eyes :roll:](http://www.trackstudio.ru/forum/images/smilies/icon_rolleyes.gif)
Фильтры выглядят так (самое ключевое) (+ не забудьте включить "Deep Search"):
Urgent:
For today:
Кастом поле, которое желательно создать корневой задаче: "Deadline check:"
Скрипт (нужно положить в папку "/TrackStudio/etc/plugins/scripts/task_custom_field_value/" и подключить его в настройках кастом поля "Deadline check:"):
- Code: Select all
package scripts.task_custom_field_value;
import com.trackstudio.exception.GranException;
import com.trackstudio.external.TaskUDFValueScript;
import com.trackstudio.secured.SecuredTaskBean;
import java.util.Calendar;
public class Deadline_Check_For_Dashboard implements TaskUDFValueScript {
public Object calculate( SecuredTaskBean securedTaskBean ) throws GranException {
String result = "Deadline check:";
Calendar deadline = securedTaskBean.getDeadline();
if( deadline == null ) {
return "No Deadline";
}
Calendar now = Calendar.getInstance();
Calendar today = Calendar.getInstance();
today.set( Calendar.HOUR_OF_DAY, 23 );
today.set( Calendar.MINUTE, 59 );
today.set( Calendar.SECOND, 59 );
Calendar tomorrow = Calendar.getInstance();
tomorrow.add( Calendar.DAY_OF_YEAR, 1 );
tomorrow.set( Calendar.HOUR_OF_DAY, 23 );
tomorrow.set( Calendar.MINUTE, 59 );
tomorrow.set( Calendar.SECOND, 59 );
Calendar days = Calendar.getInstance();
days.add( Calendar.DAY_OF_YEAR, 6 );
days.set( Calendar.HOUR_OF_DAY, 23 );
days.set( Calendar.MINUTE, 59 );
days.set( Calendar.SECOND, 59 );
if( deadline.after( days ) ) {
result = "Much later";
} else if( deadline.after( tomorrow ) ) {
result = "Next 5 days";
} else if( deadline.after( today ) ) {
result = "Tomorrow";
} else if( deadline.after( now ) ) {
result = "Today";
} else {
result = "Overdue";
}
return result;
}
}
Когда всё продумано и сделано - выглядит просто. Но у нас это заняло несколько недель. Зато теперь, мы довольны результатами!
Если интересно, то, может быть, в будущем расскажу ещё что-нибудь так же подробно (если форум поможет мне с реализацией других идей, чтобы было, о чём рассказывать
![Wink :wink:](http://www.trackstudio.ru/forum/images/smilies/icon_wink.gif)