/*******************************************************************************
* Copyright (c) 2012 Dmitry Tikhomirov.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/gpl.html
*
* Contributors:
* Dmitry Tikhomirov - initial API and implementation
******************************************************************************/
package org.opensheet.client.widges.report;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.opensheet.client.l10n.OpensheetConstants;
import org.opensheet.client.services.StatService;
import org.opensheet.client.services.StatServiceAsync;
import org.opensheet.client.utils.AssignmentTypes;
import org.opensheet.client.utils.Resources;
import org.opensheet.client.widges.BranchComboBox;
import com.extjs.gxt.ui.client.Style.SelectionMode;
import com.extjs.gxt.ui.client.data.BaseListLoader;
import com.extjs.gxt.ui.client.data.BaseModel;
import com.extjs.gxt.ui.client.data.ListLoadResult;
import com.extjs.gxt.ui.client.data.ListLoader;
import com.extjs.gxt.ui.client.data.RpcProxy;
import com.extjs.gxt.ui.client.event.BaseEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.DateField;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.extjs.gxt.ui.client.widget.layout.ColumnLayout;
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
public class HourUserReport extends ContentPanel{
private FormPanel leftSidePanel;
private BranchComboBox branchComboBox;
private Integer branch = 9999999;
private Integer type = 9999999;
private Integer assignment = 9999999;
private DateField start,end;
private ListStore<BaseModel> store;
private ComboBox<AssignmentTypes> typeSimpleComboBox;
private Grid<BaseModel> grid;
private StatServiceAsync statService = GWT.create(StatService.class);
private OpensheetConstants myConstants = (OpensheetConstants) GWT.create(OpensheetConstants.class);
private AssignmentComboBox assignmentComboBox;
public HourUserReport(){
setHeaderVisible(false);
setFrame(true);
setLayout(new ColumnLayout());
add(doSideMenu());
add(doReportPanel());
loadAssignmentComboBox();
}
@SuppressWarnings("deprecation")
private FormPanel doSideMenu(){
leftSidePanel = new FormPanel();
leftSidePanel.setWidth(340);
leftSidePanel.setHeight(440);
leftSidePanel.setHeaderVisible(false);
leftSidePanel.setFrame(true);
branchComboBox = new BranchComboBox(true);
branchComboBox.setWidth(180);
branchComboBox.setValue(branchComboBox.getStore().getAt(0));
branchComboBox.addListener(Events.Select, new Listener<BaseEvent>(){
@Override
public void handleEvent(BaseEvent be) {
branch = Integer.parseInt(branchComboBox.getValue().get("id").toString());
loadAssignmentComboBox();
}
});
branchComboBox.setAllowBlank(false);
branchComboBox.setLazyRender(true);
branchComboBox.setEmptyText("All_");
branchComboBox.setFieldLabel(myConstants.branch());
leftSidePanel.add(branchComboBox);
start = new DateField();
start.setFieldLabel("Start");
Date date = new Date();
date.setMonth(date.getMonth()-1);
start.setValue(date);
leftSidePanel.add(start);
end = new DateField();
end.setFieldLabel("End");
end.setValue(new Date());
leftSidePanel.add(end);
List<AssignmentTypes> list = AssignmentTypes.getWithAllTypes();
final ListStore<AssignmentTypes> store = new ListStore<AssignmentTypes>();
store.add(list);
typeSimpleComboBox = new ComboBox<AssignmentTypes>();
typeSimpleComboBox.setTriggerAction(TriggerAction.ALL);
typeSimpleComboBox.setEditable(false);
typeSimpleComboBox.setWidth(100);
typeSimpleComboBox.setDisplayField("name");
typeSimpleComboBox.setName("name");
typeSimpleComboBox.setFieldLabel("Type");
typeSimpleComboBox.setStore(store);
typeSimpleComboBox.setAllowBlank(false);
typeSimpleComboBox.setValue(new AssignmentTypes(9999999));
typeSimpleComboBox.addListener(Events.Select,new Listener<BaseEvent>(){
@Override public void handleEvent(BaseEvent be) {
type = Integer.parseInt(typeSimpleComboBox.getValue().get("id").toString());
loadAssignmentComboBox();
}
});
leftSidePanel.add(typeSimpleComboBox);
assignmentComboBox = new AssignmentComboBox();
assignmentComboBox.setFieldLabel("Assignments");
assignmentComboBox.addListener(Events.Select,new Listener<BaseEvent>(){
@Override public void handleEvent(BaseEvent be) {
assignment = Integer.parseInt(assignmentComboBox.getValue().get("id").toString());
}
});
leftSidePanel.add(assignmentComboBox);
assignmentComboBox.getStore().getLoader().load();
assignmentComboBox.setValue(assignmentComboBox.getStore().findModel("id","9999999"));
Button goButton = new Button("Get Report");
goButton.addListener(Events.Select,new Listener<BaseEvent>(){
@Override public void handleEvent(BaseEvent be) {
grid.getStore().getLoader().load();
}
});
leftSidePanel.addButton(goButton);
return leftSidePanel;
}
private ContentPanel doReportPanel(){
ContentPanel rightSidePanel = new ContentPanel();
rightSidePanel.setWidth(760);
rightSidePanel.setHeight(600);
rightSidePanel.setHeaderVisible(false);
rightSidePanel.setFrame(true);
rightSidePanel.setTopComponent(addToolBar());
rightSidePanel.add(doGrid());
return rightSidePanel;
}
private ToolBar addToolBar(){
ToolBar toolBar = new ToolBar();
Button printButton = new Button();
printButton.setText("Print Me");
printButton.setIconStyle("icon-printer");
printButton.addListener(Events.Select, new Listener<BaseEvent>(){
@Override public void handleEvent(BaseEvent be) {
// Integer getYear = date.getYear() +1900;
/*
String winUrl = GWT.getHostPageBaseURL() + "timesheettoprinter.htm?user_id=" + userDTO.getId() + "&month="+date.getMonth()+"&year="+ getYear;
String winName = "Print Page";
openNewWindow(winName, winUrl);
*/
}
});
toolBar.add(printButton);
toolBar.add(new SeparatorToolItem());
Button xlsExportButton = new Button();
xlsExportButton.setText("Excel Export");
xlsExportButton.setIcon(Resources.ICONS.table());
xlsExportButton.addListener(Events.Select, new Listener<BaseEvent>(){
@SuppressWarnings("deprecation")
@Override
public void handleEvent(BaseEvent be) {
Window.Location.assign(GWT.getHostPageBaseURL().toString() +"userassignmentreporttoxls.htm?assignment="+assignment+"&branch=" + branch + "&type="+
type+"&s_year="+start.getValue().getYear()+"&s_month="+start.getValue().getMonth()+
"&s_day="+start.getValue().getDate()+"&e_year="+end.getValue().getYear()+"&e_month="
+end.getValue().getMonth()+"&e_day="+end.getValue().getDate());
}
});
toolBar.add(xlsExportButton);
return toolBar;
}
private Grid<BaseModel> doGrid(){
RpcProxy<List<BaseModel>> proxy = new RpcProxy<List<BaseModel>>() {
@Override
protected void load(Object loadConfig, AsyncCallback<List<BaseModel>> callback) {
Date startDate = start.getValue();
Date endDate = end.getValue();
statService.getHourReportByUserByPeriodByAssignmentByBranch(assignment,branch,type,startDate, endDate,callback);
}
};
ListLoader<?> loader = new BaseListLoader<ListLoadResult<BaseModel>>(proxy);
store = new ListStore<BaseModel>(loader);
store.setMonitorChanges(true);
List<ColumnConfig> columns = new ArrayList<ColumnConfig>();
columns.add(new ColumnConfig("username",myConstants.user(), 180));
columns.add(new ColumnConfig("assignment", "Assignment", 150));
columns.add(new ColumnConfig("hour", "Hour", 50));
columns.add(new ColumnConfig("department",myConstants.department(), 100));
columns.add(new ColumnConfig("branch",myConstants.branch(), 100));
columns.add(new ColumnConfig("inratesum", "inRateSum", 50));
columns.add(new ColumnConfig("extratesum", "extRateSum", 50));
ColumnModel cm = new ColumnModel(columns);
grid = new Grid<BaseModel>(store,cm);
grid.setLoadMask(true);
grid.setWidth(740);
grid.setHeight(400);
grid.addStyleName(".my-table-style");
grid.setBorders(true);
grid.setAutoExpandColumn("username");
grid.getView().setEmptyText("no data");
grid.setId("myid");
grid.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
return grid;
}
private void loadAssignmentComboBox(){
if(branch != null && type != null){
assignmentComboBox.setData(branch, type);
}
}
}