myva v1.0

campaignManagement.js

Summary

No overview generated for 'campaignManagement.js'


Method Summary
static Object changeInputName(<Element> swap_root, <Array{Element}> row)
           Korvaa kaikkien parametrina annetuilla riveillä olevien input-elementtien name-attribuutin arvoissa swap_root:n id-attribuutin esiintymät kohde-SwapRoot:n id-attribuutin esiintyminä.
static Object checkCampaignForm(form)
           Tarkistaa kampanjan tietojen lomakkeen ennen sen lähetystä.
static Object displayClickedUsersTargets(clicked_element, <Event> e)
           Näyttää klikatun käyttäjän kohdeasiakkaat.
static Object displayMovedUsersTargets(<Element> swap_root, <Array{Element}> row)
           Tuo näkyviin (ensimmäisen valitun) siirretyn käyttäjän kohdeasiakkaat.
static Object displayUsersTargets(<Element> users_in_campaign_sr)
           Tuo näytölle näkyviin valittuna olevan käyttäjän kohdeasiakkaat ja piilottaa mahdollisesti edellisen valittuna olleen käyttäjän kohdeasiakkaat.
static Object hasNotTargets(<Element> swap_root, <Array{Element}> row)
           Tarkistaa, ettei siirrettävillä myyjillä ole asiakkaita.
static void newEmptyListField(<Element> currentField, <String> data_name, <int> num, <string> model, <string> field, <int> maxlen)
           Luo uuden tyhjän input-elementin text_option_list -luokan elementtiin.
static void onloadAction()
           Sivun latauduttua suoritettava funktio.
static Object setChangedUser(<Element> swap_root, <Array{Element}> row)
           Asettaa kohdeasiakkaan tietoihin muuttuneen/poistuneen käyttäjän (myyjän).
static void textOptionListOnBlur(inputField, data_name)
           Metodi, joka suoritetaan, kun kohdistus häviää TextOptionList:iin kuuluvasta input-elementistä.
static Object userRemovedFromCampaign(<Element> swap_root, <Array{Element}> row)
           Tuo näkyviin ensimmäisen valitun käyttäjän kohdeasiakkaat, kun käyttäjä on poistettu kampanjasta.

/**
 * Sivun latauduttua suoritettava funktio.
 * Alustaa SwapTable:t users_not_in_campaign ja users_in_campaign sekä "klikkaa" niiden ensimmäisiä rivejä.
 */
function onloadAction() {
  SwapTable.create('users_not_in_campaign', 'users_in_campaign', {orderBy:[1], visible:[false, true, true, true, true], afterSwap:[changeInputName, displayMovedUsersTargets]});
  SwapTable.create('users_in_campaign', 'users_not_in_campaign', {orderBy:[1], visible:[false, true, false, false, false], afterClick:displayClickedUsersTargets, beforeSwap:hasNotTargets, afterSwap:[changeInputName, userRemovedFromCampaign]});
  var rows = $('users_in_campaign').getElementsBySelector('tr');
  if (rows.length > 0) {
    $('users_in_campaign').clickRow(rows[0]);
  }
}


/**
 * Tarkistaa kampanjan tietojen lomakkeen ennen sen lähetystä.
 * Toistaiseksi ainoastaan palauttaa true.
 *
 * @return true 
 */
function checkCampaignForm(form) {
  return true;
}


/**
 * Luo uuden tyhjän input-elementin text_option_list -luokan elementtiin.
 *
 * @param {Element} currentField Elementti, jota aktivoitaessa tätä funktiota kutsutaan.
 * @param {String} data_name Kentän sisältämän datan nimi, esim. "myyntiargumentti"
 * @param {int} num Juokseva numero - 1. Juokseva numero on yksilöllinen jokaiselle input-kentälle
 *        text_option_list:n sisällä. Jos currentField on viimeinen elementti, voi tähän antaa sen
 *        numeron, sillä tämä funktio kasvattaa parametrina saamaansa arvoa yhdellä.
 * @param {string} model Cake:n model, johon input-kentän tieto kuuluu.
 * @param {string} field Caken:n model:n kenttä, johon input-kentän tieto tallennetaan.
 * @param {int} maxlen Input-kenttään kirjoitettavan tiedon maksimipituus.
 */
function newEmptyListField(currentField, data_name, num, model, field, maxlen) {
  if ($(currentField.parentNode).next() === undefined) {
    ++num;
    currentField.parentNode.parentNode.appendChild(Builder.node('div',{id:model + num}, [
      Builder.node('input', {
        className:'new',
        type:'text',
        name:'data[' + model + '][' + num + '][' + model + '][' + field + ']',
        value:'',
        title:'Uusi ' + data_name,
        maxlength:maxlen,
        onfocus:'newEmptyListField(this, \'' + data_name + '\', ' + num + ', \'' + model + '\', \'' + field + '\', ' + maxlen + ');',
        onblur:'textOptionListOnBlur(this, \'' + data_name + '\');'
      })
    ]));
  }
}


/**
 * Metodi, joka suoritetaan, kun kohdistus häviää TextOptionList:iin kuuluvasta input-elementistä.
 * Metodi tekee seuraavat toimenpiteet:
 * <ul>
 *   <li>Asettaa input-kentän title-attribuutin arvoksi kentän sisällön.
 *   <li>Poistaa mahdollisen ylimääräisen uudelle syötteelle tarkoitetun input-elementin.
 *   <li>Jos input-elementin sisältö ei ole poistettavissa, varoittaa käyttäjää ja palauttaa alkuperäisen arvon.
 * </ul>
 */
function textOptionListOnBlur(inputField, data_name) {
  inputField = $(inputField);
  if (inputField.hasClassName('new') && isBlankString(inputField.value) && $(inputField.parentNode).next() !== undefined) {
    inputField.parentNode.remove();
  } else if (inputField.hasClassName('not_deletable') && isBlankString(inputField.value)) {
    inputField.value = inputField.oldValue;
    alert(data_name.charAt(0).toUpperCase() + data_name.substr(1) + ' "' + inputField.value + '" on jo käytössä, eikä sitä voi poistaa.\nKentän sisältö palautettiin alkuperäiseksi.');
  } else if (isBlankString(inputField.value)) {
    inputField.title = 'Poistettu ' + data_name;
  } else {
    inputField.title = inputField.value;
  }
}


/**
 * Korvaa kaikkien parametrina annetuilla riveillä olevien input-elementtien name-attribuutin arvoissa
 * swap_root:n id-attribuutin esiintymät kohde-SwapRoot:n id-attribuutin esiintyminä.
 *
 * @param {Element} swap_root SwapRoot-elementti, jonka id:n esiintymät korvataan sen kohteen id:llä.
 * @param {Array{Element}} row Taulukko tr-elementeistä, joiden input-elementtien name-attribuutit muutetaan.
 */
function changeInputName(swap_root, row) {
  for (var i = 0; i < row.length; ++i) {
    var input_elements = row[i].getElementsBySelector('input');
    for (var j = 0; j < input_elements.length; ++j) {
      input_elements[j].name = input_elements[j].name.replace(swap_root.id, swap_root.swapTarget.id);
    }
  }
  return true;
}


/**
 * Tuo näytölle näkyviin valittuna olevan käyttäjän kohdeasiakkaat ja
 * piilottaa mahdollisesti edellisen valittuna olleen käyttäjän kohdeasiakkaat.
 *
 * @param {Element} users_in_campaign_sr SwapTable, joka pitää sisällään kampanjaan kuuluvat käyttäjät.
 */
function displayUsersTargets(users_in_campaign_sr) {
  var orphan_targets = $('orphan_targets');
  if (orphan_targets.swapTarget !== null) {
    $(orphan_targets.swapTarget).hide();
  }

  if (users_in_campaign_sr.selectedFirst != null) {
    var user_id = users_in_campaign_sr.selectedFirst.getElementsBySelector('.user_id');
    if (user_id.length > 0) {
      user_id = SwapTable.getElementText(user_id[0]);
    } else {
      return true;
    }
    var users_targets = $('user_' + user_id + '_targets');
    users_targets.show();
    orphan_targets.swapTarget = users_targets;
    $('targetsFromUser').onclick = function() {users_targets.swapSelected() };
  } else {
    orphan_targets.swapTarget = null;
  }
  return true;
}


/**
 * Tuo näkyviin (ensimmäisen valitun) siirretyn käyttäjän kohdeasiakkaat.
 *
 * @param {Element} swap_root SwapRoot, josta siirretään.
 @ @param {Array{Element}} row Siirrettävät rivit.
 */
function displayMovedUsersTargets(swap_root, row) {
  return displayUsersTargets(swap_root.swapTarget);
}


/**
 * Näyttää klikatun käyttäjän kohdeasiakkaat.
 *
 * @param {Element} swap_root SwapRoot, josta siirretään.
 @ @param {Event} e Klikkaustapahtuma.
 */
function displayClickedUsersTargets(clicked_element, e) {
  return displayUsersTargets(SwapTable.getSwapRoot(clicked_element));
}


/**
 * Tuo näkyviin ensimmäisen valitun käyttäjän kohdeasiakkaat, kun käyttäjä on poistettu kampanjasta.
 *
 * @param {Element} swap_root SwapRoot, josta siirretään.
 * @param {Array{Element}} row Siirrettävät rivit.
 */
function userRemovedFromCampaign(swap_root, row) {
  return displayUsersTargets(swap_root);
}


/**
 * Asettaa kohdeasiakkaan tietoihin muuttuneen/poistuneen käyttäjän (myyjän).
 * Käytännössä luo kaksi input-kenttää "changed_user"-luokan td-elementtiin
 * parametrina annetulla rivillä, joista toinen sisältää target_client_id:n ja
 * toinen user_id:n.
 *
 * @param {Element} swap_root SwapRoot, josta siirretään.
 * @param {Array{Element}} row Siirrettävät rivit.
 */
function setChangedUser(swap_root, row) {
  for (var i = 0; i < row.length; ++i) {
    var changed_user_cell = row[i].getElementsBySelector('.changed_user');
    if (changed_user_cell.length > 0) {
      changed_user_cell = changed_user_cell[0];
    } else {
      return true;
    }

    var target_client_id = SwapTable.getTextBySelector(row[i], '.target_client_id');
    if (target_client_id === null) {
      return true;
    }

    if (swap_root.swapTarget.id == 'orphan_targets') {
       var user_id = '';
    } else {
      var user_id = swap_root.swapTarget.id.replace('user_', '').replace('_targets', '');
    }

    // Jos elementtejä ei vielä ole, luodaan ne.
    // Muutosta tälle kohdeasiakkaalle ei siinä tapauksessa ole vielä tehty.
    var target_client_id_input = $('TargetClient' + target_client_id + 'TargetClientId');
    if (target_client_id_input === null) {
      target_client_id_input = Builder.node('input', {
          className:'id',
          type:'hidden',
          name:'data[TargetClient][' + target_client_id + '][TargetClient][id]',
          value:target_client_id,
          id:'TargetClient' + target_client_id + 'TargetClientId'
        });
      changed_user_cell.appendChild(target_client_id_input);
    }
    var user_id_input = $('TargetClient' + target_client_id + 'TargetClientUserId');
    if (user_id_input === null) {
      user_id_input = Builder.node('input', {
          className:'id',
          type:'hidden',
          name:'data[TargetClient][' + target_client_id + '][TargetClient][user_id]',
          value:'',
          id:'TargetClient' + target_client_id + 'TargetClientUserId'
        });
      changed_user_cell.appendChild(user_id_input);
    }

    // Asetetaan uusi user_id.
    user_id_input.value = user_id;
  }

  return true;
}


/**
 * Tarkistaa, ettei siirrettävillä myyjillä ole asiakkaita.
 * Myyjän asiakkaat ovat SwapTable-elementissä, jonka id on "user_USERID_targets",
 * missä USERID on käyttäjän tunniste.
 *
 * @param {Element} swap_root SwapRoot, josta siirretään.
 * @param {Array{Element}} row Siirrettävät rivit.
 *
 * @return true, jos myyjällä ei ole asiakkaita, muutoin false.
 */
function hasNotTargets(swap_root, row) {
  for (var i = 0; i < row.length; ++i) {
    var user_id = SwapTable.getTextBySelector(row[i], '.user_id');
    var user_targets = $('user_' + user_id + '_targets').getElementsBySelector('tr');
    if (user_targets.length > 0) {
      alert('Myyjällä ' + SwapTable.getTextBySelector(row[i], '.user_name') + ' on ' + user_targets.length + ' asiakasta.\nPoistaaksesi myyjän kampanjasta siirrä ensin myyjän asiakkaat pois myyjältä.');
      return false;
    }
  }
  return true;
}

myva v1.0

Documentation generated by JSDoc on Fri Aug 24 10:02:55 2007