2 package jp.co.showa_sys_eng.weekly_report.gwt.client.widget;
\r
4 import java.util.ArrayList;
\r
5 import java.util.Date;
\r
6 import java.util.List;
\r
8 import jp.co.showa_sys_eng.weekly_report.gwt.client.EventTypeConst;
\r
9 import jp.co.showa_sys_eng.weekly_report.gwt.client.data.ReportStateEnum;
\r
10 import jp.co.showa_sys_eng.weekly_report.gwt.client.data.WeeklyReport;
\r
11 import jp.co.showa_sys_eng.weekly_report.gwt.client.service.WeeklyReportService;
\r
12 import jp.co.showa_sys_eng.weekly_report.gwt.client.service.WeeklyReportServiceAsync;
\r
14 import com.extjs.gxt.ui.client.GXT;
\r
15 import com.extjs.gxt.ui.client.data.BaseModelData;
\r
16 import com.extjs.gxt.ui.client.event.ButtonEvent;
\r
17 import com.extjs.gxt.ui.client.event.Listener;
\r
18 import com.extjs.gxt.ui.client.event.MessageBoxEvent;
\r
19 import com.extjs.gxt.ui.client.event.SelectionListener;
\r
20 import com.extjs.gxt.ui.client.mvc.Dispatcher;
\r
21 import com.extjs.gxt.ui.client.store.ListStore;
\r
22 import com.extjs.gxt.ui.client.widget.ContentPanel;
\r
23 import com.extjs.gxt.ui.client.widget.MessageBox;
\r
24 import com.extjs.gxt.ui.client.widget.Status;
\r
25 import com.extjs.gxt.ui.client.widget.button.Button;
\r
26 import com.extjs.gxt.ui.client.widget.grid.CheckBoxSelectionModel;
\r
27 import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
\r
28 import com.extjs.gxt.ui.client.widget.grid.ColumnData;
\r
29 import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
\r
30 import com.extjs.gxt.ui.client.widget.grid.Grid;
\r
31 import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;
\r
32 import com.extjs.gxt.ui.client.widget.layout.FitLayout;
\r
33 import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
\r
34 import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
\r
35 import com.google.gwt.core.client.GWT;
\r
36 import com.google.gwt.event.dom.client.ClickEvent;
\r
37 import com.google.gwt.event.dom.client.ClickHandler;
\r
38 import com.google.gwt.i18n.client.DateTimeFormat;
\r
39 import com.google.gwt.user.client.rpc.AsyncCallback;
\r
40 import com.google.gwt.user.client.ui.Hyperlink;
\r
42 public class WeeklyReportListPanel extends ContentPanel {
\r
44 private WeeklyReportServiceAsync weeklyReportService = GWT.create(WeeklyReportService.class);
\r
46 private Status loadingStatus;
\r
48 private Grid<WeeklyReportModel> grid;
\r
50 private ListStore<WeeklyReportModel> gridStore;
\r
52 public WeeklyReportListPanel() {
\r
53 this.setLayout(new FitLayout());
\r
54 this.setHeading("週報一覧");
\r
57 ToolBar toolBar = new ToolBar();
\r
59 Button postButton = new Button("部長に提出");
\r
60 postButton.addSelectionListener(new SelectionListener<ButtonEvent>() {
\r
63 public void componentSelected(ButtonEvent ce) {
\r
64 WeeklyReportListPanel.this.postReport();
\r
68 toolBar.add(postButton);
\r
70 toolBar.add(new SeparatorToolItem());
\r
72 Button returnButton = new Button("部員に返却");
\r
73 returnButton.addSelectionListener(new SelectionListener<ButtonEvent>() {
\r
76 public void componentSelected(ButtonEvent ce) {
\r
77 WeeklyReportListPanel.this.returnReport();
\r
81 toolBar.add(returnButton);
\r
83 toolBar.add(new SeparatorToolItem());
\r
85 Button deleteButton = new Button("ゴミ箱に移動");
\r
86 deleteButton.addSelectionListener(new SelectionListener<ButtonEvent>() {
\r
89 public void componentSelected(ButtonEvent event) {
\r
90 WeeklyReportListPanel.this.deleteReport();
\r
94 toolBar.add(deleteButton);
\r
96 this.setTopComponent(toolBar);
\r
99 this.gridStore = new ListStore<WeeklyReportModel>();
\r
101 List<ColumnConfig> columnConfigList = new ArrayList<ColumnConfig>();
\r
103 CheckBoxSelectionModel<WeeklyReportModel> selectionModel = new CheckBoxSelectionModel<WeeklyReportModel>();
\r
104 columnConfigList.add(selectionModel.getColumn());
\r
106 ColumnConfig columnConfig = new ColumnConfig("name", "文書名", 300);
\r
107 columnConfig.setRenderer(new GridCellRenderer<WeeklyReportModel>() {
\r
110 public Object render(WeeklyReportModel model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<WeeklyReportModel> store, Grid<WeeklyReportModel> grid) {
\r
111 final String weeklyReportId = model.getWeeklyReportId();
\r
113 Hyperlink link = new Hyperlink("週報 [" + model.getAuthorId() + "]", "");
\r
114 link.addClickHandler(new ClickHandler() {
\r
117 public void onClick(ClickEvent event) {
\r
118 Dispatcher.get().dispatch(EventTypeConst.DETAIL, weeklyReportId);
\r
127 columnConfigList.add(columnConfig);
\r
129 columnConfig = new ColumnConfig("postDate", "作成日", 100);
\r
130 columnConfig.setRenderer(new GridCellRenderer<WeeklyReportModel>() {
\r
133 public Object render(WeeklyReportModel model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<WeeklyReportModel> store, Grid<WeeklyReportModel> grid) {
\r
134 DateTimeFormat formatter = DateTimeFormat.getFormat("yyyy/MM/dd");
\r
135 String postDateString = formatter.format(model.getPostDate());
\r
137 return postDateString;
\r
141 columnConfigList.add(columnConfig);
\r
143 columnConfig = new ColumnConfig("authorId", "報告者", 100);
\r
144 columnConfigList.add(columnConfig);
\r
146 columnConfig = new ColumnConfig("reportState", "状態", 100);
\r
147 columnConfig.setRenderer(new GridCellRenderer<WeeklyReportModel>() {
\r
150 public Object render(WeeklyReportModel model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<WeeklyReportModel> store, Grid<WeeklyReportModel> grid) {
\r
151 return model.getReportState().getName();
\r
155 columnConfigList.add(columnConfig);
\r
157 ColumnModel columnModel = new ColumnModel(columnConfigList);
\r
159 this.grid = new Grid<WeeklyReportModel>(this.gridStore, columnModel);
\r
160 this.grid.setSelectionModel(selectionModel);
\r
162 this.add(this.grid);
\r
165 this.loadingStatus = new Status();
\r
166 this.loadingStatus.setBusy("検索中...");
\r
168 this.add(this.loadingStatus);
\r
174 private void findReport() {
\r
176 this.loadingStatus.show();
\r
178 this.weeklyReportService.findAll(new AsyncCallback<List<WeeklyReport>>() {
\r
181 public void onSuccess(List<WeeklyReport> result) {
\r
182 WeeklyReportListPanel.this.findSuccess(result);
\r
186 public void onFailure(Throwable caught) {
\r
187 Dispatcher.get().dispatch(EventTypeConst.ERROR, caught);
\r
193 private void findSuccess(List<WeeklyReport> l) {
\r
194 this.gridStore.removeAll();
\r
196 for (WeeklyReport original : l) {
\r
197 WeeklyReportModel model = new WeeklyReportModel(original);
\r
199 this.gridStore.add(model);
\r
202 this.gridStore.commitChanges();
\r
204 this.loadingStatus.hide();
\r
208 private void deleteReport() {
\r
209 List<WeeklyReportModel> modelList = this.grid.getSelectionModel().getSelectedItems();
\r
210 if (modelList.size() == 0) {
\r
211 MessageBox.alert("ゴミ箱に移動", "週報が選択されていません。", null);
\r
216 MessageBox.confirm("ゴミ箱に移動", modelList.size() + "個の週報をゴミ箱に移動します。<br>よろしいですか?", new Listener<MessageBoxEvent>() {
\r
219 public void handleEvent(MessageBoxEvent event) {
\r
220 if (event.getButtonClicked().getText().equals(GXT.MESSAGES.messageBox_yes())) {
\r
221 WeeklyReportListPanel.this.updateReportFix(ReportStateEnum.DELETE);
\r
228 private void postReport() {
\r
229 List<WeeklyReportModel> modelList = this.grid.getSelectionModel().getSelectedItems();
\r
230 if (modelList.size() == 0) {
\r
231 MessageBox.alert("部長に提出", "週報が選択されていません。", null);
\r
236 MessageBox.confirm("部長に提出", modelList.size() + "個の週報を部長に提出します。<br>この操作は取り消せません。<br>よろしいですか?", new Listener<MessageBoxEvent>() {
\r
239 public void handleEvent(MessageBoxEvent event) {
\r
240 if (event.getButtonClicked().getText().equals(GXT.MESSAGES.messageBox_yes())) {
\r
241 WeeklyReportListPanel.this.updateReportFix(ReportStateEnum.POST);
\r
248 private void returnReport() {
\r
249 List<WeeklyReportModel> modelList = this.grid.getSelectionModel().getSelectedItems();
\r
250 if (modelList.size() == 0) {
\r
251 MessageBox.alert("部員に返却", "週報が選択されていません。", null);
\r
256 MessageBox.confirm("部員に返却", modelList.size() + "個の週報を部員に返却します。<br>この操作は取り消せません。<br>よろしいですか?", new Listener<MessageBoxEvent>() {
\r
259 public void handleEvent(MessageBoxEvent event) {
\r
260 if (event.getButtonClicked().getText().equals(GXT.MESSAGES.messageBox_yes())) {
\r
261 WeeklyReportListPanel.this.updateReportFix(ReportStateEnum.RETURN);
\r
268 private void updateReportFix(ReportStateEnum reportState) {
\r
269 List<WeeklyReportModel> modelList = this.grid.getSelectionModel().getSelectedItems();
\r
271 List<WeeklyReport> weeklyReportList = new ArrayList<WeeklyReport>();
\r
273 for (WeeklyReportModel model : modelList) {
\r
274 WeeklyReport weeklyReport = model.getOriginal();
\r
275 weeklyReport.setReportState(reportState);
\r
277 weeklyReportList.add(weeklyReport);
\r
280 this.weeklyReportService.update(weeklyReportList, new AsyncCallback<Void>() {
\r
283 public void onSuccess(Void result) {
\r
284 WeeklyReportListPanel.this.findReport();
\r
288 public void onFailure(Throwable caught) {
\r
289 Dispatcher.get().dispatch(EventTypeConst.ERROR, caught);
\r
295 @SuppressWarnings("serial")
\r
296 private class WeeklyReportModel extends BaseModelData {
\r
298 private WeeklyReport original;
\r
300 public WeeklyReportModel(WeeklyReport original) {
\r
301 this.original = original;
\r
303 this.setWeeklyReportId(original.getWeeklyReportId());
\r
304 this.setPostDate(original.getPostDate());
\r
305 this.setAuthorId(original.getAuthorId());
\r
306 this.setReportState(original.getReportState());
\r
309 public String getWeeklyReportId() {
\r
310 return this.get("weeklyReportId");
\r
313 public void setWeeklyReportId(String weeklyReportId) {
\r
314 this.set("weeklyReportId", weeklyReportId);
\r
317 public Date getPostDate() {
\r
318 return this.get("postDate");
\r
321 public void setPostDate(Date postDate) {
\r
322 this.set("postDate", postDate);
\r
325 public String getAuthorId() {
\r
326 return this.get("authorId");
\r
329 public void setAuthorId(String authorId) {
\r
330 this.set("authorId", authorId);
\r
333 public ReportStateEnum getReportState() {
\r
334 return this.get("reportState");
\r
337 public void setReportState(ReportStateEnum reportState) {
\r
338 this.set("reportState", reportState);
\r
341 public WeeklyReport getOriginal() {
\r
342 return this.original;
\r