<?xml version="1.0" encoding="UTF-8"?>
<dynaForm name="patterns_Current" type="xmlform" width="100%" enableTemplate="1">
  <action type="hidden"/>
  <LANG type="private"/>
  <ROU_UID type="hidden"/>
  <PROCESS type="hidden"/>
  <TASK type="hidden"/>
  <ROU_TYPE_OLD type="hidden"/>
  <TITLE type="title" showInTable="0">
    <en><![CDATA[Workflow Pattern]]></en>
  </TITLE>
  <ROU_TYPE type="dropdown">
    <en><![CDATA[Type]]><option name=""><![CDATA[- Select -]]></option><option name="SEQUENTIAL"><![CDATA[Sequential]]></option><option name="SELECT"><![CDATA[Selection]]></option><option name="EVALUATE"><![CDATA[Evaluation]]></option><option name="PARALLEL"><![CDATA[Parallel (fork)]]></option><option name="PARALLEL-BY-EVALUATION"><![CDATA[Parallel by evaluation (fork)]]></option><option name="SEC-JOIN"><![CDATA[Parallel (join)]]></option></en>
  </ROU_TYPE>
  <ROU_NEXT_TASK type="dropdown"><![CDATA[
SELECT TAS_UID, CON_VALUE FROM TASK LEFT JOIN CONTENT ON (TAS_UID = CON_ID AND CON_CATEGORY = 'TAS_TITLE' AND CON_LANG = '@#LANG') WHERE PRO_UID = '@#PROCESS'
  ]]><en><![CDATA[Next Task]]><option name="-1"><![CDATA[End of process]]></option><option name="-2"><![CDATA[Leaf task]]></option></en></ROU_NEXT_TASK>
  <ROU_TO_LAST_USER type="dropdown">
    <en><![CDATA[Selection of executant]]><option name="FALSE"><![CDATA[Rules and user groups]]></option><option name="TRUE"><![CDATA[Last executant of the task]]></option></en>
  </ROU_TO_LAST_USER>
  <GRID_SELECT_TYPE type="grid" xmlgrid="patterns/patterns_GridSelectType" addRow="1" deleteRow="1" editRow=""/>
  <GRID_EVALUATE_TYPE type="grid" xmlgrid="patterns/patterns_GridEvaluateType" addRow="1" deleteRow="1" editRow=""/>
  <GRID_PARALLEL_TYPE type="grid" xmlgrid="patterns/patterns_GridParallelType" addRow="1" deleteRow="1" editRow=""/>
  <GRID_PARALLEL_EVALUATION_TYPE type="grid" xmlgrid="patterns/patterns_GridParallelByEvaluationType" addRow="1" deleteRow="1" editRow=""/>
  <SAVE type="button" onclick="savePattern(this.form);">
    <en><![CDATA[Save]]></en>
  </SAVE>
  <JS type="javascript"><![CDATA[
var savePattern = function(oForm)
{
  var oAux;
  var oType     = getField('ROU_TYPE');
  var oOldType  = getField('ROU_TYPE_OLD');
  var i         = 1;
  var aData     = {};
  var bContinue = true;
  if (oType.value != oOldType.value)
  {
    if (!confirm('You are changing the pattern, are you sure?'))
    {
      return false;
    }
  }
  switch (oType.value)
  {
    case 'SELECT':
      var aAux = [];
      while (oAux = document.getElementById('form[GRID_SELECT_TYPE][' + i + '][ROU_NEXT_TASK]'))
      {
        if (!aAux.inArray(oAux.value))
        {
          aAux.push(oAux.value);
        }
        else
        {
          bContinue = false;
        }
        i++;
      }
    break;
    case 'EVALUATE':
      var aAux = [];
      while (oAux = document.getElementById('form[GRID_EVALUATE_TYPE][' + i + '][ROU_NEXT_TASK]'))
      {
        if (!aAux.inArray(oAux.value))
        {
          aAux.push(oAux.value);
        }
        else
        {
          bContinue = false;
        }
        i++;
      }
    break;
    case 'PARALLEL':
      var aAux = [];
      while (oAux = document.getElementById('form[GRID_PARALLEL_TYPE][' + i + '][ROU_NEXT_TASK]'))
      {
        if (!aAux.inArray(oAux.value))
        {
          aAux.push(oAux.value);
        }
        else
        {
          bContinue = false;
        }
        i++;
      }
    break;
    case 'PARALLEL-BY-EVALUATION':
      var aAux = [];
      while (oAux = document.getElementById('form[GRID_PARALLEL_EVALUATION_TYPE][' + i + '][ROU_NEXT_TASK]'))
      {
        if (!aAux.inArray(oAux.value))
        {
          aAux.push(oAux.value);
        }
        else
        {
          bContinue = false;
        }
        i++;
      }
    break;
  }
  if (!bContinue)
  {
    alert('You cannot select to the same task several times!');
    return bContinue;
  }
  i             = 1;
  aData.tas_uid = getField('TASK').value;
  aData.data    = [];
  switch (oType.value)
  {
    case 'SEQUENTIAL':
      aData.type = 0;
      aData.data.push(getField('ROU_NEXT_TASK').value);
    break;
    case 'SELECT':
      aData.type = 1;
      while (oAux = document.getElementById('form[GRID_SELECT_TYPE][' + i + '][ROU_NEXT_TASK]'))
      {
        aData.data.push(oAux.value);
        i++;
      }

    break;
    case 'EVALUATE':
      aData.type = 2;
      while (oAux = document.getElementById('form[GRID_EVALUATE_TYPE][' + i + '][ROU_NEXT_TASK]'))
      {
        aData.data.push(oAux.value);
        i++;
      }
    break;
    case 'PARALLEL':
      aData.type = 3;
      while (oAux = document.getElementById('form[GRID_PARALLEL_TYPE][' + i + '][ROU_NEXT_TASK]'))
      {
        aData.data.push(oAux.value);
        i++;
      }
    break;
    case 'PARALLEL-BY-EVALUATION':
      aData.type = 4;
      while (oAux = document.getElementById('form[GRID_PARALLEL_EVALUATION_TYPE][' + i + '][ROU_NEXT_TASK]'))
      {
        aData.data.push(oAux.value);
        i++;
      }
    break;
    case 'SEC-JOIN':
      aData.type = 5;
      aData.data.push(getField('ROU_NEXT_TASK').value);
    break;
  }
  Pm.data.build.derivation(aData);
  ajax_post(oForm.action, oForm, 'POST');
  Pm.tmp.derivationsPanel.remove();
};

var onChangePattern = function(oEvent, oType)
{
  oType = (oType ? oType : oEvent.target || window.event.srcElement);
  switch (oType.value)
  {
    case '':
      hideRowById('ROU_NEXT_TASK');
      hideRowById('ROU_TO_LAST_USER');
      hideRowById('GRID_SELECT_TYPE');
      hideRowById('GRID_EVALUATE_TYPE');
      hideRowById('GRID_PARALLEL_TYPE');
      hideRowById('GRID_PARALLEL_EVALUATION_TYPE');
    break;
    case 'SEQUENTIAL':
    case 'SEC-JOIN':
      showRowById('ROU_NEXT_TASK');
      showRowById('ROU_TO_LAST_USER');
      hideRowById('GRID_SELECT_TYPE');
      hideRowById('GRID_EVALUATE_TYPE');
      hideRowById('GRID_PARALLEL_TYPE');
      hideRowById('GRID_PARALLEL_EVALUATION_TYPE');
    break;
    case 'SELECT':
      hideRowById('ROU_NEXT_TASK');
      hideRowById('ROU_TO_LAST_USER');
      showRowById('GRID_SELECT_TYPE');
      hideRowById('GRID_EVALUATE_TYPE');
      hideRowById('GRID_PARALLEL_TYPE');
      hideRowById('GRID_PARALLEL_EVALUATION_TYPE');
    break;
    case 'EVALUATE':
      hideRowById('ROU_NEXT_TASK');
      hideRowById('ROU_TO_LAST_USER');
      hideRowById('GRID_SELECT_TYPE');
      showRowById('GRID_EVALUATE_TYPE');
      hideRowById('GRID_PARALLEL_TYPE');
      hideRowById('GRID_PARALLEL_EVALUATION_TYPE');
    break;
    case 'PARALLEL':
      hideRowById('ROU_NEXT_TASK');
      hideRowById('ROU_TO_LAST_USER');
      hideRowById('GRID_SELECT_TYPE');
      hideRowById('GRID_EVALUATE_TYPE');
      showRowById('GRID_PARALLEL_TYPE');
      hideRowById('GRID_PARALLEL_EVALUATION_TYPE');
    break;
    case 'PARALLEL-BY-EVALUATION':
      hideRowById('ROU_NEXT_TASK');
      hideRowById('ROU_TO_LAST_USER');
      hideRowById('GRID_SELECT_TYPE');
      hideRowById('GRID_EVALUATE_TYPE');
      hideRowById('GRID_PARALLEL_TYPE');
      showRowById('GRID_PARALLEL_EVALUATION_TYPE');
    break;
  }
};
leimnud.event.add(getField('ROU_TYPE'), 'change', {method:onChangePattern, instance:this, event:true});
onChangePattern(null, getField('ROU_TYPE'));
]]></JS>
</dynaForm>
