<?php
include('../global.php');
include('include.php');

function RecalculateUsersFinance()
{
  global $InternetSegmentId, $Tarify, $Sprava, $Database; 

  $DbResult = $Database->query("SELECT * FROM users WHERE role=0");  // Select network members only
  while($Row = $DbResult->fetch_array())
  {
    $DbResult2 = $Database->query("SELECT SUM(money) FROM finance_operations WHERE user=".$Row['id']);  // Account state 
    $Row3 = $DbResult2->fetch_array();
    $DbResult2 = $Database->query("SELECT SUM(consumption) FROM network_devices WHERE user=".$Row['id']." AND used=1");
    $Row4 = $DbResult2->fetch_array();
    //DB_Update('users','id='.$Row['id'], array());

    $Price = 0;
    $Consumption = 0;
    $ID = $Row['network_segment'];
    while($ID != 0)
    {
      $DbResult2 = $Database->query("SELECT * FROM network_segments WHERE id=".$ID);
      $Row2 = $DbResult2->fetch_array();
      if(!(($Row['inet_hw'] == 0) and ($ID == $InternetSegmentId)))
      {
        $Price += $Row2['price'] / $Row2['users'];
        $Consumption += $Row2['consumption'] / $Row2['users_overheads'];
      }
      //echo($ID.' '.$InternetSegment.' '.$InternetSegmentId.' '.$Row['inet_hw'].' '.$Price.'<br>');
      $ID = $Row2['parent'];
    }
    $Monthly = 0;
    $MonthlyInet = $Tarify[$Row['inet_tarif_next']]['price'];
    if($Row['inet'] == 1) $Monthly += $MonthlyInet; 
    if($Row['overheads'] == 1) $Monthly += $Sprava + W2Kc($Consumption); 
    //echo($Row['fullname'].' '.$Row['inet'].' '.$Monthly.'<br>');
    $Monthly = round($Monthly);
    //echo($Row['fullname'].' '.$Row['inet'].' '.$Monthly.'<br>');
    $Database->update('users', 'id='.$Row['id'], array('network_device' => $Price, 'monthly_inet' => $MonthlyInet, 'monthly' => $Monthly, 'consumption' => W2Kc($Consumption), 'cash' => ($Row3[0]-$Row['network_device']), 'plus' => W2Kc($Row4[0])));
  }
}


$DbResult = $Database->select('finance_monthly_overall', '*', '1 ORDER BY date DESC LIMIT 1');
$Overall = $DbResult->fetch_array();

echo('Datum: '.date('j.n.Y')."\n");
$Mesice = array('','Leden','Únor','Březen','Duben','Květen','Červen','Červenec','Srpen','Září','Říjen','Listopad','Prosinec');
$Datum = explode('-', $Overall['date']);
$Mesic = date("m")+0;

// Spočítat ceny segmentů
echo("Prepocitavam ceny");
$Database->query("UPDATE network_segments SET users=0");  // Vynulovat počty počítačů
$Database->query("UPDATE network_segments SET users_overheads=0");  // Vynulovat počty počítačů
$DbResult = $Database->query("SELECT * FROM network_segments");
while($Row = $DbResult->fetch_array())
{
  //echo('Segment '.$Row['name'].'<br>');
  $DbResult2 = $Database->query("SELECT users FROM network_segments WHERE id=".$Row['id']);
  $RowP = $DbResult2->fetch_array();
  $DbResult2 = $Database->query("SELECT users_overheads FROM network_segments WHERE id=".$Row['id']);
  $RowP2 = $DbResult2->fetch_array();
  $DbResult2 = $Database->query("SELECT SUM(price),SUM(consumption) FROM network_devices WHERE segment=".$Row['id']." AND used=1");
  $Row2 = $DbResult2->fetch_array();
  $DbResult2 = $Database->query("SELECT COUNT(*) FROM users WHERE network_segment=".$Row['id'].' AND hw=1');
  $Row3 = $DbResult2->fetch_array();
  $DbResult2 = $Database->query("SELECT COUNT(*) FROM users WHERE network_segment=".$Row['id'].' AND overheads=1');
  $Row5 = $DbResult2->fetch_array();
  $ID = $Row['parent'];
  while($ID != 0)
  {
    //echo($ID.', ');
    $DbResult2 = $Database->query("SELECT * FROM network_segments WHERE id=".$ID);
    $Row4 = $DbResult2->fetch_array();
    $Database->update('network_segments', 'id='.$Row4['id'], array('users' => ($Row4['users']+$Row3[0]), 'users_overheads' => ($Row4['users_overheads']+$Row5[0])));
    $ID = $Row4['parent'];
  }
  //echo('Pocet '.$Row3[0].','.$Row['hosts'].'<br>');
  $Database->update('network_segments','id='.$Row['id'],array('price' => $Row2[0], 'users' => ($Row3[0]+$RowP['users']), 'consumption' => $Row2[1], 'users_overheads' => ($Row5[0]+$RowP2['users_overheads'])));
}

// Zkorigovat segment Internet
$DbResult = $Database->select('users', 'COUNT(*)', 'inet_hw=1');
$Row = $DbResult->fetch_array();
$DbResult = $Database->select('users', 'COUNT(*)', 'inet=1');
$Row2 = $DbResult->fetch_array();
$DbResult = $Database->update('network_segments','id='.$InternetSegmentId, array('users' => $Row[0], 'users_overheads' => $Row2[0]));

RecalculateTariffs();

echo(".");
RecalculateUsersFinance();
echo("OK\n");

// Celkovy prehled
$DbResult = $Database->query("SELECT SUM(price) FROM network_devices WHERE used=1");
$Row4 = $DbResult->fetch_array();
echo("Celkova cena zařízení: Zařízení(".$Row4[0]);
$DbResult = $Database->query("SELECT SUM(price) FROM network_segments");
$Row = $DbResult->fetch_array();
echo("), Segmenty(".$Row[0]);
$DbResult = $Database->query("SELECT SUM(network_device) FROM users");
$Row5 = $DbResult->fetch_array();
echo("), Uľivatelé(".$Row5[0].")\n");
$DbResult = $Database->query("SELECT SUM(cash) FROM users WHERE role=0");
$Row6 = $DbResult->fetch_array();
echo("Stav pokladny: Uľivatelé(".$Row6[0].")");
$DbResult = $Database->query("SELECT SUM(money) FROM finance_operations");
$Row = $DbResult->fetch_array();
$DbResult = $Database->query("SELECT SUM(price) FROM network_devices WHERE used=1");
$Row2 = $DbResult->fetch_array();
echo(", Operace-Zařízení(".($Row[0]-$Row2[0]).")<br>\n");

$DbResult = $Database->query("SELECT SUM(money) FROM finance_operations");
$Row3 = $DbResult->fetch_array();
echo("Rozdíl peněz v operacích: ".($Row3[0]-$Row6[0] - $Row4[0])." <br>\n");


$DbResult = $Database->query("SELECT SUM(consumption) FROM network_devices WHERE used=1");
$Row = $DbResult->fetch_array();
$CelkemSpotreba = W2Kc($Row[0]);

$DbResult = $Database->query("SELECT SUM(plus-monthly) FROM users WHERE role=0");
$Row = $DbResult->fetch_array();
$CelkemZaplaceno = $Row[0];
$SpravaCelkem = $Sprava*$SpravaUsers;
echo("Kontrola placení (Zaplaceno-Sprava-Internet): ".(-$CelkemZaplaceno)."-".$SpravaCelkem."-".$Internet."=".(-$CelkemZaplaceno-$SpravaCelkem-$Internet)."<br>\n\n");

// Zkontrolovat odečtení měsíčního poplatku
//$Mesic = '1';
echo('Kontrola odečtení poplatků: Poslední měsíc-'.round($Datum[1]).' Aktuální měsíc-'.$Mesic."<br>\n");
if($Mesic != $Datum[1])
{
  echo("Odečítám měsíční poplatek: ");

  $DbResult = $Database->query("SELECT * FROM users WHERE role=0");
  while($Row = $DbResult->fetch_array())
  {
    echo($Row['fullname'].': '.($Row['plus']-$Row['monthly']).'<br>');
    $Database->insert('finance_operations',array('money' => $Row['plus']-$Row['monthly'], 'user' => $Row['id'], 'type' => 2, 'date' => 'NOW()', 'comment' => 'Poplatek za měsíc '.$Mesice[$Mesic]));
  }
  $Database->insert('finance_monthly_overall', array('date' => 'NOW()', 'money' => $Internet, 'kWh' => $kWh, 'administration' => $Sprava, 'administration_total' => $SpravaCelkem, 'consumption_total' => $CelkemSpotreba, 'total_paid' => $CelkemZaplaceno));

  echo('Menim aktualni parametry site.');

  // Update finance charge
  $Database->delete('finance_charge', 'period=0');
  $DbResult = $Database->select('finance_charge', '*', 'period=1');
  $Charge = $DbResult->fetch_array();
  //print_r($Charge);
  $DbResult = $Database->insert('finance_charge', array('period' => 0, 'internet' => $Charge['internet'], 
    'internet_speed' => $Charge['internet_speed'], 'internet_speed_reserve' => $Charge['internet_speed_reserve'], 'administration_per_user' => $Charge['administration_per_user'], 'kWh' => $Charge['kWh'], 'base_speed_element' => $Charge['base_speed_element']));
  
  
  echo('Menim aktualni tarify.');

  // Update tarrifs
  $Database->delete('finance_tariffs', 'period=0');
  $DbResult = $Database->elect('finance_tariffs', '*', 'period=1');
  while($Tariff = $DbResult->fetch_array())
  {
    $Database->insert('finance_tariffs', array('period' => 0, 'name' => $Tariff['name'], 'id' => $Tariff['id'],
      'speed_factor' => $Tariff['speed_factor'], 'price_units' => $Tariff['price_units'], 'group_id' => $Tariff['group_id'], 'min_speed' => $Tariff['min_speed'], 'max_speed' => $Tariff['max_speed'], 'price' => $Tariff['price']));
  }
  
  echo('Menim aktualni tarify uzivatelu.');

  // Update tariff user selection
  $DbResult = $Database->query("SELECT id,inet_tarif_next FROM users WHERE role=0");
  while($User = $DbResult->fetch_array())
  {
    $Database->update('users', 'id='.$User['id'], array('inet_tarif_now' => $User['inet_tarif_next']));
  }

  RecalculateTariffs();
  RecalculateUsersFinance(); 
  
  // Restart traffic shaping
  $Database->update('services_restart', 'id=3', array('changed' => 1));
}
?>
