/* * Aipo is a groupware program developed by TOWN, Inc. * Copyright (C) 2004-2015 TOWN, Inc. * http://www.aipo.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.aimluck.eip.project; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Map; import java.util.jar.Attributes; import org.apache.cayenne.DataRow; import org.apache.commons.lang.StringUtils; import org.apache.jetspeed.services.logging.JetspeedLogFactoryService; import org.apache.jetspeed.services.logging.JetspeedLogger; import org.apache.turbine.util.RunData; import org.apache.velocity.context.Context; import com.aimluck.commons.field.ALDateTimeField; import com.aimluck.eip.cayenne.om.portlet.EipTProjectTask; import com.aimluck.eip.cayenne.om.portlet.EipTProjectTaskFile; import com.aimluck.eip.common.ALAbstractMultiFilterSelectData; import com.aimluck.eip.common.ALDBErrorException; import com.aimluck.eip.common.ALData; import com.aimluck.eip.common.ALEipConstants; import com.aimluck.eip.common.ALEipHolidaysManager; import com.aimluck.eip.common.ALEipUser; import com.aimluck.eip.common.ALPageNotFoundException; import com.aimluck.eip.modules.actions.common.ALAction; import com.aimluck.eip.orm.Database; import com.aimluck.eip.orm.query.ResultList; import com.aimluck.eip.orm.query.SQLTemplate; import com.aimluck.eip.project.util.ProjectFile; import com.aimluck.eip.project.util.ProjectFormUtils; import com.aimluck.eip.project.util.ProjectUtils; import com.aimluck.eip.util.ALEipUtils; /** * タスクの検索データを管理するクラスです。 <BR> * */ public class ProjectTaskSelectData extends ALAbstractMultiFilterSelectData<EipTProjectTask, EipTProjectTask> implements ALData { /** logger */ private static final JetspeedLogger logger = JetspeedLogFactoryService .getLogger(ProjectTaskSelectData.class.getName()); /** タスクの総数 */ private int taskCount; /** 全プロジェクトの一覧 */ private List<ProjectResultData> allProject; /** 選択されているプロジェクトID */ private Integer selectedProjectId; /** ファイル操作オブジェクト */ private final ProjectFile<EipTProjectTaskFile, EipTProjectTask> pfile = new ProjectFile<EipTProjectTaskFile, EipTProjectTask>( EipTProjectTaskFile.class); /** プロジェクトメンバーリスト */ private List<ALEipUser> projectMembers; /** 基準日From(検索用) */ private ALDateTimeField base_date_from; /** 基準日To(検索用) */ private ALDateTimeField base_date_to; /** キーワード(検索用) */ private String target_keyword; /** 担当者(検索用) */ private String target_user_id; /** 分類(検索用) */ private String target_tracker; /** 優先度(検索用) */ private String target_priority; /** ステータス(検索用) */ private String target_status; /** 進捗率FROM(検索用) */ private String target_progress_rate_from; /** 進捗率TO(検索用) */ private String target_progress_rate_to; /** 進捗遅れフラグ(検索用) */ private String target_delay; /** イナズマ線表示フラグ(検索用) */ private String progress_line_checked; /** 選択最大年 */ private int viewDateMaxYear; /** インデント表示フラグ */ private boolean indentFlg = true; private Calendar calFrom; private Calendar calTo; /** Android2かどうか */ private boolean isAndroid2; private Integer loginUserId; private boolean isFileUploadable; /** * 初期設定 * * @param action * ALAction * @param rundata * RunData * @param context * Context */ @Override public void init(ALAction action, RunData rundata, Context context) throws ALPageNotFoundException, ALDBErrorException { // 検索条件・ソートリセット(プロジェクト選択時) String resetCondition = rundata.getParameters().get("reset_condition"); if (resetCondition != null && resetCondition.length() > 0) { ALEipUtils.setTemp(rundata, context, "target_keyword", ""); ALEipUtils.setTemp(rundata, context, LIST_SORT_STR, ""); ALEipUtils.setTemp(rundata, context, LIST_SORT_TYPE_STR, ""); } allProject = ProjectUtils.getAllProject(); // 全プロジェクト setProject(rundata, context); super.init(action, rundata, context); // 年 Calendar cal = Calendar.getInstance(); viewDateMaxYear = cal.get(Calendar.YEAR) + 10; // メンバー if (0 != selectedProjectId.intValue()) { projectMembers = ProjectUtils.getProjectMembers(selectedProjectId); } else { projectMembers = ALEipUtils.getUsers("LoginUser"); } // 基準日(From,To) calFrom = ProjectUtils.getViewCalendar(rundata, context, "base_date_from"); calTo = ProjectUtils.getViewCalendar(rundata, context, "base_date_to"); calFrom.set(Calendar.DAY_OF_MONTH, 1); calTo.set(Calendar.DAY_OF_MONTH, calTo.getActualMaximum(Calendar.DATE)); base_date_from = new ALDateTimeField(); base_date_to = new ALDateTimeField(); base_date_from.setValue(calFrom.getTime()); base_date_to.setValue(calTo.getTime()); // イナズマ線表示 progress_line_checked = ProjectUtils.getParameter(rundata, context, "progress_line_checked"); // ユーザーエージェントがAndroid2ならTrue isAndroid2 = ALEipUtils.isAndroid2Browser(rundata); loginUserId = ALEipUtils.getUserId(rundata); isFileUploadable = ALEipUtils.isFileUploadable(rundata); } /** * 一覧データを取得します。 <BR> * * @param rundata * RunData * @param context * Context * @return ResultList */ @Override protected ResultList<EipTProjectTask> selectList(RunData rundata, Context context) { if (null == selectedProjectId) { return null; } setSessionParams(rundata, context); SQLTemplate<EipTProjectTask> sqltemp = null; SQLTemplate<EipTProjectTask> sqlCountTemp = null; sqltemp = Database.sql(EipTProjectTask.class, getFetchQuery(rundata, context)); sqlCountTemp = Database.sql(EipTProjectTask.class, getCountQuery(rundata, context)); setPostgresParams(sqltemp, sqlCountTemp); ResultList<EipTProjectTask> list = new ResultList<EipTProjectTask>(); // 取得値を設定する List<DataRow> result = sqltemp.fetchListAsDataRow(); for (int i = 0; i < result.size(); i++) { DataRow row = result.get(i); Object parentTaskId = row.get("parent_task_id"); Object explanation = row.get("explanation"); Object startPlanDate = row.get("start_plan_date"); Object endPlanDate = row.get("end_plan_date"); Object startDate = row.get("start_date"); Object endDate = row.get("end_date"); Object updateDate = row.get("update_date"); EipTProjectTask task = new EipTProjectTask(); // タスクID task.setTaskId(row.get("task_id").toString()); // タスク名 task.setTaskName(row.get("task_name").toString()); // 親タスクID if (parentTaskId != null) { task.setParentTaskId(Integer.valueOf(parentTaskId.toString())); } // プロジェクトID task.setProjectId(Integer.valueOf(row.get("project_id").toString())); // プロジェクト名 task.setProjectName(row.get("project_name").toString()); // 分類 task.setTracker(row.get("tracker").toString()); // 説明 if (explanation != null) { task.setExplanation(explanation.toString()); } // ステータス task.setStatus(row.get("status").toString()); // 優先度 task.setPriority(row.get("priority").toString()); // 開始予定日 if (startPlanDate == null) { task.setStartPlanDate(ProjectUtils.getEmptyDate()); } else { task.setStartPlanDate((Date) startPlanDate); } // 完了予定日 if (endPlanDate == null) { task.setEndPlanDate(ProjectUtils.getEmptyDate()); } else { task.setEndPlanDate((Date) endPlanDate); } // 開始実績日 if (startDate == null) { task.setStartDate(ProjectUtils.getEmptyDate()); } else { task.setStartDate((Date) startDate); } // 完了日 if (endDate == null) { task.setEndDate(ProjectUtils.getEmptyDate()); } else { task.setEndDate((Date) endDate); } // 計画工数 task.setPlanWorkload(new BigDecimal(row.get("plan_workload").toString())); // 進捗率 task .setProgressRate(Integer.valueOf(row.get("progress_rate").toString())); // 更新日 task.setUpdateDate((Date) updateDate); // タスク名表示インデント task.setIndent(Integer.valueOf(row.get("indent").toString())); list.add(task); } // 全体の件数 int count = 0; List<DataRow> countResult = sqlCountTemp.fetchListAsDataRow(); for (DataRow row : countResult) { Long tmp = (Long) row.get("count"); count = tmp != null ? tmp.intValue() : 0; } // 件数をセットする. setPageParam(count); taskCount = count; // インデント表示フラグ if (!getWhereList().isEmpty()) { indentFlg = false; } return list; } private void setSessionParams(RunData rundata, Context context) { // キーワード target_keyword = ProjectUtils.getParameter(rundata, context, "target_keyword"); // 担当者 target_user_id = ProjectUtils.getParameter(rundata, context, "target_user_id"); // 分類 target_tracker = ProjectUtils.getParameter(rundata, context, "target_tracker"); // 優先度 target_priority = ProjectUtils.getParameter(rundata, context, "target_priority"); // ステータス target_status = ProjectUtils.getParameter(rundata, context, "target_status"); // 進捗率FROM target_progress_rate_from = ProjectUtils.getParameter(rundata, context, "target_progress_rate_from"); // 進捗率TO target_progress_rate_to = ProjectUtils.getParameter(rundata, context, "target_progress_rate_to"); // 進捗遅れ target_delay = ProjectUtils.getParameter(rundata, context, "target_delay"); /** for sql injection */ { if (isRejectParameter(target_user_id)) { target_user_id = "0"; } if (isRejectParameter(target_tracker)) { target_tracker = "0"; } if (isRejectParameter(target_priority)) { target_priority = "0"; } if (isRejectParameter(target_status)) { target_status = "0"; } if (isRejectParameter(target_progress_rate_from)) { target_progress_rate_from = "0"; } if (isRejectParameter(target_progress_rate_to)) { target_progress_rate_to = "0"; } } } private String getCommonSQL() { // ------------------------- // 共通SELECT句 // ------------------------- StringBuilder sb = new StringBuilder(); sb.append(" FROM"); sb.append(" eip_t_project_task AS task, eip_t_project AS project"); sb.append(" WHERE "); sb.append(" task.project_id = project.project_id AND "); if (0 != selectedProjectId) { sb.append(" task.project_id = #bind($project_id) AND "); } sb.append(" task.parent_task_id IS NULL"); return sb.toString(); } private String getFetchQuery(RunData rundata, Context context) { StringBuilder sb = new StringBuilder(); sb.append("SELECT"); sb.append(" 0 AS indent"); sb.append(", task.task_id"); // タスクID sb.append(", task.task_name"); // タスク名 sb.append(", task.parent_task_id");// 親タスクID sb.append(", task.project_id");// プロジェクトID sb.append(", project.project_name"); sb.append(", task.tracker");// 分類 sb.append(", task.explanation"); // 説明 sb.append(", task.status"); // ステータス sb.append(", task.priority"); // 優先度 sb.append(", task.start_plan_date"); // 開始予定日 sb.append(", task.end_plan_date"); // 完了予定日 sb.append(", task.start_date"); // 開始実績日 sb.append(", task.end_date"); // 完了実績日 sb.append(", task.plan_workload"); // 計画工数 sb.append(", task.progress_rate"); // 進捗率 sb.append(", task.update_date"); // 更新日 sb.append(getCommonSQL()); List<String> whereList = getWhereList(); // WHERE句セット for (int i = 0; i < whereList.size(); i++) { sb.append(" AND "); sb.append(whereList.get(i)); } sb.append(getOrderBy(rundata, context)); sb.append(" LIMIT ").append(getRowsNum()).append(" OFFSET ").append( (current_page - 1) * getRowsNum()); return sb.toString(); } private String getCountQuery(RunData rundata, Context context) { StringBuilder sb = new StringBuilder(); sb.append("select count(task_id) AS count "); sb.append(getCommonSQL()); List<String> whereList = getWhereList(); // WHERE句セット for (int i = 0; i < whereList.size(); i++) { sb.append(" AND "); sb.append(whereList.get(i)); } return sb.toString(); } private List<String> getWhereList() { List<String> whereList = new ArrayList<String>(); // キーワード if (target_keyword != null && target_keyword.trim().length() > 0) { if (0 == selectedProjectId) { whereList .add(" (task.task_name LIKE #bind($target_keyword) OR project.project_name LIKE #bind($target_keyword))"); } else { whereList.add(" task.task_name LIKE #bind($target_keyword)"); } } // 担当者 if (StringUtils.isNotEmpty(target_user_id) && !target_user_id.equals("all")) { StringBuilder where = new StringBuilder(); where.append(" EXISTS("); where.append(" SELECT 0"); where.append(" FROM eip_t_project_task_member AS member"); where.append(" WHERE member.task_id = task.task_id"); where.append(" AND member.user_id = #bind($target_user_id)"); where.append(" )"); whereList.add(String.valueOf(where)); } // 分類 if (StringUtils.isNotEmpty(target_tracker) && !target_tracker.equals("all")) { whereList.add(" task.tracker = #bind($target_tracker)"); } // 優先度 if (StringUtils.isNotEmpty(target_priority) && !target_priority.equals("all")) { whereList.add(" task.priority = #bind($target_priority)"); } // ステータス if (StringUtils.isNotEmpty(target_status) && !target_status.equals("all")) { whereList.add(" task.status = #bind($target_status)"); } // 進捗率FROM if (StringUtils.isNotEmpty(target_progress_rate_from) && !target_progress_rate_from.equals("0")) { whereList.add(" task.progress_rate >= #bind($target_progress_rate_from)"); } // 進捗率TO if (StringUtils.isNotEmpty(target_progress_rate_to) && !target_progress_rate_to.equals("100")) { whereList.add(" task.progress_rate <= #bind($target_progress_rate_to)"); } // 進捗遅れ if (StringUtils.isNotEmpty(target_delay) && target_delay.equals(ProjectUtils.FLG_ON)) { StringBuilder task_days = new StringBuilder(); task_days .append(" CASE WHEN task.end_plan_date - task.start_plan_date + 1 < 0"); task_days.append(" THEN 0"); task_days .append(" ELSE task.end_plan_date - task.start_plan_date + 1"); task_days.append(" END "); // タスク日数 StringBuilder lapsed_days = new StringBuilder(); lapsed_days.append(" CASE"); lapsed_days .append(" WHEN task.start_plan_date IS NULL OR task.end_plan_date IS NULL"); lapsed_days.append(" THEN 0"); lapsed_days.append(" WHEN ").append( ProjectUtils.getCurrentDateWithCast()).append(" < task.end_plan_date"); lapsed_days.append(" THEN"); lapsed_days.append(" CASE WHEN ").append( ProjectUtils.getCurrentDateWithCast()).append( " - task.start_plan_date + 1 < 0"); lapsed_days.append(" THEN 0"); lapsed_days.append(" ELSE ").append( ProjectUtils.getCurrentDateWithCast()).append( " - task.start_plan_date + 1"); lapsed_days.append(" END"); lapsed_days.append(" ELSE"); lapsed_days .append(" task.end_plan_date - task.start_plan_date + 1"); lapsed_days.append(" END "); // 基準日までのタスク経過日数 StringBuilder sb = new StringBuilder(); sb.append(" ( "); sb.append(" ( " + task_days + " ) "); sb.append(" <> 0 AND ( "); sb.append(" ( " + lapsed_days + " ) "); sb.append(" * 100 / "); sb.append(" ( " + task_days + " ) "); sb.append(" > task.progress_rate "); sb.append(" ) "); sb.append(" ) "); whereList.add(sb.toString()); } return whereList; } private void setPostgresParams(SQLTemplate<EipTProjectTask> sqltemp, SQLTemplate<EipTProjectTask> sqlCountTemp) { sqltemp.param("project_id", selectedProjectId); sqlCountTemp.param("project_id", selectedProjectId); // 分類 if (StringUtils.isNotEmpty(target_keyword) && target_keyword.trim().length() > 0) { sqltemp.param("target_keyword", "%" + target_keyword + "%"); sqlCountTemp.param("target_keyword", "%" + target_keyword + "%"); } // 担当者 if (StringUtils.isNotEmpty(target_user_id) && !target_user_id.equals("all")) { sqltemp.param("target_user_id", Integer.valueOf(target_user_id)); sqlCountTemp.param("target_user_id", Integer.valueOf(target_user_id)); } // 分類 if (StringUtils.isNotEmpty(target_tracker) && !target_tracker.equals("all")) { sqltemp.param("target_tracker", target_tracker); sqlCountTemp.param("target_tracker", target_tracker); } // 優先度 if (StringUtils.isNotEmpty(target_priority) && !target_priority.equals("all")) { sqltemp.param("target_priority", target_priority); sqlCountTemp.param("target_priority", target_priority); } // ステータス if (StringUtils.isNotEmpty(target_status) && !target_status.equals("all")) { sqltemp.param("target_status", target_status); sqlCountTemp.param("target_status", target_status); } // 進捗率FROM if (StringUtils.isNotEmpty(target_progress_rate_from) && !target_progress_rate_from.equals("0")) { sqltemp.param("target_progress_rate_from", Integer .valueOf(target_progress_rate_from)); sqlCountTemp.param("target_progress_rate_from", Integer .valueOf(target_progress_rate_from)); } // 進捗率TO if (StringUtils.isNotEmpty(target_progress_rate_to) && !target_progress_rate_to.equals("100")) { sqltemp.param("target_progress_rate_to", Integer .valueOf(target_progress_rate_to)); sqlCountTemp.param("target_progress_rate_to", Integer .valueOf(target_progress_rate_to)); } } /** * ソート句を構築します。 * * @param crt * @return */ protected String getOrderBy(RunData rundata, Context context) { String sort = ALEipUtils.getTemp(rundata, context, LIST_SORT_STR); String sort_type = ALEipUtils.getTemp(rundata, context, LIST_SORT_TYPE_STR); String crt_key = null; Attributes map = getColumnMap(); if (sort != null && sort.length() > 0) { crt_key = map.getValue(sort); } current_sort = sort; current_sort_type = sort_type; if (crt_key != null && crt_key.length() > 0) { // インデントを非表示 indentFlg = false; if (sort_type != null && ALEipConstants.LIST_SORT_TYPE_DESC.equals(sort_type)) { return " ORDER BY " + crt_key + " DESC"; } else { return " ORDER BY " + crt_key; } } else { return " ORDER BY order_no"; } } /** * 詳細データを取得します。 <BR> * * @param rundata * RunData * @param context * Context * @return 汎用データベースオブジェクトモデル */ @Override protected EipTProjectTask selectDetail(RunData rundata, Context context) { // オブジェクトモデルを取得 return ProjectUtils.getEipTProjectTask(rundata, context); } /** * ResultDataを取得します。(一覧データ) <BR> * * @param record * レコード * @return ResultData */ @Override protected Object getResultData(EipTProjectTask record) { ProjectTaskResultData data = ProjectUtils.getProjectTaskResultData(record); Integer taskId = (int) data.getTaskId().getValue(); // 子タスク件数 int cntChild = ProjectUtils.getCountChildrenTask(taskId); // 子タスクが2件以上あればtrue // 並び替えボタン表示用 data.setHasChildren(cntChild >= 2); // 進捗更新用 data.setHasChildrenForForm(cntChild > 0); // 経過タスク日数 int lapsedDays = ProjectUtils.getLapsedDays(ProjectUtils.toString(record .getStartPlanDate()), ProjectUtils.toString(Calendar .getInstance() .getTime())); // 予定タスク日数 int taskDays = ProjectUtils.getLapsedDays(ProjectUtils.toString(record .getStartPlanDate()), ProjectUtils.toString(record.getEndPlanDate())); data.setPlanTerm(taskDays); if (lapsedDays > taskDays) { // 経過タスク日数≦タスク日数にする lapsedDays = taskDays; } // 予定進捗率 data .setPlanProgressRate(ProjectUtils.getPlanWorkload(lapsedDays, taskDays)); // 実績工数 List<ProjectTaskMemberResultData> memberList = data.getMemberList(); BigDecimal workload = BigDecimal.valueOf(0); workload = workload.setScale(1); for (int i = 0; i < memberList.size(); i++) { ProjectTaskMemberResultData member = memberList.get(i); workload = workload.add(member.getWorkload()); } data.setWorkload(workload); // 完了予測工数 BigDecimal forecastWorkload = BigDecimal.valueOf(0); if (data.getProgressRate().getValue() != 0) { forecastWorkload = workload.multiply(BigDecimal.valueOf(100)).divide( BigDecimal.valueOf(data.getProgressRate().getValue()), 2, BigDecimal.ROUND_HALF_UP); } data.setForecastWorkload(forecastWorkload); // インデント表示フラグ data.setIndentFlg(indentFlg); data.setEditable(ProjectFormUtils.isEditable(taskId, loginUserId)); return data; } /** * ResultDataを取得します。(詳細データ) <BR> * * @param record * レコード * @return ResultData */ @Override protected Object getResultDataDetail(EipTProjectTask record) { ProjectTaskResultData data = ProjectUtils.getProjectTaskResultData(record); int taskId = (int) data.getTaskId().getValue(); // ファイルリスト List<EipTProjectTaskFile> list = pfile .getSelectQueryForFiles(EipTProjectTask.TASK_ID_PK_COLUMN, taskId) .fetchList(); data.setAttachmentFiles(pfile.getFileList(list)); // コメントリスト data.setCommentList(ProjectUtils.getProjectTaskCommentList("" + taskId)); // パンくずリスト data.setTopicPath(ProjectUtils.getTaskTopicPath(record.getProjectId())); // ログインユーザーID data.setLoginUserId(loginUserId.longValue()); return data; } /** * 項目情報を取得する * * @return 項目情報 */ @Override protected Attributes getColumnMap() { Attributes map = new Attributes(); map.putValue("task_name", "task_name"); map.putValue("project_name", "project_name"); map.putValue("tracker", "tracker"); map.putValue("status", "status"); map.putValue("workload", "workload"); map.putValue("plan_workload", "plan_workload"); map.putValue("start_plan_date", "start_plan_date"); map.putValue("end_plan_date", "end_plan_date"); map.putValue("progress_rate", "progress_rate"); return map; } /** * プロジェクトの総数を取得する * * @return プロジェクト総数 */ public int getTaskCount() { return taskCount; } /** * 全プロジェクトのリストを返す * * @return 全プロジェクトのリスト */ public List<ProjectResultData> getAllProject() { return allProject; } /** * 選択されているプロジェクトIDを取得する * * @return プロジェクトID */ public Integer getSelectedProjectId() { return selectedProjectId; } /** * プロジェクトメンバーリストを取得します。 * * @return プロジェクトメンバーリスト */ public List<ALEipUser> getProjectMembers() { return projectMembers; } /** * 検索したキーワードを取得します。 * * @return 検索キーワード */ public String getTargetKeyword() { return target_keyword; } /** * 検索した担当者を取得します。 * * @return 検索担当者 */ public String getTargetUserId() { return target_user_id; } public String getTargetUserName() { if (!"".equals(getTargetUserId()) && getTargetUserId() != null) { try { return ALEipUtils .getALEipUser(Integer.parseInt(target_user_id)) .getAliasName() .toString(); } catch (Exception e) { return null; } } else { return null; } } /** * 検索した分類を取得します。 * * @return 検索分類 */ public String getTargetTracker() { return target_tracker; } public String getTargetTrackerName() { if (!"".equals(getTargetTracker()) && getTargetTracker() != null) { return getTrackerMap().get(target_tracker); } else { return null; } } /** * 検索した優先度を取得します。 * * @return 検索優先度 */ public String getTargetPriority() { return target_priority; } public String getTargetPriorityName() { if (!"".equals(getTargetPriority()) && getTargetPriority() != null) { return getPriorityMap().get(target_priority); } else { return null; } } /** * 検索したステータスを取得します。 * * @return 検索ステータス */ public String getTargetStatus() { return target_status; } public String getTargetStatusName() { if (!"".equals(getTargetStatus()) && getTargetStatus() != null) { return getStatusMap().get(target_status); } else { return null; } } /** * 検索した進捗率FROMを取得します。 * * @return 進捗率FROM */ public String getTargetProgressRateFrom() { return target_progress_rate_from; } /** * 検索した進捗率TOを取得します。 * * @return 進捗率TO */ public String getTargetProgressRateTo() { return target_progress_rate_to; } /** * 検索した進捗遅れフラグを取得します。 * * @return 進捗遅れフラグ */ public String getTargetDelay() { return target_delay; } /** * イナズマ線表示フラグを取得します。 * * @return イナズマ線表示フラグ */ public String getProgressLineChecked() { return progress_line_checked; } /** * Android2かどうかを返します。 * * @return Android2かどうか */ public boolean isAndroid2() { return isAndroid2; } /** * 日付の年最大値を取得する。 * * @return 年最大値 */ public int getViewDateMaxYear() { return viewDateMaxYear; } /** * 基準日Fromを取得する。 * * @return 基準日From */ public ALDateTimeField getBaseDateFrom() { return base_date_from; } /** * 基準日Toを取得する。 * * @return 基準日To */ public ALDateTimeField getBaseDateTo() { return base_date_to; } /** * 基準日Fromの年を取得する。 * * @return 基準日Fromの年 */ public int getBaseDateFromYear() { return calFrom.get(Calendar.YEAR); } /** * 基準日Toの年を取得する。 * * @return 基準日Toの年 */ public int getBaseDateToYear() { return calTo.get(Calendar.YEAR); } /** * 加算日数を加えた日を取得する。 * * @return 加算後の日 */ public int getDay(int days) { Calendar cal = (Calendar) calFrom.clone(); cal.add(Calendar.DAY_OF_MONTH, days - 1); return cal.get(Calendar.DAY_OF_MONTH); } /** * 加算日数を加えた日がシステム日付かチェックする。 * * @return TRUE:システム日付である */ public boolean isToday(int days) { Calendar today = Calendar.getInstance(); Calendar cal = (Calendar) calFrom.clone(); cal.add(Calendar.DAY_OF_MONTH, days - 1); return today.get(Calendar.YEAR) == cal.get(Calendar.YEAR) && today.get(Calendar.MONTH) == cal.get(Calendar.MONTH) && today.get(Calendar.DAY_OF_MONTH) == cal.get(Calendar.DAY_OF_MONTH); } /** * 表示年月の日数を取得する。 * * @return 日数 */ public int getDays() { return ProjectUtils.getLapsedDays(calFrom, calTo); } /** * 表示年月の日数を取得する。 * * @return 日数 */ public int getDays(Date dateTo) { Calendar cal = Calendar.getInstance(); cal.setTime(dateTo); return ProjectUtils.getLapsedDays(calFrom, cal); } /** * 年を取得する。 * * @return 週番号 */ public int getYear(int days) { Calendar cal = (Calendar) calFrom.clone(); cal.add(Calendar.DAY_OF_MONTH, days - 1); return cal.get(Calendar.YEAR); } /** * 月を取得する。 * * @return 月 */ public int getMonth(int days) { Calendar cal = (Calendar) calFrom.clone(); cal.add(Calendar.DAY_OF_MONTH, days - 1); return cal.get(Calendar.MONTH); } /** * 週を取得する。 * * @return 週番号 */ public int getWeek(int days) { Calendar cal = (Calendar) calFrom.clone(); cal.add(Calendar.DAY_OF_MONTH, days - 1); return cal.get(Calendar.WEEK_OF_YEAR); } /** * 分類リストを返します。 * * @return 分類リスト */ public Map<String, String> getTrackerMap() { return ProjectUtils.getKubunMap("tracker"); } /** * ステータスリストを返します。 * * @return ステータスリスト */ public Map<String, String> getStatusMap() { return ProjectUtils.getKubunMap("status"); } /** * 優先度リストを返します。 * * @return 優先度リスト */ public Map<String, String> getPriorityMap() { return ProjectUtils.getKubunMap("priority"); } /** * 現在時刻の long 値を返します。 * * @return 現在時刻の long 値 */ public long getNowTime() { return Calendar.getInstance().getTimeInMillis(); } /** * 加算日数を加えた日付が休日かをチェックする。 * * @return TRUE:加算後の日が休日 */ public boolean isHoliday(int days) { Calendar cal = (Calendar) calFrom.clone(); cal.add(Calendar.DAY_OF_MONTH, days - 1); // 祝日かどうかを検証する. ALEipHolidaysManager holidaysManager = ALEipHolidaysManager.getInstance(); return holidaysManager.isHoliday(cal.getTime()) != null; } /** * 加算日数を加えた日付が土曜日かをチェックする。 * * @return TRUE:加算後の日が土曜 */ public boolean isSaturday(int days) { Calendar cal = (Calendar) calFrom.clone(); cal.add(Calendar.DAY_OF_MONTH, days - 1); return Calendar.SATURDAY == cal.get(Calendar.DAY_OF_WEEK); } /** * 加算日数を加えた日付が土曜日かをチェックする。 * * @return TRUE:加算後の日が日曜 */ public boolean isSunday(int days) { Calendar cal = (Calendar) calFrom.clone(); cal.add(Calendar.DAY_OF_MONTH, days - 1); return Calendar.SUNDAY == cal.get(Calendar.DAY_OF_WEEK); } /** * ビュータイプを取得する * * @return ビュータイプ */ public String getViewtype() { return "project"; } private boolean isRejectParameter(String numeric) { return StringUtils.isNotEmpty(numeric) && !"all".equals(numeric) && !StringUtils.isNumeric(numeric); } public void setProject(RunData rundata, Context context) { // validate projectId and reset projectId String filter = rundata.getParameters().getString("filter", ""); String filterType = rundata.getParameters().getString("filtertype", ""); String sesFilter = ALEipUtils.getTemp(rundata, context, LIST_FILTER_STR); String sesFilterType = ALEipUtils.getTemp(rundata, context, LIST_FILTER_TYPE_STR); sesFilter = sesFilter == null ? "" : sesFilter; sesFilterType = sesFilterType == null ? "" : sesFilterType; if (filterType.isEmpty()) { filter = sesFilter; filterType = sesFilterType; } if (StringUtils.isEmpty(filter) || StringUtils.isEmpty(filterType)) { selectedProjectId = 0; setFilter(rundata, context); return; } boolean existProject = false; for (ProjectResultData data : allProject) { if (filter.equals(data.getProjectId().toString())) { existProject = true; break; } } if (!existProject) { selectedProjectId = 0; } else { selectedProjectId = Integer.valueOf(filter); } setFilter(rundata, context); } private void setFilter(RunData rundata, Context context) { ALEipUtils.setTemp(rundata, context, LIST_FILTER_STR, String .valueOf(selectedProjectId)); ALEipUtils.setTemp(rundata, context, LIST_FILTER_TYPE_STR, "project_id"); } /** * @return isFileUploadable */ public boolean isFileUploadable() { return isFileUploadable; } }