1. Skript pro výpočet celkové ceny

    Článek: AN0001920Aktualizováno::

     V některých případech potřebujeme vypočítat hodnotu na základě hodnot v jiných sloupcích nebo i jiných záznamech.

    Příklad: Celková cena serveru

    V níže uvedeném příkladu máme třídu server s několika základními konfiguračními parametry (vm_cpu, vm_ram a vm_hdd) a odkazem na ceník (pricelist), který obsahuje jednotkovou cenu těchto parametrů. Potřebujeme zajistit, aby ve sloupci total_price byla celková cena serveru podle jeho konfigurace a přiřazeného ceníku (ceník odráží například rozdílnou úroveň služeb, které na serveru poskytujeme).

    Potřebujeme tedy zajistit, aby se při uložení záznamu (nového nebo existujícího) přepočítala celková cena serveru a uložila do sloupce total_price. Vytvoříme pravidlo typu Skript Před uložením záznamu.

    Místo použití skriptu: Pravidlo třídy

    var drPL = OGActualDataRow.GetDR('pricelist');
    if ( drPL != null)
    {
      var vm_cpu = OGActualDataRow['vm_cpu'];
      var vm_ram = OGActualDataRow['vm_ram'];
      var vm_hdd = OGActualDataRow['vm_hdd'];

      var pl_cpu = drPL['price_cpu'];
      var pl_ram = drPL['price_ram'];
      var pl_hdd = drPL['price_hdd'];

      if ( vm_cpu == null) vm_cpu = 0;
      if ( vm_ram == null) vm_ram = 0;
      if ( vm_hdd == null) vm_hdd = 0;

      if ( pl_cpu == null) pl_cpu = 0;
      if ( pl_ram == null) pl_ram = 0;
      if ( pl_hdd == null) pl_hdd = 0;

      OGActualDataRow['total_price'] = vm_cpu * pl_cpu + vm_ram * pl_ram + vm_hdd * pl_hdd;
    }
    else
    {
      OGActualDataRow['total_price'] = null;
    }

     

    Pravidlo z výše uvedeného příkladu aktualizuje záznam před jeho uložení z webového formuláře. Pokud data aktualizujeme hromadně pomocí importu, musíme použít SQL aktualizaci.

     Místo použití skriptu: Import - Skript po skončení importu

    var m = OG.Model.GetByCode('it');
    var clP = m.ClassDefs['server'];
    var clPL = m.ClassDefs['pricelist'];

    var colPvmcpu = clP.Columns['vm_cpu'];
    var colPvmhdd = clP.Columns['vm_hdd'];
    var colPvmram = clP.Columns['vm_ram'];
    var colPtotal = clP.Columns['total_price'];
    var colPprice = clP.Columns['pricelist'];

    var colPLpricecpu = clPL.Columns['price_cpu'];
    var colPLpricehdd = clPL.Columns['price_hdd'];
    var colPLpriceram = clPL.Columns['price_ram'];

    var sql = 'update ' + clP.DBTableName +
    ' set ' + colPtotal.DBColumnName + ' = isnull(p.' + colPvmcpu.DBColumnName + ',0)*isnull(pl.' + colPLpricecpu.DBColumnName + ',0) + isnull(p.' + colPvmram.DBColumnName + ',0)*isnull(pl.' + colPLpriceram.DBColumnName + ',0) +
    isnull(p.' + colPvmhdd.DBColumnName + ',0)*isnull(pl.' + colPLpricehdd.DBColumnName + ',0)' +
    ' from ' + clPL.DBTableName + ' pl join ' + clP.DBTableName + ' p on p.' + colPprice.DBColumnName + ' = pl.id';
    OG.Sql.RunSql(sql);

×