/* * 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.manhour; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.jar.Attributes; import org.apache.cayenne.exp.Expression; import org.apache.cayenne.exp.ExpressionFactory; import org.apache.jetspeed.services.logging.JetspeedLogFactoryService; import org.apache.jetspeed.services.logging.JetspeedLogger; import org.apache.turbine.services.TurbineServices; import org.apache.turbine.util.RunData; import org.apache.velocity.context.Context; import com.aimluck.commons.field.ALDateTimeField; import com.aimluck.eip.category.beans.CommonCategoryLiteBean; import com.aimluck.eip.category.util.CommonCategoryUtils; import com.aimluck.eip.cayenne.om.portlet.EipTCommonCategory; import com.aimluck.eip.cayenne.om.portlet.EipTSchedule; import com.aimluck.eip.cayenne.om.portlet.EipTScheduleMap; import com.aimluck.eip.cayenne.om.security.TurbineGroup; import com.aimluck.eip.cayenne.om.security.TurbineUser; import com.aimluck.eip.cayenne.om.security.TurbineUserGroupRole; import com.aimluck.eip.common.ALAbstractSelectData; import com.aimluck.eip.common.ALDBErrorException; import com.aimluck.eip.common.ALEipConstants; import com.aimluck.eip.common.ALEipGroup; import com.aimluck.eip.common.ALEipManager; import com.aimluck.eip.common.ALEipPost; import com.aimluck.eip.common.ALEipUser; import com.aimluck.eip.common.ALPageNotFoundException; import com.aimluck.eip.common.ALPermissionException; import com.aimluck.eip.manhour.util.ManHourUtils; 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.SelectQuery; import com.aimluck.eip.schedule.util.ScheduleUtils; import com.aimluck.eip.services.accessctl.ALAccessControlConstants; import com.aimluck.eip.services.accessctl.ALAccessControlFactoryService; import com.aimluck.eip.services.accessctl.ALAccessControlHandler; import com.aimluck.eip.util.ALEipUtils; /** * プロジェクト管理の検索データを管理するためのクラスです。 <br /> */ public class ManHourSelectData extends ALAbstractSelectData<EipTScheduleMap, ManHourResultData> { /** logger */ private static final JetspeedLogger logger = JetspeedLogFactoryService .getLogger(ManHourSelectData.class.getName()); private String target_group_name; /** 表示対象のユーザ ID */ private String target_user_id; /** グループリスト(My グループと部署) */ private List<ALEipGroup> myGroupList = null; /** ポートレット Schedule への URL */ private String scheduleUrl; /** <code>userid</code> ユーザーID */ private String userid; /** <code>category_id</code> カテゴリID */ private String category_id; /** 共有カテゴリリスト */ private List<CommonCategoryLiteBean> categoryList = null; /** 集計日付 */ private ALDateTimeField view_date; /** スケジュール一覧 */ private List<ManHourResultData> scheduleList; /** 工数合計 */ private double totalManHourMinPast; private double totalManHourMinPlan; private boolean is_normal; /** アクセス権限の機能名 */ private String aclPortletFeature = null; /** 閲覧権限の有無 */ private boolean hasAclSummaryOther; /** * * @param action * @param rundata * @param context */ @Override public void init(ALAction action, RunData rundata, Context context) throws ALPageNotFoundException, ALDBErrorException { String sort = ALEipUtils.getTemp(rundata, context, LIST_SORT_STR); if (sort == null || sort.equals("")) { ALEipUtils.setTemp(rundata, context, LIST_SORT_STR, ALEipUtils .getPortlet(rundata, context) .getPortletConfig() .getInitParameter("p1a-sort")); } Calendar cal = Calendar.getInstance(); view_date = new ALDateTimeField("yyyy-MM-dd"); int view_date_year = ManHourUtils.getViewDateYear(rundata, context); int view_date_month = ManHourUtils.getViewDateMonth(rundata, context); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.YEAR, view_date_year); cal.set(Calendar.MONTH, view_date_month - 1); cal.set(Calendar.DAY_OF_MONTH, 1); view_date.setValue(cal.getTime()); // ログインユーザの ID を設定する. userid = Integer.toString(ALEipUtils.getUserId(rundata)); target_user_id = ALEipUtils.getTemp(rundata, context, "target_user_id"); if (target_user_id == null || target_user_id.equals("")) { ALEipUtils.setTemp(rundata, context, "target_user_id", userid); } target_group_name = ALEipUtils.getParameter(rundata, context, "target_group_name"); target_user_id = ALEipUtils.getParameter(rundata, context, "target_user_id"); category_id = ALEipUtils.getParameter(rundata, context, "category_id"); List<ALEipGroup> myGroups = ALEipUtils.getMyGroups(rundata); myGroupList = new ArrayList<ALEipGroup>(); int length = myGroups.size(); for (int i = 0; i < length; i++) { myGroupList.add(myGroups.get(i)); } scheduleList = new ArrayList<ManHourResultData>(); categoryList = CommonCategoryUtils.getCommonCategoryLiteBeans(rundata); // アクセス権 if (target_user_id.equals(userid)) { aclPortletFeature = ALAccessControlConstants.POERTLET_FEATURE_MANHOUR_SUMMARY_SELF; } else { aclPortletFeature = ALAccessControlConstants.POERTLET_FEATURE_MANHOUR_SUMMARY_OTHER; } ALAccessControlFactoryService aclservice = (ALAccessControlFactoryService) ((TurbineServices) TurbineServices .getInstance()).getService(ALAccessControlFactoryService.SERVICE_NAME); ALAccessControlHandler aclhandler = aclservice.getAccessControlHandler(); hasAclSummaryOther = aclhandler.hasAuthority( ALEipUtils.getUserId(rundata), ALAccessControlConstants.POERTLET_FEATURE_MANHOUR_SUMMARY_OTHER, ALAccessControlConstants.VALUE_ACL_LIST); if (!hasAclSummaryOther) { // 他ユーザーの閲覧権限がないときには、ログインユーザーのIDに変更する。 target_user_id = userid; aclPortletFeature = ALAccessControlConstants.POERTLET_FEATURE_MANHOUR_SUMMARY_SELF; } super.init(action, rundata, context); } /** * * @return */ public boolean isNormal() { return is_normal; } /** * * @param bool */ public void setNormal(boolean bool) { is_normal = bool; } /** * 一覧表示します。 * * @param action * @param rundata * @param context * @return TRUE 成功 FASLE 失敗 */ @Override public boolean doViewList(ALAction action, RunData rundata, Context context) { try { init(action, rundata, context); doCheckAclPermission( rundata, context, ALAccessControlConstants.VALUE_ACL_LIST); action.setMode(ALEipConstants.MODE_LIST); List<EipTScheduleMap> aList = selectList(rundata, context); if (aList != null) { int size = aList.size(); for (int i = 0; i < size; i++) { getResultData(aList.get(i)); } cleanupDummySchedule(scheduleList); scheduleList = getScheduleList(); } action.setResultData(this); action.putData(rundata, context); ALEipUtils.removeTemp(rundata, context, ALEipConstants.ENTITY_ID); return (scheduleList != null); } catch (ALPermissionException e) { ALEipUtils.redirectPermissionError(rundata); return false; } catch (ALPageNotFoundException e) { ALEipUtils.redirectPageNotFound(rundata); return false; } catch (ALDBErrorException e) { ALEipUtils.redirectDBError(rundata); return false; } } /** * ALAbstractSelectData で定義されている getList() をオーバーライドする。<br /> * 返り値は、ALAbstractSelectData の変数 list ではなく、 <br /> * このクラスのグローバル変数 scheduleList を返す。 * */ @Override public List<Object> getList() { return Arrays.asList(scheduleList.toArray()); } /** * */ private List<ManHourResultData> getScheduleList() { ManHourResultData[] obj = new ManHourResultData[scheduleList.size()]; int size = scheduleList.size(); for (int i = 0; i < size; i++) { obj[i] = scheduleList.get(i); } Arrays.sort(obj, new Comparator<ManHourResultData>() { @Override public int compare(ManHourResultData o1, ManHourResultData o2) { String sort = getCurrentSort(); String sort_type = getCurrentSortType(); int result = 0; if ("category".equals(sort)) { if ("asc".equals(sort_type)) { result = (o1).getCategoryName().getValue().compareTo( (o2).getCategoryName().getValue()); } else { result = (o2).getCategoryName().getValue().compareTo( (o1).getCategoryName().getValue()); } } else if ("user_name".equals(sort)) { if ("asc".equals(sort_type)) { result = (o1).getUser().getValue().compareTo((o2).getUser().getValue()); } else { result = (o2).getUser().getValue().compareTo((o1).getUser().getValue()); } } else if ("schedule".equals(sort)) { if ("asc".equals(sort_type)) { result = (o1).getName().getValue().compareTo((o2).getName().getValue()); } else { result = (o2).getName().getValue().compareTo((o1).getName().getValue()); } } else if ("time".equals(sort)) { if ("asc".equals(sort_type)) { result = (o1).getStartDate().getValue().compareTo( (o2).getStartDate().getValue()); } else { result = (o2).getStartDate().getValue().compareTo( (o1).getStartDate().getValue()); } } else if ("manhour".equals(sort)) { if ("asc".equals(sort_type)) { result = Double.valueOf((o1).getManHourMin()).compareTo( Double.valueOf((o2).getManHourMin())); } else { result = Double.valueOf((o2).getManHourMin()).compareTo( Double.valueOf((o1).getManHourMin())); } } return result; } }); List<ManHourResultData> list = new ArrayList<ManHourResultData>(); list.addAll(Arrays.asList(obj)); setPageParam(list.size()); return buildPaginatedResultData(list); } /** * ページング結果のリストを取得します。 * * @param records * 検索結果 */ protected List<ManHourResultData> buildPaginatedResultData( List<ManHourResultData> records) { List<ManHourResultData> list = new ArrayList<ManHourResultData>(); setPageParam(records.size()); int start = getStart(); int rows_num = getRowsNum(); int size = records.size(); int end = (start + rows_num <= size) ? start + rows_num : size; for (int i = start; i < end; i++) { list.add(records.get(i)); } return list; } /** * * @param rundata * @param context * @return * @throws ALPageNotFoundException * @throws ALDBErrorException */ @Override protected ResultList<EipTScheduleMap> selectList(RunData rundata, Context context) throws ALPageNotFoundException, ALDBErrorException { try { SelectQuery<EipTScheduleMap> query = getSelectQuery(rundata, context); // buildSelectQueryForListView(query); buildSelectQueryForListViewSort(query, rundata, context); List<EipTScheduleMap> list = query.fetchList(); return new ResultList<EipTScheduleMap>(sortByDummySchedule(list)); } catch (Exception ex) { logger.error("manhour", ex); return null; } } public static List<EipTScheduleMap> sortByDummySchedule( List<EipTScheduleMap> list) { // 重複スケジュールの表示調節のために, // ダミースケジュールをリストの始めに寄せる. List<EipTScheduleMap> dummyList = new ArrayList<EipTScheduleMap>(); List<EipTScheduleMap> normalList = new ArrayList<EipTScheduleMap>(); for (EipTScheduleMap scheduleMap : list) { if ("D".equals(scheduleMap.getStatus())) { dummyList.add(scheduleMap); } else { normalList.add(scheduleMap); } } List<EipTScheduleMap> newList = new ArrayList<EipTScheduleMap>(); newList.addAll(dummyList); newList.addAll(normalList); return newList; } /** * 検索条件を設定した SelectQuery を返します。 <BR> * * @param rundata * @param context * @return */ private SelectQuery<EipTScheduleMap> getSelectQuery(RunData rundata, Context context) { SelectQuery<EipTScheduleMap> query = Database.query(EipTScheduleMap.class); // 終了日時 Expression exp11 = ExpressionFactory.greaterOrEqualExp( EipTScheduleMap.EIP_TSCHEDULE_PROPERTY + "." + EipTSchedule.END_DATE_PROPERTY, view_date.getValue()); Calendar cal = Calendar.getInstance(); cal.setTime(view_date.getValue()); cal.add(Calendar.MONTH, +1); ALDateTimeField view_date_add_month = new ALDateTimeField("yyyy-MM-dd"); view_date_add_month.setValue(cal.getTime()); // 開始日時 Expression exp12 = ExpressionFactory.lessOrEqualExp(EipTScheduleMap.EIP_TSCHEDULE_PROPERTY + "." + EipTSchedule.START_DATE_PROPERTY, view_date_add_month.getValue()); // 通常スケジュール Expression exp13 = ExpressionFactory.noMatchExp(EipTScheduleMap.EIP_TSCHEDULE_PROPERTY + "." + EipTSchedule.REPEAT_PATTERN_PROPERTY, "N"); // 期間スケジュール Expression exp14 = ExpressionFactory.noMatchExp(EipTScheduleMap.EIP_TSCHEDULE_PROPERTY + "." + EipTSchedule.REPEAT_PATTERN_PROPERTY, "S"); query.setQualifier((exp11.andExp(exp12).andExp(exp14)).orExp(exp13 .andExp(exp14))); Expression exp15 = ExpressionFactory.matchExp(EipTScheduleMap.STATUS_PROPERTY, "D"); // 共有カテゴリ if ((category_id != null) && (!category_id.equals("") && !is_normal) && (!category_id.equals("all"))) { Expression exp = ExpressionFactory.matchExp( EipTScheduleMap.COMMON_CATEGORY_ID_PROPERTY, Integer.valueOf(category_id)); query.andQualifier(exp15.orExp(exp)); } else { Expression exp = ExpressionFactory.noMatchExp( EipTScheduleMap.COMMON_CATEGORY_ID_PROPERTY, Integer.valueOf(1)); query.andQualifier(exp15.orExp(exp)); } // ユーザー if (is_normal) { Expression exp1 = ExpressionFactory.matchDbExp(TurbineUser.USER_ID_PK_COLUMN, Integer .valueOf(userid)); query.andQualifier(exp1); } else if ((target_user_id != null) && (!target_user_id.equals("")) && (!target_user_id.equals("all"))) { Expression exp1 = ExpressionFactory.matchDbExp(TurbineUser.USER_ID_PK_COLUMN, Integer .valueOf(target_user_id)); query.andQualifier(exp1); } // グループ if ((target_group_name != null) && (!target_group_name.equals("")) && (!target_group_name.equals("all")) && !is_normal) { // 選択したグループを指定する. Expression exp2 = ExpressionFactory.matchExp( EipTScheduleMap.TURBINE_USER_GROUP_ROLE_PROPERTY + "." + TurbineUserGroupRole.TURBINE_GROUP_PROPERTY + "." + TurbineGroup.GROUP_NAME_PROPERTY, target_group_name); query.andQualifier(exp2); } return buildSelectQueryForFilter(query, rundata, context); } /** * * @param rundata * @param context * @return * @throws ALPageNotFoundException * @throws ALDBErrorException */ @Override protected ManHourResultData selectDetail(RunData rundata, Context context) throws ALPageNotFoundException, ALDBErrorException { return null; } /** * * @param record * @return * @throws ALPageNotFoundException * @throws ALDBErrorException */ @Override protected Object getResultData(EipTScheduleMap record) throws ALPageNotFoundException, ALDBErrorException { try { EipTSchedule schedule = record.getEipTSchedule(); EipTCommonCategory category = record.getEipTCommonCategory(); // 登録ユーザ名の設定 ALEipUser createdUser = ALEipUtils.getALEipUser(record.getUserId().intValue()); String createdUserName = createdUser.getAliasName().toString(); ManHourResultData rd = new ManHourResultData(); rd.initField(); rd.setCategoryId(category.getCommonCategoryId().longValue()); rd.setCategoryName(category.getName()); rd.setUser(createdUserName); rd.setUserId(record.getUserId().longValue()); // スケジュール // スケジュールが棄却されている場合は表示しない if ("R".equals(record.getStatus())) { return rd; } int userid_int = Integer.parseInt(userid); SelectQuery<EipTScheduleMap> mapquery = Database.query(EipTScheduleMap.class); Expression mapexp1 = ExpressionFactory.matchExp( EipTScheduleMap.SCHEDULE_ID_PROPERTY, schedule.getScheduleId()); mapquery.setQualifier(mapexp1); Expression mapexp2 = ExpressionFactory.matchExp(EipTScheduleMap.USER_ID_PROPERTY, Integer .valueOf(userid)); mapquery.andQualifier(mapexp2); List<EipTScheduleMap> schedulemaps = mapquery.fetchList(); boolean is_member = (schedulemaps != null && schedulemaps.size() > 0) ? true : false; // boolean is_member = orm_map.count(new Criteria().add( // EipTScheduleMapConstants.SCHEDULE_ID, schedule.getScheduleId()).add( // EipTScheduleMapConstants.USER_ID, userid)) != 0; // Dummy スケジュールではない // 完全に隠す // 自ユーザー以外 // 共有メンバーではない // オーナーではない if ((!"D".equals(record.getStatus())) && "P".equals(schedule.getPublicFlag()) && (userid_int != record.getUserId().intValue()) && (userid_int != schedule.getOwnerId().intValue()) && !is_member) { return rd; } if ("C".equals(schedule.getPublicFlag()) && (userid_int != record.getUserId().intValue()) && (userid_int != schedule.getOwnerId().intValue()) && !is_member) { // 名前 rd.setName("非公開"); // 仮スケジュールかどうか rd.setTmpreserve(false); } else { // 名前 rd.setName(schedule.getName()); // 仮スケジュールかどうか rd.setTmpreserve("T".equals(record.getStatus())); } // ID rd.setScheduleId(schedule.getScheduleId().intValue()); // 親スケジュール ID rd.setParentId(schedule.getParentId().intValue()); // 開始日時 rd.setStartDate(schedule.getStartDate()); // 終了日時 rd.setEndDate(schedule.getEndDate()); // 公開するかどうか rd.setPublic("O".equals(schedule.getPublicFlag())); // 非表示にするかどうか rd.setHidden("P".equals(schedule.getPublicFlag())); // ダミーか rd.setDummy("D".equals(record.getStatus())); // ログインユーザかどうか rd.setLoginuser(record.getUserId().intValue() == userid_int); // オーナーかどうか rd.setOwner(schedule.getOwnerId().intValue() == userid_int); // 共有メンバーかどうか rd.setMember(is_member); // 繰り返しパターン rd.setPattern(schedule.getRepeatPattern()); Calendar cal = Calendar.getInstance(); cal.setTime(view_date.getValue()); Calendar cal2 = Calendar.getInstance(); cal2.setTime(view_date.getValue()); cal2.add(Calendar.MONTH, +1); ALDateTimeField field; if (!rd.getPattern().equals("N")) { while (cal.before(cal2)) { field = new ALDateTimeField("yyyy-MM-dd"); field.setValue(cal.getTime()); if (ScheduleUtils.isView(field, rd.getPattern(), rd .getStartDate() .getValue(), rd.getEndDate().getValue())) { Calendar temp = Calendar.getInstance(); temp.setTime(field.getValue()); temp.set(Calendar.HOUR, Integer.parseInt(rd .getStartDate() .getHour())); temp.set(Calendar.MINUTE, Integer.parseInt(rd .getStartDate() .getMinute())); temp.set(Calendar.SECOND, 0); temp.set(Calendar.MILLISECOND, 0); Calendar temp2 = Calendar.getInstance(); temp2.setTime(field.getValue()); temp2.set(Calendar.HOUR, Integer .parseInt(rd.getEndDate().getHour())); temp2.set(Calendar.MINUTE, Integer.parseInt(rd .getEndDate() .getMinute())); temp2.set(Calendar.SECOND, 0); temp2.set(Calendar.MILLISECOND, 0); ManHourResultData rd3 = new ManHourResultData(); rd3.initField(); rd3.setCategoryId(rd.getCategoryId().getValue()); rd3.setCategoryName(rd.getCategoryName().getValue()); rd3.setUser(rd.getUser().toString()); rd3.setUserId(rd.getUserId().getValue()); rd3.setScheduleId((int) rd.getScheduleId().getValue()); rd3.setParentId((int) rd.getParentId().getValue()); rd3.setName(rd.getName().getValue()); // 開始日を設定し直す rd3.setStartDate(temp.getTime()); // 終了日を設定し直す rd3.setEndDate(temp2.getTime()); rd3.setTmpreserve(rd.isTmpreserve()); rd3.setPublic(rd.isPublic()); rd3.setHidden(rd.isHidden()); rd3.setDummy(rd.isDummy()); rd3.setLoginuser(rd.isLoginuser()); rd3.setOwner(rd.isOwner()); rd3.setMember(rd.isMember()); // 繰り返しはON rd3.setRepeat(true); addResultData(rd3); } cal.add(Calendar.DATE, +1); } } else { addResultData(rd); } return rd; } catch (Exception ex) { logger.error("manhour", ex); return null; } } private void addResultData(ManHourResultData rd) { int size = scheduleList.size(); int position = 0; boolean canAdd = true; boolean repeat_del = false; boolean pos_bool = false; for (int i = 0; i < size; i++) { repeat_del = false; ManHourResultData rd2 = scheduleList.get(i); if (rd.isRepeat() && rd2.isDummy() && rd.getScheduleId().getValue() == rd2.getParentId().getValue() && ScheduleUtils.equalsToDate(rd.getStartDate().getValue(), rd2 .getStartDate() .getValue(), false)) { // [繰り返しスケジュール] 親の ID を検索 canAdd = false; break; } if (rd2.isRepeat() && rd.isDummy() && rd2.getScheduleId().getValue() == rd.getParentId().getValue() && ScheduleUtils.equalsToDate(rd.getStartDate().getValue(), rd2 .getStartDate() .getValue(), false)) { // [繰り返しスケジュール] 親の ID を検索 scheduleList.remove(rd2); canAdd = true; repeat_del = true; } // スケジュールを挿入する位置を捕捉する。 // 開始日時の昇順 if (!pos_bool && rd.getStartDate().getValue().before(rd2.getStartDate().getValue())) { position = i; pos_bool = true; } if (!repeat_del) { // 繰り返しスケジュールの変更/削除が無い場合 if (!rd.isDummy() && !rd2.isDummy()) { // ダミースケジュールではないときに // 重複スケジュールを検出する。 // 時間が重なっている場合重複スケジュールとする。 if ((rd.getStartDate().getValue().before( rd2.getStartDate().getValue()) && rd2 .getStartDate() .getValue() .before(rd.getEndDate().getValue())) || (rd2.getStartDate().getValue().before( rd.getStartDate().getValue()) && rd .getStartDate() .getValue() .before(rd2.getEndDate().getValue())) || (rd .getStartDate() .getValue() .before(rd2.getEndDate().getValue()) && rd2 .getEndDate() .getValue() .before(rd.getEndDate().getValue())) || (rd2 .getStartDate() .getValue() .before(rd.getEndDate().getValue()) && rd .getEndDate() .getValue() .before(rd2.getEndDate().getValue())) // || (rd.getEndDate().getValue() // .equals(rd2.getEndDate().getValue()) && rd.getStartDate() // .getValue().equals(rd2.getStartDate().getValue())) ) { // rd2.setDuplicate(true); rd.setDuplicate(true); if (rd.getUserId().getValue() == rd2.getUserId().getValue()) { rd2.setDuplicate(true); } } } } } if (canAdd) { if (pos_bool) { scheduleList.add(position, rd); if (rd.isPast()) { totalManHourMinPast += rd.getManHourMin(); } else { totalManHourMinPlan += rd.getManHourMin(); } } else { scheduleList.add(rd); if (rd.isPast()) { totalManHourMinPast += rd.getManHourMin(); } else { totalManHourMinPlan += rd.getManHourMin(); } } } } /** * ダミースケジュールを一覧から削除する。 * * @param list */ private void cleanupDummySchedule(List<ManHourResultData> list) { if (list == null || list.size() <= 0) { return; } ManHourResultData rd = null; List<ManHourResultData> dummyList = new ArrayList<ManHourResultData>(); int size = list.size(); for (int i = 0; i < size; i++) { rd = list.get(i); if (rd.isDummy()) { dummyList.add(rd); } } list.removeAll(dummyList); } /** * * @param obj * @return * @throws ALPageNotFoundException * @throws ALDBErrorException */ @Override protected Object getResultDataDetail(ManHourResultData obj) throws ALPageNotFoundException, ALDBErrorException { return null; } public String getTargetGroupName() { return target_group_name; } public String getTargetUserId() { return target_user_id; } /** * * @param groupname * @return */ public List<ALEipUser> getUsers() { if (hasAclSummaryOther) { if ((target_group_name != null) && (!target_group_name.equals("")) && (!target_group_name.equals("all"))) { return ALEipUtils.getUsers(target_group_name); } else { return ALEipUtils.getUsers("LoginUser"); } } else { try { List<ALEipUser> users = new ArrayList<ALEipUser>(); users.add(ALEipUtils.getALEipUser(Integer.parseInt(userid))); return users; } catch (Exception e) { return null; } } } /** * * @return */ public Map<Integer, ALEipPost> getPostMap() { return ALEipManager.getInstance().getPostMap(); } /** * * @return */ public List<ALEipGroup> getMyGroupList() { return myGroupList; } /** * * */ @Override protected Attributes getColumnMap() { Attributes map = new Attributes(); map.putValue("user_name", EipTScheduleMap.COMMON_CATEGORY_ID_PROPERTY); map.putValue("category", EipTScheduleMap.COMMON_CATEGORY_ID_PROPERTY); map.putValue("schedule", EipTScheduleMap.COMMON_CATEGORY_ID_PROPERTY); map.putValue("time", EipTScheduleMap.COMMON_CATEGORY_ID_PROPERTY); map.putValue("manhour", EipTScheduleMap.COMMON_CATEGORY_ID_PROPERTY); return map; } /** * * @param id * @return */ public boolean isMatch(int id1, long id2) { return id1 == (int) id2; } /** * * @return */ public String getScheduleUrl() { return scheduleUrl; } /** * * @return */ public ALDateTimeField getViewDate() { return view_date; } /** * * @return */ public String getCategoryId() { return category_id; } public List<CommonCategoryLiteBean> getCategoryList() { return categoryList; } /** * * @return */ public double getTotalManHourPast() { return ((int) (totalManHourMinPast * 100 / 60)) / 100.0; } /** * * @return */ public double getTotalManHourPlan() { return ((int) (totalManHourMinPlan * 100 / 60)) / 100.0; } /** * 表示する年の最大値を返します。 * * @return */ public int getEndYear() { Calendar calendar = Calendar.getInstance(); return calendar.get(Calendar.YEAR) + 1; } /** * アクセス権限チェック用メソッド。<br /> * アクセス権限の機能名を返します。 * * @return */ @Override public String getAclPortletFeature() { return aclPortletFeature; } }