svnno****@sourc*****
svnno****@sourc*****
2008年 12月 23日 (火) 10:07:02 JST
Revision: 1619 http://svn.sourceforge.jp/view?root=pal&view=rev&rev=1619 Author: shinsuke Date: 2008-12-23 10:07:01 +0900 (Tue, 23 Dec 2008) Log Message: ----------- supported csv download, and minor fixes. Modified Paths: -------------- timecard/trunk/src/main/java/jp/sf/pal/timecard/TimecardConstants.java timecard/trunk/src/main/java/jp/sf/pal/timecard/action/ConfigAction.java timecard/trunk/src/main/java/jp/sf/pal/timecard/action/EmployeeAction.java timecard/trunk/src/main/java/jp/sf/pal/timecard/action/admin/TimecardAction.java timecard/trunk/src/main/java/jp/sf/pal/timecard/action/manager/TimecardAction.java timecard/trunk/src/main/java/jp/sf/pal/timecard/form/config/ConfigForm.java timecard/trunk/src/main/java/jp/sf/pal/timecard/form/employee/EmployeeForm.java timecard/trunk/src/main/java/jp/sf/pal/timecard/util/TimecardUtil.java timecard/trunk/src/main/resources/application.properties timecard/trunk/src/main/resources/application_ja.properties timecard/trunk/src/main/webapp/WEB-INF/view/admin/timecard/index.jsp timecard/trunk/src/main/webapp/WEB-INF/view/config/index.jsp timecard/trunk/src/main/webapp/WEB-INF/view/employee/index.jsp timecard/trunk/src/main/webapp/WEB-INF/view/manager/timecard/index.jsp Added Paths: ----------- timecard/trunk/src/main/webapp/WEB-INF/view/employee/errorDownload.jsp -------------- next part -------------- Modified: timecard/trunk/src/main/java/jp/sf/pal/timecard/TimecardConstants.java =================================================================== --- timecard/trunk/src/main/java/jp/sf/pal/timecard/TimecardConstants.java 2008-12-20 13:39:54 UTC (rev 1618) +++ timecard/trunk/src/main/java/jp/sf/pal/timecard/TimecardConstants.java 2008-12-23 01:07:01 UTC (rev 1619) @@ -102,7 +102,12 @@ public static final String SYSTEM_EMAIL = "system.email"; + public static final String CSV_ENCODING = "encoding.csv"; + public static final String DAILY_REPORT_REQUEST_NOTIFICATION_NAME = "daily-report-request.vm"; public static final String MONTHLY_REPORT_REQUEST_NOTIFICATION_NAME = "monthly-report-request.vm"; + + public static final String DOWNLOAD_USER_ID = "downloadUserId"; + } Modified: timecard/trunk/src/main/java/jp/sf/pal/timecard/action/ConfigAction.java =================================================================== --- timecard/trunk/src/main/java/jp/sf/pal/timecard/action/ConfigAction.java 2008-12-20 13:39:54 UTC (rev 1618) +++ timecard/trunk/src/main/java/jp/sf/pal/timecard/action/ConfigAction.java 2008-12-23 01:07:01 UTC (rev 1619) @@ -42,6 +42,8 @@ TimecardConstants.TIME_HOLIDAYS, ""); configForm.defaultManager = ConfigUtil.getString( TimecardConstants.DEFAULT_MANAGER, "admin"); + configForm.csvEncoding = ConfigUtil.getString( + TimecardConstants.CSV_ENCODING, "UTF-8"); return "index.jsp"; } @@ -68,6 +70,8 @@ configForm.holidays); ConfigUtil.setProperty(TimecardConstants.DEFAULT_MANAGER, configForm.defaultManager); + ConfigUtil.setProperty(TimecardConstants.CSV_ENCODING, + configForm.csvEncoding); try { ConfigUtil.save(); SAStrutsUtil.addMessage(request, "success.update_config"); Modified: timecard/trunk/src/main/java/jp/sf/pal/timecard/action/EmployeeAction.java =================================================================== --- timecard/trunk/src/main/java/jp/sf/pal/timecard/action/EmployeeAction.java 2008-12-20 13:39:54 UTC (rev 1618) +++ timecard/trunk/src/main/java/jp/sf/pal/timecard/action/EmployeeAction.java 2008-12-23 01:07:01 UTC (rev 1619) @@ -1,6 +1,7 @@ package jp.sf.pal.timecard.action; import java.io.Serializable; +import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -18,6 +19,7 @@ import jp.sf.pal.timecard.dxo.DailyReportDxo; import jp.sf.pal.timecard.form.employee.EmployeeForm; import jp.sf.pal.timecard.service.ReportService; +import jp.sf.pal.timecard.util.ReportUtil; import jp.sf.pal.timecard.util.TimecardUtil; import org.apache.commons.lang.StringUtils; @@ -57,7 +59,7 @@ private transient ServletContext servletContext; protected String displayList() { - String username = request.getRemoteUser(); + employeeForm.userId = request.getRemoteUser(); int year; int month; @@ -79,12 +81,63 @@ employeeForm.month = String.valueOf(month); } - monthlyReport = reportService.getMonthlyReport(username, year, month); + monthlyReport = reportService.getMonthlyReport(employeeForm.userId, + year, month); employeeForm.monthlyReportId = monthlyReport.getId().toString(); + TimecardUtil.setDownloadUserId(request, employeeForm.userId); + return "index.jsp"; } + @Execute(validator = true, input = "errorDownload.jsp", urlPattern = "downloadCsv/{userId}/{year}/{month}") + public String downloadCsv() { + ConfigUtil.init(request); + + String sessionUserId = TimecardUtil.getDownloadUserId(request); + if (!employeeForm.userId.equals(sessionUserId)) { + throw new ActionMessagesException( + "errors.invalid_state_retry_download_csv"); + } + + int year; + int month; + if (employeeForm.year == null || employeeForm.month == null) { + Date now = new Date(); + year = DateUtil.getYear(now) + 1900; + month = DateUtil.getMonth(now) + 1; + employeeForm.year = String.valueOf(year); + employeeForm.month = String.valueOf(month); + } else { + year = Integer.parseInt(employeeForm.year); + month = Integer.parseInt(employeeForm.month); + + // check date + Date tDate = DateUtil.get(year - 1900, month - 1, 1); + year = DateUtil.getYear(tDate) + 1900; + month = DateUtil.getMonth(tDate) + 1; + employeeForm.year = String.valueOf(year); + employeeForm.month = String.valueOf(month); + } + + monthlyReport = reportService.getMonthlyReport(employeeForm.userId, + year, month); + + String reportContent = ReportUtil.getCsvReport(monthlyReport, request + .getLocale()); + byte[] bytes; + try { + bytes = reportContent.getBytes(ConfigUtil.getString( + TimecardConstants.CSV_ENCODING, "UTF-8")); + } catch (UnsupportedEncodingException e) { + bytes = reportContent.getBytes(); + } + ReportUtil.downloadCsv(employeeForm.userId + "_" + year + month + + ".csv", bytes); + + return null; + } + @Execute(validator = false, input = "error.jsp") public String index() { ConfigUtil.init(request); Modified: timecard/trunk/src/main/java/jp/sf/pal/timecard/action/admin/TimecardAction.java =================================================================== --- timecard/trunk/src/main/java/jp/sf/pal/timecard/action/admin/TimecardAction.java 2008-12-20 13:39:54 UTC (rev 1618) +++ timecard/trunk/src/main/java/jp/sf/pal/timecard/action/admin/TimecardAction.java 2008-12-23 01:07:01 UTC (rev 1619) @@ -1,6 +1,7 @@ package jp.sf.pal.timecard.action.admin; import java.io.Serializable; +import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -8,6 +9,7 @@ import javax.servlet.http.HttpServletRequest; import jp.sf.pal.timecard.TimecardConstants; +import jp.sf.pal.timecard.common.util.ConfigUtil; import jp.sf.pal.timecard.common.util.DateUtil; import jp.sf.pal.timecard.common.util.SAStrutsUtil; import jp.sf.pal.timecard.db.exentity.DailyReport; @@ -15,6 +17,8 @@ import jp.sf.pal.timecard.dxo.DailyReportDxo; import jp.sf.pal.timecard.form.admin.TimecardForm; import jp.sf.pal.timecard.service.ReportService; +import jp.sf.pal.timecard.util.ReportUtil; +import jp.sf.pal.timecard.util.TimecardUtil; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; @@ -81,9 +85,62 @@ timecardForm.monthlyReportId = monthlyReport.getId().toString(); timecardForm.status = monthlyReport.getStatus().toString(); + TimecardUtil.setDownloadUserId(request, timecardForm.username); + return "index.jsp"; } + @Execute(validator = true, input = "errorDownload.jsp", urlPattern = "downloadCsv/{username}/{year}/{month}") + public String downloadCsv() { + ConfigUtil.init(request); + + if (timecardForm.username == null) { + throw new ActionMessagesException("errors.invalid_username"); + } + String sessionUserId = TimecardUtil.getDownloadUserId(request); + if (!timecardForm.username.equals(sessionUserId)) { + throw new ActionMessagesException( + "errors.invalid_state_retry_download_csv"); + } + + int year; + int month; + if (timecardForm.year == null || timecardForm.month == null) { + Date now = new Date(); + year = DateUtil.getYear(now) + 1900; + month = DateUtil.getMonth(now) + 1; + timecardForm.year = String.valueOf(year); + timecardForm.month = String.valueOf(month); + } else { + year = Integer.parseInt(timecardForm.year); + month = Integer.parseInt(timecardForm.month); + + // check date + Date tDate = DateUtil.get(year - 1900, month - 1, 1); + year = DateUtil.getYear(tDate) + 1900; + month = DateUtil.getMonth(tDate) + 1; + timecardForm.year = String.valueOf(year); + timecardForm.month = String.valueOf(month); + } + + monthlyReport = reportService.getMonthlyReport(timecardForm.username, + year, month); + + String reportContent = ReportUtil.getCsvReport(monthlyReport, request + .getLocale()); + byte[] bytes; + try { + bytes = reportContent.getBytes(ConfigUtil.getString( + TimecardConstants.CSV_ENCODING, "UTF-8")); + } catch (UnsupportedEncodingException e) { + bytes = reportContent.getBytes(); + } + ReportUtil.downloadCsv(timecardForm.username + "_" + year + month + + ".csv", bytes); + + return null; + } + @Execute(validator = false, input = "error.jsp", urlPattern = "index/{username}") public String index() { return displayList(); Modified: timecard/trunk/src/main/java/jp/sf/pal/timecard/action/manager/TimecardAction.java =================================================================== --- timecard/trunk/src/main/java/jp/sf/pal/timecard/action/manager/TimecardAction.java 2008-12-20 13:39:54 UTC (rev 1618) +++ timecard/trunk/src/main/java/jp/sf/pal/timecard/action/manager/TimecardAction.java 2008-12-23 01:07:01 UTC (rev 1619) @@ -1,6 +1,7 @@ package jp.sf.pal.timecard.action.manager; import java.io.Serializable; +import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -8,6 +9,7 @@ import javax.servlet.http.HttpServletRequest; import jp.sf.pal.timecard.TimecardConstants; +import jp.sf.pal.timecard.common.util.ConfigUtil; import jp.sf.pal.timecard.common.util.DateUtil; import jp.sf.pal.timecard.common.util.SAStrutsUtil; import jp.sf.pal.timecard.db.exentity.DailyReport; @@ -15,6 +17,8 @@ import jp.sf.pal.timecard.dxo.DailyReportDxo; import jp.sf.pal.timecard.form.manager.TimecardForm; import jp.sf.pal.timecard.service.ReportService; +import jp.sf.pal.timecard.util.ReportUtil; +import jp.sf.pal.timecard.util.TimecardUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -80,9 +84,62 @@ timecardForm.monthlyReportId = monthlyReport.getId().toString(); timecardForm.status = monthlyReport.getStatus().toString(); + TimecardUtil.setDownloadUserId(request, timecardForm.username); + return "index.jsp"; } + @Execute(validator = true, input = "errorDownload.jsp", urlPattern = "downloadCsv/{username}/{year}/{month}") + public String downloadCsv() { + ConfigUtil.init(request); + + if (timecardForm.username == null) { + throw new ActionMessagesException("errors.invalid_username"); + } + String sessionUserId = TimecardUtil.getDownloadUserId(request); + if (!timecardForm.username.equals(sessionUserId)) { + throw new ActionMessagesException( + "errors.invalid_state_retry_download_csv"); + } + + int year; + int month; + if (timecardForm.year == null || timecardForm.month == null) { + Date now = new Date(); + year = DateUtil.getYear(now) + 1900; + month = DateUtil.getMonth(now) + 1; + timecardForm.year = String.valueOf(year); + timecardForm.month = String.valueOf(month); + } else { + year = Integer.parseInt(timecardForm.year); + month = Integer.parseInt(timecardForm.month); + + // check date + Date tDate = DateUtil.get(year - 1900, month - 1, 1); + year = DateUtil.getYear(tDate) + 1900; + month = DateUtil.getMonth(tDate) + 1; + timecardForm.year = String.valueOf(year); + timecardForm.month = String.valueOf(month); + } + + monthlyReport = reportService.getMonthlyReport(timecardForm.username, + year, month); + + String reportContent = ReportUtil.getCsvReport(monthlyReport, request + .getLocale()); + byte[] bytes; + try { + bytes = reportContent.getBytes(ConfigUtil.getString( + TimecardConstants.CSV_ENCODING, "UTF-8")); + } catch (UnsupportedEncodingException e) { + bytes = reportContent.getBytes(); + } + ReportUtil.downloadCsv(timecardForm.username + "_" + year + month + + ".csv", bytes); + + return null; + } + @Execute(validator = false, input = "error.jsp", urlPattern = "index/{username}") public String index() { return displayList(); Modified: timecard/trunk/src/main/java/jp/sf/pal/timecard/form/config/ConfigForm.java =================================================================== --- timecard/trunk/src/main/java/jp/sf/pal/timecard/form/config/ConfigForm.java 2008-12-20 13:39:54 UTC (rev 1618) +++ timecard/trunk/src/main/java/jp/sf/pal/timecard/form/config/ConfigForm.java 2008-12-23 01:07:01 UTC (rev 1619) @@ -33,4 +33,7 @@ @Required(target = "update") public String defaultManager; + + @Required(target = "update") + public String csvEncoding; } Modified: timecard/trunk/src/main/java/jp/sf/pal/timecard/form/employee/EmployeeForm.java =================================================================== --- timecard/trunk/src/main/java/jp/sf/pal/timecard/form/employee/EmployeeForm.java 2008-12-20 13:39:54 UTC (rev 1618) +++ timecard/trunk/src/main/java/jp/sf/pal/timecard/form/employee/EmployeeForm.java 2008-12-23 01:07:01 UTC (rev 1619) @@ -21,10 +21,11 @@ @IntegerType public int mode; + @Required(target = "downloadCsv") @IntegerType public String year; - @Required(target = "nextmonth,prevmonth") + @Required(target = "nextmonth,prevmonth,downloadCsv") @IntegerType public String month; @@ -95,6 +96,9 @@ @Required(target = "fixmonthlyreport") public boolean autoFill; + @Required(target = "downloadCsv") + public String userId; + public void initialize() { mode = TimecardConstants.LIST_MODE; id = null; Modified: timecard/trunk/src/main/java/jp/sf/pal/timecard/util/TimecardUtil.java =================================================================== --- timecard/trunk/src/main/java/jp/sf/pal/timecard/util/TimecardUtil.java 2008-12-20 13:39:54 UTC (rev 1618) +++ timecard/trunk/src/main/java/jp/sf/pal/timecard/util/TimecardUtil.java 2008-12-23 01:07:01 UTC (rev 1619) @@ -5,14 +5,33 @@ import java.util.Date; import java.util.TimeZone; +import javax.portlet.PortletSession; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + import jp.sf.pal.timecard.TimecardConstants; import jp.sf.pal.timecard.common.util.ConfigUtil; import jp.sf.pal.timecard.common.util.DateUtil; +import jp.sf.pal.timecard.common.util.SAStrutsUtil; import jp.sf.pal.timecard.db.exentity.DailyReport; import org.apache.commons.lang.StringUtils; public class TimecardUtil { + + public static void setDownloadUserId(HttpServletRequest request, + String userId) { + PortletSession portletSession = SAStrutsUtil.getPortletSession(request); + portletSession.setAttribute(TimecardConstants.DOWNLOAD_USER_ID, userId, + PortletSession.APPLICATION_SCOPE); + } + + public static String getDownloadUserId(HttpServletRequest request) { + HttpSession session = request.getSession(); + return (String) session + .getAttribute(TimecardConstants.DOWNLOAD_USER_ID); + } + public static String getHours(long time) { Date d = new Date(time); Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); Modified: timecard/trunk/src/main/resources/application.properties =================================================================== --- timecard/trunk/src/main/resources/application.properties 2008-12-20 13:39:54 UTC (rev 1618) +++ timecard/trunk/src/main/resources/application.properties 2008-12-23 01:07:01 UTC (rev 1619) @@ -62,6 +62,8 @@ errors.end_time_must_be_after_start_time=End time must be after Start time. +errors.invalid_state_retry_download_csv=Invalid state. Please retry it after reload a page. + labels.detail=Detail labels.create=Create labels.update=Update @@ -115,7 +117,7 @@ labels.start_time=Start time labels.end_time=End time labels.break_time=Break time -labels.otj_time=OTJ time +labels.otj_time=Off-duty time labels.editing=Editing now labels.request=Request labels.recognized=Approved @@ -157,6 +159,7 @@ labels.s_start_time=Start labels.s_end_time=End labels.s_break_time=Break +labels.s_otj_time=Off-duty labels.s_working_time=Time labels.reason=Reason labels.s_working_status=Status @@ -192,9 +195,12 @@ labels.endTimeHr=End Time labels.endTimeMin=End Time labels.isAvailable=Available -labels.otjTimeHr=OTJ Time -labels.otjTimeMin=OTJ Time +labels.otjTimeHr=Off-duty Time +labels.otjTimeMin=Off-duty Time labels.startTimeHr=Start Time labels.startTimeMin=Start Time labels.workingType=Working Type +labels.download_csv=Download CSV +labels.csv_encoding=Encoding for CSV + Modified: timecard/trunk/src/main/resources/application_ja.properties =================================================================== --- timecard/trunk/src/main/resources/application_ja.properties 2008-12-20 13:39:54 UTC (rev 1618) +++ timecard/trunk/src/main/resources/application_ja.properties 2008-12-23 01:07:01 UTC (rev 1619) @@ -55,6 +55,8 @@ errors.end_time_must_be_after_start_time=\u7d42\u4e86\u6642\u9593\u306f\u958b\u59cb\u6642\u9593\u4ee5\u964d\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errors.invalid_state_retry_download_csv=\u72b6\u614b\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002\u30da\u30fc\u30b8\u3092\u30ea\u30ed\u30fc\u30c9\u5f8c\u3001\u518d\u5ea6\u8a66\u3057\u3066\u304f\u3060\u3055\u3044\u3002 + labels.detail=\u8a73\u7d30 labels.create=\u4f5c\u6210 labels.update=\u66f4\u65b0 @@ -192,3 +194,5 @@ labels.startTimeMin=\u958b\u59cb\u6642\u9593 labels.workingType=\u52e4\u52d9\u72b6\u614b +labels.download_csv=CSV \u3067\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9 +labels.csv_encoding=CSV \u306e\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0 Modified: timecard/trunk/src/main/webapp/WEB-INF/view/admin/timecard/index.jsp =================================================================== --- timecard/trunk/src/main/webapp/WEB-INF/view/admin/timecard/index.jsp 2008-12-20 13:39:54 UTC (rev 1618) +++ timecard/trunk/src/main/webapp/WEB-INF/view/admin/timecard/index.jsp 2008-12-23 01:07:01 UTC (rev 1619) @@ -80,6 +80,11 @@ <td style="text-align: center;">${monthlyReport.formattedMntOverTime}</td> </tr> --> + <tr> + <td colspan="2" style="text-align: center;"> + <a href="${f:url('downloadCsv')}/${username}/${year}/${month}"><bean:message key="labels.download_csv"/></a> + </td> + </tr> </tbody> </table> <s:form> Modified: timecard/trunk/src/main/webapp/WEB-INF/view/config/index.jsp =================================================================== --- timecard/trunk/src/main/webapp/WEB-INF/view/config/index.jsp 2008-12-20 13:39:54 UTC (rev 1618) +++ timecard/trunk/src/main/webapp/WEB-INF/view/config/index.jsp 2008-12-23 01:07:01 UTC (rev 1619) @@ -57,6 +57,10 @@ <th><bean:message key="labels.default_manager"/></th> <td><html:text property="defaultManager" size="5" style="width:100%;"/></td> </tr> + <tr> + <th><bean:message key="labels.csv_encoding"/></th> + <td><html:text property="csvEncoding" size="5" style="width:100%;"/></td> + </tr> </tbody> <tfoot> <tr> Added: timecard/trunk/src/main/webapp/WEB-INF/view/employee/errorDownload.jsp =================================================================== --- timecard/trunk/src/main/webapp/WEB-INF/view/employee/errorDownload.jsp (rev 0) +++ timecard/trunk/src/main/webapp/WEB-INF/view/employee/errorDownload.jsp 2008-12-23 01:07:01 UTC (rev 1619) @@ -0,0 +1,26 @@ +<%@page pageEncoding="UTF-8" %> +<html> +<head> +<title></title> +</head> +<body> +<script type="text/javascript"> +<!-- +var cssFile="${f:url('/css/pal-extension.css')}"; +var isMSIE = /*@cc_on!@*/false; +if(isMSIE) { + document.createStyleSheet(cssFile); +} else { + var link = document.createElement("link"); + link.setAttribute("rel", "stylesheet"); + link.setAttribute("href", cssFile); + link.setAttribute("type", "text/css"); + document.getElementsByTagName('head')[0].appendChild(link); +} +// --> +</script> +<div class="timecard-portlet" style="padding:3px;"> +<html:errors/> +</div> +</body> +</html> Property changes on: timecard/trunk/src/main/webapp/WEB-INF/view/employee/errorDownload.jsp ___________________________________________________________________ Name: svn:eol-style + native Modified: timecard/trunk/src/main/webapp/WEB-INF/view/employee/index.jsp =================================================================== --- timecard/trunk/src/main/webapp/WEB-INF/view/employee/index.jsp 2008-12-20 13:39:54 UTC (rev 1618) +++ timecard/trunk/src/main/webapp/WEB-INF/view/employee/index.jsp 2008-12-23 01:07:01 UTC (rev 1619) @@ -60,6 +60,11 @@ <td style="text-align: center;">${monthlyReport.formattedMntOverTime}</td> </tr> --> + <tr> + <td colspan="2" style="text-align: center;"> + <a href="${f:url('downloadCsv')}/${userId}/${year}/${month}"><bean:message key="labels.download_csv"/></a> + </td> + </tr> </tbody> </table> <s:form> Modified: timecard/trunk/src/main/webapp/WEB-INF/view/manager/timecard/index.jsp =================================================================== --- timecard/trunk/src/main/webapp/WEB-INF/view/manager/timecard/index.jsp 2008-12-20 13:39:54 UTC (rev 1618) +++ timecard/trunk/src/main/webapp/WEB-INF/view/manager/timecard/index.jsp 2008-12-23 01:07:01 UTC (rev 1619) @@ -80,6 +80,11 @@ <td style="text-align: center;">${monthlyReport.formattedMntOverTime}</td> </tr> --> + <tr> + <td colspan="2" style="text-align: center;"> + <a href="${f:url('downloadCsv')}/${username}/${year}/${month}"><bean:message key="labels.download_csv"/></a> + </td> + </tr> </tbody> </table> <s:form>