package com.jeans.iservlet.service.portal;

import java.util.Date;
import java.util.List;

import com.jeans.iservlet.enums.portal.TaskType;
import com.jeans.iservlet.model.hr.Employee;
import com.jeans.iservlet.model.portal.Task;

public interface TaskService {
	/**
	 * 获取一个指定的待办事项
	 * 
	 * @param id
	 *            事项id
	 * @return
	 */
	public Task loadTask(long id);

	/**
	 * 检查用户还没有完成的待办任务，包括还没开始的和正在进行中的
	 * 
	 * @param userId
	 * @return
	 */
	public long checkNews(Employee employee);

	/**
	 * 获取指定用户的所有未完成事项，按到期日期顺排序
	 * 
	 * @param employee
	 *            用户
	 * @return
	 */
	public List<Task> listNews(Employee employee);

	/**
	 * 分页获取指定用户的已完成事项列表，按完成日期倒排序，即越近完成的在越前面
	 * 
	 * @param employee
	 *            用户
	 * @param page
	 *            页码
	 * @param rows
	 *            每页事项数
	 * @param total
	 *            总事项数
	 * @return
	 */
	public List<Task> listCompletedTasks(Employee employee, int page, int rows, long[] total);

	/**
	 * 创建一个新的待办事项
	 * 
	 * @param type
	 *            事项类型
	 * @param description
	 *            描述
	 * @param dueDate
	 *            完成期限
	 * @param remindDays
	 *            提醒日期的提前天数，用负数表示，0表示当天提醒，正数表示不提醒
	 * @param owner
	 *            待办人员
	 * @return
	 */
	public Task create(TaskType type, String description, Date dueDate, int remindDays, Employee owner);

	/**
	 * 修改待办事项，只有自定义类型的事项才能更改
	 * 
	 * @param id
	 *            事项id
	 * @param description
	 *            描述
	 * @param dueDate
	 *            完成期限
	 * @param remindDays
	 *            提醒日期的提前天数，用负数表示，0表示当天提醒，正数表示不提醒
	 * @return
	 */
	public Task update(long id, String description, Date dueDate, int remindDays);

	/**
	 * 修改待办计划表
	 * 
	 * @param task
	 *            待办任务
	 * @param dueDate
	 *            计划期限
	 * @param remindDays
	 *            提醒日期的提前天数，负数表示，0表示当天提醒，正数表示不提醒
	 * @return
	 */
	public Task schedule(Task task, Date dueDate, int remindDays);

	/**
	 * 待办事项完成
	 * 
	 * @param task
	 *            待办任务
	 * @param completionDate
	 *            完成日期
	 * @return
	 */
	public Task complete(Task task, Date completionDate);
}
