<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" height="100%"
xmlns:nestedtreedatagrid="com.flexicious.nestedtreedatagrid.*" xmlns:billing="com.flexicious.example.model.billing.*"
xmlns:controls="com.flexicious.controls.*" xmlns:mate="http://mate.asfusion.com/" creationComplete="vbox1_creationCompleteHandler(event)">
<fx:Script>
<![CDATA[
import com.flexicious.example.model.billing.Invoice;
import com.flexicious.example.model.organizations.Organization;
import com.flexicious.example.model.transactions.Deal;
import com.flexicious.example.serviceproxies.BusinessService;
import com.flexicious.example.utils.ExampleUtils;
import com.flexicious.grids.events.PrintExportDataRequestEvent;
import com.flexicious.grids.filters.Filter;
import com.flexicious.nestedtreedatagrid.cells.FlexDataGridFooterCell;
import com.flexicious.nestedtreedatagrid.events.ExtendedFilterPageSortChangeEvent;
import com.flexicious.utils.UIUtils;
import mock.FlexiciousMockGenerator;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.events.FlexEvent;
import mx.events.ListEvent;
import mx.rpc.AsyncToken;
import mx.rpc.events.ResultEvent;
import pdf.AlivePdfGenerator;
private var _footerData:Dictionary=new Dictionary(true);
private function getFooterLabel(cell:FlexDataGridFooterCell):String{
if(_footerData[cell.rowInfo.data]){
if(cell.column.dataField=="invoiceAmount" || cell.column.dataField=="lineItemAmount" ||cell.column.dataField=="dealAmount" )
return "Total: " + UIUtils.formatCurrency(_footerData[cell.rowInfo.data].total);
else
return "Count: " + _footerData[cell.rowInfo.data].count;
}
return "";
}
protected function vbox1_creationCompleteHandler(event:FlexEvent):void
{
BusinessService.getInstance().setDelay(1);
var f:Filter=new Filter();
f.pageIndex=0;
f.pageSize=grid.pageSize;
BusinessService.getInstance().getPagedOrganizationList(f,
function(evt:ResultEvent,token:AsyncToken):void
{
grid.dataProvider=evt.result.collection;
grid.totalRecords=evt.result.totalRecords;
}
);
}
protected function flexdatagridcolumnlevel1_itemLoadHandler(event:ExtendedFilterPageSortChangeEvent):void
{
var org:Organization=event.filter.parentObject as Organization;
org=org.clone() as Organization;
BusinessService.getInstance().getDealsForOrganization(org.id,event.filter,
function(evt:ResultEvent,token:AsyncToken):void{
_footerData[event.filter.parentObject]=evt.result.summaryData;
grid.setChildData(event.filter.parentObject,evt.result.collection,event.filter.level.parentLevel,evt.result.totalRecords)
}
);
}
protected function flexdatagridcolumnlevel2_itemLoadHandler(event:ExtendedFilterPageSortChangeEvent):void
{
var deal:Deal=event.filter.parentObject as Deal;
BusinessService.getInstance().getInvoicesForDeal(deal.id,event.filter,
function(evt:ResultEvent,token:AsyncToken):void{
_footerData[event.filter.parentObject]=evt.result.summaryData;
grid.setChildData(event.filter.parentObject,new ArrayCollection(evt.result.collection.source.slice()),
event.filter.level.parentLevel ,evt.result.totalRecords)
}
);
}
protected function flexdatagridcolumnlevel3_itemLoadHandler(event:ExtendedFilterPageSortChangeEvent):void
{
var inv:Invoice=event.filter.parentObject as Invoice;
BusinessService.getInstance().getLineItemsForInvoice(inv.id,event.filter,
function(evt:ResultEvent,token:AsyncToken):void{
_footerData[event.filter.parentObject]=evt.result.summaryData;
grid.setChildData(event.filter.parentObject,new ArrayCollection(evt.result.collection.source.slice()),event.filter.level.parentLevel,evt.result.totalRecords)
}
);
}
protected function flexdatagridcolumnlevel1_filterPageSortChangeHandler(event:ExtendedFilterPageSortChangeEvent):void
{
BusinessService.getInstance().getPagedOrganizationList(event.filter,
function(evt:ResultEvent,token:AsyncToken):void
{
grid.dataProvider=evt.result.collection;
grid.totalRecords=evt.result.totalRecords;
}
);
}
protected function flexdatagridcolumnlevel2_filterPageSortChangeHandler(event:ExtendedFilterPageSortChangeEvent):void
{
var org:Organization=event.filter.parentObject as Organization;
BusinessService.getInstance().getDealsForOrganization(org.id,event.filter,
function(evt:ResultEvent,token:AsyncToken):void{
grid.setChildData(event.filter.parentObject,evt.result.collection,event.filter.level.parentLevel,evt.result.totalRecords)
}
);
}
protected function flexdatagridcolumnlevel3_filterPageSortChangeHandler(event:ExtendedFilterPageSortChangeEvent):void
{
var deal:Deal=event.filter.parentObject as Deal;
BusinessService.getInstance().getInvoicesForDeal(deal.id,event.filter,
function(evt:ResultEvent,token:AsyncToken):void{
grid.setChildData(event.filter.parentObject,new ArrayCollection(evt.result.collection.source.slice()),
event.filter.level.parentLevel ,evt.result.totalRecords)
}
);
}
protected function flexdatagridcolumnlevel4_filterPageSortChangeHandler(event:ExtendedFilterPageSortChangeEvent):void
{
var inv:Invoice=event.filter.parentObject as Invoice;
BusinessService.getInstance().getLineItemsForInvoice(inv.id,event.filter,
function(evt:ResultEvent,token:AsyncToken):void{
grid.setChildData(event.filter.parentObject,new ArrayCollection(evt.result.collection.source.slice()),event.filter.level.parentLevel,evt.result.totalRecords)
}
);
}
protected function grid_printExportDataRequestHandler(event:PrintExportDataRequestEvent):void
{
BusinessService.getInstance().getPagedOrganizationList(event.filter,
function(evt:ResultEvent,token:AsyncToken):void
{
grid.printExportData=evt.result.collection;
}
);
}
]]>
</fx:Script>
<fx:Declarations>
</fx:Declarations>
<nestedtreedatagrid:FlexDataGrid id="grid" width="100%" height="100%" enablePrint="true"
enablePreferencePersistence="true"
enableExport="true" enableCopy="true"
pdfBytesReady="new AlivePdfGenerator().generate(event.target as FlexDataGrid ,event.printOptions)"
preferencePersistenceKey="fullyLazyLoaded"
printExportDataRequest="grid_printExportDataRequestHandler(event)"
showSpinnerOnFilterPageSort="true"
enableSelectionCascade="true"
enableSelectionBubble="true"
enableSelectionExclusion="true"
enableTriStateCheckbox="true"
enableEagerDraw="true"
>
<nestedtreedatagrid:columnLevel >
<nestedtreedatagrid:FlexDataGridColumnLevel enableFilters="true" enablePaging="true" pageSize="10"
childrenField="deals" enableFooters="true" selectedKeyField="id"
itemLoadMode="server" itemLoad="flexdatagridcolumnlevel1_itemLoadHandler(event)"
filterPageSortChange="flexdatagridcolumnlevel1_filterPageSortChangeHandler(event)"
filterPageSortMode="server">
<nestedtreedatagrid:columns>
<nestedtreedatagrid:FlexDataGridCheckBoxColumn />
<nestedtreedatagrid:FlexDataGridColumn enableCellClickRowSelect="false" columnWidthMode="fitToContent"
selectable="true" dataField="id" headerText="ID" filterControl="TextInput"/>
<nestedtreedatagrid:FlexDataGridColumn truncateToFit="true" enableCellClickRowSelect="false"
selectable="true" dataField="legalName" headerText="Legal Name" width="150" columnWidthMode="fixed"/>
<nestedtreedatagrid:FlexDataGridColumn dataField="headquarterAddress.line1" headerText="Address Line 1" footerLabel="Count:" footerOperation="count"/>
<nestedtreedatagrid:FlexDataGridColumn dataField="headquarterAddress.line2" headerText="Address Line 2"/>
<nestedtreedatagrid:FlexDataGridColumn dataField="headquarterAddress.city.name" headerText="City" filterControl="MultiSelectComboBox" filterComboBoxBuildFromGrid="true" filterComboBoxWidth="150"/>
<nestedtreedatagrid:FlexDataGridColumn dataField="headquarterAddress.state.name" headerText="State" filterControl="MultiSelectComboBox" filterComboBoxBuildFromGrid="true" filterComboBoxWidth="150"/>
<nestedtreedatagrid:FlexDataGridColumn dataField="headquarterAddress.country.name" headerText="Country" filterControl="MultiSelectComboBox" filterComboBoxBuildFromGrid="true" filterComboBoxWidth="150"/>
<nestedtreedatagrid:FlexDataGridColumn dataField="annualRevenue" headerText="Annual Revenue" columnWidthMode="fitToContent"
textAlign="right" headerAlign="center" footerLabel="Avg:" footerOperation="average" footerAlign="center" columnWidthModeFitToContentExcludeHeader="true"
footerOperationPrecision="2" footerFormatter="{ExampleUtils.globalCurrencyFormatter}" labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
<nestedtreedatagrid:FlexDataGridColumn dataField="numEmployees" headerText="Num Employees" columnWidthMode="fitToContent" columnWidthModeFitToContentExcludeHeader="true"
textAlign="right" footerLabel="Avg:" footerOperation="average" footerOperationPrecision="2"
footerFormatter="{ExampleUtils.globalCurrencyFormatter}" labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
<nestedtreedatagrid:FlexDataGridColumn dataField="earningsPerShare" headerText="EPS" columnWidthMode="fitToContent" columnWidthModeFitToContentExcludeHeader="true"
textAlign="right" footerLabel="Avg:" footerOperation="average" footerFormatter="{ExampleUtils.globalCurrencyFormatter}" labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
<nestedtreedatagrid:FlexDataGridColumn dataField="lastStockPrice" headerText="Stock Price" columnWidthMode="fitToContent" columnWidthModeFitToContentExcludeHeader="true"
textAlign="right" footerLabel="Avg:" footerOperation="average" footerOperationPrecision="2"
footerFormatter="{ExampleUtils.globalCurrencyFormatter}" labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
</nestedtreedatagrid:columns>
<nestedtreedatagrid:nextLevel>
<nestedtreedatagrid:FlexDataGridColumnLevel childrenField="invoices" enableFooters="true" selectedKeyField="id" itemLoadMode="server"
itemLoad="flexdatagridcolumnlevel2_itemLoadHandler(event)"
enablePaging="true" pageSize="3" filterPageSortMode="server"
filterPageSortChange="flexdatagridcolumnlevel2_filterPageSortChangeHandler(event)">
<nestedtreedatagrid:columns>
<nestedtreedatagrid:FlexDataGridCheckBoxColumn />
<nestedtreedatagrid:FlexDataGridColumn editable="true" dataField="dealDescription" headerText="Deal Description"
footerAlign="center" footerLabelFunction2="getFooterLabel"
/>
<nestedtreedatagrid:FlexDataGridColumn editable="true" dataField="dealAmount" headerText="Deal Amount" textAlign="right"
footerAlign="right" labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"
footerLabelFunction2="getFooterLabel"/>
<nestedtreedatagrid:FlexDataGridColumn itemEditor="{new ClassFactory(mx.controls.DateField)}"
editable="true" editorDataField="selectedDate" dataField="dealDate" headerText="Deal Date" labelFunction="UIUtils.dataGridFormatDateLabelFunction"/>
</nestedtreedatagrid:columns>
<nestedtreedatagrid:nextLevel>
<nestedtreedatagrid:FlexDataGridColumnLevel childrenField="lineItems" enableFooters="true" enablePaging="true" pageSize="3"
selectedKeyField="id" itemLoadMode="server"
itemLoad="flexdatagridcolumnlevel3_itemLoadHandler(event)"
filterPageSortMode="server"
filterPageSortChange="flexdatagridcolumnlevel3_filterPageSortChangeHandler(event)"
>
<nestedtreedatagrid:columns>
<nestedtreedatagrid:FlexDataGridCheckBoxColumn />
<nestedtreedatagrid:FlexDataGridColumn editable="true" dataField="id" headerText="Invoice Number"
footerLabelFunction2="getFooterLabel" footerAlign="center"
/>
<nestedtreedatagrid:FlexDataGridColumn editable="true" dataField="invoiceAmount" headerText="Invoice Amount" textAlign="right"
footerAlign="right"
footerLabelFunction2="getFooterLabel" labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
<nestedtreedatagrid:FlexDataGridColumn editable="true" dataField="invoiceStatus.name" headerText="Invoice Status" />
<nestedtreedatagrid:FlexDataGridColumn itemEditor="{new ClassFactory(mx.controls.DateField)}"
editable="true" editorDataField="selectedDate"
dataField="invoiceDate" headerText="Invoice Date"
labelFunction="UIUtils.dataGridFormatDateLabelFunction"/>
<nestedtreedatagrid:FlexDataGridColumn itemEditor="{new ClassFactory(mx.controls.DateField)}"
editable="true" editorDataField="selectedDate"
dataField="dueDate" headerText="Due Date"
labelFunction="UIUtils.dataGridFormatDateLabelFunction"/>
</nestedtreedatagrid:columns>
<nestedtreedatagrid:nextLevel>
<nestedtreedatagrid:FlexDataGridColumnLevel enableFooters="true" selectedKeyField="id" enablePaging="true" pageSize="3"
filterPageSortMode="server"
filterPageSortChange="flexdatagridcolumnlevel4_filterPageSortChangeHandler(event)">
<nestedtreedatagrid:columns>
<nestedtreedatagrid:FlexDataGridCheckBoxColumn />
<nestedtreedatagrid:FlexDataGridColumn editable="true" dataField="lineItemDescription" headerText="Line Item Description"
footerLabelFunction2="getFooterLabel" footerAlign="center"
/>
<nestedtreedatagrid:FlexDataGridColumn editable="true" dataField="lineItemAmount" headerText="Line Item Amount" textAlign="right"
footerLabelFunction2="getFooterLabel" footerAlign="right"
labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
</nestedtreedatagrid:columns>
</nestedtreedatagrid:FlexDataGridColumnLevel>
</nestedtreedatagrid:nextLevel>
</nestedtreedatagrid:FlexDataGridColumnLevel>
</nestedtreedatagrid:nextLevel>
</nestedtreedatagrid:FlexDataGridColumnLevel>
</nestedtreedatagrid:nextLevel>
</nestedtreedatagrid:FlexDataGridColumnLevel>
</nestedtreedatagrid:columnLevel>
</nestedtreedatagrid:FlexDataGrid>
</mx:VBox >