hackedteam/rcs-console

View on GitHub
src/it/ht/rcs/console/accounting/view/groups/GroupOperationTable.mxml

Summary

Maintainability
Test Coverage
<?xml version="1.0" encoding="utf-8"?>
<s:VGroup 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%" creationComplete="init()" gap="-1" addedToStage="onAddedToStage(event)" removedFromStage="onRemovedFromStage(event)">
  
  <fx:Script>
    <![CDATA[
      import it.ht.rcs.console.accounting.controller.GroupManager;
      import it.ht.rcs.console.accounting.controller.OperationManager;
      import it.ht.rcs.console.accounting.model.Group;
      import it.ht.rcs.console.operation.model.Operation;
      
      import locale.R;
      
      import mx.collections.ListCollectionView;
      
      [Bindable]
      private var _group:Group;
      
      [Bindable] private var selectedDP:ListCollectionView;
      [Bindable] private var availableDP:ListCollectionView;
      
      private function init():void
      {
        availableDP = OperationManager.instance.getView(null, listFilterFunction);
      }
      
      private function listFilterFunction(item:Object):Boolean
      {
        try {
          return selectedDP.getItemIndex(item) == -1;
        } catch (e:Error) {}
        return true;
      }
      
      public function set group(g:Group):void
      {
        _group = g;
        selectedDP = getSelectedDP();
        selectedOperations.sortByColumns(Vector.<int>([0]), true);
        if (availableDP) availableDP.refresh();
      }
      
      private function getSelectedDP():ListCollectionView
      {
        var dp:ListCollectionView = new ListCollectionView(new ArrayList());
        if (_group) for each (var _id:String in _group.item_ids) {
          var o:Operation = OperationManager.instance.getItem(_id);
          if (o) dp.addItem(o);
        }
        return dp;
      }
      
      private function addOperation():void
      {
        var o:Operation = availableOperations.selectedItem as Operation;
        if (o == null || _group == null) return;
        GroupManager.instance.addOperation(_group, o, function():void {
          selectedDP.addItem(o);
          availableDP.refresh();
          selectedOperations.selectedItem = o;
        });
      }
      
      private function removeOperation():void
      {
        var o:Operation = selectedOperations.selectedItem as Operation;
        if (o == null || _group == null) return;
        GroupManager.instance.removeOperation(_group, o, function():void {
          selectedDP.removeItemAt(selectedDP.getItemIndex(o));
          availableDP.refresh();
          selectedOperations.selectedItem = null;
        });
      }
      
      protected function onAddedToStage(event:Event):void
      {
        stage.addEventListener(MouseEvent.CLICK, onStageClick)
        
      }
      
      protected function onRemovedFromStage(event:Event):void
      {
        popup.displayPopUp=false;
        stage.removeEventListener(MouseEvent.CLICK, onStageClick)
        
      }
      
      private function onStageClick(e:MouseEvent):void
      {
        if(e.target!=addBtn)
          popup.displayPopUp=false;
      }
      
    ]]>
  </fx:Script>
  
  <s:HGroup width="100%" gap="-1" horizontalAlign="right">
    
    <s:Button width="30" label="-" click="removeOperation()" cornerRadius="0" enabled="{selectedOperations.selectedItem!=null}"/>

    <s:Button id="addBtn" width="30" label="+" cornerRadius="0" click="{popup.displayPopUp=true}"/>
    <s:PopUpAnchor id="popup" popUpPosition="above">
     
        <s:List id="availableOperations" height="200" minWidth="150" click="addOperation()"
                dataProvider="{availableDP}" filters="{[dropShadow]}" labelField="name"
                textAlign="left"/>
      </s:PopUpAnchor>

    
  </s:HGroup>
  
  <s:DataGrid id="selectedOperations" width="100%" height="100%" dataProvider="{selectedDP}">
    <s:columns>
      <s:ArrayList>
        <s:GridColumn dataField="name" headerText="{R.get('OPERATION_IN_GROUP')}"/>
      </s:ArrayList>
    </s:columns>
  </s:DataGrid>
  
  <fx:Declarations>
    <s:DropShadowFilter id="dropShadow" alpha="0.25" angle="90" blurX="20" blurY="20" color="#333333"
                        distance="8"/>
  </fx:Declarations>
  
</s:VGroup>