Ignore:
Timestamp:
Feb 18, 2009, 11:19:12 AM (15 years ago)
Author:
george
Message:
  • Upraveno: Soubor include.php ve financích přepracován na třídy ve finance.php.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • www/finance/finance.php

    r152 r157  
    33class Finance extends Module
    44{
     5  var $kWh;
     6  var $Internet;
     7  var $Sprava;
     8  var $DatumOdecteni;
     9  var $InternetUsers;
     10  var $SpravaUsers;
     11  var $InternetSegmentId = 21;
     12  var $MaxSpeed;
     13  var $RealMaxSpeed;
     14  var $SpeedReserve;
     15  var $BaseSpeedElement;
     16  var $TotalConsumption;
     17  var $UserIdNetwork = 46;
     18  var $BaseTariffPrice;
     19  var $TopTariffPrice;
     20  var $TotalPaid;
     21  var $TotalInternetPaid;
     22  var $Tarify;
     23 
     24  function RecalculateTariffs($Period = 1)
     25  {
     26    $ResidualPrice = $this->Internet;
     27    $ResidualSpeed = $this->MaxSpeed;
     28 
     29    $Tarify = array();
     30    $DbResult = $this->Database->select('finance_tariffs', '*', 'period='.$Period.' ORDER BY id,speed_factor');
     31    while($Tariff = $DbResult->fetch_array())
     32    {
     33      $Tarify[$Tariff['id']] = $Tariff;
     34    } 
    535
     36    if($Period == 0) $Column = 'now'; else $Column = 'next';
     37    $TotalUserCount = 0;
     38    $TotalUnits = 0;
     39    $TotalTarifUnits = 0;
     40    $TotalTarifSpeedUnits = 0;
     41    foreach($Tarify as $Index => $Tarif)
     42    {
     43      $DbResult = $this->Database->select('users', 'COUNT(*)', 'inet_tarif_'.$Column.'='.$Index.' AND inet=1 AND role=2');
     44      $Row = $DbResult->fetch_array();
     45      $Tarify[$Index]['user_count'] = $Row[0];   
     46      switch($Tarif['group_id'])
     47      {
     48        case 1:
     49          $TotalUserCount = $TotalUserCount + $Tarify[$Index]['user_count'];
     50          $Tarify[$Index]['total_units'] = $Tarify[$Index]['price_units'] * $Tarify[$Index]['user_count'];
     51          $TotalTarifUnits = $TotalTarifUnits + $Tarify[$Index]['total_units'];
     52   
     53          if($Index == 3) // Zarizeni site v tarifu 3 neplati penize, ale ma internet
     54            $Tarify[$Index]['total_speed_factor'] = $Tarify[$Index]['speed_factor'] * ($Tarify[$Index]['user_count']+1);
     55            else $Tarify[$Index]['total_speed_factor'] = $Tarify[$Index]['speed_factor'] * $Tarify[$Index]['user_count'];
     56          $TotalTarifSpeedUnits = $TotalTarifSpeedUnits + $Tarify[$Index]['total_speed_factor'];
     57          break;
     58        case 2:
     59          $ResidualPrice -= $Tarif['price'] * $Tarify[$Index]['user_count'];
     60          $ResidualSpeed -= $Tarif['min_speed'] * $Tarify[$Index]['user_count'];
     61          $Tarify[$Index]['total_units'] = $Tarify[$Index]['price_units'] * $Tarify[$Index]['user_count'];
     62          break;
     63        case 3:
     64          $Tarify[$Index]['total_units'] = $Tarify[$Index]['price_units'] * $Tarify[$Index]['user_count'];
     65          break;
     66      }
     67    }
     68    //$PricePerUnit = $TopTariffPrice / ;  // $ResidualPrice / $TotalTarifUnits;
     69    $SpeedPerUnit = $ResidualSpeed * 1024 / $TotalTarifSpeedUnits;
     70 
     71    // Recalculate price
     72    foreach($Tarify as $Index => $Tarif)
     73    {
     74      switch($Tarif['group_id'])
     75      {
     76        case 1:
     77          $Tarify[$Index]['price'] = $this->BaseTariffPrice + round($this->TopTariffPrice * $Tarif['price_units'] / 10) * 10;
     78          $Tarify[$Index]['min_speed'] = round($Tarif['speed_factor'] * $SpeedPerUnit);
     79          $Tarify[$Index]['max_speed'] = round($Tarify[$Index]['speed_factor'] * $this->BaseSpeedElement * 1024);
     80          break;
     81        case 2:
     82          $Tarify[$Index]['min_speed'] = $Tarify[$Index]['min_speed'] * 1024;
     83          $Tarify[$Index]['max_speed'] = $Tarify[$Index]['max_speed'] * 1024;
     84          break;
     85        case 3:
     86          $Tarify[$Index]['price'] = $this->BaseTariffPrice + round($this->TopTariffPrice * $Tarif['price_units']);
     87          $Tarify[$Index]['min_speed'] = $Tarify[$Index]['min_speed'] * 1024;
     88          $Tarify[$Index]['max_speed'] = $Tarify[$Index]['max_speed'] * 1024;
     89          break;
     90      }
     91      $Tarify[$Index]['aggregation'] = '1:'.round($Tarify[$Index]['max_speed'] / $Tarify[$Index]['min_speed']);
     92    }
     93        $this->Tarify = $Tarify;
     94  }
     95
     96  function LoadMonthParameters($Period = 1) // 0 - now, 1 - next month
     97  {   
     98    $DbResult = $this->Database->query("SELECT * FROM finance_charge WHERE period=".$Period);
     99    $Row = $DbResult->fetch_array();
     100    $this->kWh = $Row['kWh'];
     101    $this->Internet = $Row['internet'];
     102    $this->Sprava = $Row['administration_per_user'];
     103    $this->RealMaxSpeed = $Row['internet_speed'];
     104    $this->SpeedReserve = $Row['internet_speed_reserve'];
     105    $this->BaseSpeedElement = $Row['base_speed_element'];
     106    $this->MaxSpeed = $this->RealMaxSpeed - $this->SpeedReserve;
     107    $this->TopTariffPrice = $Row['TopTariffPrice'];
     108    $this->BaseTariffPrice = $Row['BaseTariffPrice'];
     109
     110    $DbResult = $this->Database->query("SELECT COUNT(*) FROM users WHERE inet=1 AND role=2");
     111    $Row = $DbResult->fetch_array();
     112    $this->InternetUsers = $Row[0];
     113 
     114    $DbResult = $this->Database->query("SELECT COUNT(*) FROM users WHERE overheads=1 AND role=2");
     115    $SpravaUsers = $DbResult->fetch_array();
     116    $this->SpravaUsers = $SpravaUsers[0];
     117    $DbResult = $this->Database->query("SELECT SUM(consumption) FROM network_segments");
     118    $TotalConsumption = $DbResult->fetch_array();
     119    $this->TotalConsumption = $TotalConsumption[0];
     120
     121    $DbResult = $this->Database->query("SELECT SUM(`monthly`) as `internet`, SUM(`monthly` - `plus`) as `real` FROM users WHERE role=2");
     122    $Row = $DbResult->fetch_array();
     123    $this->TotalInternetPaid = $Row['internet'];
     124    $this->TotalPaid = $Row['real'];
     125 
     126    $this->RecalculateTariffs($Period);
     127  }
     128
     129  function W2Kc($Spotreba)
     130  {
     131    return(round($Spotreba * 0.72 * $this->kWh));
     132  }
     133
     134  function GetNextDocumentLineNumber($Id)
     135  {   
     136    $DbResult = $this->Database->query('SELECT Shortcut, NextNumber FROM DocumentLine WHERE Id='.$Id);
     137    $DbRow = $DbResult->fetch_assoc();
     138    $Result = $DbRow['Shortcut'].$DbRow['NextNumber'];
     139    $this->Database->query('UPDATE DocumentLine SET NextNumber = NextNumber + 1 WHERE Id='.$Id);
     140    return($Result);
     141  }
    6142}
    7143
Note: See TracChangeset for help on using the changeset viewer.