/*******************************************************************************
* 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.Arrays;
import java.util.List;
import org.opensheet.client.dto.DepartmentDTO;
import org.opensheet.client.dto.grid.AssignmentGridTemplate;
import org.opensheet.client.l10n.OpensheetConstants;
import org.opensheet.client.services.AssignmentService;
import org.opensheet.client.services.AssignmentServiceAsync;
import org.opensheet.client.services.DepartmentService;
import org.opensheet.client.services.DepartmentServiceAsync;
import org.opensheet.client.utils.Resources;
import org.opensheet.client.widges.BranchComboBox;
import org.opensheet.client.widges.combo.AssignmentTypeComboBox;
import com.extjs.gxt.ui.client.Style.SelectionMode;
import com.extjs.gxt.ui.client.data.BaseListLoader;
import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.data.BeanModelReader;
import com.extjs.gxt.ui.client.data.ListLoadResult;
import com.extjs.gxt.ui.client.data.ListLoader;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.ModelIconProvider;
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.event.SelectionChangedEvent;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.store.TreeStore;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
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.LabelToolItem;
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
import com.extjs.gxt.ui.client.widget.treegrid.TreeGrid;
import com.extjs.gxt.ui.client.widget.treegrid.TreeGridCellRenderer;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AbstractImagePrototype;
public class DepartmentReport extends ContentPanel{
private OpensheetConstants myConstants = (OpensheetConstants) GWT.create(OpensheetConstants.class);
private FormPanel leftSidePanel;
private BranchComboBox branchComboBox;
private Integer type = 0;
private TreeGrid<ModelData> assignmentTreeGrid;
private TreeStore<ModelData>assignmentStore;
private Integer branch = 9999999;
private DepartmentServiceAsync departmentService = GWT.create(DepartmentService.class);
private Grid<BeanModel> departmentGrid;
private Integer departmentId;
public DepartmentReport(){
setHeaderVisible(false);
setFrame(true);
setLayout(new ColumnLayout());
add(doSideMenu());
add(doReportPanel());
}
private FormPanel doSideMenu(){
leftSidePanel = new FormPanel();
leftSidePanel.setWidth(450);
leftSidePanel.setHeight(580);
leftSidePanel.setHeaderVisible(false);
leftSidePanel.setFrame(true);
ToolBar tb = new ToolBar();
tb.add(new LabelToolItem(myConstants.branch() + " :" ));
branchComboBox = new BranchComboBox(true);
branchComboBox.setWidth(100);
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());
departmentGrid.getStore().getLoader().load();
}
});
branchComboBox.setAllowBlank(false);
branchComboBox.setLazyRender(true);
branchComboBox.setEmptyText("All_");
tb.add(branchComboBox);
tb.add(new LabelToolItem(myConstants.type() + " :" ));
final AssignmentTypeComboBox assignmentTypeComboBox = new AssignmentTypeComboBox();
assignmentTypeComboBox.addListener(Events.Select,new Listener<BaseEvent>(){
@Override
public void handleEvent(BaseEvent be) {
type = assignmentTypeComboBox.getValue().getId();
loadAssignmentTreeGrid();
}
});
tb.add(assignmentTypeComboBox);
Button xlsExportButton = new Button();
xlsExportButton.setText("Excel Export");
xlsExportButton.setIcon(Resources.ICONS.table());
xlsExportButton.addListener(Events.Select, new Listener<BaseEvent>(){
@Override
public void handleEvent(BaseEvent be) {
if(branch !=9999999){
Window.Location.assign(GWT.getHostPageBaseURL().toString() + "reportdepartmentassignmenttoxls.htm?branch=" + branch + "&type="+ type);
}else{
MessageBox.info("ERROR","Plz choose branch first",null);
}
}
});
tb.add(xlsExportButton);
leftSidePanel.setTopComponent(tb);
leftSidePanel.add(DepartmentFormGrid());
return leftSidePanel;
}
private Grid<BeanModel> DepartmentFormGrid(){
RpcProxy<List<DepartmentDTO>> proxy = new RpcProxy<List<DepartmentDTO>>() {
@Override
protected void load(Object loadConfig, AsyncCallback<List<DepartmentDTO>> callback) {
departmentService.getDepartmentsByBranch("1",branch,callback);
}
};
ListLoader<?> loader = new BaseListLoader<ListLoadResult<ModelData>>(proxy,new BeanModelReader());
final ListStore<BeanModel> store = new ListStore<BeanModel>(loader);
store.setMonitorChanges(true);
loader.load();
List<ColumnConfig> columns = new ArrayList<ColumnConfig>();
columns.add(new ColumnConfig("name", myConstants.department(), 120));
columns.add(new ColumnConfig("owner.fullName",myConstants.owner(), 200));
ColumnModel cm = new ColumnModel(columns);
departmentGrid = new Grid<BeanModel>(store, cm);
departmentGrid.setLoadMask(true);
departmentGrid.setWidth(440);
departmentGrid.setHeight(500);
departmentGrid.addStyleName(".my-table-style");
departmentGrid.setBorders(true);
departmentGrid.setAutoExpandColumn("name");
departmentGrid.getView().setEmptyText("no data");
departmentGrid.setId("myDepartmentGridiD");
departmentGrid.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
departmentGrid.getSelectionModel().addListener(Events.SelectionChange,
new Listener<SelectionChangedEvent<BeanModel>>() {
public void handleEvent(SelectionChangedEvent<BeanModel> be) {
departmentId = Integer.parseInt(departmentGrid.getSelectionModel().getSelectedItem().get("id").toString());
loadAssignmentTreeGrid();
}
});
return departmentGrid;
}
private ContentPanel doReportPanel(){
ContentPanel rightSidePanel = new ContentPanel();
rightSidePanel.setWidth(650);
rightSidePanel.setHeight(600);
rightSidePanel.setHeaderVisible(false);
rightSidePanel.setFrame(true);
// rightSidePanel.setTopComponent(addToolBar());
rightSidePanel.add(doTreeGrid());
return rightSidePanel;
}
/*
private ToolBar addToolBar(){
ToolBar toolBar = new ToolBar();
toolBar.add(new LabelToolItem(myConstants.type() + " :" ));
final AssignmentTypeComboBox assignmentTypeComboBox = new AssignmentTypeComboBox();
assignmentTypeComboBox.addListener(Events.Select,new Listener<BaseEvent>(){
@Override
public void handleEvent(BaseEvent be) {
type = assignmentTypeComboBox.getValue().getId();
loadAssignmentTreeGrid();
}
});
toolBar.add(assignmentTypeComboBox);
toolBar.add(new SeparatorToolItem());
// toolBar.add(xlsExportButton);
return toolBar;
}
*/
private TreeGrid<ModelData> doTreeGrid(){
assignmentStore = new TreeStore<ModelData>();
ColumnConfig name = new ColumnConfig("name",myConstants.name(), 150);
name.setFixed(true);
name.setRenderer(new TreeGridCellRenderer<ModelData>());
ColumnConfig index = new ColumnConfig("assignmentIndex",myConstants.index(), 150);
index.setFixed(true);
index.setSortable(false);
index.setFixed(true);
index.setMenuDisabled(true);
ColumnConfig owner = new ColumnConfig("owner",myConstants.owner(), 270);
ColumnModel cm = new ColumnModel(Arrays.asList(name, index, owner));
assignmentTreeGrid = new TreeGrid<ModelData>(assignmentStore, cm);
assignmentTreeGrid.setBorders(true);
assignmentTreeGrid.setAutoExpandColumn("name");
assignmentTreeGrid.setTrackMouseOver(false);
assignmentTreeGrid.setLoadMask(true);
assignmentTreeGrid.setWidth(600);
assignmentTreeGrid.setHeight(580);
assignmentTreeGrid.setBorders(true);
assignmentTreeGrid.getView().setEmptyText("no data");
assignmentTreeGrid.setId("myAssignmentTreeGridid");
assignmentTreeGrid.getSelectionModel().addListener(Events.SelectionChange,
new Listener<SelectionChangedEvent<ModelData>>() {
public void handleEvent(SelectionChangedEvent<ModelData> be) {
if (be.getSelection().size() > 0) {
} else {
}
}
});
return assignmentTreeGrid;
}
public void loadAssignmentTreeGrid(){
if(departmentId !=null){
final AssignmentServiceAsync assignmentService = GWT.create(AssignmentService.class);
assignmentService.getAssignmentsByDepartmentAndByType(departmentId,type, new AsyncCallback<AssignmentGridTemplate>() {
public void onFailure(Throwable caught) {
}
public void onSuccess(AssignmentGridTemplate model) {
assignmentTreeGrid.getStore().removeAll();
assignmentTreeGrid.setIconProvider(new ModelIconProvider<ModelData>() {
public AbstractImagePrototype getIcon(ModelData model) {
ModelData attribute = (ModelData ) model;
if (attribute.get("type").equals(0) ) {
return Resources.ICONS.project_icon();
}else if (attribute.get("type").equals(1) ) {
return Resources.ICONS.tender_icon();
}else if (attribute.get("type").equals(2) ) {
return Resources.ICONS.office_icon();
}else if (attribute.get("type").equals(3) ) {
return Resources.ICONS.off_hour_icon();
}
return null;
}
});
assignmentStore.add(model.getChildren(),true);
}
});
}
}
}